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:
Falls ich mein Tool nicht falsch benutzt habe, ist der Speicherbereich bei 0x685F564E übrigens leer.Die Anweisung in "0x685f564e" verweist auf Speicher in "0x685f564e". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

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:
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)...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
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:
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?[...]
^3WARNNING: GL extensions string too long (4276), truncated to 4096
Initializing OpenGL extensions
[...]

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
Code: Alles auswählen
char extensions_string[MAX_STRING_CHARS * 4]; // TTimo - bumping, some cards have a big extension string
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.

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];
Zeile 2454
Code: Alles auswählen
ersetze
char buff[4096];
durch
char buff[6144];
Code: Alles auswählen
ersetze
Q_strncpyz( buff, uiInfo.uiDC.glconfig.extensions_string, 4096 );
durch
Q_strncpyz( buff, uiInfo.uiDC.glconfig.extensions_string, 6144 );
Zeile 2242
Code: Alles auswählen
ersetze
#define MAXPRINTMSG 4096
durch
#define MAXPRINTMSG 6144
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?

