SuperTuxKart (Beta) for Sailfish OS

To my surprise, when trying to build and run SuperTuxKart on a SFOS device, it almost immediately worked. And after some tweaks it actually feels quite playable.

So I proceeded to package for Chum.

It is currently available on Chum:Testing for the adventurous.

Initial setup

I did not have major problems on Jolla C2 launching and operating the GUI. However, @poetaster reports ome problems, and I could reproduce on X10III that on first launch it does not work property.

If you have problems, try this:

  1. Launch the game once, if you can’t touch anything, close it.
  2. Open the file .config/net.supertuxkart/supertuxkart/config-0.10/config.xml
  3. Set enable_internet to 1 (no internet)
  4. Set always_show_login_screen to false
  5. Set real_width and real_height to the screen resolution of your device, in portrait mode. E.g. for Xperia 10III, width 1080, height 2520.
  6. Set font_size to “5.000000” (or 3, 4 depending on device resolution)
  7. Optional, while you’re at it, set scale_rtts_factor to “0.300000”, this should max performance, see below.
  8. Optional, while you’re at it, set multitouch_active to “1”, multitouch_draw_gui to “true”, and multitouch_scale to “0.900000”. This enables in-game touch controls.
  9. Launch the game again.

Once you get touch controls reacting, you can reach the Settings by touching the small wrench icon at the bottom of the GUI. You can use it to enable Internet access if you like. That is necessary for online play and addon downloads.

Performance

Most important Setting is “Render Resolution”. Set this to the lowest possible value (30%). This setting has the most influence to overall performance by far.

  • On Jolla C2, I get OK performance with relatively low settings.
  • On Xperia 10iii, I get fine performance with everything turned to max, except Render Resolution and Shadows.

Config paths

Patched to use ~/.local/share/net.supertuxkart/supertuxkart and ~/.config/net.supertuxkart/supertuxkart locations.

Logs

The .desktop file sets the commandline to --no-console-log --log=4.
This means you should be seeing a reasonably detailed log file at ~/.config/net.supertuxkart/supertuxkart/config-0.10/stdout.log

You can launch from command line to set other options. See --help and --help-debug.

Notes:

  1. Install is LARGE. All the game data and assets need a good 200MB or more on the root partition. Maybe game data can be moved to /home/.system but that’s always hackish. Or the rumored /opt2.
  2. Works in Portrait mode only. Which I actually found a good thing when you enable touch controls, as you have the controls on the lower half of the screen and can see your kart and the track quite well. You have to launch it from device portrait orientation to get the resolution right.
    After first launch, immediately go into the settings and adjust Resolution to get a proper display.
    One side-effect of this is Story Mode videos will not display properly (cut off to the sides).
  3. Theoretically there should be support (by STK) for accelerometer and gyroscope controls. Haven’t been able to get those enabled. May be an issue with SDL? Sailjail? Udev? Hints welcome.
  4. Assets: The current packages use the “Low Quality” assets from here. You may try higher resolution assets, however with performance not too great it’s probably not a brilliant idea. If you try that, please share your experiences.
  5. Tested/not tested:
  • Didn’t test any actual controllers. Touch UI only.
  • Didn’t test Online Play at all. YMMV. Addon downloads work fine though.
  • Tested on 5.0 and 4.4 aarch64 only. YMMV on older releases and other architectures.

Please comment on your experiences, and which settings work for you.

Happy Racing!

15 Likes

I was unable to get past the ‘may we connect to the internet’ screen. I tried both yes and no, but it does not go further.
EDIT: latest 5.0.0.62, rephone.

1 Like

Can you check the locations

  • ~/.local/share/net.supertuxkart/supertuxkart
  • ~/.config/net.supertuxkart/supertuxkart

Have been created and contain something? AND that there’s no ~/.local/share/supertuxkart and ~/.config/supertuxkart?

Also, you did get a Sailjail application permissions screen, right?

