Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

solarus-1.6: request for comments and testing



  • Hi all,

    Since some months I've been working together with the upstream developers on bringing the newest version 1.6 of the Solarus Engine to RetroPie. For this, we worked on two areas: (1) improving the scriptmodule in RetroPie and (2) improving the engine itself to support accelerated OpenGL ES on the Raspberry Pi and improve usability without a keyboard, i.e. "couch-playing" in fullscreen.

    Before attempting to submit the scriptmodule tothe RetroPie main repository, I would like some testing and feedback from the community. Please see below.

    Thanks all in advance for the testing and feedback!

    Note: at the moment joypad support is a bit primitive, it works but more fancy features are not well implement such as button mappings at the engine level. Improving this is under development upstream so expect future updates.

    WHAT IS SOLARUS?

    From: https://www.solarus-games.org/

    Solarus is a lightweight, free and open-source game engine for Action-RPGs. The game engine is written in C++ and executes games made in Lua. It is specifically designed with 16-bit classic Action-RPGs in mind (such as The Legend of Zelda: A Link To The Past) and is available on multiple platforms. Solarus is completely free and open-source, under GPL v3 License.

    A number of games (or quests) for Solarus have been created by the Solarus Team and also by the community around Solarus, called "Quest Makers". More quests are currently on development and they all are (or will be) available on the official Solarus catalog of quests: https://www.solarus-games.org/en/games

    SCRIPTMODULE NOTES

    For the newer Solarus 1.6, a number of changes have been made to the older scriptmodule currently available in RetroPie. The important ones are highlighted below.

    • Use latest HEAD for OpenGL ES support and other required features
    • Moved Solarus from ports to emulators to be used as a system
    • Added GUI with option to configure joypad axis deadzone
    • Added GUI with option to configure joypad buttons combo for quitting
    • Added GUI with options to install/uninstall theme assets for EmulationStation
    • Games/quests are no longer shipped as they contain copyrighted material. Instead users just have to download and place .solarus files in $romdir/solarus (see more info below)

    SOLARUS AS A SYSTEM

    Previously, Solarus in RetroPie was setup as a "port" and a number of games were pre-installed with their own shell script in the "Ports" system in EmulationStation. This means that any new game has to be added to the scriptmodule manually.

    Fortunately, Solarus now supports using .solarus files that are standalone Zip files containing all the data for any given quest. This means that each game is now just a single file and therefore Solarus can be better used as a "system" in EmulationStation, allowing to launch games placed in a rom directory directly.

    The new scriptmodule now prefers this approach and does not pre-install any games. Instead you are expected to download the games you are interested from the official website (or any other source) and place them into $romdir/solarus like any other system such as NES, SNES, GB, etc. This also separates RetroPie and the Solarus Engine from copyrighted material included in most of the quests.

    As an added bonus, you are now able to easily set any video output mode through runcommand as well for all Solarus games at the same time.

    INSTALLING/UNINSTALLING THE NEW SOLARUS SCRIPTMODULE FOR TESTING

    The scriptmodule is now part of official RetroPie. To install or uninstall solarus, go to the "Manage Packages" section, then to optional and you will find the solarus package there.

    USAGE

    After installing the engine, you will have a GUI menu in the Solarus package menu to configure the engine (see next sections).

    Now you are ready to run Solarus quests formatted as .solarus files. Simply download them from any source (for example the Official website), place them in $romdir/solarus and restart EmulationStation. You will now see a Solarus system with the games inside, in the same way you add roms to other systems.

    SETTING A JOYPAD QUIT BUTTONS COMBO

    To improve usability when using a joypad-only (no keyboard), you can configure a joypad buttons combo to quit the Solarus engine at any time. Very similar to the HOTKEY + START combination in RetroArch emulators.

    Note: Keep in mind that currently Solarus can use only one joypad at a time. This is likely to be improved in the near future.

    First, you need to find out the button numbers for your gamepad that you wish to use as the quit combo. Unfortunately at the moment there is no automatic way to do this, however it is relatively easy:

    • You can inspect the RetroArch autoconf configuration for your joypad of interest in /opt/retropie/configs/all/retroarch-joypads/. Find the buttons you wish to assign (input_*_btn) and write down their assigned numbers.
    • You can use the jstest program to find the numbers while you press the buttons on your gamepad. Simply run jstest /dev/js0 and write down the button numbers that change when you press the desired buttons.

    Once you find the button numbers to use as quit combo, go the scriptmodule GUI and select the "set joypad quit buttons combo" option. Enter the numbers separated with + signs and no spaces. For example: 9+10.

    07cdf99d-3634-4d86-87dd-6177196632e7-image.png

    10c75f71-fe0e-4c6a-a75d-459b6a821f52-image.png

    Once the joypad quit buttons combo is set, the next time you launch Solarus you will be able to exit at any time using the configured combination. Keep in mind that this does not save a game, just quits the engine. Therefore you should make sure to save inside the game before exiting.

    INSTALLING OFFICIAL THEME ASSETS FOR EMULATIONSTATION

    The Solarus Team designer kindly made theme assets for the Carbon and Simple EmulationStation themes included in RetroPie. To install or uninstall these assets, simply go to the GUI menu and select the corresponding option. The theme assets will be directly downloaded from the Solarus Gitlab repository and installed according to what themes you have installed on your RetroPie (Carbon and/or Simple).

    essystem.png

    esgames.png

    Unfortunately, there is no way to scrape Solarus games because the metadata does not exist on current scraping sources. However you can manually build your own metadata and EmulationStation will use it happily:

    esgamesmetadata.png



  • Some screenshots of running games below. Many games currently run fully accelerated with OpenGL ES. Consider that some quests were originally designed for high end computers (a PC for example), and won't run well on a Raspberry Pi.

    However, performance issues are being addressed by some quest makers and hopefully more quests become playable on the Raspberry Pi.

    ZSDX

    zsdx1.png

    zsdx2.png

    MERCURIS CHESS

    mercuris1.png

    mercuris2.png

    mercuris3.png

    mercuris4.png



  • Thank you for supporting Retropie! I think Solarus can find a good userbase here, moreso if it becomes a default system :) I think the move to make games separate from the engine is just logical, just as Retropie you want to separate the engine different from the copyrighted material it can use.

    I'll see if I can install it at home and try it out with my different gamepads.

    Note: Keep in mind that currently Solarus can use only one joypad at a time. This is likely to be improved in the near future.

    Playing co-op Zelda games from the couch on my Raspberry is something I didn't know I needed! Looking forward to this :)



  • Hi all, I just sent now a PR to add the new Solarus version to RetroPie: https://github.com/RetroPie/RetroPie-Setup/pull/2813

    I've been testing it a lot myself and all seems to be working fine. We also now added the official theme assets from the Solarus Team to the Carbon and Simple themes, so you just need to update these themes normally from your RetroPie packages menu to obtain them.

    The above means that the section "INSTALLING OFFICIAL THEME ASSETS FOR EMULATIONSTATION" is obsolete now and is no longer necessary.



  • @hhromic Thanks for this one!

    EDIT:
    About the question from Shakes(pie)r : To ports or not to ports

    I think you can consider a simple shell script like I've done several times for OpenBOR, ecWOLF or Commander Genius.
    A selection menu for this specific game ... For example like here: Commander Genius

    It needs just slight modification with find command and the dialog listing (keep aware of the --no-items switch!). What do you think?



  • @cyperghost thanks for the thanks!

    I just read your post and I already merged the Solarus PR by now :)

    I had a long struggle with the "ports or not ports" dilemma indeed. However I decided the best is to be consistent, and other game-engines in RetroPie already work like a system, for example: Löve, AGS and ScummVM. Solarus deserves the same level of citizenship!

    At some point I also thought of a game selection menu but then EmulationStation is designed precisely for this function already, so why not use it for what it is? Besides, Solarus is designed to run many kinds of quests, not just Zelda-type games after all. Also, the Solarus Team guys made official EmulationStation assets too (on my request).

    I think Solarus as a system is the perfect fit, specially considering that Solarus quests are now distributed as single standalone .solarus files.



  • Update

    Solarus is now officially updated to the latest version. This brings OpenGL ES acceleration and support for newer games from the Solarus Games website.

    You can find Solarus in "Manage Packages -> Optional -> Solarus".
    Don't forget to update Carbon and/or Simple themes if you are using them to get the new Solarus theme assets.



  • @hhromic said in solarus-1.6: request for comments and testing:

    @cyperghost thanks for the thanks!

    I just read your post and I already merged the Solarus PR by now :)

    I see ;)

    I had a long struggle with the "ports or not ports" dilemma indeed. However I decided the best is to be consistent, and other game-engines in RetroPie already work like a system, for example: Löve, AGS and ScummVM. Solarus deserves the same level of citizenship!

    Yes indeed I think this is the best solution for this nice game-engine

    At some point I also thought of a game selection menu but then EmulationStation is designed precisely for this function already, so why not use it for what it is? Besides, Solarus is designed to run many kinds of quests, not just Zelda-type games after all. Also, the Solarus Team guys made official EmulationStation assets too (on my request).

    Of course but unfortunately there are other game engines that deserves the same status. OpenBOR for example but this seems a bit underestimated game-engine. And annother fact is that official development team simply gots zero interest for an official port for Raspberry. I think that's the biggest issue...

    I think Solarus as a system is the perfect fit, specially considering that Solarus quests are now distributed as single standalone .solarus files.

    Furthermore it's the task of every scripter/coder/developer here to make the ports ready for usage as own system. It's really easy because most game-engines offers command line inputs together with the insane ability of RetroPie for adding own "emulators" with own "ROM" variable it's very easy to add new systems inside ES.

    To close the loop ;)
    Yes I read the comments on github whereas the question of port locations was still open. I personlly don't like overgrown entries in ports menus (maybe 5 or 6 entries per game engine is okay) so these selections menus are a good way to save space and to give back overview.

    So I've established these selection menus for Commander Genuies, ecWolf (not announed here) and OpenBOR. This will otherwise result in a total plus of 50 entries ;)

    Furthermore I don't like to hack "in" own game systems, because my skill in design lacks a bit and so own badges of a new system will look ugly.

    Your newesr PR pushes all these askings aside. Well done! Thank you again



  • @hhromic
    One small suggestion for setup.
    Cancel Button unsets
    Blank sets default 9+10

    Edit better: default value is "9+10", inputbox supports defaults
    Please test as I'm on vacation and can't try --- it should work ;)
    and you should still use cancel for abort and nothing happens
    Because if you need a keyboard to set the correct value you can delete the default values and set the new ones... I assume that 9+10 is very common :)

      Q)
                    cmd=(dialog --backtitle "$__backtitle" --inputbox "Please enter joypad button numbers to use for quitting separated by '+' signs (leave BLANK to unset)\n\nTip: use 'jstest' to find button numbers for your joypad" 12 65 "9+10")
                    choice=$("${cmd[@]}" 2>&1 >/dev/tty)
                    if [[ $? -eq 0 ]]; then
                        if [[ -n "$choice" ]]; then
                            iniSet "QUIT_COMBO" "$choice"
                        else
                            iniDel "QUIT_COMBO"
                        fi
                        chown $user:$user "$(_options_cfg_file_solarus)"
                    fi
                    ;;
    


  • I tried it today and it works beautifully! I played a bit of Tunics, the idea of doing a Zelda roguelike is something I had in mind from a while and it's so cool to have it on my system now :)

    I had one problem with the installation though. At first it seemed like Emulation Station didn't see the system, but I remembered that I'm using the systems.cfg from my home directory (I have been toying around with adding Pico-8 as a system and not a port). I just copied the system definition from /etc/emulationstation/es_systems.cfg to ~/.emulationstation/es_systems.cfg and it worked.

    Looking forward to trying the other Solarus games!



  • @cyperghost said in solarus-1.6: request for comments and testing:

    @hhromic
    One small suggestion for setup.
    Cancel Button unsets
    Blank sets default 9+10

    Edit better: default value is "9+10", inputbox supports defaults
    Please test as I'm on vacation and can't try --- it should work ;)
    and you should still use cancel for abort and nothing happens
    Because if you need a keyboard to set the correct value you can delete the default values and set the new ones... I assume that 9+10 is very common :)

    I thought about that as well (providing a default). However until we have symbolic button names in Solarus (which is coming soon actually) I don't want to assume any raw button numbers without good testing. I understand is unconvenient :/

    Which gamepad you used to obtain 9+10 for quitting? is that HOTKEY + START for you as well? I have an original PS3 controller and 9+10 are the PS button + START. But I'm not sure if we can assume these numbers for most controllers? can we?

    If that is the case, then maybe I will consider defaulting to these numbers indeed.

    Thanks for the feedback, appreciated!



  • @ellohir said in solarus-1.6: request for comments and testing:

    I tried it today and it works beautifully! I played a bit of Tunics, the idea of doing a Zelda roguelike is something I had in mind from a while and it's so cool to have it on my system now :)

    I'm really glad it's working fine for you! Thanks for the feedback!
    I also found Tunics! a very interesting experimental game.. procedurally generated zelda dungeons!
    Beware that some Solarus games are a bit too beefy for the Raspberry Pi, at least for the 3B+. I will be testing Solarus on a RPI4 as well, should work much faster!

    I had one problem with the installation though. At first it seemed like Emulation Station didn't see the system, but I remembered that I'm using the systems.cfg from my home directory (I have been toying around with adding Pico-8 as a system and not a port). I just copied the system definition from /etc/emulationstation/es_systems.cfg to ~/.emulationstation/es_systems.cfg and it worked.

    Ah yes, unfortunately RetroPie doesn't cover automatic system adding to custom setups. But good you sorted it out !

    Looking forward to trying the other Solarus games!

    Have fun! and report any problems if you find them, so we can improve the engine and/or the integration. Thanks!



  • @hhromic said in solarus-1.6: request for comments and testing:

    Which gamepad you used to obtain 9+10 for quitting? is that HOTKEY + START for you as well? I have an original PS3 controller and 9+10 are the PS button + START. But I'm not sure if we can assume these numbers for most controllers? can we?

    Just FYI I have a 8bitdo SN30 (the SNES bluetooth one) and my keys were 10+11.



  • @hhromic I have an idroid:con and a 8bitdo Zero - for both 10+11 for Select+Start

    I've a list of lots of controllers provided by older versions of Batocera - here in this link.
    And it seems that PS3, XBOX360 use dedicated Hotkey+Start as 9+10
    Seveal controllers using 10+11
    But all in all it seems like a mess

    Did you consider the usage of es_temporaryinput.cfg?
    This will show the last configured PAD as input.
    And everything can be read out from this file ;)
    So a grep search for hotkeyenable and start should do the job.
    And you can say: I've found hotkey combo value+value for PAD deviceName
    If the file is not present then plugin Keyboard and make your own config.

    For example in this thread

    Example config



  • Is there a way to install v1.6 on a RetroPie 4.3 build? I've tried a couple of different approaches with no success. I had previously installed and been using the old version (v1.4.5?). The best path so far has been to uninstall the old version, replace the setup script with the latest, and then install fresh. Run this way the process seems to download the necessary files, creates a solarus ROM directory, adds to es_systems.cfg, but then stops without an error message. I believe it's right before it begins building the files, based on a test installation I did on a dummy 4.5.1 image.

    Any thoughts? Thanks for the help!



  • @ts-x What error are you receiving?
    There was not much change in dependecy tree (add of libogg-dev) only

    Try to upgrade your package lists with sudo apt-get update



  • @cyperghost I'm not actually receiving an error message, it begins installing and returns to the install menu like the process has successfully completed. I updated the package list per your instructions, but the process still does the exact same thing. Based on my observation of a 4.5.1 install, I believe it's running into some sort of problem right before the file builds. The only file the script places under /opt/retropie/ports/solarus is solarus.sh, so attempting to open a game file yields this runcommand.log ...

    Parameters: 
    Executing: /opt/retropie/ports/solarus/solarus.sh "/home/pi/RetroPie/roms/solarus/zelda-roth-se-1.2.1.solarus"
    /opt/retropie/ports/solarus/solarus.sh: line 7: /opt/retropie/ports/solarus/bin/solarus-run: No such file or directory
    


  • @cyperghost Caught the error message via a cell phone video...it's an issue with SDL2. I have version 2.0.5 and it's looking for 2.0.6 (RetroPie v4.4 went from 2.0.5 to 2.0.8). Is it possible to upgrade?



  • @ts-x imho yes it's possible to upgrade. If it's not a default package then you need to compile on your own. But I'm not sure if Open GLES will do its work then.



  • Sorry guys for the delay replying, been a bit busy :)

    @cyperghost thanks for the feedback on the controller buttons. Indeed I thought about extracting them from retroarch.cfg or EmulationStation but in the end is too much trouble considering that we are working on bringing proper gamepad support natively on Solarus anyway so I prefer to spend my efforts on that instead.

    @ts-x indeed as you discovered yourself Solarus 1.6 requires SDL 2.0.6 or better which comes with Debian Stretch or better.

    What you can try to do to upgrade is to backport the sdl2.sh scriptmodule from newer RetroPie (like you did for the solarus scriptmodule) and reinstall the RetroPie SDL2 package doing: sudo ./retropie_packages.sh sdl2. However I would make a backup before attempting this as I'm not sure it's gonna work reliably.

    Good Luck and let us know how it went.



Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.