• Stars
    star
    706
  • Rank 64,138 (Top 2 %)
  • Language
    Rust
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Steam Play compatibility tool to run games using native Linux engines

Luxtorpeda-dev

Luxtorpeda project Discord Downloads Build Action GitHub contributors GitHub Sponsors

Steam Play compatibility tool to run games using native Linux engines

screenshot-0

Pre-requisites

Compatibility tool will work on any modern 64-bit Linux distribution. All packaged games are compiled for Steam Runtime Soldier environment and require no additional dependencies.

Using Luxtorpeda with Steam native runtime may or may not work, but is not supported.

Installation (using tarball)

This is pre-release quality software, expect bugs and missing features.

The packages.json for the supported packages and getting the latest versions will get updated on each launch of luxtorpeda, without any input needed from the user. New releases of the luxtorpeda client will need to be downloaded manually, but a new release of the client is not required when a package is created or updated, unless that package depends on a new feature (which will be noted in the release notes).

  1. Close Steam.

  2. Download latest version at https://github.com/luxtorpeda-dev/luxtorpeda/releases

  3. Move and unpack tarball to compatibilitytools.d directory (create one if it does not exist):

     $ cd ~/.local/share/Steam/compatibilitytools.d/ || cd ~/.steam/root/compatibilitytools.d/
     $ tar xJf luxtorpeda-<version-number>.tar.xz
    
  4. Start Steam.

  5. In game properties window select "Force the use of a specific Steam Play compatibility tool" and select "Luxtorpeda".

Installation (using GUI)

  1. Download ProtonUp-Qt from here: https://davidotek.github.io/protonup-qt/#download
  2. Run ProtonUp-Qt and select Steam
  3. Click Add Version, select Luxtorpeda and press Install
  4. Restart Steam
  5. In Steam game properties window select "Force the use of a specific Steam Play compatibility tool" and select "Luxtorpeda".

Installation (debug build, from source)

  1. Download the latest version of Rust: https://www.rust-lang.org/ and verify that openssl is installed on your system. As well, ensure that Godot is downloaded. Currently, 3.5.1 is in use.

Debian, Ubuntu and variants

   $ sudo apt install libssl-dev

Fedora

   $ sudo dnf install openssl-devel

Arch

   $ sudo pacman -S openssl rust
  1. Close Steam.

  2. Clone the repository, then use makefile to trigger cargo build and install:

    $ git clone https://github.com/luxtorpeda-dev/luxtorpeda.git
    $ cd luxtorpeda
    $ make user-install GODOT=godot-path-here
    
  3. Start Steam.

  4. In game properties window select "Force the use of a specific Steam Play compatibility tool" and select "Luxtorpedaย (dev)".

Configuration

A configuration json file named config.json will be located in the ~/.config/luxtorpeda/config.json if the application has been run at least once. The defaults can be seen at https://github.com/luxtorpeda-dev/luxtorpeda/blob/master/src/config.rs. It has the following parameters:

  • host_url - This is used to determine where the packages.json file is located remotely, for use in automatic updates of this file.
  • should_do_update - If this parameter is set to true, then the packages.json file will be updated automatically.
  • disable_default_confirm - Disables default engine confirmation dialog. Defaults to false. This can be done globally in the config.json by setting disable_default_confirm to true, or setting LUX_DISABLE_DEFAULT_CONFIRM=1 %command% in the launch options of a particular game. Setting LUX_DISABLE_DEFAULT_CONFIRM=0 %command% will enable the confirmation if the config variable is set to disabled for that particular game.
  • enable_steam_cloud - If this parameter is set to true, each engine & game with steam cloud support will enable it. This defaults to false. This can also be done by setting LUX_STEAM_CLOUD=1 %command% in the launch options of a particular game.
  • hash_check_install - If this parameter is set to true, hash checking will be enabled for each file the engine needs to run, so that if a file has already been extracted/installed, it won't do it again until there is an update to one of the engine files. This is defaulted to false.
  • close_client_on_launch - If this parameter is set to true, the client will close as soon as the game launches, instead of waiting for the engine to complete like normal behavior. This is defaulted to false.

