So, jetzt habe ich eine weitere Verbesserung gepusht.
Die Popup-Boxen werden jetzt an genau einer Stelle im RAM vorbereitet und anschließend in genau einem Schritt auf den Bildschirm gebracht.
Das Verfahren vorher war zweistufig, jetzt ist es einstufig, elegant und so wie ich es haben will, bzw. wie es aktuell (mit Fenstern sein sollte).
Das Rendering ist aus meiner Sicht jetzt vorzeigbar und in einer Qualität, die aus technischer Sicht seinesgleichen sucht.
In der ursprünglichen Version wurde vieles direkt auf den Bildschirm gezeichnet, was damals möglich und richtig war.
Wer die Cycles in der DOSBox auf 1000 runterdreht, kann auch heute noch den langsamen Bildschirmaufbau beobachten.
Auf modernen Systemen führte das bisher zu sehr viel unnötigem Datenaustausch und zu einer verzögerten Darstellung.
Da ich BrightEyes aus der DOSBox herausoperiert habe, kann ich jetzt vieles so anpassen wie ich es für richtig halte
und somit mir bekannte technische Blockaden und Unstimmigkeiten auflösen oder einfache Features implementieren,
welche ich für sinnvoll halte.
Gestern war ich in einem Park und habe mir dort eine kleine TODO-Liste mit Dingen gemacht,
welche ich noch implementieren werde:
Speichern von CHR-Dateien für die deutschsprachige Diskettenversion
Zwischenspeichern der Typusbilder (analog zu den Hintergrundbildern)
Darstellungsfehler auf dem Raspi2
Antesten von BigEndian Maschinen (PowerPC von älteren Mac-Laptops)
Speichern von LittleEndian-Helden auch auf
MIDI-Musik
den PowerPack 2.0 Dekompressionsalgo vereinheitlicht in C
Trennung von Darstellung und Nutzdaten (= Helden)
... aber viel weltbewegendes wird dann nicht mehr passieren.
Das klingt doch nach einem Plan. Ich muss meinen Raspi auch mal wieder rausholen und einen neuen Build machen.
Wie komplex wäre es eigentlich, neue oder andere Charakterbilder einzufügen? Gerade in der Schicksalsklinge sind ja doch recht wenige Bilder verfügbar.
05.07.2025, 18:07 (Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2025, 18:19 von HenneNWH.)
Angefixt! :-)
Zu den Bildern: Dass diese Frage irgendwann kommt, habe ich schon vermutet.
Prinzipiell ist das möglich, aktuell ist der Zeitpunkt nicht gut.
In Schick ist das Charakterbild direkt als 32x32-Matrix gespeichert.
In Schweif werden etwas schönere Charakterbilder benutzt, welche in der Datenstruktur nur als Index (z.B. Bild Nummer 20) gespeichert werden.
Somit wäre das Aufwand, der zum Spielen der gesamten NLT nicht viel beiträgt.
Wie und ob man das Ganze erweitert sollte, wird entschieden wenn Schick als BrightEyes-Version lauffähig ist
und ähnlich gut funktioniert wie der Charaktergenerator.
Wenn dich das interessiert: Die Farbpalette von diesen Bildern heißt g_pal_heads hat 32 Farbwerte.
Einige der Warnungen habe ich im Makefile_old entfernt und bin mir der Hintergründe bewusst.
Das muss so sein!
Warnungen abschalten ist nur in Ausnahmefällen eine gute Lösung, ail_stub.c ist so eine.
Bei gen_timer_isr() und WinMain() ist das auch möglich.
Die Anderen erfordern andere Ansätze.
Einer sollte noch übrig sein, aber da muss ich konzentriert sein.
06.07.2025, 11:06 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2025, 14:01 von Obi-Wahn.)
Die Schwierigkeiten die Bilder über die verschiedenen NLT-Teile mitzunehmen, hatte ich schon vermutet. Ich bin ja schon mehr als glücklich mit dem Port an sich.
Alle Warnmeldung sowohl unter Windows als auch unter Linux sind weg. Ein neuer Build ist angehängt. Dieses Mal mit den Windows- und Linux-Binaries.
(06.07.2025, 22:48)HenneNWH schrieb: Warnung: Habe gerade entdeckt, dass unter Windows die Dateigröße der mit NGEN generierten CHR-Dateien unterschiedlich ausfällt.
Inwiefern fallen sie den unterschiedlich groß aus? Für mich als Laie müsste die Datei eines Magiers und eines Kriegers unterschiedlich groß sein, da beim Magier mehr gespeichert werden muss. Oder sind die Dateien bei mehreren Generierungen von einer Klasse unterschiedlich groß?
Das ist scheinbar eine Windows-spezifische technische Angelegenheit.
Die Datenstruktur für Helden muss immer dieselbe Größe haben (1754 Bytes bei DE_CD und EN_DISK) sonst geht es nicht oder führt zu Problemen.
Meine Beispiele unter Windows haben Dateilängen von 1754-1760 Bytes. Unschön.
Ein Krieger hat darin auch Platz für Zaubersprüche, aber aufgrund des unterschiedlichen Typus sind diese Werte alle 0 und werden vom Spiel ignoriert.
Das Ganze kann zwei Ursachen haben:
1. Der Compiler ändert die Größe der Datenstruktur um effizienten Code zu erzeugen. Das nennt sich Padding und wurde von mir verboten.
Falls der Compiler doch so etwas tut, wird eine Fehlermeldung ausgegeben. Dort scheint der Fehler nicht zu liegen.
2. Beim Schreiben der Datenstruktur passiert etwas Merkwürdiges.
Hier ist der Verantwortliche die C-Bibliothek und/oder das Betriebssystem.
Dafür habe ich auch eine Fehlermeldung hinzugefügt, aber es scheint vorerst behoben.
07.07.2025, 08:49 (Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2025, 08:56 von Obi-Wahn.)
(07.07.2025, 07:35)HenneNWH schrieb: Das ist scheinbar eine Windows-spezifische technische Angelegenheit.
Die Datenstruktur für Helden muss immer dieselbe Größe haben (1754 Bytes bei DE_CD und EN_DISK) sonst geht es nicht oder führt zu Problemen.
Meine Beispiele unter Windows haben Dateilängen von 1754-1760 Bytes. Unschön.
Ein Krieger hat darin auch Platz für Zaubersprüche, aber aufgrund des unterschiedlichen Typus sind diese Werte alle 0 und werden vom Spiel ignoriert.
Das Ganze kann zwei Ursachen haben:
1. Der Compiler ändert die Größe der Datenstruktur um effizienten Code zu erzeugen. Das nennt sich Padding und wurde von mir verboten.
Falls der Compiler doch so etwas tut, wird eine Fehlermeldung ausgegeben. Dort scheint der Fehler nicht zu liegen.
2. Beim Schreiben der Datenstruktur passiert etwas Merkwürdiges.
Hier ist der Verantwortliche die C-Bibliothek und/oder das Betriebssystem.
Dafür habe ich auch eine Fehlermeldung hinzugefügt, aber es scheint vorerst behoben.
Ich habe mal zwei Chars angehängt, die frei gewählt wurden.
Bei Zurgrimm kam diese Meldung:
ERROR: flen = 1756
Bei Kalef diese Meldung
ERROR: flen = 1755
Edit: Unter Linux gibt es gar keine Ausgabe in der Konsole dazu?
07.07.2025, 09:59 (Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2025, 15:31 von HenneNWH.)
Genau so ist es. Dieses Problem tritt nur unter Windows auf.
Dazu kann ich nur sagen: "Na Bill, geht's?"
EDIT1: Danke für die Zuarbeit. Da ich dieses Problem selbst erst am Samstag entdeckt habe,
reicht mir das Feedback von euch, dass es euch auch betrifft.
EDIT2: Folgendes: Es werden (nur unter Windows) laut write() genau 1754 Bytes geschrieben,
aber wenn anschließend die Dateilängen getestet wird, sind es manchmal mehr.
EDIT3: Habe jetzt unter Windows die Datei mit _open() anstelle von _creat() geöffnet.
Jetzt scheint es zu funktionieren.
07.07.2025, 16:51 (Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2025, 17:21 von HenneNWH.)
Unter Windows wird jetzt eine andere Variante benutzt um Dateien zu öffnen.
Die Konsolenausgabe kommt nur, wenn es beim Speichern der CHR-Dateien einen Fehler gab.
Gerax und Parim sind gesund, die kannste behalten.
Kalef und Zurgrimm haben es leider nicht in die Schicksalsklinge geschafft.
(07.07.2025, 16:51)HenneNWH schrieb: Gerax und Parim sind gesund, die kannste behalten.
Kalef und Zurgrimm haben es leider nicht in die Schicksalsklinge geschafft.
08.07.2025, 11:59 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2025, 17:18 von HenneNWH.)
Hab gerade die Funktion "TYPUS FREI WÄHLEN" überarbeitet, etwas leserlicher gemacht und eine Konsolenausgabe hinzugefügt.
Diese zeigt, die initial gesetzten Attributwerte und die Anforderungen (aus char-gen) an den entsprechenden Typus.
08.07.2025, 17:44 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2025, 17:48 von Obi-Wahn.)
Oh, danke für die Konsolenausgabe für die Funktion "TYPUS FREI WÄHLEN". Interessant wie die Werte zurecht gebogen werden.
Hier ein Bespiel für einen Thorwaler: