Crystals-DSA-Foren

Normale Version: Reverse Engineering der NLT
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ja, allerdings etwas unregelmäßig. Manchmal hat jemand einen Motivationsschub, und andere werden mitgezogen, und manchmal ist auch Pause. Insgesamt kommt die Sache aber schon voran.
Hallo miteinander, :wave:

es gibt eine aktuelle Ankündigung im Entwickler-Blog.
Zitat:~8% der Programmteile des Originalspiels durch Eigene ersetzt
:shock::ok: Ich bin wirklich gespannt auf das Ergebnis.
Klasse, HenneNWH! Das hört sich sehr vielversprechend an. Ich kanns kaum erwarten, deinen Patch auszuprobieren und ein wenig im Code zu stöbern.

Ganz untätig war ich übrigens auch nicht: Ich habe das .BOB-Format von DSA2/3 zum Teil entschlüsselt, welches (ähnlich wie .ACE) zur Darstellung von Animationen dient (div. Zwischensequenzen, die Bilder in besonderen Gebäuden u.s.w.). Was noch fehlt, ist die genaue Steuerung des Animationsablaufes, aber da komme ich auch noch hinter.
Den Zwölfen zum Gruße!

(11.11.2010, 10:06)HenneNWH schrieb: [ -> ]Hallo miteinander, :wave:

es gibt eine aktuelle Ankündigung im Entwickler-Blog.

Ganz großes Kino! Nur weiter so, ich lese das gespannt mit. Leider habe ich zuwenig Zeit und Energie, um da großartig mitzumischen.
Hello again, :wave:

es gibt wieder eine aktuelle Ankündigung im Entwickler-Blog.

Diese teilt euch mit wie ihr an die Quellen kommt und sie unter Linux/BSD zusammenbaut.
Für Hilfe bei den MacOS und Windows-Builds wäre ich sehr dankbar.

LG Henne

Edit: Für Fragen bin ich ab Montag wieder erreichbar. Schönes WE.
Werde ich mir mal angucken, aber leider "nur" die Linux-Version. :D

Edit: Schick läuft tadellos. Man keinen Unterschied zu der "normalen" Version erkennen, oder?
Hallo,

im Anhang befindet sich ein inoffizieller Build für Windows.
Eine kleine Anleitung für Jowood-Benutzer (allen Anderen trau ich das alleine zu ;) ):
Eine Sicherheitskopie der Datei dosbox.exe aus C:\Programme\JoWood\Schicksalsklinge - Teil 1\Dosbox-0.72\
erstellen.
Danach die dosbox.exe aus dem Anhang nach C:\Programme\JoWood\Schicksalsklinge - Teil 1\Dosbox-0.72\ kopieren.

Spiel starten, Spass haben.

(20.11.2010, 20:20)Obi-Wahn schrieb: [ -> ]Edit: Schick läuft tadellos. Man keinen Unterschied zu der "normalen" Version erkennen, oder?

Doch. Es müssen auf jeden Fall die Logmeldungen im "DOSBox Status Window" erscheinen.
Soetwas wie "random(100) = " oder "Location betreten: Tempel"
Wenn sie das nicht tun hast du wahrscheinlich die DOSBox von deinem System genommen.

Btw: In der dosbox.conf sollte core=auto sein.
Dann werden noch mehr Programmteile ersetzt. "core=dynamic" geht aber auch.
Hab ich das jetzt richtig verstanden, dass es sich hierbei um eine Linux oder Mac Version von Schicksalsklinge handelt, oder soll daraus eine neue Schicksalsklingen Version werden?
Äh, nein. Henne hat Teile des Originalprogramms nachprogrammiert, und in direkt in die DosBox eingebaut. Dadurch müssen die besagten Teile nicht mehr aufwändig in DosBox emuliert werden, sondern kaufen direkt auf der Hardware. Das ist dann wesentlich ressourcenschonender.

