LEGEND OF FAERGHAIL CHANGES
------------------------------------------------------------------------------
1.7:

- Fonts "Schmal6Dump" und "Schmal8Dump" und Pattern "Checkered" sind nicht mehr als __chip markiert
- PerformAttack() aus Combat herausgelöst
- Textkonvertierungspuffer werden mit malloc() angefordert
- MouseDelay() wartet jetzt nur noch, wenn eine Taste gedrückt wurde
- Makros zum Setzen der Mauszeiger robuster gemacht
- Alle Aufrufe von unsqueeze() werden jetzt auf Erfolg getestet
- StrInput() schließt die Eingabe jetzt korrekt mit \0 ab.


1.8:

- Bei Übernachtungen in der Stadt wird die Sperre von Characteren im Roster gesenkt, und der Roster zum Speichern vorgemerkt.
- Gleiche Wirkung beim Betreten einer Stadt
- Dismiss() überarbeitet, d.h. gotos ersetzt


1.9:

- Beim Rasten werden die Rationen korrekt gezählt, und nicht mehr vorhandene Charaktere werden nicht mitgezählt.
- Weitere gotos aus DHaggle() entfernt.


1.10:

- Beim Feststellen des Schatzniveaus in Happenings() wird ein Wert > 11 abgefangen.
- NSCs werden nicht mehr im Roster gespeichert.
- strcat() auf strlcat() umgestellt
- Sortierfunktion in Files.c achtet nicht mehr auf Groß-/Kleinschreibung, und '/' wird immer als erstes angezeigt


1.11:

- Viele gotos in Combat-PerformAttack.c beseitigt.
- PerformAttack() liefert jetzt entweder TRUE oder FALSE.


1.12:

- PerformAttack() in HandlePartyAttack() und HandleNSCAttack() aufgespalten.


1.13:

- Anzugreifender Kampfrang in Combat.c/Conflict() konnte > 3 sein


1.14:

- Schatzniveau wird jetzt durchgehend auf 11 begrenzt.
- Konstante Tabellendaten sind jetzt wirklich auch als const definiert.
- Test auf Stärke beim "Heft der Kraft" vereinfacht.


1.15:

- Delay()-Parameter auf TICKS_PER_SECOND abgestimmt
- Einzelne Delay()-Aufrufe durch WaitTOF() ersetzt
- Komplexe Eingabeverarbeitung vereinfachte (DSmith(), usw.)


1.16:

- Weitere Tabellendaten als const markiert.
- Umwandlung von RAWKEY in Text vereinfacht
- Kampfabwicklung vereinfacht, doppelten Code entfernt


1.17:

- party_vs_nsc() ignoriert jetzt den Kampfrang, wenn ein
  Gegenstand oder Zauberspruch ausgewählt wurde, der auf
  die Party wirkt.

1.18:

- Compilerwarnungen bei fseek/fread/realloc korrigiert.

1.19:

- Unterscheidung von NSC-Charakteren, die Partymitglieder sind, robuster gemacht.
- Weitere Tests eingebaut, ob beim Zugriff auf Tabellen die Tabellengrenzen
  wirklich eingehalten werden.
- Logik für die Wiederbelebung von Partymitgliedern durch Siegurd korrigiert.
  Bei aktivem Debug-Modus konnte das Ergebnis an zwei Stellen unterschiedliche
  Ergebnisse liefern.
- Beim Vorwärtsgehen in Dungeon oder Wildnis wird vor der Überprüfung, ob es
  gelähmte Partymitglieder gibt, sichergestellt dass ein Partymitglied
  tatsächlich vorhanden ist. Das heißt, sind weniger als 6 Partymitglieder
  vorhanden gibt es keine merkwürdigen Nebenwirkungen mehr bei der
  Statusermittlung.
- Sind weniger als 6 Partymitglieder vorhanden, kann beim Durchlaufen der
  Wildnis die Bestimmung der Moral nicht mehr völlig falsche Ergebnisse
  liefern.
