PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Cheating-Death in LINUX/WINE, Here's how to do it"



Toast
04.09.03, 23:37
Ich hab hier einige Leute gesehen, die Probleme mit Cheating-Death haben (inclusive mich :). Man kriegt es zwar zum laufen, aber Half-Life erkennt es scheinbar in vielen Faellen trotzdem nicht. Deshalb hab ich mal bei Cheating-Death direkt ins Forum geschaut und folgenden Post von 68CaliberKiller gefunden ( ist schon ein bischen älter, aber ich konnte hier im Forum keinen Post finden, in dem darauf verwiesen wurde ) :



I have seen a few people asking in CD IRC channel how to get CD working in WINE so they can play on linux. Here's how to do it:
You are going to create a linux library that will hook a function HL uses and load cd.dll from within hl itself, since WINE does not support the external dll loading API's that CD uses
First, create a file "cdlinux.c" with the following contents:



#include<dlfcn.h>
char* (*p_GetCommandLineA)()=0;
int times=0;
char *GetCommandLineA() {
if(!p_GetCommandLineA)
p_GetCommandLineA=dlsym((void*)-1,"GetCommandLineA");
times++;
if(times==6)
LoadLibraryA("C:\\Program Files\\Cheating-Death\\cd.dll");
return (*p_GetCommandLineA)();
}


You may need to change the path in the LoadLibraryA line to wherever you installed your CD. Make sure you use \\ to seperate directories, NOT / or \
Now you compile this by doing
$ gcc -shared cdlinux.c -o cdlinux.so

Next go into your Half-Life directory, and create a file called "cdlinux.sh" with the following contents:



#!/bin/sh
export LD_PRELOAD="/lib/libdl.so.2 /usr/lib/transgaming/winex/lib/libkernel32.so /path/to/your/cdlinux.so"
export LD_LIBRARY_PATH="/usr/lib/transgaming/winex/lib"
winex hl.exe -- $*


note these paths are for winex binary. If you are using wine or winex source you may need to change them to whatever they are for those(search for libkernel32.so and thats the directory to use)
Change the /path/to/your/cdlinux.so to where the cdlinux.so you created is
You will NOT use cdeath.exe AT ALL. Now when you want to use cd, simply run "sh cdlinux.sh", and CD will be loaded, and you can play on CD servers!

