Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DOSBox-Patch für Schicksalsklinge
#21
Hi!

Erstmal danke an Hendrik, für den tollen Patch. Der Patch (und Drakensang) hat mein Interesse an diesem Projekt wieder geweckt und hat mich auf eine neue Herangehensweise gebracht.

Achtung, jetzt wirds technisch:
Die SCHICKM.EXE enthält C-Library Funktionen wie z.B. memset() die, egal unter welchem OS, immer die gleich Aufgabe haben.
Meine Idee ist nun, anstatt jedes memset() teuer von DOSBox emulieren zu lassen, es stadtdessen durch das memset() der C-Library auf dem eigenen System zu ersetzen und den Funktionsaufruf an entsprechender Stelle zu überspringen.

Das würde, wenn es für alle C-Funktionen gemacht würde, folgende Vorteile haben:
  1. einen netten Geschwindigkeitsvorteil bringen
  2. Codeteile aus dem DOS-Binary könnten nach und nach in C übertragen werden und
  3. DSA1 wäre in jeder Stufe der Entwicklung spielbar

Es wäre z.B. auch möglich die SCHICK.DAT in einen Puffer zu laden und bei Dateioperationen nur aus diesem Puffer zu lesen, anstatt die Festplatte jedesmal zu bemühen. (Green-IT). :D

Ein Nachteil wäre, dass es nur Leute aktiv mitmachen können, die DOS und x86-16-bit-Assembler beherrschen und Wohnungen durchs Schlüsselloch tapezieren.

Was hälste denn davon?
Zitieren
#22
(07.08.2008, 17:33)Hendrik schrieb: Die neue Version befindet sich als Patch im SVN-Repository und als vorcompilierte Windows-Binary hier.

Hallo zusammen!

Bin zwar schon lange passiver Leser in diesem Forum, aber jetzt hab ich doch mal eine Bitte:
Hab gerade - nach Drakensang Enttaeuschung - mal wieder Die Schicklsalsklinge angeworfen und finde die Idee, mir dabei die Probenwuerfe anzeigen zu lassen sehr spannend.

Leider funktioniert keiner der externen Downloadlinks mehr, da wohl zu selten etwas herunter geladen wird. Koennte einer von Euch Hendriks Patch noch mal irgendwo hochladen?

Waere absolut super!

Vielen Dank im Voraus! Gruss!-Haplo
______ ______ ______ ______

"I need plenty of rest, in case tomorrow is a great day. It probably won't be, but if it is, i'll be ready..." - Snoopy
Zitieren
#23
Der Patch müsste auch bei FreeDSA dabei sein: http://freedsa.schattenkind.net/index.php/Herunterladen Ich bin mir aber nicht sicher und kann es gerade nicht überprüfen.
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
Zitieren
#24
(09.01.2009, 11:11)Obi-Wahn schrieb: Der Patch müsste auch bei FreeDSA dabei sein: http://freedsa.schattenkind.net/index.php/Herunterladen

Danke fur die schnelle Antwort, aber im svn gibt es, zumindest soweit ich das sehe, nur einen sourcecode, den man in dosbox hereinpatchen muss (unter linux/cygwin). Ich meinte das vorkompilierte Windows-Binary...

Gruss!-Haplo
______ ______ ______ ______

"I need plenty of rest, in case tomorrow is a great day. It probably won't be, but if it is, i'll be ready..." - Snoopy
Zitieren
#25
Smile 
Hallo Haplo und wilkommen im Forum.:wave:

Der Patch kannst du hier hier runterladen.
Allerdings musst du dazu die Dosbox neu compilieren.
Wenn du nicht weisst wie das geht/was das überhaupt ist, ist das nicht weiter schlimm.

Eventuell hat hier im Forum noch jemand die gepatchte Dosbox.exe oder Hendrik, welcher hier recht oft ist kann sie dir nochmal schicken/als Attachment zum DL anbieten.

Welches Betriebssystem (Win/Linux/OSX) benutzt du eigentlich:frage:

EDIT: Okay, Frage beantwortet! :D
Zitieren
#26
Hallo Haplo, auch von mir ein herzliches Wilkommen im Forum.

Es freut mich, dass weiterhin Interesse an meinem Dosbox-Patch besteht. Die aktuelle Version als Windows-Binary findest du im Anhang.


Angehängte Dateien
.zip   dosbox-hacked-20080807.zip (Größe: 3,59 MB / Downloads: 29)
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#27
(09.01.2009, 17:03)Hendrik schrieb: Es freut mich, dass weiterhin Interesse an meinem Dosbox-Patch besteht. Die aktuelle Version als Windows-Binary findest du im Anhang.

