Hallo. Ich bin neu hier und eigentlich auch kein richtiger Spieler. Allerdings ist eines der wenigen Spiele die ich alle paar Wochen/Monate mal spiele PG3D. Wesentlich mehr Zeit als PG3D zu spielen verbringe ich damit über die Probleme und Lösungen zum fix der Grafikproblemen zu lesen :). Bis vor kurzem habe ich für mich noch keine zufriedenstellende Lösung gefunden. Dann stieß ich im Web auf ein Projekt (ich glaube es heißt ddhack) das eine Lösung für Wing Commander und andere Spiele zu seien scheint. Leider nicht für PG3D. Aber da ich Softwareentwickler bin und mir gerne mal solche Quellcodes anschaue habe ich mal versucht das Ganze für PG3D anzupassen. Leider habe ich keine Ahnung von OpenGl (oder generell von Grafikprogrammierungdas :)), dass in diesem Projekt verwendet wird und die Umsetzung gefiel mir auch nicht so sehr. Ich war also gezwungen :), weil mir die eigentliche Idee die DirectDraw DLL neu zu implementieren nicht aus dem Kopf ging, so etwas komplett selbst zu programmieren. Mein erster Versuch in OpenGl hat ganz gut funktioniert aber irgendwie fehlt mir bis heute das richtige Verständnis für OpenGl und als ich bei einem Besuch bei meinem Vater (der fast jeden Tag PG3 spielt und ständig Probleme mit Grafik und Abstürzen hat) feststellen musste das auf seinem verbugten PC OpenGl gar nicht funktioniert :), habe ich mich lieber Direct3D zugewannt und den Grafikteil nochmal geschrieben. Nach ein paar Tagen einlesen habe ich das besser verstanden als OpenGl.
So nun habe ich euch mit meinem Geschwafel vermutlich genug genervt :). Ich komme dann mal zum eigentlichen Punkt.
Wie bereits gesagt habe ich eine DLL geschrieben, die die Grafikfunktionen, die PG3D verwendet, in Direct3D umsetzt. Damit sind zumindest bei mir die meisten Grafikprobleme schon mal behoben. Eine Ausnahme bildet der Mauszeiger, der entweder weil ich was falsch gemacht habe oder weil das Spiel nicht immer den alten Mauszeiger übermahlt, manchmal so etwas wie "Geisterbilder" hinterlassen hat. Das Problem habe ich noch nicht ganz gelöst aber den größten Teil konnte ich, indem ich den alten Mauszeiger selbst übermale wenn das Spiel den Zeiger neu zeichnet, beheben. Was mir nicht gefallen hat, ist das in DirectDraw das Seitenverhältnis nicht eingehalten wird. In meiner Implementierung wird das Seitenverhältnis des Bildschirms berücksichtigt und das Spiel, hoffentlich zuverlässig, im Original Seitenverhältnis angezeigt (bei PG3D ist das 4:3). Was ich im Original zumindest nicht so einfach hinbekommen habe, ist einen Screenshot vom Spiel zu machen und weil ich schon immer mal verstehen wollte wie ein Bitmap aufgebaut ist, fängt die DLL den Druck der "Drucken"-Taste jetzt ab und erstellt ein Bitmap im Spielverzeichnis. Der Screenshot ist nach Datum und Uhrzeit benannt um doppelte Namen möglichst zu vermeiden. Die letzte Sache die ich hinzugefügt habe ist ein Fenstermodus. Wenn man im Spiel die F1-Taste drückt erscheint ein Dialog zur Auswahl des Modus. Die Auflösungen sind erst mal fix einprogrammiert und sollten für jede Monitorgröße ausreichen. Im Anhang findet ihr einen meiner Screenshots, den ich allerdings zu einem PNG gewandelt habe, weil das nur halb so groß ist.
Ups ich habe schon wieder so viel geschrieben.
Also bis jetzt habe ich die aktuelle DLL nur auf meinen beiden Rechnern, beide Windows 7 64Bit, einmal mit älterer und einmal mit neuerer NVIDIA Grafik, mit PG3D 1.0 und 1.02, PG2 (UK) 1.02, mit und ohne PG2UK220.EXE, getestet. Ich sehe zumindest momentan keinen Grund warum das Ganze nicht auch unter Windows XP und Windows Vista, 32 Bit oder 64 Bit, laufen sollte. Voraussetzung ist mindestens DirectX 9 (oder zumindest die DirectX 9 DLLS D3D9.DLL, D3DX9_42.DLL und vermutlich D3D8THK.DLL). Wenn ihr Lust habt, würde es mich freuen wenn ihr meine DLL mal ausprobieren könntet und mir ein Feedback gebt. Solltet ihr keine Lust haben und genervt von meinem langen Text sein ignoriert mich bitte oder schimpft mich aus wenn euch das lieber ist :).
PS.: Die DLL liegt auch im Anhang und muss einfach nur in das Spielverzeichnis kopiert werden. Wenn das Spiel damit nicht läuft oder andere Probleme macht einfach die DLL wieder entfernen und das Spiel sollte so laufen wie immer.
du hast dir viel Mühe gemacht, und der Screenshot sieht gut aus. Aber leider hast du die allererste Frage bei der Softwareentwicklung vergessen: Besteht überhaupt ein Bedarf nach (m)einer Lösung?
Die Antwort ist (sorry): nein. 1. Es gibt eigentlich kein nennenswertes Grafikproblem bei der PG2UK220.exe mehr, seit wir DxWnd4PG einsetzen, dass m.E. einem ähnlichen Ansatz wie deinem entstammt. 2. PG2UK220.exe hat eh keine Zukunft mehr; über kurz oder lang werden alle PG-Spieler auf OpenGen umsteigen, das grafikmäßig alles abdeckt.
Hallo Rayydar. Danke für die Antwort. Ich habe mir DxWnd4PG angeschaut und auch andere Lösungen ausprobiert aber wie schon geschrieben hat das alles bei mir nicht so 100% funktioniert. Bei der einen Lösung war das eine Problem behoben, dafür gab es aber ein anderes das dann bei der nächsten behoben war aber nicht mit der ersten Lösung zusammen funktionierte. Was die Frage angeht "Besteht überhaupt ein Bedarf nach (me)iner Lösung?" die hab ich mir schon gestellt und mit JA beantwortet :). Der Sinn des Ganzen für mich ist, hauptsächlich das es für mich funktioniert und es ist eine tolle Programmieraufgabe. Wenn ich ehrlich bin ist es sogar hauptsächlich die Programmierung :), da ich wie schon gesagt nicht besonders häufig spiele. Ich habe die Lösung nur hier ins Forum gestellt, weil es mich interessiert ob das Ganze auch bei anderen funktioniert und weil ich mir gedacht habe vielleicht hat ja jemand doch noch Probleme mit seiner PG3D Installation und meine Lösung funktioniert für ihn zufällig besser als andere. Von daher, sollte wirklich keiner Bedarf haben ist das für mich auch OK. Der Bedarf bei mir ist trotzdem da und wenn es weiter Spaß macht bastle ich noch weiter daran herum. Bezüglich OpenGen. Das ist ein schönes Projekt und ich hoffe es wird mir bald genauso gefallen, darüber zu spielen wie das alte PG3D. Momentan ist das bei mir leider noch nicht der Fall.
Hallo Rayydar ich bin es nochmal. Ich habe mir gerade nochmal DxWnd4PG angeschaut, weil ich nicht mehr genau wusste warum es für mich nicht in Frage kommt. Die Lösung an sich ist toll, was aber bei mir nicht funktioniert ist das Seitenverhältnis (das Bild ist im Fullscreen auf 16:9 verzerrt), die Videos bleiben schwarz und im Fenstermodus wird der Mauszeiger nicht eingefangen. Außerdem hat das Fenster nur eine Größe von 640x480. Das lässt sich bestimmt irgendwie noch durch andere Einstellungen verbessern, aber das selbst Programmieren hat mir mehr Spaß gemacht. Dafür funktioniert der Mauszeiger für mich ein bisschen besser als in meiner Lösung.
Hallo Herbie, programmiertechnische Fingerübungen sind nie verkehrt, umso weniger, wenn es dir und vielleicht ein paar anderen beim Spielen weiterhilft. Um OpenGen werden wir alle aber in Zukunft nicht mehr herumkommen.
erstmal ein Hallo und Danke für deine Arbeit. Es ist immer schön Leute zu finden, die sich noch um unser Spiel kümmern. Sicher gibt es in Einzelfällen auch Bedarf für deine Lösung. Das muss die Zeit zeigen. Für die mittlere bis spätere Zukunft allerdings wird deine Lösung obsoloet werden. Open General ist schon jetzt sehr gut spielbar. Aber ich denke, dass du Luis (http://luis-guzman.com/) sicher deine Hilfe anbieten kannst.
Hallo Ihr beiden. Na dann schauen wir mal ob sich noch jemand meldet dem meine Lösung was bringt. Eure Einschätzung, dass früher oder später die meisten auf Open General umsteigen teile ich. Wahrscheinlich werden auch einige aus verschiedensten Gründen beides spielen. Jedenfalls kann ich das mir für mich so vorstellen. Ob ich Luis meine Hilfe anbiete muss ich mir noch überlegen. Zum einen ist sein Team ja schon recht weit fortgeschritten mit dem Projekt und zum anderen stelle ich mir diese Arbeit wesentlich anstrengender vor als meine DLL . Ich stehe eben darauf alte Microsofttechnik zu verstehen und auseinander zu nehmen. Ich habe schon ein Auge auf die Wing32.dll, ein Vorgänger von DirectX, geworfen. Die wird für Civilization 2 eingesetzt, was allerding auch noch unter Windows 7 64Bit gut läuft . Naja und da ist eben auch noch die DirektDraw DLL die ich hier gepostet habe. Die ist so geschrieben, dass Panzergeneral spezifische Manipulationen wie der Mauszeiger getrennt vom Rest ablaufen, wenn mich also die Lust nicht irgendwann verlässt kann ich daraus auch noch eine generelle Lösung für Spiele die DirektDraw 1-7 nutzen machen. Ob das dann jemand braucht, weiß ich nicht, macht mir aber Spaß .
1. Ist es nicht so, dass neue Icons nur noch im PNG-Format gemacht werden, das wg. der Farbenvielfalt (und weil es 1997 noch nicht existierte) vom UK-Patch gar nicht dargestellt werden kann?
2. Eigentlich war OpenGen doch schon vor Monaten ziemlich fertig. Ich habe nie verstanden, warum Luis noch eine völlig umprogrammierte Version macht und wann die nun fertig sein soll.
1. Also ich mache es wegen der Farbvielfalt. Ansonsten ist es auch einfacher png zu benutzen. Man kann die png-files schon im Spiel nutzen, ohne eine neue Pz2dat zu machen. Frag jetzt nicht wie - habe mich damit noch nicht intensiv beschäftigt. Ich glaube, ohne Gewähr, einfach die png's in den Folder OpenDat packen und dann kann man sie nutzen. In der Suite sieht man sie allerdings nicht. Erst im Spiel. Das ganze hängt dann natürlich auch mit 2. zusammen. Luis schreibt nun völlig neue Dateiformate. Dient dem eigenen Schutz (copyright) und der Vereinfachung. Zum weiteren wird dazu passend auch eine neue Suite gebastelt. Aber frag sicherheitshalber Luis.