OpenLoco ist eine freie Engine für Chris Sawyer’s Locomotion aus dem Jahre 2004 und der Nachfolger von Transport Tycoon. 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
Ubuntu
Erstmal alle Abhängigkeiten zum Kompilieren beschaffen. Unter Ubuntu 18.04 funktioniert das wie folgt:
Nächster Schritt, das Herunterladen eines Release von OpenLoco aus dem Releases: Link
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:
CXXFLAGS="-m32" cmake -B build .
Ihr müsst auch sicherstellen, dass ihr ein 32bit-System zur Verfügung habt.
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".
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 ‘size’ in ‘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 ‘size’ in ‘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 ‘size’ in ‘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
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.
Da scheint ein Programmierfehler zu sein, verwendest du den master-branch? Dort wird meistens entwickelt und es können Fehler drin sein. Am besten lädst du dir ein Release runter und baust das.
In diesem Wiki kann jeder registrierte Benutzer alle Artikel bearbeiten und/oder neue Artikel anlegen. So könnt ihr über euer Lieblings-Linuxspiel berichten, oder anderen eure Tricks zukommen lassen, wie ihr ein Spiel unter Wine zum Laufen bekommen habt.
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.