( http://forums.unitedadmins.com/index.php?showtopic=28970 )

Ich hab es selbst noch nicht ausprobiert, aber da der Post dort Sticky ist, scheint es sich ja bewiesen zu haben. Wäre klasse, wenn ein paar Leute von ihren Ergebnisse damit berichten würden.

So long
Toasti

bsel
05.09.03, 10:29
Ist ja schön und gut, dass es so laufen soll, da gibt's für mich nur ein Problem: Ich habe gar keine libkernel32.so.
Liegt's an meiner Kompilierung, an ansich Wine oder an der Version 20030709.
Wäre schön, wenn das einer wüsste.

bsel
05.09.03, 10:53
Aber eine kernel32.dll.so hab, hehe.
Scheint das gleiche zu sein. Zumindest läuft 's jetzt.

Toast
05.09.03, 11:21
Ich hab das ganze jetzt mal mit winex-3.1 versucht.
Hier heisst die Datei auch libkernel32.so und sie war in /usr/local/lib/ zu finden.

Hab bis jetzt nur einen Server mit CD im Reg-Mode angetestet, aber das hat wunderbar funktioniert

Fatty
05.09.03, 13:04
Bei mir kommt's dummerweise noch zu Problemen, wenn die libkernel32.so geladen wird:

./cdlinux.sh: line 4: 8456 Speicherzugriffsfehler winex cstrike.exe -- $*

_winex_ istbei mir ein Wrapper-Script für WineX, da ich zusätzlich auch Wine installiert habe.

#!/bin/bash

export WINEPREFIX="$HOME/.winex"
export WINESERVER="/usr/local/bin/wineserver"
export WINELOADER="/usr/local/bin/wine"
export WINEDLL="/usr/local/lib/wine"

rm -rf ${WINEPREFIX}/wineserver-$(uname -n)

/usr/local/bin/wine $*

Es muss wie gesagt an der libkernel32.so liegen, da dieser Speicherzugriffsfehler nur dann auftritt, wenn die _libkernel32.so_ mit im Export steht (ohne wird dann nur bemängelt, dass ein paar Funktionen nicht verfügbar sind.

bsel
05.09.03, 16:41
Wenn dein WINEPREFIX "~/.winex" ist, liegen die LIBs dann nicht irgendwo in ~/.winex ?

Fatty
05.09.03, 17:50
Ich hab doch WineX nach /usr/local/ installiert. WineX läuft ja auch normalerweise einwandfrei ;)

Mein Problem ist halt, dass beim verwenden dieses Scriptes ein Speicherzugriffsfehler kommt. Das Problem liegt anscheinend daran, dass sich die _libkernel32.so_ nicht Preloaden lässt.
Dummerweise ist diese jedoch nötig, um das selbsterstellte _cdlinux.so_ zu laden :(

Mal eine Frage an alle, bei denen das klappt: Welche Version von WineX benutzt ihr? (ich hab die CVS vom 17.8.03)

Hab das ganze auch mal mit Wine probiert (also Script angepasst, etc.). Da wird zwar alles wunderbar geladen, allerdings will damit Half-Life mal wieder nicht starten :mad:

Warum jetzt Half-Life mit dem _normalen_ Wine nicht mehr geht, ist mir dabei auch ein weiteres Rätsel (mit dem Wine vom Juli liefs noch...).

Fatty
20.09.03, 15:47
Ich hab es jetzt noch einmal mit einer anderen CVS-Version (-r winex-3-1) versucht und schon gab es keine Probleme mehr mit Cheating-Death.

Allerdings scheint HL bei mir nur dann im Vollbildmodus zu laufen, wenn die XVidMode=Y gesetzt ist. Das allerdings schmeißt mich diekt zurück auf den Desktop :(

Vielleicht finde ich ja noch eine Möglichkeit _endlich_ wieder im Vollbildmodus spielen zu können ;)

ThorstenHirsch
12.10.03, 18:03
Ich hab die wine-cvs von heute und finde diese libkernel32.so (oder libkernel32.dll.so) nicht!
Deswegen hab ich auch die gleichen Probleme wie Fatty im vorletzten Posting. Hat die mittlerweile vielleicht nen anderen Namen bekommen?

ThorstenHirsch
12.10.03, 18:28
Interessant ist auch das hier:
http://forums.unitedadmins.com/index.php?showtopic=28970

Ich hab's gerade mit der 2.Methode (von Flame) ausprobiert, habe dieses <include windows.h> auch rausschmeißen müssen, wie dann später einer sagt und bekam beim kompilieren lediglich eine Warnung.
Dann konnte ich CS ohne Probleme starten, aber Cheating Death hat leider wieder nicht funktioniert. Wahrscheinlich weil auch bei dieser Methode die libkernel32.so benötigt wird, wie man im Quellcode ja ganz deutlich sieht.

Fatty
12.10.03, 22:06
Original geschrieben von ThorstenHirsch
Ich hab die wine-cvs von heute und finde diese libkernel32.so (oder libkernel32.dll.so) nicht!
Hast du dir das Wine-CVS oder das WineX-CVS gesaugt?
Die hier und im Unitedadmins-Forum besprochenen Methoden beziehen sich jedenfalls allesamt auf "Transgaming WineX".

Mit dem _normalen_ Wine hat bei mir bisher der normale CD-Client funktioniert.

ThorstenHirsch
13.10.03, 16:35
Ich meine wine und nicht transgaming winex.
Wie funktioniert denn CD bei dir mit wine? Rufst du einfach "wine cdeath.exe" auf und danach "wine hl.exe -- ..."? Das hab ich nämlich probiert und da wurde CD nicht erkannt....oder muss ich vielleicht noch einen speziellen Port meiner Firewall öffnen, damit das funktioniert?

Fatty
13.10.03, 16:59
Also bei den alten C-D-Versionen hat das eben so funktioniert (also erst wine cdeath.exe, dann wine hl.exe).
Kann aber sein, dass das mit den neuen Versionen nicht mehr geht. Ich hab jedenfalls seit einiger Zeit kein C-D mehr mit Wine probiert.