Themabewertung:
  • 5 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Reverse Engineering der NLT
Schicksalsklinge in 64bit?

Mit dieser Nachricht würden wir es auf die großen Spielenewsportale schaffen:

"Schicksalklinge von 1992 jetzt in 64Bit!
Ein einzelner Enthusiast schafft ganz allein die Potierung eines Spieles in 64Bit - noch vor ArmA 3!"

:D
(23.12.2016, 15:47)Obi-Wahn schrieb: Kann ich jetzt mit dem entsprechenden Startbefehl Schick ohne CD spielen?
Genau so ist es.
Innerhalb von DOSBox muss aber ein CD-Rom Laufwerk existieren, z.B. ein Physikalisches oder irgendein anderes gemountetes Image.


(23.12.2016, 15:47)Obi-Wahn schrieb: Es gibt neue Änderungen im Git-Repo, aber noch kein Changelog hier. Kann ich einen neuen Build bauen?

Ja, aber Released wird erst am 24.12.2016! Dann gibts auch den Changelog. :D

(23.12.2016, 18:23)Rabenaas schrieb: Mit einer 64bit-Version könnte man sich aber in Zukunft uU das 32bit-Subsystem ganz sparen. Mach für mich aber gerade eh keinen Unterschied.

BrightEyes wird auch als 64-bit Version funktionieren.
Das macht es ja jetzt schon.
Aber alle Werte in den Spielständen sind höchstens 32bit und vom DSA-System werden auch keine größeren Zahlen gebraucht.

Da SCHICK, ziemlich effizient, in C geschrieben wurde läuft es auch so schon sehr flott.
Einige Geschwindigkeitsverbesserungsvorschläge habe ich schon noch, aber ich glaube nicht, dass diese spürbar sind.

(23.12.2016, 19:28)Wetzer schrieb: Schicksalsklinge in 64bit?

Mit dieser Nachricht würden wir es auf die großen Spielenewsportale schaffen:

"Schicksalklinge von 1992 jetzt in 64Bit!
Ein einzelner Enthusiast schäfft ganz allein die Potierung eines Spieles in 64Bit - noch vor ArmA 3!"

:D
Eines 16-bit Spieles! :D
:xmas::xmas::xmas: Weihnachtsrelease :xmas::xmas::xmas:


Phase 1 nähert sich dem Ende

Es wurden alle fehlenden Dungeons ersetzt, die Herberge, die Spinnenhöhle und die Orkhöhle.
Das bedeutet, dass der wesentliche Teil des Spiels komplett nachgebaut ist.
Was noch fehlt sind der Code und die Daten für die Audio-CD-Steuerung.

Beim Start des Spiels wird die main()-Funktion aufgerufen.
Nach der Auswahl des Spielstandes, wird von main() die Funktion game_loop() ausgeführt,
welche die spielrelevanten Ereignisse abfragt und behandelt.
Diese wird jetzt nativ ausgeführt. :jippie:

Wenn der Audio-CD-Code vorhanden ist, kann dann direkt der Aufruf der main()-Funktion abgefangen werden
und das komplette Spiel läuft nativ mit dem nachgebauten Code, von ein paar Low-Level-Funktionen abgesehen.


Ersetzte Funktionen (Segmente sind komplett identisch):
  • seg078: Dungeon: Herberge
  • seg079: Dungeon: Spinnenhöhle
  • seg083: Dungeon: Orkhöhle

Original-Bugfix:
  • Dungeon: Mine Oberorken: fehlender Text aus der Englischen Version übersetzt und eingefügt (Naturgemälde)
  • Dungeon: Totenschiff: die aktuelle Gruppe bekommt die versprochenen 10 AP aus der Rätselkiste
  • Spielende: Helden die permenenten LE-Schaden durch Verdursten hatten, werden vollständig geheilt

TODO-Liste:
  • Audio-CD Steuerung (12 Funktionen)

