Sailfish Community News, 6th June 2024 - Sauna

Sailfish OS update from Jolla

We know that you all are waiting that 4.6. Sauna release would roll out to all users. Answer is yes, it will be rolled out to all users really soon. Before that we prepare a new release candidate as there is an improvement in the pipeline for the Android occasionally failing to start. Hoping that this would help many of us. At least so far looking promising.

Rajaportti Tampere

In today’s fortnight we shed some light on GSM supplementary services which may have already forgot. Further, we have the usual Repository roundup and in the App roundup we take a look at some recent apps built using the Lua-based LÖVE 2D game framework.

GSM Call Waiting Service

Sailfish OS has some GSM supplementary services (GSM feature codes) in the menu “Settings > Apps > Phone” for each SIM card. These services include Call Waiting. After rolling 4.6.0.11 out for Early Access subscribers, a problem with Call Waiting was reported in the Forum. It is impossible to query nor change the status of Call Waiting using the said menu page. The alternative method, using dedicated codes at the dialler of the Phone app, failed to provide the service, too.

The following codes should work at the dialler (SEND means the call button):

  • status query: *#43# SEND
  • enable: *43# SEND
  • disable: #43# SEND

The mentioned service has been broken a long time, it seems - please bear with us. We have a fix for it now. It will be delivered in the next 4.6.0 update.

Repository roundup

Communication bits

Multimedia framework

User interface

Low level libraries

  • wayland, Wayland compositor, mal updated it to 1.22.0.
  • wayland-protocols, Wayland protocols that adds functionality not available in the core protocol, mal updated them to 1.36.
  • mce, mode control entity, piggz proposed to emulate a double tap (user interaction) when the modem emits a KEY_WAKEUP event. spiiroin argued that it may not be wise to simulate a user event from a device event. He proposed instead to quit suspend state when the modem emit the event, so a user action can later on wake up the display.
  • nfcd, the daemon for near field communication, now that libnfcdef is in the repositories slava 's work has been merged in.
  • nemo-qml-plugin-contacts, QML bindings to access the contact database, sunweaver is working on adding a GSettings backend, besides the existing one using MLite.
  • ssu, the seamless software updater, keto proposed to add the ssu domain into the repository properties.
  • gzip, the compression tool and library, mal updated it to 1.13.

Developer’s corner

  • buteo-sync-plugins-social, several sync plugins for Google, Facebook and other proprietary protocols, as for the CalDAV plugin, pvuorela cleaned up the installation scripts to avoid unnecessary service restarts since the plugin processes are now out-of-process.
  • meego-rpm-config, specific rpm configuration files for Sailfish OS, mal switched python bytecode compilation step to use Python 3.
  • qt-installer-framework, base for the SDK installer, martyone fixed an issue with archive sizes not being reported properly.
  • ccache, the compiler cache, mal updated it to 4.9.1.
  • nemo-qml-plugin-contacts, QML bindings to access the contact database, sunweaver fixed a build issue because of missing QtDBus dependency. An option to compile without mce was also added. mce is used to know if the bindings are used in a GUI application or not and to react on display state changes.
  • nemo-qml-plugin-notifications, QML bindings to the Freedesktop notification system, pvuorela moved internal includes into cpp files.
  • meson, a high productivity build system, mal updated it to 1.4.1.
  • ninja, a small build system with a focus on speed, mal updated to 1.12.1.
  • nasm, a portable x86 assembler, mal updated it to 2.16.03.
  • ncurses, the library to use terminals, mal proposed to update it to 6.5 from 6.3.
  • fdupes, a tool to find duplicated files, mal updated it to 2.3.0.

App roundup

We have a slightly unusual app roundup today. We would typically use this space to share some of the latest apps to be released or updated on the Jolla Store, to give you an idea of the sort of apps that are out there and maybe encourage you to try some new ones. But today we’re shaking things up a bit by looking at the work of a particular developer using a very specific set of tools. The apps we’re going to talk about today aren’t all ready for general use, but they’re developing fast and we think they’re worth taking a closer look at.

You may have seen that for several months now glitchapp (RosSigudottir) has been working on porting Lua-based games and related apps to run on Sailfish OS. We’re really impressed by this effort, which builds on the LÖVE 2D game framework. We’ll come back to that in a bit, but while glitchapp is to be credited with the impressive work of porting, amending and in some cases writing the games that are being released to work with this framework, it’s also worth highlighting how other members of the Sailfish community have been helping with the effort as well.

You can follow developments on the “Help building Native standalone LÖVE games” topic on the Sailfish Forum, or try out the games for yourself. It’s gratifying to see the combined effort of so many users bringing all these great looking titles to Sailfish OS.