Super! Dankeschön für die prompte Hilfe - das ist wirklich ein absolutes Ausnahmeforum hier!

Werd' ich gleich morgen mal ausprobieren...
______ ______ ______ ______

"I need plenty of rest, in case tomorrow is a great day. It probably won't be, but if it is, i'll be ready..." - Snoopy
Zitieren
#28
(18.12.2008, 19:38)HenneNWH schrieb: Achtung, jetzt wirds technisch:
Die SCHICKM.EXE enthält C-Library Funktionen wie z.B. memset() die, egal unter welchem OS, immer die gleich Aufgabe haben.
Meine Idee ist nun, anstatt jedes memset() teuer von DOSBox emulieren zu lassen, es stadtdessen durch das memset() der C-Library auf dem eigenen System zu ersetzen und den Funktionsaufruf an entsprechender Stelle zu überspringen.

Das würde, wenn es für alle C-Funktionen gemacht würde, folgende Vorteile haben:
  1. einen netten Geschwindigkeitsvorteil bringen
  2. Codeteile aus dem DOS-Binary könnten nach und nach in C übertragen werden und
  3. DSA1 wäre in jeder Stufe der Entwicklung spielbar

Es wäre z.B. auch möglich die SCHICK.DAT in einen Puffer zu laden und bei Dateioperationen nur aus diesem Puffer zu lesen, anstatt die Festplatte jedesmal zu bemühen. (Green-IT). :D

Ein Nachteil wäre, dass es nur Leute aktiv mitmachen können, die DOS und x86-16-bit-Assembler beherrschen und Wohnungen durchs Schlüsselloch tapezieren.

Was hälste denn davon?

Hi HenneNWH,

Entschuldigung, dass ich deinen Beitrag erst jetzt beantworte, ich hatte ihn im vorweihnachtlichen Trubel einfach übersehen.

Die Idee ist bestechend: Man könnte sozusagen stückweise den Code der Schicksalsklinge rekonstruieren, angefangen mit den C-Funktionen und dann nach und nach die einzelnen Funktionen. Und man hätte zu jeden Zeitpunkt eine direkte Kontrollmöglichkeit, ob sich das Spiel immer noch genauso verhält wie zuvor.

Technisch sind dabei natürlich noch einige Fragen offen. Vor allem würde mich interessieren, wie du dir das Überspringen des Originalcodes vorstellst. Der CALL der C-Funktion lässt sich leicht finden, nichts anderes macht ja mein Patch. Aber kann man auch das passende RET so ohne weiteres ermitteln? Es sollte ja reichen, alle CALL-/RET-Aufrufe mitzuzählen und so über die Tiefe des Callstacks das richtige RET zu finden, und dazwischen alle Befehle zu ignorieren. Oder kann es da zu Problemen kommen, wenn z.B. statt eines RET der Callstack direkt manipuliert wird und mittels JMP zurückgesprungen?

Außerdem ist das ein nicht geringer Aufwand. Die SCHICKM.EXE hat laut meinem Debugger (IDA 4.9) knapp 2500 Funktionen, und die müssten am Ende alle irgendwie abgebildet sein. Auch wenn dabei sicherlich viele Trivialitäten sind, ist das ohne Automatisierung kaum zu schaffen, vor allem, da nur wenige Leute sich daran beteiligen könnten.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#29
Toungue 
Es hat mich schon sehr gewundert, dass du auf den Beitrag nicht anspringst. :D

Anyway, ich der Zwischenzeit hatte meinen Patch auch weiterentwickelt und hab dann gemerkt, dass diese Entwicklungsrichtung in einer Sackgasse endet, weil:
  1. Es nicht auf allen Cores funktioniert (deiner hatte nur richtig mit dem Full-Core funktioniert Stichwort: "neal calls", meiner nur mir simple und normal)
  2. Es zu DSA1 V3.02 de spezifisch ist. Es wäre ja schöner wenn sich die Arbeit auch für andere Spiele/Versionen auszahlen würde.
  3. Es müsste viel besser konfigurierbar sein (beim kopilen, beim starten und zur Laufzeit)
  4. Das Verzeichniss src/dos war nicht der richtige Platz dafür. :ironie:

Desswegen hab ich nochmal neu mit dem Patch angefangen um Alles noch viel Besser zu machen.

Angedacht sind 2 Teile: einen Generischen und einen Spielespezifischen.