Wie geht es danach weiter?
  • Mit dem Compiler eine neue SCHICKM.EXE bauen, welche bis auf wenige Ausnahmen, identisch mit der deutschen CD-Version von SCHICK sein sollte (der ultimative Beweis für die Äquivalenz von SCHICKM.EXE und BrightEyes)
  • Erneut versuchen die letzten Unterschiede im Code auszumerzen.
  • Ersetzen von Hex-Werten in Symbolnamen für Zugriffe aufs Datensegment
  • Original-Bugs fixen, fixen, fixen

Statistik:

Es sind 1225 von 1237 Funktionen nachgebaut (99,03%).
Davon sind 1221 identisch mit dem Originalcode.
Nach Byte-Metrik sind schon 96,55% (korrigiert) fertig.


Viele Spaß beim Testen,
HenneNWH
:xmas::xmas::xmas: Neue Version vom 24.12.2016! :xmas::xmas::xmas:

Hier die Übersicht, die Henne erstellt hat: https://bright-eyes.obiwahn.de/Bright-Eyes/details.html
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
:jippie: :jippie: :jippie: Weihnachtsgeschenk, Weihnachtsgeschenk. Danke Henne. :jippie: :jippie: :jippie:

(Was ist eigentlich Phase 2? :think: )
Erst einmal: Wow! Was für eine Leistung! Die ganze Zeit hartnäckig am Ball geblieben. Respekt.


Jetzt zu meinen Fragen als Semi-Programmier-Laie:

(24.12.2016, 15:01)HenneNWH schrieb: Wenn der Audio-CD-Code vorhanden ist, kann dann direkt der Aufruf der main()-Funktion abgefangen werden
und das komplette Spiel läuft nativ mit dem nachgebauten Code, von ein paar Low-Level-Funktionen abgesehen.


Wie ist das zu verstehen? Was sind das für Low-Level-Funktionen? Heißt dass dann, dass du wenn du auch die restlichen CD-Funktionen nachgebaut hast, trotzdem noch DosBox-Code benötigst?

Unterstützt die native Compilierung (in meiner Verständniswelt ist das eine unter Windows laufähige Schick.exe) überhaupt die CD-Funktion (wahrscheinlich schon)?

Gibt es Pläne (das muss dann wahrscheinlich ein anderer als Henne sein), den Code in C zu konvertieren?

Was ist Phase 2? Wenn es Sternenschweif ist, müsste da nicht viel Code identisch sein? Außerdem gibt es da nicht auch noch die Sourcen?

Was sagt eigentlich Guido dazu?

Und: Wann ist mit der 64Bit-Version zu rechnen? :D
Ganz große Klasse und ein wunderbares Weihnachtsgeschenk. :thx:

(24.12.2016, 15:01)HenneNWH schrieb: Wie geht es danach weiter?
  • [...]
  • Ersetzen von Hex-Werten in Symbolnamen für Zugriffe aufs Datensegment
  • [...]

Ich versuche, dafür in nächster Zeit mal etwas Zeit zu finden. Tatsächlich fehlen leider noch ca. 55% der Symbolnamen (über 800). Aber jetzt, wo der Code komplett ist, stehen die Chancen eigentlich ganz gut, dass einige Variablen etwas weniger rätselhaft rüberkommen.
Großartige Leistung und vielen Dank für das Weihnachtsgeschenk!

Liegt damit jetzt eigentlich der "echte" Sourcecode vor, oder gibt es Hinweise darauf (Code-Struktur, etc.), ob die einzelnen Spiel-Ereignisse damals zunächst geskriptet wurden und dann mittels eines Tools (Precompiler) in Borland-Code umgewandelt wurde? Heutzutage ist Skripten ja üblich, damit Questschreiber nicht zwingend Programmierer sein müssen.

Wünsche allen fröhliche Feiertage weiterhin! :xmas:
(25.12.2016, 11:21)Metibor schrieb: ...oder gibt es Hinweise darauf (Code-Struktur, etc.), ob die einzelnen Spiel-Ereignisse damals zunächst geskriptet wurden und dann mittels eines Tools (Precompiler) in Borland-Code umgewandelt wurde?

Also ich würde "nein" vermuten, weil:

