PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : X³ - Reunion unter Linux mit Wine 0.9.25 (success! Aber mit Einschränkungen)



Catonga
26.11.06, 07:49
Da für das Weltraumhandelsspiel X³ - Reunion von Egosoft, der dritte Teil der X-Reihe, vor wenigen Tagen der Patch 2.0.2 released wurde, mit dem der StarForce Kopierschutz aus dem Spiel entfernt wurde und das Spiel dadurch auch ohne eingelegte CD läuft, habe ich mir gleich mal gedacht, das dies doch einmal ein idealer Kandidat für Wine zum Testen wäre.

Gesagt, getan hier das Ergebnis:

Das Spiel läuft unter Wine eingeschränkt, das heißt es ist noch nicht ernsthaft spielbar, aber das Spiel läuft mit der 3d Engine schon mal ohne
nennenswerte grafische Fehler oder Performance Probleme.

Im Prinzip läuft es also ziemlich flüssig, subjektiv betrachtet ist es vielleicht nur ca. 2-10 % langsamer als unter Windows, aber das ist wie schon gesagt subjektiv betrachtet bzw. geschätzt.
Falls X3 einen eingebauten Framecounter haben sollte, dann könnte ich das mal messen.
Die Auflösung beträgt bei mir in X³ immer 1024x768, auch unter Windows.


Mann kann das Spiel unter Linux mit Wine direkt von der DVD installieren.
Die Installation erfolgte fehlerfrei.

Auch ging die Installation des Patches, der für Wine zwingend erforderlich ist, um das Spiel auch ohne StarForce Kopierschutzabfrage spielen zu können,
ohne nennenswerte Probleme.
Nur am Ende der Installation des Patches gab es mit Wine einen kleinen Fehler
der mich zwang, Wine mit CTRL+C zu beenden, aber das Spiel lief danach trotzdem.
Der Fehler bei der Installation des Patchen schien das Spiel also nicht zu beeinflußen.


Leider gab es auch ein paar Probleme, die das Spiel leider momentan unter Linux noch völlig unspielbar machen, auch wenn es ruckelfrei läuft und problemlos startet hilft das zum Spielen leider auch nicht weiter. :(

Das größte Problem ist die Steuerung.
Die Maus funktionierte gar nicht.
Die Tastatur ging nur mit Eingeschränkungen, ich konnte z.b. keine
neue Taste in der Tastaturkonfiguration definieren.
Und beim Joystick ging der Schubregler nicht.
Auch machte das Steuern mit dem Joystick ein paar Probleme,
d.h. man konnte zwar in alle Richtungen wenden und das Raumschiff um die eigene Achse drehen, aber wenn man nach rechts steuerte, dann ging es plötzlich wieder nach links, wenn man den Joystick zu stark nach rechts drückte.
Also ziemlich unlogisch und zum Spielen leider nicht benutzbar. :(

Der Sound ging bei mir leider gar nicht.
Das Spiel ist also ohne Ton.
Beim starten des Spiels sieht man nur das kurz eingeblendete Textzitat,
die Videosequenen sieht man überhaupt nicht, d.h. das Bild bleibt schwarz,
aber zum Glück kann man diese mit ESC abbrechen.
Ansonsten gab es noch ein Problem bei der Konfiguration der Eingabegeräte
außerhalb des Spieles in diesem X³ Konfigurationsprogramm welches beim starten von X³ am Anfang automatisch gestartet wird.
Wenn man hier die Eingabegeräte einstellen wollte, dann stürtze das Programm ab.
Bei der Einstellung der Grafikoptionen gab es keine Probleme, bzw. lief dieser Einstellungsdialog ohne Fehler ab.
Unter Windows gab es keine Fehler dieser Art, da läuft es ohne Probleme.


Der verwendete Testrechner ist ein:
Pentium M 130 @ 1,66 GHz (Notebook)
1 GB RAM Arbeitsspeicher
NVidia Geforce 6600 Go mit 128 MB Ram
Maus: MX518
Joystick: Sidewinder Precision Pro mit dazu passendem USB Adapter

Linux Distribution:
Ubuntu 6.06 Dapper Drake (stable)
mit dem offiziellen Wine 0.9.25 *.deb Paket für Ubuntu Dapper von www.winehq.org (siehe unter Download)
NVidia Treiber Version: NVIDIA 87.76

Das Spiel wurde mit folgendem Patch gepatched:
Dieser ist wie schon gesagt zwingend erforderlich
X3Update1.0_to_2.0.02.exe


Und zum Schluß noch ein paar Screenshots mit X³ Reunion mit Wine unter Linux:
(das Spiel läuft unter Wine übrigens auch im Vollbildmodus, den habe ich hier aber mal weggelassen)

Das Startmenü:
http://img21.imagefiasco.com/images/kN723048.jpg

Der Ladescreen:
http://img21.imagefiasco.com/images/vMS23013.jpg

Die Cockpitansicht:
http://img21.imagefiasco.com/images/rU022896.jpg

Noch einmal eine Cockpitansicht mit geöffneter Sektorkarte und anderem Hintergrund:
http://img21.imagefiasco.com/images/EIo22970.jpg

Los_Andros
26.11.06, 10:36
ein Traum wird wahr, vielleicht noch ein paar Monate und ich kann sogar X3 bei mir spielen.
Bin immer noch total vertieft in X2 (Linuxversion), also hab noch etwas Zeit ;-)

PUNX69
26.11.06, 13:06
Jup X3 läuft schon lange mit wine genauso wie X2 und X-BTF aber dank des fehlenden ton's(WMCodec) würde ich diese trozdem als unspielbar bezeichnen

Mfg

Banshee
26.11.06, 18:54
Probleme, wo ich denke das diese gelöst werden können:

Steuerung, einfach mal mit ner dinput8.dll probieren, und dann als native einstellen.

Sound, da das Spiel openal besitzt könnte schon bald Abhilfe geschaffen werden.
Es ist kürzlich ein patch erschienen der openal unter wine unterstützen soll. Ist aber noch nicht im cvs/git. Hoffen wir das beste. ;)