Der generische Teil, von mir "Customizer" genannt, hakt sich in die DOSBox-CPU und DOS ein und fängt interessante Events ab, z.B. ein Programm wird gestartet.
Der "Customizer" schaut sich dann die EXE-Datei an und versucht mittels ein paar Tests und eines Signaturscanners herauszufinden mit welchem Compiler die Exe erzeugt wurde und wo sich welche Bibliotheksfunktionen befinden.
Danach wir geprüft ob die EXE-Datei bekannt ist. Das geschieht indem sich verschiedene Spiele beim "Customizer" registrieren und z.B. eine MD5-Summe übermitteln. Danach wird das Spiel gestartet.

Der Spielespezifische Teil kann sich bei der Registriation beim "Customizer" in CPU-Befehle einhaken und bei Calls den CPU-Befehl einfach überspringen. Und natürlich die LOG Ausgaben machen, vielleicht Ingame ein Menü anbieten bei dem man einstellen kann was geloggt werden soll und/oder Trainerfunktionen. Denkbar wäre auch eine XMIDI Unterstützung für die deutsche CD-Version. :)
Diverse Gemeinheiten wie solche Callstack-Manipulationen müssten dann auch vom spielespezifischen Teil bearbeitet werden, wobei die DOS-Compiler imho nicht sosehr tricksen. :)

Am "Customizer" und dem Signaturscanner für "Borland C++ 3.1" arbeite ich gerade (mit ersten Erfolgen namens strlen() getvect() und setvect()). Dabei habe ich herrausgefunden, dass "Eye of Beholder 3" auch mit diesem Complier übersetzt wurde. :)
Achja, Sternenschweif natürlich auch. ;)
Übrigens sind einige Signaturen auch mit denen von "Turbo C++ 3.0" identisch, was mir eine Menge Arbeit erspart.

2500 Funktionen bei DSA1 ist natürlich ne ganze Menge, wobei SCHICKM.EXE ja auch Overlays nutzt und das die Zahl verfälschen könnte. Kannst du mal gucken wieviel Funktionen GEN.EXE V1.05 hat? Und kennst du jemanden der "Borland C++ V3.0" hat?
Zitieren
#30
Dein neuer Patch klingt ja fantastisch. Wenn dein Customizer/Signaturscanner sich weiterhin so gut entwickelt, dann ist er ja nicht nur für Schick interessant, sondern für eine ganze Palette von DOS-Spielen verwendbar. So weit hatte ich damals mit meinem Patch gar nicht gedacht. Ich bin schon gespannt auf dein erstes Release.

Einen Borland 3.0-Compiler kann ich dir leider nicht anbieten. Ich habe noch Borland C++ 4.5 (mit Windows-IDE) rumzuliegen, das ist laut Copyright-Hinweis des Compilers von 1994. Das ist das älteste, was ich an C/C++-Compilern rumliegen habe.

Die GEN.EXE besteht laut IDA (die 4.9er Version ist übrigens Freeware und läuft unter wine) aus 324 Funktionen. Die Overlays bei SCHICKM.EXE dürfen übrigens schon mitgezählt sein.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#31
Das ist ja ein sehr nützliches Programm, dieses IDA. Danke für den Tip.

Ich hab mir GEN.EXE auch mal angesehen und festgestellt, dass von den 142 von den 324 Funktionen aus der C-Library (seg000) stammen.
Die werden z.T auch garnicht alle ausgeführt.
Dann ist da noch die Grafikbibliothek (seg005) mit 13 Funktionen, welche ich auch zum Teil verstanden habe.
Und es müssen noch die beiden Entpacker, RLE und PP20(seg004), drin sein.
Hm, das Gro ist in seg002. Das ist in relativ geringer Zeit zu schaffen. :D
Zitieren
#32
Hallo unermüdliche Helferlein!

Ich wollte nur noch mal sagen, dass es absolut super ist, die Schicksalsklinge mit Anzeige der Talentproben, etc zu spielen!

Eine Kleinigkeit haett' ich noch: Gibt es eigentlich eine Möglichkeit die Codepage im DOSbox-Status Window zu ändern, damit man z.B. Schlösser knacken mit korrektem "ö" angezeigt bekommt?
______ ______ ______ ______