* Die Programmierung sehr "handgecrafted" anmutet (musste auch, da die HW-Resourcen sehr begrenzt waren).
* Teile des Codes von mindestens 1990 stammen (ich glaube nicht an die Geschichte, dass in "Schick" kein Stück Code von "Spirit" drin steckt - zumindest die Datenstruktur hat Parallelen). LUA zum Vergeleich wurde erst 1993 veröffentlicht.
* Die Ereignisse in Schick sind ja auch nicht sonderlich komplex. In Dungeon löst man Ereignisse durch überlaufen von Feldern aus. Die Kartensuche ist wohl das komplexeste in Schick, was Ereignisse angeht. Das Verwenden von Script-Tools dafür wäre wohl mit Kanonen auf Spatzen schießen.
* Ereignisse hardcoded in der .exe stehen.
* Schick funktioniert eher wie ein Brettspiel mit Rundenweise ziehen. Die Zeit läuft in Schick auch in diskreten Schritten, bei der durch "rollen eines Würfels" (der Zufallsgenerator) Ereignisse (im Brettspiel wären das Ereignisskarten) ausgelöst werden. Scriptereignisse implizieren eher "wenn, dann Funktionen". Diese gibt es meiner Meinung nach eher wenige.

Das das Spiel so komplex anmutet, ist wohl eher dem Herzblut der Programmierer/Künstler geschuldet, die viel schmückenden Content "eingewoben" haben. :)
Wimre ist hier irgendwo ein Interview gelinkt, in dem Guido Henkel erklärt, dass in Schick außer Inspiration nichts von Spirit steckt. Natürlich kommen dieselben Programmierer beim Lösen derselben Probleme wahrscheinlich auf dieselbe Lösung.
Ich habe gerade mal die neue Version ausprobiert. Die Cycles kann man beim durch die Stadt laufen auf 20 runterschrauben, aber wenn man einen Bewohner besucht wird es hakelig. Auch das Ab- und Aufblenden frisst Leistung wie auch der Pixel-Übergang zur Reisekarte.
Sylvesterrelease


Phase 1 ist, bis auf 6 hartnäckige Funktionen, zu ende
Es beginnt Phase 2: Das Bauen einer SCHICKM.EXE aus dem Code von Bright-Eyes.


Goar hat wieder einige magische Zahlen ersetzt und den vorhandenen Code lesbarer gemacht.


Es wurde der Code und für die Audio-CD-Steuerung ersetzt.

Beim Start des Spiels wird die main()-Funktion aufgerufen, welche jetzt nativ ausgeführt wird.
EDIT: Wurde rückgängig gemacht, da eventuell keine Musik mehr abgespielt werden kann.

Um die Frage nach den Low-Level-Funktionen zu klären:

Es ist nicht notwendig, den gesamten Code aus der SCHICKM.EXE nachzubauen.
Beispielsweise die Funktionen, die sich in der C-Bibliothek befinden, printf(), strcpy(), usw.
sollten theoretisch portabel sein.

Außerdem ist der Zugriff auf den Hauptspeicher, im RealMode des 80x86,
etwas anders realisiert als bei moderneren Prozessoren.
Der Borland C+ Compiler hat dafür speziellen Code eingefügt,
welcher auf modernen Prozessoren so nicht funktionieren würden.

Um diese Feinheiten soll sich der jeweilige C-Compiler und die C-Bibliothek kümmern.

Es gibt noch zwei relevante Funktionen, welche noch emuliert ausgeführt werden:
Die Interrupthandler für die Maus und Timer.
Die Funktionen die diese beiden aufrufen werden dann wieder nativ ausgeführt.
Das noch zu realisieren ist nicht schwer,
aber auf modernen Betriebssystemen muss das etwas anders implementiert werden.

Ersetzte Funktionen (Segmente sind fast identisch):
  • seg001: Audio-CD