Before looking at the releases themselves, first a word about the LÖVE 2D framework and its installation. The underlying implementation for Sailfish OS was ported and released by sashikknox. You can find out more about the framework on the cross-platform homepage for the project, or on the Sailfish-specific page on OpenRepos. If you want to play any of the games you’ll first need to install this LÖVE 2D runtime. The 32-bit ARM device are nicely covered by the packages available on OpenRepos, however currently there are no aarch64 builds available from there.

Thankfully rinigus has submitted a version to Chum with builds for all architecture, so if you want to use the apps described here you should first get yourself a copy of the runtime installed from there. During my attempts I found the games would happily install, but not run, without the LÖVE runtime, so make sure you do install it first.

Having done so you can then go ahead and install some of the games ported by glitchapp. I chose Boxclip for my first playtest since it’s one of the slicker releases, with beautiful graphics, involving gameplay and bearable music! SEGA buffs will immediately recognise the Sonic the Hedgehog inspiration for the game. In fact, it’s not trying very hard to hide its lineage: the first level is called Sunny Hill and looks remarkably similar to Green Hill from the original game released on the Sega Mega Drive/Genesis in 1991.

But while visually similar and with similar gameplay elements the levels are completely new and, in practice, the gameplay often differs from Sonic in meaningful ways. I found this to my dismay while running horizontally in to vertical spikes. Where Sonic would have come safely to a stop, the Boxclip character continues onwards into the spikes and suffers a swift demise. Ouch!

It’s a great game, but there’s still work to be done on it, which is where these titles differ from those that would normally appear here. It’s clear that the LÖVE 2D engine and the Sailfish apps glitchapp is porting using it are works in progress. On an Xperia 10 II, by no means one of the slower Sailfish devices, the game still struggles to run at a decent speed. It’s playable, but only just and the latency quickly becomes a source of frustration. The controls are servicable but could do with refinement (mostly due to the delays I suspect) and it would also be great if the game were playable in landscape mode.

Don’t get me wrong: I’m loving these developments, but if you’re trying them out it’s important to have appropriate expectations.

There are a huge number of other games available from OpenRepos that glitchapp has released. In terms of performance Blockdrop fares better than Boxclip with no problematic latency on my 10 II. The controls still need some refinement but with a bit of practice I felt like I was making good progress with the game. The game itself involves objects falling downwards from the sky into a rectangular area Tetris-style. As with Tetris the objects can be moved left and right or rotated. But rather than Tetris-style tetrominos, these are pairs of spheres of differing colours. As the spheres land any grouping of four or more of the same colour get magically swept away, allowing those above to fall with the potential to create thrilling chain-reactions of removals. The game is a riff on Puyo Puyo, a great little game from the early ninetimes (although my first experience of the game was in the form of Super Foul Egg). It’s a fun way to while away the time, and with a little more refinement of the controls has the potential to become a real blast.

Sokoban is another classic game that glitchapp has ported a version of, called glitch sokoban and based on one of the LÖVE 2D tutorials. A puzzle game, you play on a rectilinear grid with a controllable character able to push certain blocks around by shoving them in one of the four directions. Your aim is to push each of the blocks on to one of the target locations, indicated in this game by a crate that the blocks must be pushed into. Straightforward enough, except the layout of the room means you can easily get blocks stuck against a wall in such a way that it becomes impossible to move to the other side to push them away. Blocks can get stuck against walls, other blocks and in corners; invariably blocks must be pushed in a very specific way and in just the right order if you’re going to successfully complete a level.

The level design is key to the success of the game, and this implementation sticks to tried and tested variants. It’s an interesting LÖVE 2D game for Sailfish OS in that it’s one of the few that supports landscape mode. Like the other games here the controls are a bit fiddly, but it’s less of an issue here since there’s no time pressure with the gameplay. Overall this makes it a more solid experience.

Not all of glitchapp’s LÖVE 2D apps are games. I’m always searching for a better Sailfish OS text editor, so I was excited to see codeeditor, a text editor that is literally implemented using the LÖVE 2D game engine. As with all of the other apps here it’s written using the Lua scripting language, but without access to the Silica components it’s using the game engine for rendering widgets instead. It’s really impressive to see the effort that glitchapp has put into developing a LÖVE 2D-based keyboard and a pull down menu to offer not just a bespoke mobile experience, but a bespoke Sailfish mobile experience. It’s coming along, but the app isn’t yet ready for general use. For example, the tracking on the keyboard is off-centre on an the Xperia’s 21:9 display, making it impossible to hit certain keys, and there’s no ability to load files yet.

I don’t want to detract from how impressive glitchapp’s work is here, but I’m also not yet recommending these apps to general users. In many cases there’s still a way to go before they’ll be fully usable and glitchapp is very clear that they’re still a work in progress. Neverhteless I do want to take the opportunity to champion the effort going in to them and highlight how exciting it is to see them develop.