PUNX69
26.11.06, 19:11
also Ich weiß nicht was du meinst das Spiel benutzt soweit ich weiß kein OpenAL sondern direkt DX und OpenAl geht doch zumindest geht bei mir goonzu online, regnum online, penumbra

mfg

Catonga
26.11.06, 20:27
Probleme, wo ich denke das diese gelöst werden können:

Steuerung, einfach mal mit ner dinput8.dll probieren, und dann als native einstellen.


Dann wirft er eine Exception:


wine: Call from 0x6d3101ee to unimplemented function USER32.dll.GetRawInputDeviceList, aborting
wine: Unimplemented function USER32.dll.GetRawInputDeviceList called at address 0x6d3101ee (thread 0009), starting debugger...
Unhandled exception: unimplemented function USER32.dll.GetRawInputDeviceList called in 32-bit code (0x7bc37807).


Ich habe den Wine Quellcode zwar jetzt nicht vor mir, aber laut Meldung scheint es so, als wäre die Funktion GetRawInputDeviceList in USER32.DLL auf die das native dinput8.dll zugreift, nicht implementiert bzw. vorhanden. :(

Und das builtin dinput8.dll ist leider laut der winhq directX status Webseite nur bis zu ca. 50 % implementiert.






Sound, da das Spiel openal besitzt könnte schon bald Abhilfe geschaffen werden.

Wenn X3 Reunion OpenAL benutzen würde, dann würde sich aller Wahrscheinlichkeit nach die openal.dll oder OpenAL32.dll Datei im Programmverzeichnis des Spieles befinden, also mitgeliefert werden, das ist bei X3 aber nicht der Fall.
Zumindest ist das bei den Spielen so, von denen ich definitiv weiß, daß die OpenAL benutzen.
Ansonsten ist auf meinem Windows System auf dem Notebook zur Zeit auch Global kein OpenAL mehr installiert, da ich vor kurzem die wenigen OpenAL Anwendungen, die diese API nutzen, deinstalliert habe.

Ok, ein Spiel welches OpenAL noch benutzt ist noch drauf.
Jedi Knight II Outcast, aber da befindet sich die OpenAL32.dll Datei wie erwartet im Spielverzeichnis.

Daher würde ich davon ausgehen, das X³ definitiv kein OpenAL verwendet.

Banshee
02.12.06, 16:11
Dann ist vermutlich diese Liste hier falsch:
http://www.openal.org/titles.html

Oh und hier zwei patches um das Problem mit der native dinput8.dll zu beheben. Sind nicht von mir, nur geupdatet.


--- include/winuser.h 2006-10-16 02:17:42.000000000 +0000
+++ include/winuser.h 2006-10-16 03:20:50.000000000 +0000
@@ -3824,6 +3824,12 @@
DWORD dwTime;
} LASTINPUTINFO, *PLASTINPUTINFO;

+/* used by GetRawInputDeviceList */
+typedef struct tagRAWINPUTDEVICELIST {
+ HANDLE hDevice;
+ DWORD dwType;
+} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;
+
/* used by GetAltTabInfo */
typedef struct
{
@@ -4054,6 +4060,7 @@
BOOL WINAPI GetIconInfo(HICON,PICONINFO);
HKL WINAPI GetKeyboardLayout(DWORD);
UINT WINAPI GetKeyboardLayoutList(INT,HKL *);
+UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UI NT);
BOOL WINAPI GetComboBoxInfo(HWND,PCOMBOBOXINFO);
BOOL WINAPI GetMenuBarInfo(HWND,LONG,LONG,PMENUBARINFO);
DWORD WINAPI GetMenuContextHelpId(HMENU);


--- dlls/user32/input.c 2006-10-16 03:13:32.000000000 +0000
+++ dlls/user32/input.c 2006-10-16 02:48:14.000000000 +0000
@@ -340,6 +340,19 @@
}


+/************************************************** **************************
+ * GetRawInputDeviceList (USER32.@)
+ */
+
+UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST pRawInputDeviceList, PUINT puiNumDevices, UINT cbSize)
+{
+ FIXME("(%p, %p, %u) stub\n", pRawInputDeviceList, puiNumDevices, cbSize);
+ memset(pRawInputDeviceList, 0, sizeof *pRawInputDeviceList);
+ *puiNumDevices = 0;
+ return 0;
+}
+
+
/************************************************** ********************
* AttachThreadInput (USER32.@)
*
--- dlls/user32/user32.spec 2006-10-16 02:28:31.000000000 +0000
+++ dlls/user32/user32.spec 2006-10-16 02:30:03.000000000 +0000
@@ -345,7 +345,7 @@
# @ stub GetRawInputData
# @ stub GetRawInputDeviceInfoA
# @ stub GetRawInputDeviceInfoW
-# @ stub GetRawInputDeviceList
+@ stdcall GetRawInputDeviceList(ptr ptr long)
# @ stub GetReasonTitleFromReasonCode
# @ stub GetRegisteredRawInputDevices
@ stdcall GetScrollBarInfo(long long ptr)