Crystals-DSA-Foren

Normale Version: Reverse Engineering der NLT
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ja, wir sind noch dabei, auch wenn ich mich nur sporadisch mit der NLT beschäftigen kann. Zwei Projekte stehen bei mir im Moment an:
1.) Verbessern des DosBox-Patches/Disassemblieren von Schick/Schweif.
Im Moment bin ich noch dabei, die Overlay-Funktion von Sternenschweif zu verstehen. Wenn ich das geschafft habe, werde ich eine neue Version des DosBox-Patches veröffentlichen.
2.) Schreiben eines Konverters für die diversen Grafikformate.
Konzentriert sich zunächst auf die Schicksalsklinge und die verschiedenen Varianten des .NVF-Formates. Was ich möchte, ist ein Werkzeug, mit dem man NVFs in moderne Grafikformate überführen kann und umgekehrt. Später sollen auch die Formate von Sternenschweif und Riva hinzukommen.
Besonders weit bin ich damit noch nicht, da der DosBox-Patch sowie Ausbesserungen am NLT-Packer Vorrang haben.
Was meinst Du mit "Overlay-Funktion"?
EXE-Overlays sind/waren eine Eigenheit von DOS-Programmen. Wenn die Programme zu groß werden und nicht mehr in die 640 kBytes des Hauptspeichers passen, muss der Maschinencode dynamisch ausgetauscht werden. Man hat also ein Hauptprogramm, das ständig im Arbeitsspeicher liegt, und mehrere Overlays. Diese müssen nach Bedarf von der Platte in den Speicher geladen werden, und die dafür zuständige Routine ist die Overlay-Funktion.

Da die Probefunktionen von Sternenschweif in so einem Overlay stecken, und das Segment wird dynamisch vergeben. Da ich aber Segment und Offset zur Identifikation der Funktionen benutze, muss ich dieses Segment irgendwie aus der Overlay-Funktion ermitteln. Die Overlay-Funktion selbst habe ich schon gefunden (oder einen Teil davon), weiß aber noch nicht, wann in welchem Register das Segment festgelegt wird.
Ah ja, verstehe. Geht es um EMS oder XMS? Hast Du schon den entsprechenden int21 gefunden?
Es gibt zwar einen DOS-Interrupt zum Laden von Overlays (INT21, AX=0x4B03), aber der wird soweit ich weiß von Sternenschweif gar nicht benutzt. Wenn ich das richtig verstanden habe, ist der auch für externe Overlays gedacht, die in extra-Dateien stecken. Sternenschweif lädt ja einfach Teile der EXE nach.

Was das Ganze mit EMS/XMS zu tun hat, ist mir gerade nicht klar. Wird denn der Speicherbereich jenseits von 640KB/1MB von DOS überhaupt für Maschinencode genutzt, oder liegen da nur Daten?
Mein Fehler. Es geht bei den EXEs nicht um eine 640kB sondern um eine 64kB-Grenze, laube ich. Daher meine Verwirrung. Die Sache mit den Overlays war mir bislang gar nicht bekannt, aber ich lese das mal nach. :)
So langsam verstehe ich die Angelegenheit. Wird irgendwo 0x4b05 aufgerufen? Dann hat das Programm den Overlay selbst in den Speicher geladen.
Hallo,
ich bin gerade auf der Suche nach den Rohdaten der DSA2+3-Charakterportraits, kann mir da jemand sagen, wo ich die finde? Im FreeDSA-Wiki habe ich nichts herausfinden können, das mir geholfen hätte.
Alternativ gingen auch bmp- oder png-Screenshots, aber die könnte ich zur Not natürlich selbst erstellen.
(01.07.2010, 16:15)thEClaw schrieb: [ -> ]Hallo,
ich bin gerade auf der Suche nach den Rohdaten der DSA2+3-Charakterportraits, kann mir da jemand sagen, wo ich die finde? Im FreeDSA-Wiki habe ich nichts herausfinden können, das mir geholfen hätte.
Alternativ gingen auch bmp- oder png-Screenshots, aber die könnte ich zur Not natürlich selbst erstellen.
Die Portraits finden sich jeweils in der Datei CHEADS.NVF in den Archiven STAR.DAT oder RIVA.ALF im DATA-Unterverzeichnis des entsprechenden Spiels. Die NVF Spezifikation findest du hier.
(01.07.2010, 16:42)Borbaradwurm schrieb: [ -> ]Die Portraits finden sich jeweils in der Datei CHEADS.NVF in den Archiven STAR.DAT oder RIVA.ALF im DATA-Unterverzeichnis des entsprechenden Spiels. Die NVF Spezifikation findest du hier.
Ich danke dir, ich mache mich gleich ans Entpacken :).

PS: Ich habe noch nicht nachgeschaut, aber ich merke es noch vorsorglich an: Ich war auf der Suche nach den Portraits, die für die Heldengenerierung zur Verfügung stehen - ich hoffe, da findet sich auch das richtige.

