Level-/Karteneditor für Historyline 1914-18

  • Habe am Wochende die Zeit gefunden mal Visual Studio einzurichten und etwas Code zu schreiben :)

    sollten Map.x und Map.y auf dem Screenshot nicht eher width und height sein?

    Da postet man einmal einen Screenshot und schon werden hier die paar Zeilen Code im Hintergrund analysiert :D

    Aber ja, width und height wäre hier natürlich korrekt. Werde ich entsprechend anpassen. Wie geschrieben habe ich erstmal nur etwas rumprobieren wollen und da war ich an der Stelle wohl etwas schreibfaul.

    Das ganze basiert auch auf den Standarddateien, die Visual Studio für eine Windows Desktopanwendung generiert und hat noch so einige Macken.


    Zitat

    Ich habe erstmal nur etwas rumprobiert. Ist auch mein erstes Windows-Projekt seit bestimmt 10 Jahren, da musste ich mich erstmal wieder etwas reindenken.

    stell einfach mal ein Zip ein dann kann ich das CMaken und auch linuxen

    llm, hier, wie gewünscht, der aktuell Stand mit allen Dateien als ZIP. Ich habe inzwischen noch 2x Skalierung der Bitmaps und Scrollen ergänzt.

    Damit es funktioniert, muss in der MapViewer.cpp bei den globalen Variablen den Pfad zu HL1914-1918 angepasst werden. Einen Datei-Öffnen-Dialog gibt es aktuell noch nicht. :)


    lib.h enthält alles, um die Bitmaps für Gelände und Einheiten einzulesen und zu zeichnen.

    fin.h entsprechend alles, um eine Karte zu lesen und zu zeichnen.

    Der Code in den beiden Dateien sollte sich auch recht problemlos für andere Systeme verwenden lassen.


    Edit: Die kompilierte EXE im x64\Debug Ordner funktioniert natürlich nicht, da sie meine Pfadangaben verwendet. Ich habe hier aber zum Testen auch nochmal die Spieldateien in gepackter und ungepackter Form abgelegt.

    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.

  • Zitat

    hier, wie gewünscht, der aktuell Stand mit allen Dateien als ZIP.

    schon lange nicht mehr bare Metal Win32 API in neuem Code gesehen


    das lässt sich natürlich nicht ganz so einfach auf Linux oder DOS portieren :)


    schon eine Strategie: also Qt (auf jeden Fall Multiplatform) oder irgendwie sowas, oder selbst gemalte Pixel-Oberflächen und damit auch DOS kompatibel?

  • Zitat

    Da postet man einmal einen Screenshot und schon werden hier die paar Zeilen Code im Hintergrund analysiert

    da geht noch mehr :)

    Code
    //Ein Hexfeld hat einen Durchmesser von 24 Pixeln

    ist das nicht eher die Seiten/Kantenlänge?

  • baut & läuft



    hab noch byte durch byte_t ersetzt - beisst sich mit std::byte wenn man aktuellere C++ Standards verwendet und das böse "using namespace std" macht :)

    Einmal editiert, zuletzt von llm ()

  • Ja, die Mapview.cpp ist schleet portierbar. Wie gesagt, hatte ich dafür jetzt erstmal einfach Visual Studios Windows API Vorlage genommen, um ein bisschen auszuprobieren. War auch erstmal mehr als Test für die beiden Header-Dateien gedacht, die bis auf Verweise auf HDCs auch keinen Win32 API Code beinhalten, was ja leicht durch entsprechende Screenbuffer bzw. Pointer/Handle ersetzt werden kann.

    Den ganzen "Fenster-Kram" bräuchte man ja für DOS sowieso nicht. :D Da brauchen wir ja sowie eine andere Oberfläche und damit ein eigenes Hauptprogramm.

    Um für DOS das Speichermanagement mit möglichst geringem Aufwand anzupassen, würde ich einfach mit dem oberen Speicherbereich arbeiten und XMS verwenden.


    Mit Qt habe ich noch nichts gemacht, gucke ich mir aber natürlich gerne an.

    Code
    //Ein Hexfeld hat einen Durchmesser von 24 Pixeln

    ist das nicht eher die Seiten/Kantenlänge?

    Es ist eine Seitenlänge der quadratischen Tile-Grafik und damit der Durchmesser des Felds von einer Außenkannte zur anderen:


    baut



    hab noch byte durch byte_t ersetzt - beisst sich mit std::byte wenn man aktuellere C++ Standards verwendet und das böse "using namespace std" macht :)

    Dieser "böse" Code macht aber vieles auch lesbarer und stand damals sogar als quasi Standard für den Beginn jedes C Programs in meinem Lehrbuch. Würde man heute vermutlich nicht mehr so in ein Tutorial schreiben.

    Den und die 16 Bit Datentypen habe ich aus Faulheit, beim kopieren des unter DOS mit Borland C++ geschriebenen Codes, mitgenommen. Ist sonst ja auch ein bisschen schwierig, wenn ein int auf einem anderen System plötzlich deutlich größer ist.

    Daher kam übrigens auch die cpp Dateiendung für eigentlichen C Code, die du hier mal angemerkt hast. Wenn ich in der alten Borland IDE im Code IOSTREAM verwende, ist es für den alten Compiler sofort C++ und er kann das nur verarbeiten, wenn die Dateiendung auch cpp ist.

    Ich sollte mir wohl mal einen moderneren Compiler unter DOS installieren :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.

  • Zitat

    Um für DOS das Speichermanagement mit möglichst geringem Aufwand anzupassen, würde ich einfach mit dem oberen Speicherbereich arbeiten und XMS verwenden.

    oder mit DOS-Extender damit man sich nicht mit dem Speicher beschäftigen muss oder willst du zwingend super-alte Systeme supporten?



    Zitat

    Mit Qt habe ich noch nichts gemacht, gucke ich mir aber natürlich gerne an.


    am einfachsten ist wegen Deployment unter Windows natürlich die WinAPI - aber auch nicht so flexibel - Qt ist das schwergewichtiger aber mit dem Maintanance-Tool recht trivial zu installieren und läuft auch unter Linux - aber für ein DOS-Programm wäre das natürlich keine nutzbare Lösung - hast du da irgendeine Idee wie du das unter DOS machen willst - selbermalen? - weil das würde ja so auch unter Windows/Linux gehen


    Zitat

    Es ist eine Seitenlänge der quadratischen Tile-Grafik und damit der Durchmesser des Felds von einer Außenkannte zur anderen:

    ok dann ist deine Beschreibung perfekt


    Zitat

    Dieser "böse" Code macht aber vieles auch lesbarer und stand damals sogar als quasi Standard für den Beginn jedes C Programs in meinem Lehrbuch. Würde man heute vermutlich nicht mehr so in ein Tutorial schreiben.

    ja das steht in jedem "Lehrbuch" und wird auch jedem Erstesemester und Azubi so erstmal beigebracht, obwohl das völliger Schrott ist und im Business verpönt

    weil gerade der std-Namespace besonders voll ist mit Name-clash-problematischen Namen :)

    Einmal editiert, zuletzt von llm ()

  • Zur Musik habe ich auch noch ein paar neue Erkenntnisse:


    Nach dem Setzen der Instrumentdaten beginnt die eigentliche Musiksequenz in der MNU.ADL ja mit einem Befehl, der im OPL-2 Output nicht zu finden war:

    60 06 A9

    War nicht zu finden...

    Eventuell Timing über den PIT und daher nicht in den OPL-2 Befehlen?

    Im Header der ADL Dateien findet sich in den letzten beiden Byte (also Offset 0x18 und 0x19) allerdings dazu passend auch der Wert A9 06


    An späterer Stelle findet sich in den ADL folgender Befehl.

    E9 23 24

    Timer des OPL-2 wird programmiert und Register 43 -54 erhalten neue Werte

    Das Programmieren des Timers sieht in der RAW so aus:

    00 02 = Clock change Befehl im RAW Format

    A9 06 = Wert der geschrieben wird, wieder unsere A9 06!


    Die Modding Wiki verrät uns:

    Code
    To convert the clock speed to a Hertz measurement (Hertz is cycles per second, and the delays are in units of one cycle), use this formula: 
    
    iHertz = 1193180.0 / iClockSpeed



    0xA906 = 43.270

    1193180 /43270 = 27 Hz

    60 ist also wohl der Befehl für "Change Timer" in den ADL Dateien und zu Beginn der Sequenz wird hier das Timing auf 27 Hz geändert, was zudem die vorgesehene Timerfrequenz laut Header ist.

    Der Playercode im Spiel scheint diesen Befehl aber zunächst zu ignorieren, aber an späterer Stelle, beim ersten E9 Befehl auszuführen.


    Der E9 Befehl bzw. was dazu in den RAW Daten steht, war mir ja eh noch ein Rätsel. Es scheint aber schlichtweg eine Art Wartebefehl für das Timing zu sein.

    Nach diesem Befehl folgen im Raw-OPL-Code auch mehrere Delays, aber gerade bei den ersrten auch eine Verringerung der Lautstärke, weshalb ich zunächst an einen Effekt wie Volume Slide gedacht habe.

    Insgesamt wird nach jedem Befehl E9 aber 105 Ticks (in der MNU.ADL) gewartet, bevor ein Note-Off Befehl folgt. Was ja Sinn macht.

    Die Programmierung des Timers würde dann beim ersten Wartebefehl erfolgen. Auch das macht ja Sinn.

    E9 wäre dann das Pendant zur "delta time" bei Midi. Allerdings finde ich in den Musikstücken immer nur E9, nie E8 o.ä. und es folgt auch kein Datenbyte darauf. Und der Player würde dann in "Wartezeiten" von sich aus die Lautstärke verringern, also so eine Art Fade out starten...



    Was wir jetzt aber über das ADL Dateiformat von BlueByte wissen:


    Header

    (hier von MNU.ADL)

    Offset / GrößeWertBedeutung
    0x00 - 4 Byte
    "ADLX"ID Datei
    0x04 - 4 Byte
    00 00 12 02
    Dateigröße in big endian (4610 Byte)
    0x08 - 4 Byte
    "AHDR"ID Header
    0x0C - 4 Byte
    00 00 00 0A
    Größe des Header-Chunks in big endian (10 Byte)
    0x10 - 1 Byte
    02Bei allen ADL Dateien 2, eventuell Dateiformatversion?
    0x11 - 1 Byte
    00Bei allen ADL Dateien 0. Eventuell auch Version, also 2.0?
    0x12 - 1 Byte
    08Bei den Soundeffekten in der .ADX steht hier 1. Also wohl Anzahl der verwendeten Kanäle/Tracks
    0x13 - 1 Byte
    00Noch zu klären...
    0x14 - 1 Byte
    5FNoch zu klären....
    0x15 - 1 Byte
    8BNoch zu klären...
    0x16 - 1 Byte
    A4Noch zu klären..
    0x17 - 1 Byte
    01Noch zu klären..
    0x18 - 2 Byte
    A9 06
    Initialer Wert für den Timer in big endian (43270 = 27 Hz)


    Es fehlen uns noch die Angaben zur Geschwindigkeit des Songs, neben dem Timer-Wert. So etwas wie BPM oder, analog zu Midi, ticks per quarter-note. Diese Infos dürften hinter den noch zu klärenden Bytes stecken.




    Die Musiksequenz funktioniert ähnlich wie Midi, allerdings mit eigenen Befehlen und eng angepasst an den OPL-2:


    ADL "Befehl"
    Bedeutung
    1x <Registerwert Ax> <Registerwert Bx>
    Note on - Spiele Note/Frequenz auf Channel x
    2x
    Note off - Key-Off Befehl für Channel x,
    3x <Registerwert>
    Setze Lautstärke für Channel x
    4x <11 Byte Registerwerte>
    Setze Instrumentdaten für Channel x
    6x <2 Byte Wert für Timer>
    Timerfrequenz ändern
    E9Timing / Wait, in MNU.ADL wird 105 Ticks (bei 27 Hz also 3,8 Sekunden) gewartet, bevor der nächste Befehl ausgeführt wird.


    Ich versuche mich demnächst mal an einem Player. :)

    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 ()

  • oder willst du zwingend super-alte Systeme supporten?

    DAS fragst du in DIESEM Forum?! :D


    Auf die Gefahr hin, dass die 286er Fangemeinde jetzt aufheult, denke ich aber, dass 386er als Mindestanforderung wohl klar geht.

    Welche Anforderungen hat da eigentlich das Spiel selbst? Hat jemand zufällig die Packung zur Hand? :)

    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.

  • Welche Anforderungen hat da eigentlich das Spiel selbst? Hat jemand zufällig die Packung zur Hand? :)

    Die Packung nicht, aber im Handbuch steht mindestens ein 80286 mit VGA und 7MB Speicherplatz auf der HDD. Das ganze dann ab DOS 3.3.

    Danke. Hmmm, dann wäre ja 286er Unterstützung doch schon schön...

    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

    Danke. Hmmm, dann wäre ja 286er Unterstützung doch schon schön...

    also doch eine selbgemalte Oberfläche - dann lieber nur die und die dann auch unter Windows/Linux

    so wie der Stunts-Editor:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Ach ja, der Stunts-Editor... Was habe ich da früher Stunden mit zugebracht :D


    Wir hatten hier im Thread ja auch schon die Idee für die DOS Version, einfach die Game.iff aus dem Spie zu nehmen.

    Das ginge ja genau in die Richtung:


    Links die Karte und Rechts die verfügbaren Geländegrafiken und Einheiten.


    Schön wäre aber natürlich auch eine Übersichtskarte und irgendwie müssen wir dann noch die Möglichkeit, Gebäude zu editieren, einbauen.

    Und die Windows-Version braucht ja trotzdem eine Fensterklasse und es wäre ja schön, die Bitmapfunktionen von Windows zu nutzen und da nicht das Rad neu erfinden zu müssen.

    Aber natürlich wäre der Portier-Aufwand wesentlich geringer, als bei Verwenudng von Windows-Fenstern bzw. der Windows API.

    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.

  • Ach ja, der Stunts-Editor... Was habe ich da früher Stunden mit zugebracht :D

    und warum bist du dann noch nicht beim Contest dabei? (so mal einwerfen.... :whistling: )


    Aber zum Editor allgemein: Eine schöne nutzbare Oberfläche sollte dann schon eine etwas besser Auflösung als 320x200 bieten. Zumindest optional. Das fand ich beim Stunts-Editor schon immer furchtbar. Auch auch das Scrollen ist ehr suboptimal dort.

    Ich glaube an euch! Ihr schafft das :)

  • Zitat

    Und die Windows-Version braucht ja trotzdem eine Fensterklasse und es wäre ja schön, die Bitmapfunktionen von Windows zu nutzen und da nicht das Rad neu erfinden zu müssen.

    Aber natürlich wäre der Portier-Aufwand wesentlich geringer, als bei Verwenudng von Windows-Fenstern bzw. der Windows API.

    in Qt ist das alles drin, Bitmapfunktionen etc., Fenster, Dialoge, auch Multi Platform - bin gerade an einem Multiplatform Qt System bei einem Kunden - aber eben geht das DOS auf jeden Fall nicht mehr

    vielleicht also doch nur eine Desktop Version

    Einmal editiert, zuletzt von llm ()

  • Der Aufwand wird für die DOS Version dann deutlich größer.

    Die Oberfläche und Steuerung müsste für DOS komplett neu geschrieben werden. Aber viel von dem Code dahinter, wie der Code zum Lesen/Schreiben der Spieldateien, Logik zum Anwählen von Hex-Feldern usw. lässt sich ja trotzdem recht gut übernehmen und darauf dann einen kleiner Editor im Spieldesign und 320x200 zu bauen, ist doch machbar und neben einer komfortableren Desktopversion für Windows und Linux zu realisieren.

    Die DOS Version wird dann halt für die Puristen. :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.

  • Links die Karte und Rechts die verfügbaren Geländegrafiken und Einheiten.

    Das kling gut. Und wenn der User eine Einheit oder Gebäude auf die Karte gesetzt hat kann er sie dort anklicken. Rechts wäre dann Platz um diese dann zu konfigurieren. Vielleicht noch Schaltflächen um zwischen Platzieren / Editieren umzuschalten?

  • Zitat

    Zur Musik habe ich auch noch ein paar neue Erkenntnisse

    wird ja immer besser


    für Windows/Linux usw. ist der Nuked-OPL3: https://github.com/nukeykt/Nuked-OPL3 wohl der beste OPL2/OPL3 Emulator, unter DOS würde ich den echten verwenden :)


    Es gibt einige andere aber der hat die größte Verbreitung und ist auch recht simpel zu nutzen - man schreibt eben die Register usw. direkt über die public API von Nuked-OPL3

    Einmal editiert, zuletzt von llm ()

  • Ich verfolge diesen Thread schon eine ganze Weile und wünsche mir schon seit einiger Zeit einen Editor für das wunderschöne Historyline. Mir gehen schon eine Weile einige Fragen durch den Kopf.


    1. Sollen die neuen Karten eigene Levelcodes erhalten oder sollen die bisherigen Karten ersetzt werden? Es ist wahrscheinlich einfacher, die bisherigen Karten zu ersetzen.


    2. Wie sieht es mit den "Strategieanweisungen" der KI aus. Gibt es hier schon weitere Erkenntnisse? (Ich weiß das ist ein Thema für später, wenn der Editor funktionsfähig ist)


    3. Kann man die erwähnten "fehlenden" Einheiten, die von Bluebyte nicht verwirklicht wurden, vielleicht im Editor ergänzen? Ich dachte da z.B. an einen Zeppelin (verbesserter Ballon, der kämpfen kann) oder an einen Kreuzer (als Seekampfeinheit zwischen Zerstörer und Schlachtschiff), oder ggf. auch ein zweites Uboot.


    4. Gibt es schon Ideen, wo wir die vielen fertige Karten sammeln, um diese der Fangemeinde zugänglich zu machen?


    Ich bedaure, dass meine Programmiekenntnisse zu rudimentär sind, um hier aktiv helfen zu können, aber vielleicht helfen mein Wünsche und Fragen trotzdem. :)

  • Der Aufwand wird für die DOS Version dann deutlich größer.

    Die Oberfläche und Steuerung müsste für DOS komplett neu geschrieben werden. Aber viel von dem Code dahinter, wie der Code zum Lesen/Schreiben der Spieldateien, Logik zum Anwählen von Hex-Feldern usw. lässt sich ja trotzdem recht gut übernehmen und darauf dann einen kleiner Editor im Spieldesign und 320x200 zu bauen, ist doch machbar und neben einer komfortableren Desktopversion für Windows und Linux zu realisieren.

    Die DOS Version wird dann halt für die Puristen. :D

    Wenn es auch 486+ sein darf -- DOjs von SuperIlu kann helfen... Wenn man JS spricht natürlich...

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

Jetzt mitmachen!

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