OpenLoco

Bild des Benutzers meldrian

OpenLoco ist eine freie Engine für Chris Sawyer’s Locomotion aus dem Jahre 2004. Seit Version 0.18.02 kann sie auch unter Mac-OS und Linux kompiliert und ausgeführt werden. Die Original-Spieldaten werden zum Ausführen benötigt.

Installation

Erstmal alle Abhängigkeiten zum Kompilieren beschaffen. Unter Ubuntu 18.04 funktioniert das wie folgt:

sudo dpkg --add-architecture i386
sudo apt install cmake libsdl2-dev:i386 libsdl2-ttf-dev:i386 gcc-4.8 pkg-config:i386 g++-4.8-multilib gcc-4.8-multilib make g++-multilib

Nächster Schritt, das Herunterladen eines Release von OpenLoco. Diesen erhält man unter nachfolgendem Link:
https://github.com/OpenRCT2/OpenLoco/releases <-- hier das Paket "Source Code" wählen.
Alternativ kann hier auch der Master-Branch heruntergeladen und verwendet werden.

Ist das Archiv heruntergeladen, entpackt dieses an einen beliebigen Ort. Wir gehen in dieser Anleitung von Verzeichnis /home/benutzer/spiele/openloco/ aus.

Betretet das Verzeichnis über ein Terminal und führt dort die nachfolgenden Befehle aus:

mkdir build
cd build
cmake ..
make

Sollten cmake oder make Fehler werfen erfährt man über die Suchmaschine der eigenen Wahl häufig über die Fehlermeldung eine zum Problem passende Lösung. Falls weiterhin Probleme bestehen bietet sich der Kommentarbereich unter diesem Artikel oder das Holarse Forum an.

Sollte make abgeschlossen worden sein, kopiert die nun existierende Datei "openloco" im Verzeichnis build in das Wurzelverzeichnis (/home/benutzer/spiele/openloco/). Startet openloco über ein Terminal mit

./openloco

hier wird man nach dem Pfad zu den originären Spieldaten gefragt. Liegen diese in der GOG-Variante auf eurem System vor (Installiert via wine), sollten die Daten zuvor in einen anderen Ordner kopiert werden, beispielsweise "/home/benutzer/spiele/openloco/openlocodata".

Screenshots und Videos
Heinz
Bild des Benutzers Heinz
Offline
Beigetreten: 15.01.2019
Beiträge: 1

Kann mir jemand bei untenstehender Fehlermeldung weiterhelfen? Ist unter Ubuntu 16.04.
Es war nicht leicht, eine Version von gcc und c++ zu finden, mit der der Befehlt "cmake .." funktionierte. Momentan habe ich Version 6.5.

XXX@XXX-W65-67SH:~/Schreibtisch/OpenLoco-18.02/build$ make
[  5%] Built target segfiles
[  5%] Building CXX object CMakeFiles/openloco.dir/src/openloco/audio/audio.cpp.o
In file included from /home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:3:0,
                 from /home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/audio.cpp:2:
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:10:36: error: ‘wstring_view’ in namespace ‘std’ does not name a type
     std::string to_utf8(const std::wstring_view& src);
                                    ^~~~~~~~~~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:11:38: error: ‘string_view’ in namespace ‘std’ does not name a type
     std::wstring to_utf16(const std::string_view& src);
                                      ^~~~~~~~~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:13:43: error: ‘string_view’ in namespace ‘std’ does not name a type
     static inline bool iequals(const std::string_view& a, const std::string_view& b)
                                           ^~~~~~~~~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:13:70: error: ‘string_view’ in namespace ‘std’ does not name a type
    static inline bool iequals(const std::string_view& a, const std::string_view& b)
                                                                     ^~~~~~~~~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp: In function ‘bool openloco::utility::iequals(const int&, const int&)’:
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:15:15: error: request for member ‘sizein ‘a’, which is of non-class type ‘const int’
         if (a.size() != b.size())
               ^~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:15:27: error: request for member ‘sizein ‘b’, which is of non-class type ‘const int’
         if (a.size() != b.size())
                           ^~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:19:34: error: request for member ‘sizein ‘a’, which is of non-class type ‘const int’
         for (size_t i = 0; i < a.size(); i++)
                                  ^~~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:21:33: error: invalid types ‘const int[size_t {aka unsigned int}]for array subscript
             if (std::tolower(a[i]) != std::tolower(b[i]))
                                 ^
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/../utility/string.hpp:21:55: error: invalid types ‘const int[size_t {aka unsigned int}]for array subscript
             if (std::tolower(a[i]) != std::tolower(b[i]))
                                                       ^
In file included from /home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/audio.cpp:2:0:
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp: At global scope:
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:329:21: error: ‘byte’ is not a member of ‘std’
         std::vector<std::byte> state;
                     ^~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:329:30: error: template argument 1 is invalid
         std::vector<std::byte> state;
                              ^
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:329:30: error: template argument 2 is invalid
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:332:27: error: ‘byte’ is not a member of ‘std’
         const std::vector<std::byte>& get_state() const
                           ^~~
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:332:36: error: template argument 1 is invalid
         const std::vector<std::byte>& get_state() const
                                    ^
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/../interop/interop.hpp:332:36: error: template argument 2 is invalid
/home/XXX/Schreibtisch/OpenLoco-18.02/src/openloco/audio/audio.cpp:8:40: error: ‘maybe_unused’ attribute directive ignored [-Werror=attributes]
     [[maybe_unused]] constexpr int32_t play_at_centre = 0x8000;
                                        ^~~~~~~~~~~~~~
cc1plus: error: unrecognized command line option ‘-Wno-unused-private-field’ [-Werror]
cc1plus: all warnings being treated as errors
CMakeFiles/openloco.dir/build.make:70: die Regel für Ziel „CMakeFiles/openloco.dir/src/openloco/audio/audio.cpp.o“ scheiterte
make[2]: *** [CMakeFiles/openloco.dir/src/openloco/audio/audio.cpp.o] Fehler 1
CMakeFiles/Makefile2:136: die Regel für Ziel „CMakeFiles/openloco.dir/all“ scheiterte
make[1]: *** [CMakeFiles/openloco.dir/all] Fehler 2
Makefile:83: die Regel für Ziel „all“ scheiterte
make: *** [all] Fehler 2

comrad
Bild des Benutzers comrad
Offline
Beigetreten: 13.05.2008
Beiträge: 4234

Cmake ist erstmal nur ein Build-Tool. Wahrscheinlich braucht OpenLoco eine bestimmte Version vom C++-Compiler. Hast du auch die CFLAGS gesetzt? Die Anleitung sagt ja:

mkdir build
cd build
CXXFLAGS="-m32" cmake ..
make

ich hab das mal versucht nachzuvollziehen. Meine openSUSE 15 hat GCC 7, das scheint auch nicht zu gehen, weil er aus irgendeinem Grund die 32bit Binary mit dem 64bit Linker linken will.

Mastodon