EDIT: Die STAR.DAT bekomme ich gerade nicht entpackt - muss ich da etwas beachten? Ich nutze nltpack von Hendrik.
Gebe ich die zugehörige STAR.FN an, wird eine unendlich große Datei erstellt (bei 4GB habe ich abgebrochen), bei der STAR.DAT als Ziel bekomme ich in der Konsole die Ausgabe "Creating module directory " gefolgt von drei Sonderzeichen - auch das in einer mehr oder weniger endlosen Schleife, ein Ergebnis erhalte ich jedoch nicht.
@thEClaw:
Auf welcher Platform und mit welcher Version von nltpack hast du denn das Problem?

Bei mir (System: Linux x86_64/nltpack: aktuelle SVN Version) funktioniert das entpacken mit:
"nltpack x STAR.DAT" und "nltpack x RIVA.ALF".


Im SVN ist auch ein Converter von NVF Dateien in TGA Bilder unter /modding/nvf2tga/
mit dem du die Bilder in ein benutzbares Format umwandeln kannst.

CHEADS.NVF sind die normalen Charakterbilder und
CHEADS2.NVF sind die Bilder wenn es den Helden schlecht geht.
Ich habe es bisher nur unter Windows 7 probiert - ich habe mir erstmal eine andere Baustelle gesucht und es noch nicht unter Linux probiert gehabt. Das hole ich jetzt natürlich nach ;).

Der Konverter wäre auch interessant, spart mir vielleicht ein wenig Arbeit. Aber ich werde erstmal schauen, wieweit ich komme, wenn ich das Zeug selbst zerlege (die NVF-Infos im FreeDSA-Wiki scheinen ja sehr gut zu sein).

Ansonsten danke für die Hilfe, hoffentlich klappt jetzt alles :).
Damit es nicht untergeht, ein Doppelpost:
Ich habe das Programm unter Linux mit dem Makefile kompiliert und ausgeführt (nltpack x STAR.DAT). Die Ausgabe in der Konsole sieht dabei der unter Windows extrem ähnlich, allerdings entstehen dabei auch Ordner/Dateien. Nur leider heißen 99% der Ordner "??...c2" (der Mittelteil variiert) und scheinen leer zu sein. Ein paar der Ordner weichen etwas vom Schema ab, es beginnen aber alle mit Fragezeichen.
Von diesen Ordnern gibt es vermutlich einige hundert bis tausend, die Ausgabe per ls hat jedenfalls einige Sekunden gedauert. Eine Datei names "CHEADS.NVF" war auch in keinem der Ordner enthalten, auf weitere habe ich nicht geprüft.

Habe ich hier nur ein Problem mit dem Zeichensatz oder mache ich etwas falsch? Ich nutze übrigens die Version "Beta 1", die hier im Forum zu finden ist.

EDIT:
Falls das zuviele Umstände bereitet, könnte mir auch jemand ganz freundlich die CHEADS.NVF (also die Charakter-Portraits für DSA2 UND 3) per Dateianhang zukommen lassen. Ansonsten bin ich gern bereit, den NLT-Packer unter Anleitung weiter zu strapazieren ;). Ich könnte auch mal einen Blick in den Quelltext werfen, allerdings muss ich dazu erst etwas Motivation finden, das geht nämlich weit über mein eigentliches Ziel hinaus ;).
Hast du mal die SVN-Version von nltpack ausprobiert?
Da könnte das Problem schon gefixt sein.
Alternativ kann ich hiermit eine Beta2 rausgeben.

Ich denke das ist im Sinne von Hendrik.

Modding-Tools für die NLT/Beitrag#40
(05.07.2010, 08:27)HenneNWH schrieb: [ -> ]Hast du mal die SVN-Version von nltpack ausprobiert?
Da könnte das Problem schon gefixt sein.
Alternativ kann ich hiermit eine Beta2 rausgeben.

Ich denke das ist im Sinne von Hendrik.

Modding-Tools für die NLT/Beitrag#40

Nein, die SVN-Version hatte ich nicht getestet - ich dachte, das wäre auch die Beta1. Ich lade mir mal deine verbesserte Version runter, vielleicht brauche ich die noch.
Ansonsten natürlich danke für die Hilfe und deine Mühe.


PS: Ich habe gerade die Beta2 getestet, jetzt entpackt es zumindest unter Windows einwandfrei.

Und wenn ich schonmal dabei bin, gleich noch eine Frage: Finde ich in irgendeiner Datei eine Auflistung der in den Spielen vorhandenen Gegenstände? Ich kenne zwar schon die HEX-Codes der meisten Sachen, aber es gibt ja noch deutlich mehr Informationen zu jedem Gegenstand (z.B. auch das kleine Bild dazu oder Gewicht etc.).
Oder sind diese Sachen in die ausführbare Datei kompiliert?
Eine relativ vollständige Liste der Gegenstände gibts auf der NLT-Hilfe-Seite unter Rubrik "Gegenstände". Ich habe die Bilder damals, soweit ich mir erinnere, auch irgendwie aus den Dateien direkt extrahiert. Aber bitte frag mich nicht wie und aus welcher Datei... Ich müsste zu hause auf dem Desktop-Rechner noch einmal ein bisschen wühlen....
(05.07.2010, 11:29)Obi-Wahn schrieb: [ -> ]Eine relativ vollständige Liste der Gegenstände gibts auf der NLT-Hilfe-Seite unter Rubrik "Gegenstände". Ich habe die Bilder damals, soweit ich mir erinnere, auch irgendwie aus den Dateien direkt extrahiert. Aber bitte frag mich nicht wie und aus welcher Datei... Ich müsste zu hause auf dem Desktop-Rechner noch einmal ein bisschen wühlen....