Falls jemand, also Henne, jetzt noch die restlichen Teile nachprogrammiert, dann hat man allerdings eine vollständige Schick für Linux, Win und Mac.
(24.11.2010, 22:53)Rabenaas schrieb: [ -> ]Falls jemand, also Henne, jetzt noch die restlichen Teile nachprogrammiert, dann hat man allerdings eine vollständige Schick für Linux, Win und Mac.
Wie genau läuft das eigentlich? Kann man einfach gewisse Funktionen ersetzen oder muss man sich bestimmte "Funktionen-Pakete" vornehmen? Oder muss man das gesamte Programm in einem Rutsch neu programmieren?
(25.11.2010, 07:19)thEClaw schrieb: [ -> ]Oder muss man das gesamte Programm in einem Rutsch neu programmieren?
Das nun gerade nicht, wie Hennes und Hendriks DosBox-Patches zeigen. ;)
(25.11.2010, 09:43)Rabenaas schrieb: [ -> ]
(25.11.2010, 07:19)thEClaw schrieb: [ -> ]Oder muss man das gesamte Programm in einem Rutsch neu programmieren?
Das nun gerade nicht, wie Hennes und Hendriks DosBox-Patches zeigen. ;)
Danke für die ausführlichen Infos, jetzt bin ich vieeel schlauer :P ;).
Man muss dabei schon etwas planen.

Ich habe mit Funktionen angefangen, die keine anderen Funktionen aufrufen ,
z.B. random_schick() ändert nur eine Variable im Datensegment.
Danach kann ich z.B. alle Funktionen ersetzen die nur random_schick() aufrufen.
Der Clou ist, dass ich jetzt random_schick() direkt aufrufen kann, ohne den Umweg über die langsame DOSBox-CPU zu nehmen.

Und so geht es Schritt für Schritt...

laut meiner Rechnung bin ich jetzt bei 9,74% aller Funktionen.
Du beginnst das ganze also von unten aufzurollen, richtig (bis du irgendwann in der int main ankommst ;))?

Wie funktioniert das mit den übergebenen und/oder zurückgegebenen Variablen? Musst du die gezielt in den Speicher schreiben bzw. auslesen? Das würde ein späteres Code-Puzzlespiel vermutlich erschweren.

EDIT: Meinst du 9,74% aller Funktionen die Codemenge (in Zeilen) oder die Anzahl der Funktionen?
(25.11.2010, 16:06)thEClaw schrieb: [ -> ]Du beginnst das ganze also von unten aufzurollen, richtig (bis du irgendwann in der int main ankommst ;))?

Genau so! :D

(25.11.2010, 16:06)thEClaw schrieb: [ -> ]Wie funktioniert das mit den übergebenen und/oder zurückgegebenen Variablen?

Das Übergeben der Werte passiert über den Stack.
Die Werte werden mit CPU_Pop() vom Stack geholt. Bei C-Programmen, wie der NLT, müssen wir sie mit CPU_Push() wieder zurücktun. Diese werden an die Ersatzfunktion übergeben und evtl. umgewandelt (Zeiger).

Wenn die Funktion einen Rückgabewert hat, so kommt dieser ins Register AX (8/16Bit Wert) oder in Registerpaar DX:AX.

Dann kann die Kontrolle an die DOSBox-CPU zurückgegeben werden.
Für diese sah es dann aus als wäre nur ein einziger (etwas umfangreicherer) Befehl ausgeführt worden.

(25.11.2010, 16:06)thEClaw schrieb: [ -> ]Musst du die gezielt in den Speicher schreiben bzw. auslesen? Das würde ein späteres Code-Puzzlespiel vermutlich erschweren.

Kurze Antwort: Ja.

Lange Antwort:

Die globalen Variablen liegen in einem besonderen Bereich, dem Datensegment.
Die Ersatzfunktionen müssen Werte in diesem Datensegment lesen und ändern, da das Spiel, sonst durcheinander kommt.

z.B. ein

char c = 'a';

ist dann soetwas wie

ds_writeb(0x1234, 'a');

Das sieht zwar nicht schön aus, ist aber so. :sad2:

Wenn der ganze Code rekonstruiert ist (~100%), kann ich dann die Variablen interpretieren und char von struct foo[20].c trennen.

Aber das ist erst der nächste große Schritt. :)


(25.11.2010, 16:06)thEClaw schrieb: [ -> ]EDIT: Meinst du 9,74% aller Funktionen die Codemenge (in Zeilen) oder die Anzahl der Funktionen?

