[FIXED] WolfSP stürzt ab, WolfMP geht...

Euer RtCW läuft nicht richig? - Hier bekommt ihr Hilfe!
Antworten
Degehael
Einmalposter
Einmalposter
Beiträge: 1
Registriert: Mi 6. Okt 2010, 19:21
Alter: 40

[FIXED] WolfSP stürzt ab, WolfMP geht...

Beitrag von Degehael »

Hallo!

Ich habe folgendes Problem: WolfSP.exe stürzt in allen bisher probierten Versionen mit folgendem Fehler direkt nach dem "aufpoppen" des eigentlichen Wolfenstein-Fensters (nach der Konsole) ab:
Die Anweisung in "0x685f564e" verweist auf Speicher in "0x685f564e". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
Falls ich mein Tool nicht falsch benutzt habe, ist der Speicherbereich bei 0x685F564E übrigens leer. ;)

Erstmal ein paar Angaben zum System:
OS: Microsoft Windows XP Professional SP3
CPU: Intel Core 2 Quad Q6600
GPU: ATI Radeon HD 4850
Treiber: Catalyst Version 10.9
Falls noch irgendwas interessant sein sollte, nachfragen.

Der Log von Wolfenstein selbst ist unvollständig bzw. bricht direkt vor der Auflistung der GL-Extensions ab:
...detecting CPU, found Intel Pentium III
Bypassing CD checks
----- Client Initialization -----
Cmd_AddCommand: map_restart already defined
----- Initializing Renderer ----
-------------------------------
----- Client Initialization Complete -----
----- R_Init -----
Initializing OpenGL subsystem
...initializing QGL
...calling LoadLibrary( 'C:\WINDOWS\system32\opengl32.dll' ): succeeded
...setting mode -1: 1280 1024 FS
...using colorsbits of 32
...calling CDS: ok
...registered window class
...created window@0,0 (1280x1024)
Initializing OpenGL driver
...getting DC: succeeded
...GLW_ChoosePFD( 32, 24, 8 )
...95 PFDs found
...hardware acceleration found
...PIXELFORMAT 2 selected
...creating GL context: succeeded
...making context current: succeeded
Initializing OpenGL extensions
...ignoring GL_EXT_texture_compression_s3tc
...using GL_EXT_texture_env_add
...using WGL_EXT_swap_control
...using GL_ARB_multitexture
...using GL_EXT_compiled_vertex_array
...WGL_3DFX_gamma_control not found
...GL_ATI_pn_triangles not found
...ignoring GL_EXT_texture_filter_anisotropic
...GL_NV_fog_distance not found

GL_VENDOR: ATI Technologies Inc.
GL_RENDERER: ATI Radeon HD 4800 Series
GL_VERSION: 3.3.10188 Compatibility Profile Context
In der Wolfconfig habe ich schon so ziemlich alles ausgetestet, was es gibt. Ich habe sogar versucht, Wolfenstein per Glidewrapper zu starten. Nichts hat auch nur ansatzweise irgendetwas verändert. (Nein, auch der Safe Mode hilft nichts)

Was ich allerdings interessant fand, war, dass WolfMP.exe tadellos funktioniert. Also kann doch nur die WolfSP.exe, die dlls oder die SinglePlayer-Daten der Grund für den Absturz sein, weil beides ja dieselbe Engine benutzt, oder sehe ich das falsch?

Vollends verwirrt hat mich folgendes:
Ich habe mal WolfMP mit Logs gestartet und habe einen recht lustigen Eintrag in der Logdatei gefunden:
[...]
^3WARNNING: GL extensions string too long (4276), truncated to 4096
Initializing OpenGL extensions
[...]
Meine Grafikkarte unterstützt also zu viele Extensions und das Spiel kann den Extensions-String nicht mehr komplett verarbeiten, weil jemand ein arbiträres Limit von 4096 Zeichen gesetzt hat... WTF? :D
Edit: Das scheint denen sogar beim Programmieren aufgefallen zu sein, aber die Erhöhung hat immernoch nicht gereicht.
Aus dem SinglePlayer-Quellcode, cgame\tr_types.h:

Code: Alles auswählen

char extensions_string[4 * MAX_STRING_CHARS]; // this is actually too short for many current cards/drivers  // (SA) doubled from 2x to 4x MAX_STRING_CHARS
MultiPlayer-Quellcode, cgame\tr_types.h:

Code: Alles auswählen

char extensions_string[MAX_STRING_CHARS * 4]; // TTimo - bumping, some cards have a big extension string
Irgendwie funktioniert das Spiel im MP aber trotzdem. Im SP taucht diese Warnung im Log nicht auf und es funktioniert nicht. (Edit2: Die Warnung ist auch ausschließlich im MP-Quellcode implementiert)

Ich bin inzwischen komplett ratlos und hoffe, dass irgendwer zufällig eine Idee hat, was schief gelaufen sein könnte.