Die Liste kenne ich schon, ich wäre daran interessiert, die Rohdaten zu sehen. Die Bilder sind mir auch gar nicht so wichtig, die restlichen Daten schon eher. Aber falls vorhanden, würde ich auch die Bilder haben wollen ;).

Ich habe jetzt endlich einen Blick in die CHEADS.NVF-Dateien werfen können. Da die Daten laut FreeDSA komprimiert waren, habe ich mir nicht die Mühe gemacht, sie selbst zu extrahieren, sondern direkt auf den nvf2tga-Konverter zurückgegriffen. Das TGA-Format ist zum Glück äußerst gutmütig und leicht verständlich :).
Was mich allerdings ein wenig wunderte, war die Tatsache, dass die Bilder wieder nur in 32x32 Pixeln vorliegen. Ich habe es nie überprüft, war aber davon ausgeangen, dass die Portraits in DSA2+3 höher aufgelöst wären. Auch die Palette ist nicht viel größer, etwa 160 der verfügbaren 256 Farben sind in den TGA-Dateien als hellgrau (0xfcfcfc) angegeben (sofern das wirklich hellgrau ist :silly:). Warum sehen die Charakter-Bilder in DSA2+3 also soviel besser aus? :confused:
(05.07.2010, 11:22)thEClaw schrieb: [ -> ]PS: Ich habe gerade die Beta2 getestet, jetzt entpackt es zumindest unter Windows einwandfrei.
Das freut mich. Hast du es nicht unter Linux probiert oder funktioniert es da nicht?

(05.07.2010, 11:22)thEClaw schrieb: [ -> ]Und wenn ich schonmal dabei bin, gleich noch eine Frage: Finde ich in irgendeiner Datei eine Auflistung der in den Spielen vorhandenen Gegenstände? Ich kenne zwar schon die HEX-Codes der meisten Sachen, aber es gibt ja noch deutlich mehr Informationen zu jedem Gegenstand (z.B. auch das kleine Bild dazu oder Gewicht etc.).
Oder sind diese Sachen in die ausführbare Datei kompiliert?

Bei DSA2 gibt es die Datei ITEMS.DAT. Auf den ersten Blick würde ich sagen, dass dort die Daten sind die Du suchst.
Jeder Gegenstand hat eine Größe von 14 Byte, was bei einer Dateigrösse von 4942 Bytes 353 Gegenstände ergibt.
In der ITEMS.LTX sind die Namen der Gegenstände und in der ITEMS.NVF sind die Bilder.
Allerdings gibt es nur 278 Bilder, weshalb ich vermute, dass einige verschiedene Gegenstände das gleiche Bild haben.





(05.07.2010, 12:13)thEClaw schrieb: [ -> ]Was mich allerdings ein wenig wunderte, war die Tatsache, dass die Bilder wieder nur in 32x32 Pixeln vorliegen. Ich habe es nie überprüft, war aber davon ausgeangen, dass die Portraits in DSA2+3 höher aufgelöst wären. Auch die Palette ist nicht viel größer, etwa 160 der verfügbaren 256 Farben sind in den TGA-Dateien als hellgrau (0xfcfcfc) angegeben (sofern das wirklich hellgrau ist :silly:). Warum sehen die Charakter-Bilder in DSA2+3 also soviel besser aus? :confused:

Das ist eine gute Frage. :frage:
(05.07.2010, 16:39)HenneNWH schrieb: [ -> ]
(05.07.2010, 12:13)thEClaw schrieb: [ -> ]Was mich allerdings ein wenig wunderte, war die Tatsache, dass die Bilder wieder nur in 32x32 Pixeln vorliegen. Ich habe es nie überprüft, war aber davon ausgeangen, dass die Portraits in DSA2+3 höher aufgelöst wären. Auch die Palette ist nicht viel größer, etwa 160 der verfügbaren 256 Farben sind in den TGA-Dateien als hellgrau (0xfcfcfc) angegeben (sofern das wirklich hellgrau ist :silly:). Warum sehen die Charakter-Bilder in DSA2+3 also soviel besser aus? :confused:
Das ist eine gute Frage. :frage:
Ganz einfach: Die Schicksalsklinge wurde von Attic anfangs noch für Maschinen mit nur 16 bzw. 64 Farben (Atari ST bzw. OCS/ECS-Amiga) entwickelt und das sieht man dem Artwork deutlich an.
Das ergibt durchaus Sinn. :)