Logs will be written to file if LUX_WRITE_LOGGING=1 is set. The log file will be located at ~/.local/state/luxtorpeda/luxtorpeda.log.

User Packages Override

A ~/.config/luxtorpeda/user-packages.json file can be created, which will allow custom package information without having to change the normal packages.json file. This file should have the same format as packages.json, but can have either new games or overrides to existing games. See #65 for more information.

User Interface

When a prompt appears from the client, it will accept input from controllers, keyboard or mouse. These prompts can include the engine chooser, progress indicator, error notices, and questions. The input works the following way:

Keyboard and Mouse

  • Keyboard and mouse are always supported, even if a controller is detected.
  • Keyboard icons will appear in the buttons if no controllers are detected. Keyboard arrows can be used to navigate the choices.

Controllers

  • Controller Icons Library for Godot is used to detect and accept inputs from controllers.
  • Controller icons will appear in the buttons if a controller is detected. If input is switched, such as going from using a controller to mouse or keyboard, the icons will change accordingly.
    • Icons are only available for controllers in the testing list below, with it falling back to the Xbox controller icons if an unknown controller is detected.
    • Input with that controller should still work but the icons may be incorrect. If additional controller support is wanted, feel free to open an issue.
  • The following controllers have been tested:
    • Xbox One Controller
    • PS4 Controller (PS5 Controller should work and use PS4 icons)
    • Switch Pro Controller (Will show icons)
    • Steam Controller - The Steam Controller will act as a keyboard and mouse, like in desktop mode.

For using controllers in the engine itself, ensure that Steam Input is enabled, that a gamepad profile has been set, and that the Steam Input controller-specific option has been enabled, such as for Xbox or Playstation controllers.

Steam Deck

  • Thanks to help with testing from LiamD at GamingOnLinux, luxtorpeda works with the Steam Deck! See more information at https://www.gamingonlinux.com/2022/03/steam-deck-using-luxtorpeda-for-morrowind-warzone-2100-and-x-com/
  • Gamepad support relies on the steam input settings. If steam input for the game is set as a gamepad, then will show controller icons and work as a controller. Otherwise, can use the touchscreen as a mouse.
  • Setting a game to use luxtorpeda can be done in desktop or gaming mode, using the compatibility options.

Supported titles

Just click "Play" and Luxtorpeda will download and install the package for you. You need to select Luxtorpeda as a compatibility tool first, of course.

When you launch a game that supports multiple engines, a prompt will appear asking for the engine that should be downloaded and launched. Once the engine has been picked, a second prompt will ask if the engine should become the default. Launches after this if "Yes" is picked in this dialog will not ask for the engine again. A file can be deleted to restore the engine prompt for a particular game. The file will have the following format: ~/.config/luxtorpeda/<app_id>/default_engine_choice.txt

To see a list of supported titles, go to https://luxtorpeda-dev.github.io

Want a specific game?

Check issues to see if we are working on it.

You can also make a package request by creating a new issue

You can also create a package yourself

Development

You can use cargo as with any Rust project; make serves only as a convenient frontend for packaging and triggering longer cargo commands.

For the UI, the Godot editor is required. It can be downloaded from https://godotengine.org/download

Development on Steam Deck

  • Open desktop mode and download the luxtorpeda repo to a directory on the deck.
  • Install flatpak org.freedesktop.Sdk/21.08 (should have glibc 2.33, as of current steam deck glibc version).
  • Run the following: flatpak run --command=bash -d --filesystem=home --share=network org.freedesktop.Sdk//21.08
  • Install rustup: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Go into the luxtorpeda directory and run cargo build. Then copy target/debug/libluxtorpeda.so into the correct directory. The Godot project should be exportable using the engine on Steam and then copied into the correct directory.

Releasing a New Version

  • First make sure all pull requests have been merged that are wanted for the release. Then git pull on the master branch.
  • Make sure cargo-release is installed locally cargo install cargo-release (https://github.com/crate-ci/cargo-release)
  • Run cargo release version major to do a dry run of the version update. Can also use minor, patch, etc
  • Run again if dry run successful: cargo release version major --execute. Make sure to commit & push to git if needed.
  • Run cargo release to do a dry run of the release.
  • Run cargo release --execute if dry run successful. This step will push the git tags.

Credits