Damit meine ich die Anzahl der Funktionen. Es gibt Einige die nur eine andere Funktion aufrufen oder Andere die sehr, sehr lang sind.
Dungeonhandler zu Beispiel, die eine riesengroße switch-Anweisung sind.
Damit habe ich mir ein Maß geschaffen um meinen Fortschritt zu messen, wenn auch ein ungenaues.
Also wenn ihr noch ein bissi Extracontent einbauen wollt, ich würde mich gerne anbieten für Dialoge, Grafiken und Gegenstände. Mir fehlen z.b. komplett die Armreife in Sternenschweif, es gibt zwar Slots für diese Gegenstände, aber man kann keine Armreife finden. In Schicksalsklinge könnte man auch viele Sachen noch verbessern, vor allem halt auch das Inventar und Gegenstände die die Wiederspielbarkeit erhöhen... Die sind ja zum Glück nur in ein paar ganz wenige Variablen gefasst, sollte denke ich nicht das größte Problem sein :) Aber wenn ich alle meine Wünsche aufzähle... dauert das sicher ewig... *gg* Würde aber wie gesagt im Kreativbereich mitmachen, wenn das kein Problem sein sollte. Von Dos Disassembling hab ich leider absolut keine Ahnung.
Das ist Super!

Wobei das aber sicher noch ne Weile dauern wird. ;)
Es wäre allerdings schön, wenn Du dich im FreeDSA-Wiki anmeldest und ne Wunschliste mit deinen Wünschen anlegst.
Dann geraten sie nicht in Vergessenheit, sind an einem Fleck und wir können hier im Forum darüber diskutieren.

Mir persönlich liegt die Authentizität des Spiels sehr am Herzen, weswegen ich kein Freund von achtarmigen 3m Zwerge mit 2 Rüstungen bin,
aber auch ich denke dass z.B. eine Questliste ein guter Ersatz für das wenig nützliche Reisetagebuch wäre.

Anyway, ab ins Wiki damit. Denn eine schlechte Idee ist (in diesem Fall) besser als eine Vergessene.
Aber hallo... Ich habe wie besessen damals das 4er Regelwerk reingefressen. Es gab für mich nichts schlimmeres als Krieger die die Müde lächelnd in ne Horde Orks laufen konnten einfach weil ihr Level und ihre Lebenspunkte nach 3er Regelwerk das zugelassen haben. :lol: Naja mit dem Jahr des Feuers und wechsel zu Ulysses wars dann sowieso aus... diese powergaming Welt ist nicht mehr das alte, mehr mystisch als magische DSA, dass ich mal kennengelernt habe. Mit Halbelfen Magiern die noch ne Salasandra haben und Zauber aus beiden Völkern, habe ich grundsätzlich nicht gespielt, ebenso nicht mit Powergamern. Die Ausgefeiltheit der Charaktere und ihre kleinen Macken und Ticks haben das Spiel erst so richtig interessant gemacht, auch einer der Punkte die ich an Drakensang wesentlich mehr mochte, die Interaktionen. In Schicksalsklinge gabs zwar ne Menge Dungeons in der Landschaft, aber leider keine wirklichen Interaktionen der Charaktere, auch die Ausgefeiltheit der Städte war ein bissi zu sehr Einheitsbrei in Schweif wars schon besser und Riva eigentlich garnicht einmal so schlecht. Allerdings finde ich die Story auch zu gradlinig und linear, es gibt kaum versteckten Quests, Stories oder Begebenheiten, die zufällig auftreten. Aber ich werde mal was Texten, mal sehen was mir noch so alles einfällt.
(25.11.2010, 19:34)Sannah schrieb: [ -> ]In Schicksalsklinge gabs zwar ne Menge Dungeons in der Landschaft, aber leider keine wirklichen Interaktionen der Charaktere,
Über ein paar Zauber gibt's - wenn auch noch nicht in Schick - ein Minimum an Heldeninteraktion (Nekropathia, Respondami). Und teilweise (v.a. in Riva fand diese auch in den Textboxen statt. Ansonsten gibt es keine, schon richtig. Ich finde aber auch, das hat seine Vorteile. Dann kann man sich die eigenen Helden so vorstellen, wie sie sind. In Baldur's Gate demgegenüber wurde man ja geradezu in eine Liebesgeschichte mit einem bestimmten NSC hineingedrängt.

Zu den Städten: Richtig, der Ausbau wurde jeweils besser, dafür nahm die Zahl ab. Ich mochte gerade die Begehbarkeit der vielen kleien Orte in Schick. Das gehört zu den Sachen, die ich in Schweif und (insoweit das gesamte Reisen) Riva am meisten vermißt habe.

Gehört hier aber an sich nicht her... dennoch wollte ich es mal kurz angemerkt haben.