TODO-Liste:
  • Mit dem Compiler eine neue SCHICKM.EXE bauen, welche bis auf wenige Ausnahmen, identisch mit der deutschen CD-Version von SCHICK sein sollte (der ultimative Beweis für die Äquivalenz von SCHICKM.EXE und BrightEyes)
  • Herausfinden warum die Bytemetrik noch nocht bei 100% ist.
  • Erneut versuchen die letzten Unterschiede im Code auszumerzen.
  • Ersetzen von Hex-Werten in Symbolnamen für Zugriffe aufs Datensegment
  • Original-Bugs fixen, fixen, fixen

Statistik:

Es sind 1237 von 1237 Funktionen nachgebaut (100%).
Davon sind 1231 identisch mit dem Originalcode.
Nach Byte-Metrik sind schon 96,88% (korrigiert) fertig.

Viele Spaß beim Testen,
HenneNWH
Ich habe soeben die neue Version getestet und zwei Dinge sind mir sofort aufgefallen:
- CD-Audio funktioniert nicht mehr (nur bei Mac?)
- der Schwierigkeitsgrad ist nicht mehr wählbar und Standardeinstellung ist wohl "Anfänger"

Das kompilieren unter Mac OS funktioniert seit 10.12. übrigens problemlos.
Danke für die Rückmeldung.

Den Bug mit dem Schwierigkeitsgrad hab ich gerade gefixt.
Dass das Kompilieren klappt freut mich, aber das mit der Audio-CD wundert mich.
(Das hilft dir jetzt nicht, aber bei mir funktioniert es (Debian x86_64, WinXP in VirtualBox)).

Ich hab aber eine Vermutung:
Spielst Du mit der Version von JoWood? Dort waren keine Audio-CD Daten dabei.
Der Bugfix von mir in der SCHICKM.EXE hat dann die MIDI-Variante des Sounds freigeschalten.
Ich vermute, dass dieser Fix jetzt nicht mehr funktioniert und deshalb keine Musik mehr kommt.

Kannst Du das bestätigen? Werden die normalen Sounds abgespielt (Mausklick)?
Wenn der Sound funktioniert und die Musik nicht,
wäre es schön wenn du mal mit "git bisect" den _faulen_ Commit suchen könntest.

Ich schalte jetzt den Bypass für schick_main() erstmal wieder ab, bis ich das mit der JoWood Version getestet haben.
Eine Idee hab ich schon. :)
Sorry, mein Fehler: Ich habe die *.bin gemounted anstatt *.cue. Somit wurden die Audio-Tracks nicht geladen. Der Sound hat natürlich funktioniert. - Ich nutze ein Image der Original-CD von 1993.

Die Aktivierung der Midi-Musik wäre dennoch eine fein Sache.

Die Schwierigkeitsgradauswahl funktioniert nach der letzten Aktualisierung auch wieder.
(31.12.2016, 00:04)HenneNWH schrieb: Es sind 1237 von 1237 Funktionen nachgebaut (100%).

:respect: :thx:
(31.12.2016, 15:59)uxl schrieb: Sorry, mein Fehler: Ich habe die *.bin gemounted anstatt *.cue. Somit wurden die Audio-Tracks nicht geladen. Der Sound hat natürlich funktioniert. - Ich nutze ein Image der Original-CD von 1993.

Die Aktivierung der Midi-Musik wäre dennoch eine fein Sache.

Die Schwierigkeitsgradauswahl funktioniert nach der letzten Aktualisierung auch wieder.
Dann ist ja alles gut!


(31.12.2016, 17:33)Rabenaas schrieb:
(31.12.2016, 00:04)HenneNWH schrieb: Es sind 1237 von 1237 Funktionen nachgebaut (100%).

:respect: :thx:

:wave::sleep:
Neue Version vom 01.01.2017!
Hier die Übersicht, die Henne erstellt hat: https://bright-eyes.obiwahn.de/Bright-Eyes/details.html
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
Mh. Die Größe der Zip-Datei vom 24.12.16 scheint, was ihre Größe betrifft, etwas aus der Reihe zu fallen. Ist mir nur so aufgefallen.
Toll! Respekt an Dich und Deine Arbeit, Henne!
Bin gespannt, wie es weitergeht :)




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