- Zuordnung der Bilder für rekrutierte NSCs ist jetzt robuster.
- Sind weniger als 6 Partymitglieder vorhanden, und in einem Dungeon oder
  der Wildnis ist die Anwesenheit eines bestimmten NSC in der Party
  erforderlich, kann die Prüfung auf Anwesenheit keine falschen Ergebnisse
  mehr liefern, wenn der geforderte NSC nicht mehr Partymitglied ist.

1.20:

- Besondere NSCs wie z.B. Siegurd, können der Party nicht mehr beitreten wenn
  sie bereits Mitglied der Party sind. Das wurde vorher nie geprüft.

1.21:

- Laden von Bildern, wie z.B. Monsterportraits, robuster gemacht.
- Anzeigen des Abspanns vereinfacht. Es wird weniger Speicher benötigt
  und die Musik ist optional.

1.22:

- Ist beim Kampf die nächste Aktion nicht "Verteidigen", so wird der Zielrang
  jetzt sorgfältiger untersucht als in den älteren Versionen. Ist im Zielrang
  kein Gegner mehr, wird der nächste Zielrang verwendet, in dem Gegner zu
  finden sind. Die gleiche Regelung gilt auch für das Anschleichen.
- Nach fast 25 Jahren die Syntax für "." und "->" im Quelltext angepasst. Zu
  viele Leerzeichen machen das Suchen schwieriger :-(


2.23:

- Programmcode mit der englischen Version 2.0e abgeglichen, die die letzten
  Änderungen am Programm enthielt (19. Oktober 1990). Deshalb die Änderung
  der Versionsnummer von 1.x auf 2.x.
- Wird ein Gegner beim verkürzten Kampf getötet, wird kein Toneffekt dafür
  abgespielt.
- Hat eine Heilerin den Zauberspruch "Vollständige Heilung" benutzt und trägt
  nicht den "Stab der Heiler" bei sich, bricht sie zusammen. Diese Wirkung fehlte
  in der deutschen Version.
- Ist es Nacht, wird die Party nicht mehr in Städte oder Wirtshäuser hereingelassen.
- Korrektur für das Zeichnen der Auto-Map, wenn Extras, Fallen oder Schätze
  eingetragen sind.
- Nach dem Laden eines neuen Dungeonlevels wird ein vorher vermerkter Gegenstand,
  der zu einem besonderen Ereignis des vorher aktiven Levels gehörte, wieder vergessen.
- Partymitglieder können bis zu 20 Gegenstände identifizieren, und nicht 17.
- Wird in einem Raum eines Dungeons oder der Wildnis ein Ereignis beim Betreten
  ausgelöst, und ist für dieses Ereignis ein Gegenstand mit Nummer 0 erforderlich,
  so wird dies ignoriert (0 ist keine gültige Nummer für einen Gegenstand).
- Waffenboni für "Weihwasser", "Henkersklinge" und Der Inquisitor" haben nie
  richtig funktioniert. Weihwasser wirkt jetzt nur noch auf Untote. Bei der
  Henkersklinge kann sich der Schaden verdoppeln. Bei "Der Inquisitor" kann der
  Angriff böse Gegner (alignment = evil) sofort töten.


2.24:

- Sind Partymitglieder nicht gelähmt, versteinert oder tot, sind sie noch
  handlungsfähig, und das wird auch so gezeigt bei der Auswahl der Kampfoptionen.
- Das Heft der Kraft kann nicht mehr von NSCs gezogen werden, und NSCs werden
  bei der Ermittlung des schwächsten Partymitgliedes nicht mehr berücksichtigt,
  da ihnen kein Stärkewert zugeordnet ist.
- Geht das Ziehen des Heft der Kraft schief, wird bei Partymitgliedern mit nur 1
  Trefferpunkt die Zahl der Trefferpunkte nicht auf 0 verringert.
- Besondere Angriffsarten der Monster dokumentiert
- Besondere Wirkungen von Zaubersprüchen dokumentiert
- Besondere Wirkungen von Gegenständen dokumentiert
- Namen von Gegenständen dokumentiert, wenn nur ihre Kennung hinterlegt war
- Zauberspruch "Rang aufsteigen" wirkt nicht mehr auf NSCs.
- Gesundheitszustand wird nicht mehr über Zahlenwerte zugeordnet, sondern über
  enum-Werte, deren Kennung dem Gesundheitszustand entspricht.
- Zahlenwerte von Character-Klassen durch enums ersetzt
- Zahlenwerte von Fallenarten durch enums ersetzt
- ClearFlags[] wird jetzt in der Special-Behandlung für Dungeonereignisse
  initialisiert und ausgewertet. Das musste keine globale Variable sein.
- Fast alle NSCs der Art "Tier" haben als Sprache statt "Tiersprache" den Wert
  "Gemeinsprache" eingetragen. Das wird jetzt beim Verhandeln berücksichtigt:
  Tiere, die laut fehlerhafter Tabellendaten Gemeinsprache sprechen, sprechen
  jetzt wirklich Tiersprache.
- Nachgeprüft, was denn nun in Party[].Location[] an Werten stehen kann/darf. Ist
  leider nicht eindeutig, und es sind weniger als 13 Werte.


2.25:

- Ist der zum Aufstieg in einen höhere Erfahrungsstufe benötigte Erfahrungswert
  zu groß, gibt es einen Überlauf bei der Berechnung. Das wird jetzt beim Aufruf
  abgefangen, und die Spielerfigur darf dann nicht weiter trainieren.
- Beim Aufaddieren von Erfahrungspunkten wird jetzt dafür gesorgt, dass der
  jeweilige Punktewert nicht überlaufen kann.
- Das Gewicht von Rationen wurde falsch berechnet. Der Gegenstand "12 Rationen"
  wiegt 60 Gewichtseinheiten. Beim Errechnen des Gewichtes, das eine Spielerfigur
  trägt, werden die "12 Rationen"-Gegenstände in Rationszahlen umgewandelt.
  Das effektive Gewicht für jede Ration entsprach jedoch 10 Gewichtseinheiten,
  was doppelt so hoch ist, wie es sein sollte.
- Zauberspruch "Rang erhöhen" wirkt nicht mehr auf NSCs. Dies wird jetzt auch mit
  einer Meldung quittiert ("... spürt keine Wirkung.").


2.26:

- Verläßt die Party die Stadt "Thyn", wird jetzt immer nachgeprüft ob sie das
  Amulett mitgenommen hat, und falls nicht, wird bekommt sie es noch einmal
  angeboten. Damit wird verhindert, dass die Party das Amulett nur einmal
  angeboten bekommt und dann nicht mitnimmt. Bislang wurde das Amulett nur
  beim Spielstart angeboten, und nicht wenn man in der Wildnis die Stadt
  Thyn betritt und dann wieder verläßt.
- Debug-Informationen enthalten jetzt auch den Namen des jeweiligen Dungeons
  und nicht nur dessen Nummer. Außerdem wird die globale Special-Kennung,
  bestehend aus Dungeonnummer, Levelnummer und Specialnummer ausgegeben.
- Aktuelles Gewicht von Gegenständen, Rationen und Goldstücken eines
  Partymitglieds hat einen anderen Definitionsbereich als das maximal
  tragbare Gewicht des Partymitglieds. Außerdem ist der Wertebereich
  begrenzt, sodass bei Berechnungen (Käufe, Verkäufe, usw.) Überläufe
  auftreten und nicht abgefangen werden konnten. Das wird jetzt robuster
  gelöst.


2.27:

- Fehler in der Debug-Ausgabe (CSV-Format) korrigiert.
- Amulett wurde beim Verlassen der Stadt Thyn nicht verläßlich
  an die Party übergeben. Das konnte wegen einer nicht initialisierten
  Variable manchmal schiefgehen :-(


2.28:

- Wird um Mitternacht gerastet, und alle Partymitglieder tragen den
  Fluch des Werwolfes, kann es jetzt nicht mehr passieren, dass die
  Party komplett in Werwölfe verwandelt wird, falls sie weniger als
  6 Mitglieder hat.
- NSCs in den Dungeons suchen jetzt zuverlässig, ob in bis zu vier
  Schritten Entfernung ein Köder oder die Party ist. Zuverlässig heißt, dass
  die Suche in der jeweiligen Richtung abbricht, wenn eine Wand oder
  verschlossene Tür ist. Wenn die Party gefunden wird, ist sie nur
  dann interessant, wenn der NSC entweder die Party verfolgt oder vor
  der Party flüchtet.
- Flüchtet ein NSC vor der Party, bewegt er sich nach Möglichkeit in die
  der Party entgegengesetzte Richtung. Ist dort kein Ausweg, wird eine
  andere Richtung gewählt.
- Flüchtet ein NSC nicht vor der Party, oder folgt der Party, geht er jetzt
  wirklich immer mehrere Schritte in die eingeschlagene Richtung weiter. Er
  ändert seine Richtung, wenn es in der eingeschlagenen Richtung nicht
  mehr weitergeht (zufällig), oder wenn er mindestens vier Schritte
  gegangen ist.


2.29:

- Debug-Modus für reparierte Monster-K.I. eingebaut. Kampf in Dungeons
  testweise deaktiviert.
- Entropie in den niedrigsten 2 Bits des Zufallszahlengenerators ist wohl
  zu niedrig. Die Monster entscheiden sich bei der Wahl einer neuen Richtung
  viel zu oft dafür, den gleichen Weg wieder zurückzugehen, den sie gekommen
  sind. Ab und zu laufen sie aber auch im Kreis.
- Debug-Modus für Monster-K.I. kann mit Ctrl+V ein- und ausgeschaltet werden.
  Ist der Debug-Modus aktiv, wird in der shell bei jeder Änderung der
  Monsterpositionen eine Textkarte mit allen Positionen der Monster und dem
  Inhalt des Dungeons-Levels angezeigt. Außerdem ist der Kampf mit Monstern
  im Dungeon deaktiviert.

2.30:

- Alle besonderen Ereignisse noch einmal durchgesehen, die in Dungeonlevels
  auftreten können und tatsächlich Typ 10 gefunden. Typ 10 ist ein vom
  Dungeon und Level abhängiges Ereignis. Im Schloss, Level 1, steht er für
  einen Ort, an dem Tageslicht hereinkommt und dann die Party heilt. Im Berg
  steht er für Lava, die die Party bei jedem Schritt 1 Trefferpunkt
  Schaden zufügt.
- Monster können jetzt auch in Räume gehen, die besondere Ereignisse enthalten,
  falls es sich bei dem "Ereignis" nicht um eine gläserne Wand handelt.
  Das heißt, Geheimtüren, Türen die sich Wände verwandeln, Drehfelder,
  klebriger Boden und Dunkelheit sind kein Hindernis mehr.

2.31:

- Monster können jetzt in Felder wandern, die Fallen enthalten. Sie lösen
  die Fallen beim Betreten aber nicht aus, wie dies auch bei besonderen
  Ereignissen in Dungeons der Fall ist.

2.32:

- Menü zum Lernen von Sprachen/Zaubersprüchen in der Stadt kann man jetzt
  auch wieder verlassen.
- Bei Zauberspruch "vollkommene Heilung" werden nicht vorhandene
  Partymitglieder nicht mehr berücksichtigt.
- Werden alle Partymitglieder verschont, wenn sie in eine Falle tappen, die
  die gesamte Gruppe betrifft, sinkt die Moral der Gruppe nicht mehr.
- Nach jedem 20. erfolgreichen Rettungswurf beim Vermeiden einer Falle
  steigt jetzt der Verteidigungswert um 1 Punkt; vorher wurden 21
  erfolgreiche Rettungswürfe benötigt.
- Beim Rasten erholen sich tote Partymitglieder nicht mehr.
- Die Wirkung von Gift beim Rasten wird jetzt berücksichtigt, nachdem die
  Berechnungen für die Heilung abgeschlossen sind, und nicht davor. Das
  bedeutet, die Erholung kann die Vergiftung zumindest teilweise
  ausgleichen.
- Beim Rasten kann durch Erholung die Zahl der Trefferpunkte einer Figur
  nicht mehr über das erlaubte Maximum steigen.
- Beim Rasten bewirkt Erholung von Lähmungserscheinung nur noch, dass die
  Lähmung verschwindet, und nicht auch Vergiftungen, usw.
- Werden beim Übernachten im Wirtshaus auch Rationen gekauft, wird deren
  Gewicht jetzt korrekt einberechnet.
- Gleiche Fehler beim Übernachten korrigiert, die auch beim Rasten
  vorhanden sind.

2.33:

- Debug-Funktion Ctrl+R kann jetzt auch durch ein Komma getrennte
  Raumkoordinaten auswerten. Die Raumnummer kann aber immer noch
  eingegeben werden. Räume, die am Rand des Levels liegen
  (x = 0 oder 35, y = 0 oder 35) sind nicht mehr als Ziel erlaubt.

2.34:

- Textausgabe im Nachrichtenbereich (30 * 11 Zeichen unten rechts)
  wird jetzt fast durchgehend mit den dafür gedachten Funktionen
  ausgeführt. Wird in anderen Bereichen der Anzeige Text
  ausgegeben, werden dafür getrennte Funktionen benutzt. Das war
  nötig, um die bei den Nachrichten verwendeten Funktionen
  zu einem einheitlichen Verhalten zu bringen.
- Zeichnen der Character-Knöpfe (3 * 2 Felder oben rechts)
  vereinfacht.
- Wortumbruch noch einmal überarbeitet. Bei der Ausgabe werden
  zumindest keine Zeichen verschluckt, aber manchmal rutscht ein
  einzelnes Zeichen in die nächste Zeile :-(
- Text für die Anzeige des maximal tragbaren Gewichtes repariert:
  sie wurde umgebrochen, weil auf das Maximalgewicht noch " lb"
  folgte, und das landete in der nächsten Zeile. Diese nächste
  Zeile wurde dann durch das Menü überschrieben.
- Ist eine Figure im Kampf getötet worden, erscheint ihre nächste
  Aktion im Kampf jetzt als "Außer Gefecht", anstatt dass von
  "Ist außer Gefecht" nur noch "Ist außer" angezeigt wurde.
- Zaubersprüche, die die Rüstungsklasse verbessern sollen,
  verschlechtern sie jetzt nicht mehr.
- Ringe, die die Rüstungsklasse verbessern sollen, setzen sie beim
  Anlegen nicht einfach auf 5, und setzen sie beim Ablegen nicht
  einfach auf 0. Diese Ringe erhöhen/senken den Rüstungsbonus jetzt
  um den jeweiligen Bonuswert. Gleicher Fehler existierte auch
  bei Ringen mit Angriffsbonus.
- Verhandlungsgeschick beim Rekrutieren von Wesen
  hatte genau die gegenteilige beabsichtigte Wirkung.
- Ob das Entschärfen von Fallen gelingt hing vom Geschick zum
  Finden von Fallen ab. Das Geschick zum Entschärfen von Fallen
  wurde niemals benutzt.

2.35:

- Debug-Funktion Ctrl+S schaltet jetzt zwischen dem ursprünglichen
  Kampfsystem und der reparierten Variante um. Standardmäßig ist
  das ursprüngliche Kampfsystem aktiv.
- Die Zaubersprüche Magischer Schild und Schutzkäfig wirken jetzt
  kumulativ und setzen die Verbesserung des Rettungswurfniveaus
  nicht konstant auf +4 Rangstufen.

2.36:

- Wortumbruch bei Textausgabe noch einmal überarbeitet. Schön sieht
  das immer noch nicht aus. Da muss eigentlich eine Lösung her, die
  für Fließtext optimiert ist. Jetzt ist das zuviel Stückwerk.
- Nach jeder Aktion im Kampf wartet das Spiel jetzt bis zu 1 Sekunde lang,
  dass der Spieler eine Taste drückt oder die linke/rechte Maustaste
  klickt. Bleibt die Reaktion aus, wird mit der nächsten Kampfhandlung
  weitergemacht, anderenfalls wartet das Spiel dann, dass der Spieler
  durch Tastendruck oder Mausklick den Kampf fortsetzt.
- Wird die Party beim Rasten überfallen, erscheint jetzt immer der
  richtige Text zum Zustand der Party. Das konnte unterbleiben, wenn die
  Wache die Eindringlinge vertreiben konnte.

2.37:

- Ist ein Dieb beim Öffnen einer Tür verzweifelt, kann man nach Laden
  oder Besuchen eines anderen Dungeons jetzt noch einen Versuch starten.
  Früher wurde diese Zustand erst beim Beenden des Programmes gelöscht.
- Zauberspruch "Weitsicht" funktioniert nur noch in Dungeons und nicht in
  der Wildnis. Beim Suchen nach Gegnern wird jetzt wirklich nur noch die
  direkte Umgebung der Party durchgeprüft und nicht mehr außerhalb des
  Dungeongebietes gesucht.
- Laden der Roster-Datei robuster gemacht.
- Speichern der Roster-Datei ist jetzt ebenfalls robuster.
- Sprachenzuordnung noch einmal an Hand der Tabellendaten überarbeitet.
  0 ist tatsächlich durchgehend Tiersprache und 1-8 sind jeweils
  Gemeinsprache, Tiersprache, Orksprache, Echsensprache, Zwergensprache,
  Elfensprache, Dunkelsprache und Zaubersprache. Es gibt aber auch Werte
  jenseits der 8, die wahrscheinlich Fehler darstellen. Bei diesen Werten
  wird die Art des Gegners untersucht (Menschlich, Tier, Untot, Magisch)
  und die Sprache dann entsprechend zugeordnet (Untot/Tier = Tiersprache,
  Magisch = Zaubersprache, Menschlich = Gemeinsprache). Problem 1: Untote
  können laut AD&D-Regeln nicht sprechen, und im Programm gibt es keine
  Logik, um diesen Fall abzuhandeln. Problem 2: Werwölfe sind auch
  in die Gruppe der Untoten einsortiert, was so wohl keine gute Idee ist,
  aber welche Sprache sollten sie sprechen? Problem 3: Untote lassen sich
  laut AD&D-Regeln nicht ködern, weder mit Geld noch mit Rationen.
- Verhandeln noch einmal durchgesehen. Ob die Verständigung funktioniert
  hängt nicht von der Gesinnung des Partymitglieds ab, sondern ist fest
  auf rechtschaffene Gesinnung eingestellt. Problem: das kann so eigentlich
  nicht richtig sein, denn laut AD&D-Regeln ist die Gesinnung des
  Partymitgliedes relevant.
- Ctrl+V öffnet jetzt einen getrennten Bildschirm, auf dem dann die
  Monsterbewegungen, usw. ausgegeben werden, wenn die Party in einem
  Dungeon ist. Eingaben in Bildschirm werden an das Hauptprogramm
  weitergereicht. Man kann also weiterhin mit der Tastatur durch den
  Dungeon laufen, und die Reaktion der Monster beobachten.
- Zurückschreiben der Dateien für Roster und Bestand des Ladens in
  der Stadt klappt jetzt besser in der Debug-Version: die jeweiligen
  Dateien werden jetzt korrekt überschrieben. Dazu muss aber das
  LOF-Programm in der gleichen Schublade liegen wie die
  LEGEND.0/LEGEND.1/LEGEND.2-Schubladen.
- Ob das Programm im Entwicklermodus übersetzt wird, läßt sich jetzt
  zentral in legend.h steuern (#define DEVMODE 1). Ob beim Laden jedes
  Levels die Specials im CSV-Format ausgegeben werden, kann ebenfalls
  in legend.h zentral gesteuert werden (#define DUMP_DUNGEON_SPECIALS 1). 