Edit2: Habe mir den Sourcecode runtergeladen und compiliert. Leider scheint irgendwas nicht zu funktionieren, sodass WolfMP zwar teilweise läuft, aber spätestens im Spiel selbst (also wenn ich einen Server starte) einen Fehler im Renderer hat, wodurch ich keine Anzeige mehr habe außer der Konsole (kein Spiel, kein Menü).
Allerdings weiß ich dadurch immerhin, welche Art von Fehler bei WolfSP auftaucht: Ein Buffer Overflow. Ich probiere gerade, den Fehler zu beheben, aber habe leider nicht genügend Ahnung vom Programmieren. :/

Edit3: YEAH! Es läuft wieder. :) Zwar nicht gerade sehr einfallsreich, aber ich bin einfach den Meldungen des Debuggers gefolgt und habe jedes irgendwo in der Prozedur auftauchende Limit von 4096 Zeichen auf 6144 erhöht. Dabei habe ich ein oder zwei zu viel hochgesetzt, aber sollte alles nicht schaden, soweit ich das überblicken kann. FILE_HASH_SIZE in tr_shader.c und in tr_image.c sind mir zum Beispiel aufgefallen, die hab ich nachher wieder zurück auf 4096 gesetzt. Die haben ziemlich sicher nichts damit zu tun.

Soweit ich das erkennen kann, war das Problem folgendes:
Der 4276 Zeichen lange GL Extensions String meiner Grafikkarte wurde automatisch auf 4096 Zeichen gekürzt, das steht ja auch im Log der MP-Version. In diesem gekürzten String hat er alle Extensions gefunden, die er benötigt, also keine Fehler im Renderer oder ähnliches. Die SP-Version versucht aber anscheinend, den ungekürzten String in der Konsole auszugeben. Die Konsole wiederum hat auch wieder ein arbiträres Limit von 4096 Zeichen (MAXPRINTMSG in common.c UND nochmal MAXPRINTMSG vor der Ausgabefunktion selbst in cl_main.c, wtf?), dieses wird allerdings wohl nicht überprüft in der SP-Version und das führt dann zu einem Pufferüberlauf. :)


Anleitung zum Selbstfixen:


cgame > tr_types.h
Zeile 282

Code: Alles auswählen

ersetze
    char extensions_string[4 * MAX_STRING_CHARS];
durch
    char extensions_string[6 * MAX_STRING_CHARS];
ui > ui_main.c
Zeile 2454

Code: Alles auswählen

ersetze
    char buff[4096];
durch
    char buff[6144];
Zeile 2463

Code: Alles auswählen

ersetze
    Q_strncpyz( buff, uiInfo.uiDC.glconfig.extensions_string, 4096 );
durch
    Q_strncpyz( buff, uiInfo.uiDC.glconfig.extensions_string, 6144 );
client/wolf > cl_main.c
Zeile 2242

Code: Alles auswählen

ersetze
#define MAXPRINTMSG 4096
durch
#define MAXPRINTMSG 6144
(kann man evtl. auch löschen?)

qcommon/wolf > common.c
Zeile 35

Code: Alles auswählen

ersetze
#define MAXPRINTMSG 4096
durch
#define MAXPRINTMSG 6144

Falls jemand dasselbe Problem hat und keinen Nerv bzw. die Möglichkeit hat, den Quellcode selbst zu ändern, hier ein Download-Link zu meinen Fixes. Einfach ins RTCW-Verzeichnis entpacken (vorher Backups von WolfSP.exe, uix86.dll, cgamex86.dll und qagamex86.dll anlegen!). Ja, die exe-Datei hat kein Symbol mehr. Keine Ahnung, wie man das mit reinbekommt. :/ Wer mir nicht vertraut und Viren vermutet o.Ä. kann ja gerne selbst den Quellcode fixen, Anleitung steht da. :)
Ich übernehme keine Verantwortung für etwaige Abstürze oder sonstige Schäden, etc. pp. ;)
http://www.imagenetz.de/fbf4f0a9d/RTCW_ ... x.zip.html


Edit4: Weiß jemand zufällig, an wen ich mich genau wenden sollte für einen etwaigen Patch 1.41c oder 1.42? ;) Wäre toll, wenn das von offizieller Seite gefixt werden würde. Dieses Problem sollte allgemein sämtliche aktuellen Grafikkarten betreffen, was schon relativ krass ist. :roll:
Benutzeravatar
WoodSTokk
Helpdesk
Helpdesk
Beiträge: 2634
Registriert: Fr 6. Dez 2002, 03:09
Wohnort: Wien/Österreich/Europa/Erde
Alter: 53

Beitrag von WoodSTokk »

Naja, ich würd sagen bei idSoft oder in deren Forum hinterlegen.

mfG WoodSTokk
Du scheisst es nicht zu wetzen
Testserver: @peStable (95.129.206.243:27960)
Antworten