[defaultuser@Phone22 ~]$ ls -al .local/share/net.supertuxkart/supertuxkart/
total 24
drwx------    6 defaultu defaultu      4096 Apr 15 15:29 .
drwx------    3 defaultu defaultu      4096 Apr 15 15:29 ..
drwxr-xr-x    4 defaultu defaultu      4096 Apr 15 15:30 addons
drwxr-xr-x    2 defaultu defaultu      4096 Apr 15 15:29 grandprix
drwxr-xr-x    2 defaultu defaultu      4096 Apr 15 15:29 replay
drwxr-xr-x    2 defaultu defaultu      4096 Apr 15 15:29 screenshots
[defaultuser@Phone22 ~]$ ls -al .local/share/net.supertuxkart/supertuxkart/*
.local/share/net.supertuxkart/supertuxkart/addons:
total 20
drwxr-xr-x    4 defaultu defaultu      4096 Apr 15 15:30 .
drwx------    6 defaultu defaultu      4096 Apr 15 15:29 ..
-rw-r--r--    1 defaultu defaultu        83 Apr 15 15:31 addons_installed.xml
drwxr-xr-x    2 defaultu defaultu      4096 Apr 15 15:29 icons
drwxr-xr-x    2 defaultu defaultu      4096 Apr 15 15:29 tmp
[defaultuser@Phone22 ~]$ ls -al .config/net.supertuxkart/supertuxkart/config-0.10/
total 60
drwxr-xr-x    2 defaultu defaultu      4096 Apr 15 15:31 .
drwx------    3 defaultu defaultu      4096 Apr 15 15:29 ..
-rw-r--r--    1 defaultu defaultu     24040 Apr 15 15:31 config.xml
-rw-r--r--    1 defaultu defaultu        61 Apr 15 15:31 highscore.xml
-rw-r--r--    1 defaultu defaultu      1181 Apr 15 15:29 input.xml
-rw-r--r--    1 defaultu defaultu        56 Apr 15 15:31 players.xml
-rw-r--r--    1 defaultu defaultu     12737 Apr 15 15:29 server_config.xml
-rw-r--r--    1 defaultu defaultu         0 Apr 15 15:30 stdout.log
-rw-r--r--    1 defaultu defaultu         0 Apr 15 15:30 stdout.log.1
-rw-r--r--    1 defaultu defaultu         0 Apr 15 15:29 stdout.log.2


Yes, I did. Should I get rid of that :slight_smile:

Looks fine to me… hm.

Nono, it’s supposed to work with Sailjail enabled.

But that is BOTH .config and .local for what it’s worth and as it ever shall be :slight_smile:

in .config/net.supertuxkart/supertuxkart/config-0.10/config.xml, around line 465, is the setting still at 0?

463 
464     <!-- Status of internet: 0 user wasn't asked, 1: allowed, 2: not allowed -->
465     <enable_internet value="1" />
466 

Try toggling it to 1 or 2 and see what happens :slight_smile:

Changed to one and I’m in. Now to get rid of the account foo. I don’t want multiplayer racing!

Ok, I can’t really do anything in the interface, so I’m hooped.
EDIT: to be more precise, after a bunch of tapping about and getting an entry field I eventually get to offline account.
Again, more tapping about and I hit ok which appears to be highlighted.

On this screen, tap ok.

Here, try to tap the little wrench icon at the bottom.

Here, tap left or right until you set up native phone resolution. Tap “apply new”.

You might also go to Interface and select a larger font size.

No, I can never get it scaled to that since I never get to settings. I just see a screen up top which allows some input in a haphazard way. I’m reading through the config to see if I can set up the screen size.

I get no response for ‘OK’. I’ve scalled up, but still, not ok.
EDIT, after scaling up, selecting Offline Account was easy. But OK and Exit, not so much.
all width / height setting:

    real_width="1024"                                                                                                                             
    real_height="1920"

Could you maybe just post you Multitouch and Video settings?

For reference, here’s my config:

<?xml version="1.0"?>
<stkconfig version="8" >

    <!-- Audio Settings
             sfx_on : Whether sound effects are enabled or not (true or false)
             music_on : Whether musics are enabled or not (true or false)
             sfx_numerator : The value in the audio options SFX spinner
             sfx_volume : Volume for sound effects, see openal AL_GAIN for interpretation
             music_numerator : The value in the audio options music spinner
             music_volume : Music volume from 0.0 to 1.0
             volume_denominator : Number of steps for volume adjustment -->
    <Audio
        sfx_on="true"
        music_on="true"
        sfx_numerator="10"
        sfx_volume="0.267800"
        music_numerator="10"
        music_volume="0.267800"
        volume_denominator="15"
    >
    </Audio>

    <!-- Race Setup Settings
             numkarts : Default number of karts. -1 means use all
             numlaps : Default number of laps.
             gp-reverse : Default direction of GP tracks. 0=default, 1=no reverse, 2=all reverse, 3=Random
             random-gp-num-tracks : Default number of tracks for random GP.
             ffa-time-limit : Time limit in ffa mode.
             use-ffa-mode : Use ffa mode instead of 3 strikes battle.
             lap-trial-time-limit : Time limit in lap trial mode.
             numgoals : Default number of goals in soccer mode.
             soccer-default-team : Default team in soccer mode for single player.
             soccer-time-limit : Time limit in soccer mode.
             soccer-use-time-limit : Enable time limit in soccer mode.
             random-arena-item : Enable random location of items in an arena.
             difficulty : Default race difficulty. 0=easy, 1=medium, 2=hard, 3=supertux
             game_mode : Game mode. 0=standard, 1=time trial, 2=follow the leader, 3=3 strikes, 4=easter egg hunt, 5=soccer, 6=ghost replay
             soccer-red-ai-num : Number of red AI karts in soccer mode.
             soccer-blue-ai-num : Number of blue AI karts in soccer mode.
             karts-powerup-gui : Show other karts' held powerups in race gui.
             soccer-player-list : Show player list icon in soccer mode.
             addon-tux-online : Always show online addon karts as tux when live join is on.
             random-player-pos : Randomize the position of the players at the start of a race. Doesn't apply to story mode. -->
    <RaceSetup
        numkarts="5"
        numlaps="3"
        gp-reverse="0"
        random-gp-num-tracks="1"
        ffa-time-limit="3"
        use-ffa-mode="false"
        lap-trial-time-limit="3"
        numgoals="3"
        soccer-default-team="0"
        soccer-time-limit="3"
        soccer-use-time-limit="false"
        random-arena-item="false"
        difficulty="0"
        game_mode="0"
        soccer-red-ai-num="2"
        soccer-blue-ai-num="2"
        karts-powerup-gui="false"
        soccer-player-list="false"
        addon-tux-online="false"
        random-player-pos="true"
    >
    </RaceSetup>

    <!-- Kart to select by default (the last used kart) -->
    <kart value="addon_roadster-x5" />

    <!-- Last selected kart group -->
    <last_kart_group value="all" />

    <!-- Settings for the wiimote
             wiimote-raw-max : At what raw input value maximum steering is reached (between 1 and 25).
             wiimote-weight-linear : A weight applied to the linear component of mapping wiimote angle to steering angle
             wiimote-weight-square : A weight applied to the square component of mapping wiimote angle to steering angle
             wiimote-weight-asin : A weight applied to the asin component of mapping wiimote angle to steering angle
             wiimote-weight-sin : A weight applied to the sin component of mapping wiimote angle to steering angle -->
    <WiiMote
        wiimote-raw-max="20.000000"
        wiimote-weight-linear="1.000000"
        wiimote-weight-square="0.000000"
        wiimote-weight-asin="0.000000"
        wiimote-weight-sin="0.000000"
    >
    </WiiMote>

    <!-- Settings for the multitouch device
             multitouch_active : Enable multitouch support: 0 = disabled, 1 = if available, 2 = enabled
             multitouch_draw_gui : Enable multitouch race GUI
             multitouch_inverted : Draw steering wheel on right side.
             multitouch_auto_acceleration : Auto acceleration for multitouch controls.
             multitouch_controls : Multitouch mode: 0 = undefined, 1 = steering wheel, 2 = accelerometer, 3 = gyroscope
             multitouch_deadzone : A parameter in range [0, 0.5] that determines the zone that is considered as centered in steering button.
             multitouch_sensitivity_x : A parameter in range [0, 1.0] that determines the sensitivity for x axis.
             multitouch_sensitivity_y : A parameter in range [0, 1.0] that determines the sensitivity for y axis.
             multitouch_tilt_factor : A parameter that determines general accelerometer sensitivity.
             multitouch_scale : A parameter in range [0.5, 1.5] that determines the scale of the multitouch interface.
             screen_keyboard_status : STK screen keyboard status: 0 = disabled, 1 = enabled -->
    <Multitouch
        multitouch_active="1"
        multitouch_draw_gui="true"
        multitouch_inverted="false"
        multitouch_auto_acceleration="true"
        multitouch_controls="1"
        multitouch_deadzone="0.100000"
        multitouch_sensitivity_x="0.200000"
        multitouch_sensitivity_y="0.650000"
        multitouch_tilt_factor="4.000000"
        multitouch_scale="0.950000"
        screen_keyboard_status="0"
    >
    </Multitouch>

    <!-- Order karts start in GP
             most_points_first : Starting order from most to least points (true) or other way around (false)
             player_last : Always put the player at the back or not (Bully mode). -->
    <GpStartOrder
        most_points_first="true"
        player_last="false"
    >
    </GpStartOrder>

    <!-- Directory with additional GP's. -->
    <additional_gp_directory value="" />

    <!-- Video Settings
             real_width : Screen/window real width in pixels before high dpi is applied
             real_height : Screen/window real height in pixels before high dpi is applied
             width : Screen/window width in pixels, this value should not be edited
             height : Screen/window height in pixels, this value should not be edited
             prev_real_width : Previous real screen/window width
             prev_real_height : Previous real screen/window height
             window_x : If remember_window_location is true
             window_y : If remember_window_location is true
             show_fps : Display frame per seconds
             show_story_mode_timer : Display the story mode timer
             show_speedrun_timer : Display the speedrun timer
             max_fps : Maximum fps, should be at least 60
             force_legacy_device : Force OpenGL 2 context, even if OpenGL 3 is available.
             split_screen_horizontally : When playing a non-square amount of players (e.g. 2), should it split horizontally (top/bottom)
             enable_texture_compression : Enable Texture Compression
             enable_high_definition_textures : Enable high definition textures. Bit flag: bit 0 = enabled/disabled; bit 1 = set by user/set as default
             enable_glow : Enable Glow
             enable_bloom : Enable Bloom
             enable_light_shaft : Enable Light Shafts
             enable_dynamic_lights : Enable Dynamic Lights
             enable_dof : Enable Depth of Field
             old_driver_popup : Determines if popup message about too old drivers should be displayed.
             scale_rtts_factor : Custom value for RTTs resolution. Value should be smaller or equal to 1.0
             max_texture_size : Max texture size when high definition textures are disabled
             hq_mipmap : Generate mipmap for textures using high quality method with SSE
             font_size : The size of fonts. 0 is the smallest and 6 is the biggest
             render_driver : Render video driver to use, at the moment gl, vulkan or directx9 is supported.
             vulkan_fullscreen_desktop : Use SDL_WINDOW_FULLSCREEN_DESKTOP for vulkan device
             non_ge_fullscreen_desktop : Use SDL_WINDOW_FULLSCREEN_DESKTOP for non-ge device -->
    <Video
        real_width="720"
        real_height="1600"
        width="720"
        height="1600"
        fullscreen="false"
        prev_real_width="1024"
        prev_real_height="768"
        prev_fullscreen="false"
        remember_window_location="false"
        window_x="-1"
        window_y="-1"
        show_fps="true"
        show_story_mode_timer="true"
        show_speedrun_timer="false"
        max_fps="60"
        force_legacy_device="false"
        split_screen_horizontally="true"
        enable_texture_compression="false"
        enable_high_definition_textures="2"
        enable_glow="false"
        enable_bloom="false"
        enable_light_shaft="false"
        enable_dynamic_lights="true"
        enable_dof="false"
        old_driver_popup="true"
        scale_rtts_factor="0.350000"
        max_texture_size="512"
        hq_mipmap="false"
        font_size="4.000000"
        render_driver="gl"
        vulkan_fullscreen_desktop="true"
        non_ge_fullscreen_desktop="false"
    >
    </Video>

    <!-- Recording Settings
             limit_game_fps : Limit game framerate not beyond the fps of recording video.
             video_format : Specify the video for record, which is the enum of VideoFormat in libopenglrecorder. It will auto fallback to MJPEG if libopenglrecorder was not compiled with such video encoder.
             audio_bitrate : Specify the bitrate for audio
             video_bitrate : Specify the bitrate for video
             recorder_jpg_quality : Specify the jpg compression level of recorder
             record_fps : Specify the fps of recording video -->
    <Recording
        limit_game_fps="true"
        video_format="0"
        audio_bitrate="112000"
        video_bitrate="20000"
        recorder_jpg_quality="90"
        record_fps="30"
    >
    </Recording>

    <!-- Wan server bookmarks -->
    <server-bookmarks>
    </server-bookmarks>

    <!-- Wan server bookmarks order -->
    <server-bookmarks-order>
    </server-bookmarks-order>

    <!-- Last 5 IP addresses that user entered -->
    <address-history>
    </address-history>

    <!-- The stun servers that will be used to know the public address (ipv4 only) with port -->
    <ipv4-stun-servers>
        <stun-server address="stunv4.7.supertuxkart.net:3478" ping="0"/>
        <stun-server address="stunv4.8.supertuxkart.net:3478" ping="0"/>
        <stun-server address="stunv4.linuxreviews.org:3478" ping="0"/>
    </ipv4-stun-servers>

    <!-- The stun servers that will be used to know the public address (including ipv6) with port -->
    <ipv6-stun-servers>
        <stun-server address="stun.linuxreviews.org:3478" ping="0"/>
        <stun-server address="stun.stunprotocol.org:3478" ping="0"/>
        <stun-server address="stun.supertuxkart.net:3478" ping="0"/>
    </ipv6-stun-servers>

    <!-- Network Settings
             enable-network-splitscreen : The default value of enable splitscreen checkbox in online screen.
             log-network-packets : If all network packets should be logged
             random-client-port : Use random port for client connection (check stk_config.xml for default value)
             random-server-port : Use random port for server connection (check stk_config.xml for default value)
             lobby-chat : Enable chatting in networking lobby, if off than no chat message will be displayed from any players.
             race-chat : Enable chatting during races.
             ipv6-lan : Enable IPv6 LAN server discovery.
             max-players : Maximum number of players on the server (for gui server creation.
             timer-sync-difference-tolerance : Max time difference tolerance (in ms) to synchronize timer with server.
             default-ip-type : Default IP type of this machine, 0 detect every time, 1 IPv4, 2 IPv6, 3 IPv6 NAT64, 4 Dual stack.
             lan-server-gp : Show grand prix option in create LAN server screen, false will show AI option.
             wan-server-gp : Show grand prix option in create WAN server screen, false will show AI option. -->
    <Network
        enable-network-splitscreen="false"
        log-network-packets="false"
        random-client-port="true"
        random-server-port="false"
        lobby-chat="false"
        race-chat="true"
        ipv6-lan="true"
        max-players="8"
        timer-sync-difference-tolerance="5"
        default-ip-type="0"
        lan-server-gp="false"
        wan-server-gp="true"
    >
    </Network>

    <!-- The Number of karts per gamemode. -->
    <num-karts-per-gamemode>
        <gamemode-list gamemode="0" num-karts="4"/>
        <gamemode-list gamemode="1002" num-karts="5"/>
        <gamemode-list gamemode="1100" num-karts="6"/>
        <gamemode-list gamemode="1101" num-karts="4"/>
        <gamemode-list gamemode="2000" num-karts="4"/>
        <gamemode-list gamemode="2001" num-karts="4"/>
    </num-karts-per-gamemode>

    <!-- Graphics Quality Settings
             particles-effecs : Particles effects: 0 disabled, 1 only important, 2 enabled
             christmas-mode : Christmas hats: 0 use current date, 1 always on, 2 always off
             easter-ear-mode : Easter Bunny Ears: 0 use current date, 1 always on, 2 always off
             animated-characters : Whether to display animated characters
             geometry_level : Geometry quality 0=everything is displayed; 1=a few details are displayed; 2=lowest level, no details
             anisotropic : Quality of anisotropic filtering (usual values include 2-4-8-16; 0 to disable)
             swap-interval : Swap interval for vsync: 0 = disabled, 1 = full
             motionblur_enabled : Whether motion blur should be enabled
             mlaa : Whether MLAA anti-aliasing should be enabled
             ssao : Enable Screen Space Ambient Occlusion
             light_scatter : Enable light scattering shaders
             shadows_resolution : Shadow resolution (0 = disabled
             Degraded_IBL : Disable specular IBL -->
    <GFX
        particles-effecs="2"
        christmas-mode="0"
        easter-ear-mode="0"
        animated-characters="true"
        geometry_level="0"
        anisotropic="16"
        swap-interval="0"
        motionblur_enabled="true"
        mlaa="true"
        ssao="false"
        light_scatter="false"
        shadows_resolution="0"
        Degraded_IBL="true"
    >
    </GFX>

    <cache-overworld value="true" />

    <crashed value="false" />

    <!-- Camera settings for player.
             distance : Distance between kart and camera
             forward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing forward
             forward-smoothing : if true, use smoothing (forward-up-angle become relative to speed) when pointing forward
             backward-distance : Distance between kart and camera (reverse)
             backward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing backwards. This is usually larger than the forward-up-angle, since the kart itself otherwise obstricts too much of the view
             fov : Focal distance (single player) -->
    <camera-normal
        distance="1.000000"
        forward-up-angle="0.000000"
        forward-smoothing="true"
        backward-distance="2.000000"
        backward-up-angle="5.000000"
        fov="80"
    >
    </camera-normal>

    <!-- Use ball camera in soccer mode, instead of reverse -->
    <reverse-look-use-soccer-cam value="false" />

    <!-- The current used camera. 0=Custom; 1=Standard; 2=Drone chase -->
    <camera-present value="1" />

    <!-- Standard camera settings for player.
             distance : Distance between kart and camera
             forward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing forward
             forward-smoothing : if true, use smoothing (forward-up-angle become relative to speed) when pointing forward
             backward-distance : Distance between kart and camera (reverse)
             backward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing backwards. This is usually larger than the forward-up-angle, since the kart itself otherwise obstricts too much of the view
             fov : Focal distance (single player)
             reverse-look-use-soccer-cam : Use ball camera in soccer mode, instead of reverse -->
    <standard-camera-settings
        distance="1.000000"
        forward-up-angle="0.000000"
        forward-smoothing="true"
        backward-distance="2.000000"
        backward-up-angle="5.000000"
        fov="80"
        reverse-look-use-soccer-cam="false"
    >
    </standard-camera-settings>

    <!-- Drone chase camera settings for player.
             distance : Distance between kart and camera
             forward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing forward
             forward-smoothing : if true, use smoothing (forward-up-angle become relative to speed) when pointing forward
             backward-distance : Distance between kart and camera (reverse)
             backward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing backwards. This is usually larger than the forward-up-angle, since the kart itself otherwise obstricts too much of the view
             fov : Focal distance (single player)
             reverse-look-use-soccer-cam : Use ball camera in soccer mode, instead of reverse -->
    <drone-camera-settings
        distance="2.600000"
        forward-up-angle="33.000000"
        forward-smoothing="false"
        backward-distance="2.000000"
        backward-up-angle="10.000000"
        fov="100"
        reverse-look-use-soccer-cam="false"
    >
    </drone-camera-settings>

    <!-- Saved custom camera settings for player.
             distance : Distance between kart and camera
             forward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing forward
             forward-smoothing : if true, use smoothing (forward-up-angle become relative to speed) when pointing forward
             backward-distance : Distance between kart and camera (reverse)
             backward-up-angle : Angle between camera and plane of kart (pitch) when the camera is pointing backwards. This is usually larger than the forward-up-angle, since the kart itself otherwise obstricts too much of the view
             fov : Focal distance (single player)
             reverse-look-use-soccer-cam : Use ball camera in soccer mode, instead of reverse -->
    <saved-camera-settings
        distance="1.000000"
        forward-up-angle="0.000000"
        forward-smoothing="true"
        backward-distance="2.000000"
        backward-up-angle="5.000000"
        fov="80"
        reverse-look-use-soccer-cam="false"
    >
    </saved-camera-settings>

    <!-- (Debug) camera settings.
             reverse_look_threshold : If the kart is driving backwards faster than this value,
switch automatically to reverse camera (set to 0 to disable).
             fpscam_rotation_speed : How fast the first person camera's direction speed changes when
moving the mouse (means acceleration).
             fpscam_smooth_rotation_max_speed : How fast the first person camera's direction can change.
             fpscam_angular_velocity : How fast the first person camera's rotation speed changes.
             fpscam_max_angular_velocity : How fast the first person camera can rotate. -->
    <camera
        reverse_look_threshold="0"
        fpscam_rotation_speed="0.003000"
        fpscam_smooth_rotation_max_speed="0.040000"
        fpscam_angular_velocity="0.020000"
        fpscam_max_angular_velocity="1.000000"
    >
    </camera>

    <!-- Name of the .items file to use. -->
    <item_style value="items" />

    <!-- Name of the last track used. -->
    <last_track value="addon_black-forest" />

    <!-- Last selected track group -->
    <last_track_group value="Add-Ons" />

    <!-- Discord Client ID (Set to -1 to disable) -->
    <discord_client_id value="-1" />

    <!-- If debug logging should be enabled for rich presence -->
    <rich_presence_debug value="false" />

    <!-- Name of the skin to use -->
    <skin_name value="classic" />

    <!-- Minimap Setup Settings
             display : display: 0 bottom-left, 1 middle-right, 2 hidden, 3 center
             size : Size of the the minimap (480 = full screen height; scaled afterwards)
             ai-icon : The size of the icons for the AI karts on the minimap.
             player-icon : The size of the icons for the player kart. -->
    <Minimap
        display="1"
        size="180.000000"
        ai-icon="16.000000"
        player-icon="20.000000"
    >
    </Minimap>

    <!-- PowerUp Setup Settings
             display : display: 0 center, 1 right side, 2 hidden (see karts' held powerups)
             powerup-icon-size : Size of the powerup icon (scaled afterwards) -->
    <PowerUp
        display="0"
        powerup-icon-size="64.000000"
    >
    </PowerUp>

    <!-- Everything related to spectator mode.
             camera-distance : Distance between kart and camera.
             camera-angle : Angle between ground, kart and camera. -->
    <Spectator
        camera-distance="6.750000"
        camera-angle="40.000000"
    >
    </Spectator>

    <!-- Everything related to handicaps.
             per_player_difficulty : If handicapped users can be selected -->
    <Handicap
        per_player_difficulty="false"
    >
    </Handicap>

    <!-- Status of internet: 0 user wasn't asked, 1: allowed, 2: not allowed -->
    <enable_internet value="1" />

    <!-- Everything related to hardware configuration.
             report-version : Version of hardware report that was reported last
             random-identifier : A random number to avoid duplicated reports.
             hw-report-enabled : If HW reports are enabled. -->
    <HWReport
        report-version="0"
        random-identifier="0"
        hw-report-enabled="false"
    >
    </HWReport>

    <!-- Always show the login screen even if last player's session was saved. -->
    <always_show_login_screen value="false" />

    <!-- Addon and news related settings
             news_last_updated : Time news was updated last.
             news_frequency : How often news should be updated.
             news_display_count : How often all news messages have been displayed
             last_important_message_id : Don't show important message with this or a lower id again
             news_list_shown_id : News before this id has been shown once so no red dot
             addon_last_updated : Time addon-list was updated last.
             latest_addon_time : Latest approved addon time. -->
    <AddonServer
        news_last_updated="1744721926"
        news_frequency="0"
        news_display_count=""
        last_important_message_id="-1"
        news_list_shown_id="1056"
        addon_last_updated="1744715118"
        latest_addon_time="1743665355"
    >
    </AddonServer>

    <!-- Which language to use (language code or 'system') -->
    <language value="system" />

    <!-- Whether to enable track debugging features -->
    <artist_debug_mode value="false" />

    <!-- Whether to hide the GUI (artist debug mode) -->
    <debug_hide_gui value="false" />

    <!-- Enable all karts and tracks: 0 = disabled, 1 = everything except final race, 2 = everything -->
    <unlock_everything value="0" />

    <!-- Allows one to set commandline args in config file -->
    <commandline value="" />

</stkconfig>

Heh. makes things worse. I’ll try to debug it, but it looks like sdl touch input is not quite working as expected.