All of these games are available to download from OpenRepos.

So there you have it. A slightly different all-LÖVE-2D-basd app roundup this fortnight. I hope you enjoyed this glance into the developing world of Sailfish OS LÖVE 2D games. Some exciting developments that I think will be well worth tracking as they mature, especially if you’re keen — like me — to see more games available for Sailfish OS.

Please feed us your news

As always, please do not hesitate to share your ideas, thoughts, or suggestion for future newsletter topics.

Hope you enjoyed reading this one!

Please do also join us at our community meetings on IRC, Matrix and Telegram. Next community meeting will be on the 13th June. Let’s keep on working together!

24 Likes

Excellent! I was just thinking a synonyme for ‘really soon’. Perhaps “after some short time period … one week … ?”

I was wrong. It was “hold your breath.” :sweat_smile:
Well done Jolla or Jollyboys. :+1:

1 Like

I bet that Jolla wants the X10IV and X10V support out just as hard as we do :grin:

12 Likes

Smart words! Working together with a great passion!

11 Likes

Runtime is one thing, SailJail is the other.

Specifically for Löve, an application profile was created allowing access to a specific location
where the game data lives, so the several games can be accessed by the same binary. This would not be possible AFAICS under standard SailJail rules, except by packaging the runtime for each game.

Shoutout also to @poetaster who does the packaging/maintainership of the Love source tree.

errggg. I do think I should look at that. It seems to be failing on chum 4.6!?

EDIT: and @nephros did all the heavy lifting (ie. creating the actual sailjail workaround, spec file, etc).
EDIT: lua 5.3 → 5.4 modification sigh. tha’s a very unfortunate change with far reaching consequences :slight_smile:

Wrong, lua’s been 5.4 since December, last year. Ah, shucks.

I think love 11.4 fixes that.

I have this patch which at least makes it compile, but don’t remember how I made it:

https://build.sailfishos.org/package/view_file/home:nephros:branches:sailfishos:chum:testing:4.6-fixes/love2d/sailfish-11.4.diff?expand=1

1 Like

Ok, thanks! I’ll look at the patch!

I think it’s just a rebase of branch sailfish against upstream 11.4 but not sure.

I’m going to see if just fixing the lua_resume function signature works. Buy me some time if it does the trick (starts at 2716 in your diff).

Another remark about love in general:

You need to be running SailfishOS4.5 or later for many games.
Older versions lack some fixes in the graphics department which lead to crashes. At least that’s the case on 4.4 Xperia 10iii.

1 Like

Yeah, the lua upgrade last year complicates matters. As does: Comparing poetaster:sailfish...savegame:sailfish · poetaster/love · GitHub it looks like @sashikknox is moving away from sfos? The main gist of the compare are SDL methods for screen rotation stuff. It’s recent. Take me a while to digest.

Thank you!, I wouldn’t expect my games to be featured on the community news!
I would like to add a small clarification: boxclip is indeed playable in landscape mode, but since love2d does not have access to the device orientation on sailfish os, I developed a little trick that do the rotation based on the screen resolution. Since I can only test on my mobile which has an specific resolution, it may not work on other aspect ratios / resolutions. Any developer interested on increasing the range of devices to which this trick works feel free to join the discussion here: “Help building Native standalone LÖVE games”
Any questions, improvements or suggestions you can post it there or directly on my repository in codeberg. I’m glad for your feedback.

Thank you!

4 Likes

The comparison link I posted one before you has an orientation fix. It’s a bit long an complicated though.

I just migrated the fixes needed for SFOS 4.6 & lua 5.4 and having working builds. But, I don’t have a device with SFOS 4.6 to test yet. Anyone with a 4.6 device that can test, chum:testing contains an updated love engine that should work.

I will test the new builds, if the orientation works then there would be no need for tricks and orientation should work on all devices.

Sorry, the orientation fix is NOT in the latest builds on chum:testing. That’s just the fixes to get love building on chum (which are related to lua 5.4 and love 11.3).

got it, good then the trick works at least for 1080x2340 resolution, what the trick do is checking if resolution width is bigger or lower than 1100 pixels, if it is lower it presumes the device is in landscape orientation and rotates the screen accordingly. Any device which resolution does not fit that condition would not work, I would had to tweak it to add more devices. As said this can be discussed on the specific thread I created for love2d ports to sailfish os.

This is a problem that plagues almost all ported games. At least AFAIK the ones using SDL (which is almost everybody).

Many ports of SDL applications have applied various fixes and hacks to enable rotated, and fullscreen, views.

It would be really, really nice if upstream (i.e. Jolla-packaged) SDL could incorporate a Sailfish-specific solution out of the box, so we don’t have to have different hacks in each application.

3 Likes

Couldn’t you compare screen width against screen height so it would work on all screen resolutions?

1 Like