"I need plenty of rest, in case tomorrow is a great day. It probably won't be, but if it is, i'll be ready..." - Snoopy
Zitieren
#33
Die Strings mit den Namen von Eigenschaften, Talenten und Zaubern sind in der Datei src/dos/dsa.h definiert. Diese Datei ist UTF-8-codiert. Wenn du die Datei nun in deine favorisierte locale umcodierst, z.B. nach ISO-8859-1 recodierst (unter Linux z.B. mit dem Tool "recode" oder dem Emacs) und neu komplierst, werden die Strings auf der Konsole richtig angezeigt. Alternativ könntest du natürlich die Konsole auf Unicode umstellen, z.B. uxterm benutzen bzw. die Locale auf UTF-8 umstellen (mittels LANG=de_DE.UTF-8), probiert habe ich das aber nicht.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#34
Ähhhh - Danke, denke ich...
Allerdings hab ich hier Windows und dachte eher an einen DOSbox-Parameter, oder so... ;)

P.S.: Dein nlt-entpacker funktioniert unter Vista x64 übrigens tadellos: Habe mir damit dieses elende Quietschen beim Menu-öffnen und -schliessen rausgepatcht! :)
______ ______ ______ ______

"I need plenty of rest, in case tomorrow is a great day. It probably won't be, but if it is, i'll be ready..." - Snoopy
Zitieren
#35
Ich tue jetzt mal etwas, was ich mir sonst immer strikt verbiete, und stelle eine Frage bevor ich die bisherige Konversation in Gaenze gelesen habe, weil ich einfach zu ungeduldig bin: Funktioniert der patch prinzipiell auch fuer die Generierung (gen.exe) und fuer "Blade of Destiny"? Wenn ja, wie?
Zitieren
#36
@Tera: Nein, tut er nicht. Grundsätzlich muss jedes Binary einzeln überprüft werden, um die zu überwachenden Funktionen zu identifizieren. Das ist ein recht mühsamer und schwieriger Prozess. Deshalb wird im Moment nur die Überwachung der SCHICKM.EXE unterstützt. An Unterstützung für Sternenschweif arbeite ich gerade, Riva ist etwas komplizierter.

Eventuell kann man mit dem allgemeineren Ansatz von HenneNWH später mal das Identifizieren von Funktionen erleichtern, was natürlich ein schnelleres Hinzufügen von überwachten Funktionen ermöglichen würde.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#37
(19.04.2009, 14:31)Hendrik schrieb: @Tera: Nein, tut er nicht. Grundsätzlich muss jedes Binary einzeln überprüft werden, um die zu überwachenden Funktionen zu identifizieren. Das ist ein recht mühsamer und schwieriger Prozess. Deshalb wird im Moment nur die Überwachung der SCHICKM.EXE unterstützt.
Hmmm, ich hatte gehofft, das die BLADE.EXE der SCHICKM.EXE aehnlich genug ist, um von dem patch erfasst zu werden. Ein ganz naiver Ansatz (EXE umbenennen) tut's aber nicht. Als quick-fix habe ich jetzt mal die von Henne gehackte EXE (hier) runtergeladen und meine BLADE.DAT in SCHICK.DAT umbenannt. Erstaunlicherweise funktioniert das so mehr oder weniger, inklusive patch, obwohl ich wahrscheinlich schnell genug ueber bugs stolpern werde. Immerhin hab' ich jetzt zum ersten Mal RoA mit Kopierschutzabfrage zu sehen bekommen... :P
Zitieren
#38
Hallo Hendrik,

gilt das hier
Zitat:In der dosbox.conf muss unter der Gruppe [cpu] core=full eingestellt werden, sonst werden nicht alle Sprünge angezeigt.
noch fuer die aktuelle Version? Wird in diesem thread nicht erwaehnt, soweit ich sehen kann. :frage:
Zitieren
#39
Ja, das gilt nach wie vor. Insofern ist es gut, dass du die Frage hier noch mal stellst. Und weil's so wichtig ist, hebe ich es nochmal hervor. Der Patch basiert darauf, dass die einzelnen Maschinenbefehle, die Dosbox emuliert, abgefangen werden. Das klappt nur, wenn die Befehle tatsächlich emuliert werden und nicht einfach direkt vom Prozessor ausgeführt. Also muss weiterhin in der dosbox.conf eingestellt werden:
Code:
[cpu]
core=full
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#40
(04.05.2009, 12:07)Hendrik schrieb: Insofern ist es gut, dass du die Frage hier noch mal stellst.
:thx: Genau, das war der Hauptgrund fuer die Frage meinerseits. ;)

Der Vollstaendigkeit halber: Voreingestellt ist "normal", generell muss also die .conf editiert werden.

ps: Vielleicht waere es fuer die Uebersichtlichkeit gut, diese Info und die aktuelle Version (Post #26?) in den OP zu editieren, wenn sich ein Mod bereitfindet...
Zitieren




Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste