Level-/Karteneditor für Historyline 1914-18

  • Zitat

    Request für einen Account ist raus :) Bisher war ich dort noch nicht angemeldet.

    Fein, fein



    Zitat

    Den Aufbau der Daten der Tracks könnte man sich eventuell erschließen, in dem man mal mit DOSBox die Adlib-Ausgabe als RAW speichert und etwas analysiert. Dann hat man ja alles, was an den OPL2 geschrieben wird und kann sich z.B. die erste abgespielte Frequenz aus den Werten für Registern 0xA0 und 0xB0 ziehen und zu Note/Oktave umrechnen.

    Wenn es ein Tracker Format ist, müssten diese Informationen dann ja auch am Anfang von Track 0 stehen. Eventuell aber in einem Byte zusammengefasst oder auch als Midi-Befehle.

    Noch einfacher wäre es, wenn die Tracks auch einfach einen Stream aus Werten für den OPL2 und Timing-Befehlen enthalten, was es in selteneren Fällen ja auch gibt.

    Danke für den Tip mit DOSBox - ich schaue da immer mal wieder drauf - vielleicht kommt was bei raus

  • Habe heute Mittag mit einer Wikiseite angefangen: https://moddingwiki.shikadi.net/wiki/History_Line_1914-1918

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

    Einmal editiert, zuletzt von Dragonsphere ()

  • Hmmmm .... seltsam: Wenn ich mit der Maus über den Link von Dragonsphere gehe, zeigt der Link auf dieses Forum (RE: Level-/Karteneditor für Historyline 1914-18).

    Benutze ich die Zitat-Funktion und gehe mit der Maus dort auf den Link, komme ich auf die gewünschte Seite ....

    Daily Driver: MSI X470 Gaming Plus - Ryzen 7 1700 - 32 GB - Geforce GTX 1060 6GB - 1 TB NVMe SSD - 2 x 1 TB Raid-0 SATA

    Projekt #1: ASI 486-33 - Projekt #2: PC Chips M912 486 VLB - Projekt #3: Biostar MB8500TVX-A Pentium MMX 166 - Projekt #4: ASUS TXP4 K6-III 400 - Projekt #5: Gigabyte GA-6BXDS Dual Slot 1 PIII-650 -

    Projekt #6: ASUS P2B-DS Dual Slot 1 PIII-1000 - Projekt #7: Gigabyte GA-6VXD7 Dual Sockel 370 PIII-1000 - Projekt #8: TYAN S2505T Dual Tualatin 1400

  • Skorbin klappt es jetzt? Ich hatte den Link tatsächlich nur als "Linknamen" drin.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.


  • für alle adl/afx Dateien gilt:


    • die Offsets der Header Komponenten (wo fangen die IDs an usw.) liegen immer am selben Ort - also statisch für Historyline, im Code wird aber der ahdr_data und der imap_data block gezielt ausgelesen - d.h. es könnten variante Größen sein
    • ahdr_data_size ist immer 10
    • imp_data_size ist immer 0
    • adlx_value immer gleich trck_value (einmal big- einmal little-endian)


    ich glaube das der Wert in trck_value irgendeine size ist, komme nur nicht drauf auf welcher Angabe die basiert


    wenn man vom trck_value die trck_data.size abzieht kommt immer 33 oder 34 als Rest raus fuer alle adl/afx Dateien

    in den Daten selber sehe ich aber keine Bezug dazu

  • wenn man vom trck_value die trck_data.size abzieht kommt immer 33 oder 34 als Rest raus fuer alle adl/afx Dateien

    in den Daten selber sehe ich aber keine Bezug dazu

    Die 34 Byte könnten doch die Instrumentdefinition für den jeweilgen Channel/Track sein.

    Rein für die benötigten Register des OPL-2 braucht man mindestens 12 Byte, oft sind es in Instrument-Dateien aber mehr, wenn einzelne Nibble oder sonstige Bit-Bereiche eines Registers in mehreren Byte gespeichert sind.

    Wenn wir mal vom Adlib Visual Composer von Adlib selbst als Standard ausgehen, dann besteht ein Instrument aus mindestens 17 Werten.

    Adlib selbst hat das in den früheren Versionen als Words gespeichert, was mich sehr gewundert hat, als ich mal einen Player für *.ROL/*.MUS geschrieben habe. Da BlueByte ja bei HL aber auch dazu neigte, kleine Zahlen in Words zu speichern, kann das hier aber auch sehr gut passen.

    Und mit 2x17 wären wir genau bei den 34 Byte. Die 33 Byte könnten vielleicht Instrumente für den Percussion Mode sein, da braucht man nicht alle Register.


    AdLib Instrument Format - ModdingWiki

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Zitat

    Die 34 Byte könnten doch die Instrumentdefinition für den jeweilgen Channel/Track sein.

    sorry das hast du falsch verstanden - ich wollte einen Bezug herstellen zwischen diesem trck_value und der Größe der Track Daten - also ob das irgendwie Bezug dazu hat


    daher habe ich einfach mal trck_value - trck_data.size gemacht und kam damit auf die 34 oder 33 - das ist nur die Differenz

  • Ja, ich hatte das erst so verstaden, dass in den Chunks mit "TRCK"-ID tatsächlich 33 oder 34 Byte mehr Daten vorhanden sind, als trck_value vermuten ließe. Da hätte ich dann auf die Instrumentdaten getippt.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Ja, ich hatte das erst so verstaden, dass in den Chunks mit "TRCK"-ID tatsächlich 33 oder 34 Byte mehr Daten vorhanden sind, als trck_value vermuten ließe. Da hätte ich dann auf die Instrumentdaten getippt.

    ne andersrum - das trck_value ist immer 33 oder 34 größer als die echten track_data bytes (bei konstanter header size bis zu den trck_data)

    2 Mal editiert, zuletzt von llm ()

  • aus der Dosbox Doku


    CTRL-ALT-F7 Start/Stop recording of OPL commands. (DRO format)


    das DRO Format scheint direkt aus den Register-Daten zum OPL aufgebaut zu sein - also ganz passend für einen Vergleich

  • Ja, das DRO-Format meinte ich. Jetzt muss man nur bedenken, dass Yamaha ja diese F-Nummern für die Frequenz nutzte....



    Aus:

    Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer

    Written by Vladimir Arnost, QA-Software



    Und aus einem uralten Player von mir habe ich noch diese Funktion, die die aktuell gespielte Frequenz eines Kanals ermittelt:






    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Ergänzend hier auch nochmal die ersten ca. 25 Sekunden der Menümusik als RAW mit RDOS Adlib Catcher gespeichert.

    Das Format ist noch etwas simpler aufgebaut als DRO, da hier die Register direkt mit drin stehen.

    In der Datei wird an Offset 0x144 zum ersten Mal eine Frequenz auf Kanal 0 ausgegeben. Hierfür wird 0xCA an Register 0xA0 und 0x29 an Register 0xB0 geschrieben.


    Binär sieht das dann ja so aus:


    Register 0xA0: 11001010

    Register 0xB0: 00101001


    Gemäß der oben von mir zietierten Abbildung aus dem alten Programmer's guide ergibt das also:


    F-Nummer: 000111001010 (= 458)

    Block: 010 (= 2)


    Die F-Nummern können zwar nicht direkt als Frequenz in Herz gelesen werden, aber die "Blöcke" recht gut als Oktaven. Damit bekommt man dann ja auch die F-Nummern für die Noten:

    Code
    Note          C      C#       D      D#      E       F       F#       G       G#     A       A#       B
    F-number     342     363     385     408     432     458     485     514     544     577     611     647

    Und da haben wir ja auch unsere 458 aus den Daten, direkt in der Mitte. Auf Kanal 0 wird also als erste Note ein F in Oktave 2 gespielt, oder F-2, wie es im Tracker aussehen würde. :)


    Die nächste Note für Kanal 0 dann an Offset 0x2EC, hier werden 0x41 und 0x2A in die Register geschrieben, was F-Nummer 577 und Block 2 ergibt. Also ein A-2.

    Und dann, an Offset 0x458 wieder 0xCA und 0xA0, also wieder ein F-2.


    Für Track 0 sähe also der Anfang eines Pattern etwa so aus:

    A-2

    ......

    F-2

    ......

    A-2


    Jetzt müssen wir die Sequenz nur noch irgendwie in der ADL-Datei wiederfinden....



    Nachtrag:

    Richtig viel los ist auf Kanal 2, also bei den Registern 0xA2 und 0xB2. Die ersten 14 (!) Noten sind hier alle F-3.

    (Einfach mal mit dem Hexeditor nach der Bytefolge "CAA22DB2" suchen).


    Das müsste sich doch auch in der ADL erkennen lassen.

    Dateien

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

    Einmal editiert, zuletzt von Dragonsphere ()

  • Der History Line 1914-1918 Artikel in der Modding Wiki ist jetzt soweit fertig.

    Ich habe in den letzten Tagen nach und nach immer ein bisschen mehr Infos ergänzt und hoffe, ich habe nun alles wesentliche zusammen. Haben hier ja wirklich eine Menge rausbekommen :D

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Der History Line 1914-1918 Artikel in der Modding Wiki ist jetzt soweit fertig.

    Ich habe in den letzten Tagen nach und nach immer ein bisschen mehr Infos ergänzt und hoffe, ich habe nun alles wesentliche zusammen. Haben hier ja wirklich eine Menge rausbekommen :D

    ja, relevante Lücken gibt es kaum noch - dann kommt nur noch ein vollständiges Reverse Engineering als Aufgabe in Frage - falls die Langeweile mal wieder explodiert :)

  • Zitat

    Richtig viel los ist auf Kanal 2, also bei den Registern 0xA2 und 0xB2. Die ersten 14 (!) Noten sind hier alle F-3.

    (Einfach mal mit dem Hexeditor nach der Bytefolge "CAA22DB2" suchen).

    ich hab da bisher nicht so direkt was gefunden - aber möglichweise sind da auch einfach andere Werte dazwischen - kennen mich null mit dem OLP2 aus - also wenig "das kenn ich doch irgendwo her" Momente


    auch bin ich mir nicht sicher welche ADL/AFX Datei abgespielt wird wenn man im Menü ist

    Einmal editiert, zuletzt von llm ()

  • kennen mich null mit dem OLP2 aus - also wenig "das kenn ich doch irgendwo her" Momente

    Ich habe früher gerne damit experimentiert und mir auch Player für einige Formate geschrieben, da ich z.B. nicht auf die vorkompilierte Object-Datei angewiesen sein wollte, die beim HSC-Tracker dabei war.

    Ist alles ewig her, aber ich wusste noch, wo ich die Infos zu den einzelnen Registern finde und habe auch noch meine Quellcodes von vor 20+ Jahren dazu.

    Aber Reverse-Engeneering eines Musik-Dateiformats ist für mich komplettes Neuland :D


    Für alle Interessierten hier die Links zu den von mit genutzten Beschreibungen der OPL-2 (und OPL-3) Register:

    Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer

    Programming the AdLib/Sound Blaster


    auch bin ich mir nicht sicher welche ADL/AFX Datei abgespielt wird wenn man im Menü ist

    Dank der "sprechenden" Dateinamen des Spiels ist das doch ziemlich eindeutig:


    MNU.ADL - Musik im Menü

    MNUHI.ADL - Musik zur Highscoreliste


    Und dann gibt es die drei Stücke, die während des Spiels laufen:

    ONGAME1.ADL

    ONGAME2.ADL

    ONGAME3.ADL


    Die MNU.AFX dürfte die "Soundeffekte" im Menü enthalten, die auch über den Adlib/OPL-2 laufen.

    Deine DLO-Aufnahme dürfte also den Anfang von MNU.ADL enthalten und dann zum Anfang einer der "ONGAME" ADLs wechseln.

    Meine RAW-Aufnahme ist einfach ein etwas längeres Stück von MNU.ADL.



    Die MNU.AFX habe ich mir am Wochenende mal näher angesehen und die ist recht interessant, denn sie enthält die Soundeffekte für das Menü und ist wie eine LIB-Datei aufgebaut:

    Also am Anfang kommt erstmal ein Offset zu einem Index. Hier 01 B4, also Offset 436.

    Und dort finden wir dann genau solche 12-Byte Einträge aus Namen + Offset, wie in den LIB Dateien: Der erste Eintrag ist "BEEP1", beginnend an Offset 4.


    Die Daten sind dann kleine ADL Dateien, was das Format nochmal sehr anschaulich zeigt. Die Effekte dürften ja eigentlich nur aus den Instrumentdaten und vielleicht ein oder zwei Noten bestehen.

    llm , du hattest ja bereits geschrieben, dass hinter den IDs vier Byte mit einer Größenangabe o.ä. folgen, bei unserem BEEP1 blieben so genau 30 Byte Daten über.

    Es ist also sehr wahrscheinlichh, dass die TRCK-Chunks der ADL-Dateien mit den Instrumentdaten beginnen.

    Das lässt sich ja schnell prüfen:

    Hier der Anfang des TRCK Chunks aus der MNU.ADL:

    Code: MNU.ADL
    00000022 54 52 43 4B 02 12 00 00 40 B1 8B 71 11 00 61 40 TRCK....@..q..a@
    00000032 42 15 01 06 41 64                               B...Ad

    Nach der ID + 4 Byte (ab Offset 0x2A) folgen hier also 40 B1 8B 71 11....

    Gucken wir mal in meine RAW Aufnahme HLMNU.RAW:

    Code: HLMNU.RAW
    00000070 03 00 B1 20 8B 40 71 60 11 80 00 E0 61 23 7F 43 ... .@q`....a#.C
    00000080 42 63 15 83 20 01 01 E3 06 C0 7F 43 64 21 DB 41 Bc.. ......Cd!.A

    An Offset 0x72 steht, wonach wir suchen: 0xB1 wird an Register 0x20 geschrieben, 0x8B an Register 40, 0x71 an Register 60... Das passt ja schon richtig gut!

    Ich habe euch grün markiert, wo es passt und rot, wo es Abweichungen gibt.


    Die Abweichungen in den RAW-Daten lassen sich alle mit Blick auf den Programmer's guide zum OPL-2 schnell klären:

    0x7F an Register 0x43 stellt Channel 0 auf maximale Lautstärke. Keine Ahnung, warum das hier zwei mal gemacht wird, aber es ist an sich nichts besonderes.

    Und 0x20 an Register 0x01 stellt den OPL-2 auf "Waveform select enable", was an dieser Stelle wichtig ist, da als nächstes mit 0x01 an 0xE3 eine neue Waveform programmiert wird.


    0x40 und 0x41 scheinen in den ADL-Daten also nicht für Daten zu stehen, die direkt an den OPL-2 geschrieben werden, sondern eine Art Steuerbefehel zu sein.


    Geschrieben werden in diesem kurzen Ausschnitt die Register: 0x20,0x40,0x60,0x80,0xE0. Das entspricht den Modulator-Registern für Channel 0.

    Mit 0x23,0x63,0x83,0xE3,0xC0 folgen dann die Carrier-Registerwerte.

    Damit wird hier ein komplettes Instrument für Channel 0 programmiert und ist in der kleinsmöglichen Form, nämlich den direkten Registerwerten für den OPL-2, in der ADL Datei hinterlegt. :)

    Nur ein Wert für die Instrumentlautstärke fehlt, was der Player als volle Lautstärke interpretiert.

    Weiter geht es in der MNU.ADL dann mit einem Intrument für Channel 3. Wieder beginnend mit den Modulator-Registern.


    Aber zurück zu BEEP1:

    Code: BEEP1 in MNU.AFX
    00000026 54 52 43 4B 3F 00 00 00 40 82 7F FA 55 02 92 80 TRCK?...@...U...
    00000036 93 57 02 00 30 FE 10 63 2A 10 63 2A 60 05 8D 00 .W..0..c*.c*`...
    00000046 01 D2 20 4D 77 20                               .. Mw 

    Wenn wir davon ausgehen, dass es hier auch so ist, dann kennen wir nun die Bedeutung der ersten 11 Byte:

    0x40 - Zählt nicht, dann kommen die Werte für fünf Modulator-Register und dann die für fünf der sechs Carrier-Register.


    Wenn ich etwas Zeit finde, packe ich die Werte mal in den Instrument-Editor eines Adlib-Trackers und gucke, ob ich dann einen bekannten Ton aus dem HL-Menü bekomme :)

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Zitat

    denn sie enthält die Soundeffekte für das Menü und ist wie eine LIB-Datei aufgebaut:


    das hab ich doch schon vor Tagen gepostet :)


    Zitat

    Wenn ich etwas Zeit finde, packe ich die Werte mal in den Instrument-Editor eines Adlib-Trackers und gucke, ob ich dann einen bekannten Ton aus dem HL-Menü bekomme :)

    sieht ja auch fast so aus als wenn das beinhahe klar wäre wie es läuft


    könntest du deinen alten Player drauf ummodeln oder unterscheidet sich das doch zu stark?

  • das hab ich doch schon vor Tagen gepostet :)

    Ich werde wohl blind und vergesslich...:D Hatte deinen Beitrag dazu sogar kürzlich nochmal gelesen und jetzt beim Tippen war's weg. Das kommt davon, wenn ich neben Arbeit und Familie immer nur hier und da mal ein bisschen Zeit dafür finde.

    Leider bekommt es mir wohl nicht sonderlich gut, wenn ich meinem Arbeitgeber sage, ich brauche mehr Freizeit um ein DOS-Spiel auseinandernehmen zu können und meiner Frau mit derselben Begründung bei Kindern und Haushalt komme.... ;)



    sieht ja auch fast so aus als wenn das beinhahe klar wäre wie es läuft


    könntest du deinen alten Player drauf ummodeln oder unterscheidet sich das doch zu stark?

    Ich habe jetzt eine Anhnung wo und wie die einzelnen Instrumente definiert werden. Aber leider noch absolut keinen Plan, was die Noten angeht.

    Ich weiß noch nicht, ob die Daten ähnlich einer Midi-Datei gespeichert sind (wie CMF z.B.) oder in Pattern, wobei das ja eigentlich erst später mit der Demo scene aufkam.

    Es könnte theoretisch sogar ein Stream aus den Registerwerten sein, denn vergleicht man die Werte aus der RAW oder DRO Datei mit denen in der ADL gibt es schon Ähnlichkeiten, aber auch große Unterschiede.

    Eventuell kommen hier erst nur Daten für Channel 0, dann für 1 usw.

    Die 14 gleichen Noten am Anfang von Track 2 suche ich aber noch.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!