![]() |
|
Die Zwingfeste in Thorwal - Druckversion +- Crystals-DSA-Foren (https://www.crystals-dsa-foren.de) +-- Forum: DSA 1 - Die Schicksalsklinge DOS 1992 (https://www.crystals-dsa-foren.de/forumdisplay.php?fid=6) +--- Forum: Die Schicksalsklinge DOS 1992 (https://www.crystals-dsa-foren.de/forumdisplay.php?fid=11) +--- Thema: Die Zwingfeste in Thorwal (/showthread.php?tid=66) |
RE: Die Zwingfeste in Thorwal - Henne - 15.02.2026 (15.02.2026, 01:24)Alrik Alrikson schrieb: Ich empfinde es nicht als Enttäuschung, vielmehr als eine Erkenntnis von Dingen, deren Nachvollziehbarkeit mir zuvor verborgen geblieben sind. Das war nur eine Warnung: Hab mir nachdem ich den Charaktergenerator weitestgehend fertig und verstanden hatte ein Video von zwei Gamern angesehen die mehrere Charaktere erstellt haben. So ein Charakter für Schick ist aus meiner Sicht mittlerweile eine 14032-stellige Binärzahl. In dem Video wurden dieser menschliche Eigenschaften zugesprochen. Das war irritierend für mich. Ich hab's dann abschalten müssen, weil an diesem Punkt für mich die Gamerperspektive nicht mehr akzeptabel war. Das bringt die Arbeit an so einem Projekt mit sich und das war von mir für mich auch so beabsichtigt. Deshalb sag ich dir das vorher. Nachdem du deinen Erkenntnisgewinn hattest, wird sich das vermutlich auf darauf auswirken, wie du das Spiel (und vielleicht auch das Lösungsbuch) wahrnimmst. RE: Die Zwingfeste in Thorwal - Zurgrimm - 15.02.2026 (15.02.2026, 01:24)Alrik Alrikson schrieb: Zudem glaube ich auch es verschmerzen zu können, wenn mein in die Jahre gekommenes Lieblings-Rollenspiel durch Dekonstruktion vorherige Mysterien offenbart.Ich fände es sogar höchst wünschenswert, wenn die Schicksalsklinge einmal alle ihre Mysterien preisgibt. Es gibt ja vieles, das man empirisch nicht oder nur unscharf und auch nur mit immensem Aufwand herausfinden kann. Wenn man die Funktionsweise versteht, mag man viele Ungereimtheiten oder Mysterien als technische Fehler identifizieren. Aber die Erkenntnis, unter welchen Bedingungen der Fehler auftritt, macht ihn auch entweder bewust herbeiführbar oder bewusst vermeidbar. Das ist für einen Spieldurchlauf ein Fortschritt, finde ich. RE: Die Zwingfeste in Thorwal - cmfrydos - 15.02.2026 (15.02.2026, 08:25)Henne schrieb: Das war nur eine Warnung: Hab mir nachdem ich den Charaktergenerator weitestgehend fertig und verstanden hatte ein Video von zwei Gamern angesehen die mehrere Charaktere erstellt haben. Computerspiele sind „Smoke and Mirrors“: kunstvolle Täuschungen, die den Spieler mit trickreichen Illusionen in eine Welt hineinziehen. Wie bei einem Zaubertrick muss man sich dabei selbst fragen, ob man wirklich verstehen möchte, was dahintersteckt; und ob man bereit ist, damit die Illusion zu brechen. Ich persönlich finde es unglaublich unterhaltsam, mit diesem Hintergrundwissen in neue Spiele hineinzuschnuppern. Oft kommt bei mir nun sofort dieser Aha-Moment: Ah, so haben die das gelöst. Gleichzeitig bleibt aber auch immer Platz für Erstaunen, und für echten Respekt, wenn ich neue Techniken, clevere Ideen oder ungewöhnliche Ansätze entdecke. Manchmal ist diese Entzauberung allerdings auch ein bisschen traurig. In Riva zum Beispiel: Nachdem ich zu oft out-of-bounds über die Karten geflogen bin und alles aus unmöglichen Perspektiven gesehen habe, ist das Spiel nicht mehr dasselbe. Das Neue mischt sich mit den alten Erinnerungen, und die Atmosphäre, die das Spiel ursprünglich durch seinen Rahmen erzeugt hat, ist beschädigt. Das verhedderte Bild der Stadt, mit all seinen verwirrenden Verbindungen, verliert seinen Zauber, sobald man nicht mehr im „Tunnelblick“ steckt und nicht länger am Boden gefangen ist. ![]() Ich glaube, wir graben schon seit Jahrzehnten an diesen Spielen: Viel Rauch hat sich verzogen, und die meisten Spiegel sind längst demontiert. Das ist gut so und unterstreicht, welche Arbeit dieses Forum hier geleistet hat. RE: Die Zwingfeste in Thorwal - Alrik Alrikson - 15.02.2026 Vielleicht verhält es sich ein bisschen so wie bei einem Musiker, der ein Musikstück dann vielleicht nicht mehr nur genießen kann wie es ist, sondern immer auf "sein" Instrument achtet, wie es gespielt wird, wann der Einsatz kommt usw. Ich kann mir in jedem Fall vorstellen, dass sich der Blick auf ein Spiel sehr verändert wenn man den Code dahinter sieht und versteht und dann auch selbst herstellen kann. Und wenn man im Wortsinne noch hinter die Kulissen schaut und dann einen anderen Blick auf die Spielwelt hat, dann wirkt es ganz bestimmt nochmal anders. On topic: ich habe es nun noch ein paar Mal probiert und konnte insgesamt 3x die Stelle überwinden. Dabei hatte ich stets: - neu geladen nachdem die Stelle passiert wurde (also nicht hin und zurück) - die 6er-Gruppe getrennt (1/5), aber auf der selben Stelle stehen gelassen (direkt nördlich der Position 6) - mit dem einzelnen Helden gespielt und ihm in 2 Fällen des Erfolgs das zuvor genannte Werkzeug im Inventar belassen - in einem Fall aber überhaupt kein Werkzeug - dem einzelnen Helden das Travia-Amulett gegeben damit er nicht verhungert / verdurstet Aufgefallen ist mir, dass das Durchschreiten nach spätestens 20 Versuchen erfolgte, aber immer nur dann wenn die abgetrennte Gruppe Schaden durch Verhungern / Verdursten nahm (und damit ich die ganzen Textboxen nicht wegklicken muss, hatte ich die Gruppe getrennt, dann kommen die Textboxen ja nicht). Ich hatte auch jedem der Helden mal das Travia-Amulett ins Inventar geHext, dann klappte es nicht mit dem Durschschreiten (egal ob Gruppe getrennt oder nicht). Aber das mag alles auch Zufall sein bei der geringen Testzeit (ca. 30 Minuten insgesamt). RE: Die Zwingfeste in Thorwal - cmfrydos - 16.02.2026 Eine mögliche Ursache für den Bug könnte sein, dass gs_dng_handled_pos nach dem fehlgeschlagenen Betreten fälschlich auf das verschüttete Feld gesetzt bleibt, obwohl die Gruppe per gs_x_target_bak/gs_y_target_bak wieder zurückgesetzt wird. 2-Schritt-Hypothese: 1) Man läuft gegen das Geröll → Dialog erscheint → das Spiel setzt die Gruppe zurück, merkt sich aber trotzdem das Geröll-Feld als „bereits behandelt“ (gs_dng_handled_pos = pos). 2) Läuft man direkt im nächsten Tick erneut vorwärts, landet die Gruppe wieder auf demselben Feld, aber die Abfrage pos != gs_dng_handled_pos greift dann nicht mehr → der Blockier-/Rollback-Code wird übersprungen → man kommt (selten) durch. Ich habe allerdings noch keine Zeit gefunden, das gezielt im Debugger in der Praxis zu testen. Edit: Wenn man mehrmals vorwärts drückt und die Taste während der Zeit des „Freiräumversuchs“ gedrückt hält, kommt man bei 1000 Cycles (im Originalspiel) recht zuverlässig schon nach wenigen Versuchen durch, ohne dass besonderes Gepäck oder ein Gruppensplitting nötig wären. Daher halte ich die Hypothese für plausibel und vermute, dass es am Ende vor allem eine Timing-Frage ist, ob man durchkommt. Das oben beschriebene Gruppensplitting kann dabei durchaus trotzdem einen Einfluss haben: Die zweite Gruppe, zusammen mit den Hunger-/Durst-Abfragen, könnte das Timing verschieben und dadurch das „Treffen“ des allerersten Ticks begünstigen. Das möchte ich nicht ausschließen. Leider kenne ich mich mit den DOS-Eingabefunktionen nicht gut genug aus, um konkret zu erklären, was genau passieren muss, damit direkt im ersten Frame (nach dem Freilegungsversuch) bereits ein UP (↑) gelesen wird. RE: Die Zwingfeste in Thorwal - Zurgrimm - 16.02.2026 (15.02.2026, 13:56)cmfrydos schrieb: Ich glaube, wir graben schon seit Jahrzehnten an diesen Spielen: Viel Rauch hat sich verzogen, und die meisten Spiegel sind längst demontiert.Ganz gewiss. Da hier aber gerade so viele begabte Code-Analysten und Mysterien-Lüfter unterwegs sind, möchte ich den kleinen Off-Topic-Hinweis einwerfen, dass auch die Verfallene Herberge noch einige ungelöste Mysterien birgt (der Sphärenriss gehört bekanntlich nicht mehr dazu). Ich hatte die verbleibenden Mysterien jenes Dungeons hier einmal zusammengefasst. Einige sind in dem dortigen Thread nachfolgend gelöst bzw diskutiert worden (insb. Kühlraum, Falltür). Aber einiges ist noch immer offen. Mich würden Erklärungen dazu sehr interessieren. RE: Die Zwingfeste in Thorwal - cmfrydos - 17.02.2026 Okay, etwas munterer habe ich heute einen erneuten Test unternommen, mit dem ich reproduzierbar bereits im jeweils 1. Versuch durch die Stelle hindurchkomme: Während die Zeit vergeht, drückt und hält man „Vorwärts“ (↑) gedrückt und hält die Taste so lange, bis alle Textboxen dadurch „geskippt“ werden und sich die Gruppe über die Geröllstelle hinweg bewegt hat. Alle Versuche habe ich mittels dieses „mechanischen“ Verfahrens unternommen: - Bei 1000 Cycles klappt dies bei mir (GOG-Version) immer beim ersten Versuch (ca. 10× getestet). - Bei 2000 Cycles klappt es bei mir etwa nach jedem 2. bis 4. Anlauf (ebenfalls ca. 10× getestet). #Versuche: 2, 2, 4, 4, 2, 2, 2, 2, 1, 2, 4, 3 - Bei 3000+ Cycles ist es mir bislang nach über 30 Anläufen kein einziges Mal gelungen. Cycles reduzieren kann man (in der „normalen“ DOSBox) mit Ctrl+F11, erhöhen mit Ctrl+F12. Daneben ist mir Folgendes aufgefallen: Ich nehme in Versuchen, die „scheitern“ (bei 3000+ Cycles), keinerlei Hunger-/Durstschaden. Wochenlang „gräbt“ die Gruppe, ohne ein einziges Mal LE zu verlieren. Es kommen wiederholt Boxen, dass die Gruppe am Verdursten sei, allerdings ohne Schadenswürfe. Schaden dagegen NEHME ich in meinen 2000-Cycle-Versuchen immer, und zwar ab dem 2. Versuch (dann geht bei meinem Save das Trinken aus). Schaden zu nehmen bzw. den Codepfad zu nehmen, der potenziell Schaden verursacht, scheint somit (zumindest korrelativ) auch der zu sein, der einen über das Feld schreiten lässt (??). Wie so oft scheint man bei der Analyse eines Bugs über weitere zu stolpern. xD Die offenen Fragen der Verfallenen Herberge hören sich auch sehr spannend an und ließen sich nun, da der Code mit BrightEyes vorliegt, sicherlich handfester erörtern; aber alles zu seiner Zeit. Erst einmal bin ich gespannt, was sich hinter diesem Bug in der Zwingfeste verbirgt und ob ihr die Ergebnisse reproduzieren könnt. Nach erneutem Blick auf die von siebenstreich identifizierte Codestelle und weiterer Reduktion der Cycles auf 500 schaffe ich es nun auch deterministisch am eingestürzten Gang vorbei, und zwar ohne Freilegungsversuch: Man muss nahezu gleichzeitig ENTER (für „Nein“) und „Vorwärts“ (↑) drücken. Dann geht es auch ohne den Zeitverlust, den das Freilegen sonst mit sich bringt. RE: Die Zwingfeste in Thorwal - Alrik Alrikson - 17.02.2026 Kann ich so bestätigen, ich habe durch die von Dir beschriebene Methode (Textboxen wegdrücken und gleichzeitig vorwärts laufen) direkt das Hindernis durchqueren können, einmal von Nord nach Süd und direkt im Anschluss wieder zurück (bei den von mir gewählten 10.000 Cycles war es zwar etwas hektisch mit den Tasten, aber es ging). Schaden durch Hunger / Durst gab es bei den später gescheiterten Versuchen bei mir aber trotzdem. RE: Die Zwingfeste in Thorwal - cmfrydos - 17.02.2026 Danke fürs Testen, Alrik Alrikson! Nur damit ich dich richtig verstehe: Meinst du die Exploit-Variante, bei der man „Ja“ drückt und danach Vorwärts gedrückt hält? Interessant ist, dass es bei dir mit 10 000 Cycles klappt, vielleicht fehlt mir einfach der Skill. Denn obwohl ich definitiv noch innerhalb der „Warteperiode“ (während die Zeit vergeht) Vorwärts drücke, greift es bei mir irgendwie nicht; nur bei niedrigen Cycles. Ich weiß aber auch noch nicht, ob man hier besonders früh oder eher spät anfangen sollte zu drücken. Warum dieses Verhalten überhaupt von den Cycles abhängt, ist mir ebenfalls noch ein Rätsel: Bei „Nein“ + Vorwärts ist klar, dass niedrige Cycles mehr zeitlichen Spielraum geben, weil das Spiel langsamer läuft. Aber warum es bei „Ja“ + Vorwärts halten mal klappt und mal nicht, und scheinbar auch noch cycle-abhängig ist, ist mir (neben dem von mir beobachteten Hunger-/Durst-Schadens-Bug) noch võllig unklar. Das müsste man wohl separat und in Ruhe analysieren und testen. RE: Die Zwingfeste in Thorwal - Alrik Alrikson - 18.02.2026 Keine Ursache! Und genau, ich drücke auf "Ja", drücke dann die Textboxen (Hunger / Durst) weg, gleichzeitig bzw. immer wieder so schnell es eben geht auf die Vorwärtstaste. RE: Die Zwingfeste in Thorwal - siebenstreich - 18.02.2026 Das sind sehr spannende Erkenntnisse, cmfrydos! Die Abfrage "pos != gs_dng_handled_pos" steht ja bei fast allen besonderen Dungeon-Positionen. Gut möglich, dass da noch weitere ähnlich gelagerte Bugs/Exploits existieren. RE: Die Zwingfeste in Thorwal - cmfrydos - 18.02.2026 Ja, es scheint sich um eine ganze Klasse von Events zu handeln, die mittels if (pos/target_pos == EVENT && pos/target_pos != gs_dng_handled_pos) geschützt werden, dann einen Rollback ausführen, aber anschließend gs_dng_handled_pos = pos; setzen, wobei pos zu diesem Zeitpunkt noch immer die Position des Event-Feldes ist (also nicht der zurückgesetzten *_bak -Position). Wenn dann im nächsten Frame erneut ein „Vorwärts“ gelesen wird, wird das Event dadurch ggf. geskippt. Bugfix könnte sein, gs_dng_handled_pos bei dieser Art von Events nicht auf pos, sondern auf *_bak (oder irgendein invalides Feld) zu setzen. Oder genauer: gs_dng_handled_pos nur dann auf pos zu setzen, wenn pos nach der Event-Behandlung immer noch das aktuelle Feld der Gruppe ist. Folgende Liste an weiteren möglichen Stellen habe ich dabei gefunden (alles ungetestet, ohne Anspruch auf Vollständigkeit): - Tiles in der Piratenhöhle von Manrek [26], die einem die Möglichkeit geben, die Gruppe ertrinken zu lassen. Ohne besonderen Effekt, außer dass man auf ebenjenen Feldern landen könnte. Ggf. eine weitere Möglichkeit, neben https://www.crystals-dsa-foren.de/showthread.php?tid=453&pid=172247#pid172247, in der Piratenhöhle out-of-bounds zu kommen? - Schwarzmagierruine Ebene 1: Feld mit Treppe [5] sowie Exit-Feld [1] (per Exploit sollte man lediglich auf dem Feld stehen bleiben können, ohne besonderen Effekt). - In Hyggeliks Ruine: Wenn man die verfluchten Goldmünzen einsteckt und anschließend auf das Exit-Tile läuft. Zwar kann man das Dungeon so nicht verlassen, aber man könnte auf dem Exit-Tile zu stehen kommen und damit möglicherweise out-of-bounds gehen. Technisch gesprochen könnte man so also vielleicht die Absteckung der Ruine verlassen, praktisch (Dungeon-Wechsel / zurück zur Reisekarte) vermutlich nicht. - Die Zwergenmine unter Oberorken: bei den Events zur Gangfreilegung [5] (wenn man „Nein“ wählt) und die Illusionswand auf der zweiten Ebene [6]. Hier gibt es ja schon den Lösungstipp „mehrmals dagegenlaufen“. Durch den Exploit kann man sich ggf. lediglich die Versuche sparen (indem man „Nein“ wählt) und damit potenziellen Schaden, den diese Versuche verursachen. - Die Gänge in der Premmine [9], die sich freilegen lassen: hier spart einem der Exploit ggf. die Wartezeit von 2–6h. Allerdings werden die Gänge dadurch nicht freigelegt, sondern sind per Exploit lediglich ohne Freilegung passierbar. Etwas antiklimaktisch, dass man diese Stellen umgehen kann, indem man nur schnell bzw. penetrant genug ist, dem Spiel seinen Willen aufzuzwingen. Letztlich ist es ja kein Actionspiel wie z.B. Super Mario, wo es (mit dem Walljump) ähnliche „frame-perfect“ Tricks gibt, die man dem Spiel damit eher verzeihen kann, bzw. die in späteren Teilen sogar zu einer beabsichtigten Mechanik wurden: RE: Die Zwingfeste in Thorwal - cmfrydos - 19.02.2026 Ich habe einmal zwei der postulierten Stellen getestet. Diese scheinen auch in der Praxis von dem Bug betroffen zu sein: - In der Schwarzmagierruine auf dem Exit-Tile. - In Hyggeliks Ruine auf dem Exit-Tile (nachdem das verfluchte Gold eingesteckt wurde). In beiden Fällen landet man, wenn das Timing stimmt (schnell hintereinander Enter + Vorwärts drücken), auf dem Exit-Tile, also genauso, wie man in der Zwingfeste auf dem Geröll-Tile landen kann. Leider kommt es in beiden Fällen zu keinem Out-of-Bounds. Bei Hyggeliks Ruine hatte ich das zunächst vermutet, da die Exit-Treppe am Kartenrand liegt, aber vermutlich habe ich die Bedingungen für ein Out-of-Bounds dann falsch verstanden. Für einen Praxistest der anderen Stellen fehlen mir aktuell naheliegende Spielstände. Mal sehen, ob ich bei Gelegenheit die Zeit finde, zu den entsprechenden Lokalitäten vorzudringen. Was ich ebenfalls nicht mehr bestätigen konnte, ist das beobachtete Ausbleiben von Hunger- und Durstschaden. Ich glaube, ich habe mich hier schlicht vertan: Bei Folgeversuchen nehmen alle Helden Schaden, bis die maximale Lebensenergie schließlich auf 1 sinkt. Die aktuelle LE kann dabei nicht unter 1 fallen, dadurch wirkt es ab 1/1 LE so, als würden die Helden keinen Schaden mehr nehmen bzw. seien bei bester Gesundheit (Balken zu 100% gefüllt). Sorry, das hat mich wohl irritiert! RE: Die Zwingfeste in Thorwal - cmfrydos - 25.02.2026 (22.02.2026, 19:30)siebenstreich schrieb: Über das gs_groups_x_target hatte ich mich auch gewundert und es als potentielle zweite Schwachstelle (neben der Unsicherheit über das Inventargewicht) abgespeichert. Aber ich hatte es erstmal weggeschoben, weil es mich schmerzlich daran erinnerte, dass ich die deinen Exploit mit der framegenauen Eingabe noch nicht verstanden hatte.Ok, ich wollte hier nochmal kurz mein Verständnis des Exploits darlegen. Vielleicht hilft das dir, siebenstreich, oder anderen, den Mechanismus besser einzuordnen bzw. die Rahmenbedingungen sauber zu bestimmen. Ich verstehe aktuell noch nicht vollständig, warum „Vorwärts (↑) gedrückt halten“ nur manchmal zuverlässig greift (bei niedrigen Cycles oft konsistenter, bei hohen teils gar nicht). Aber der grundlegende Mechanismus im Code sieht für mich so aus: Das Spiel läuft in einer Schleife, in der grob zwei Dinge passieren: 1) Input-Handling (Key lesen -> Action setzen -> ggf. Bewegung ausführen) 2) Dungeon/Event-Handling (pro Tick, unabhängig von Input) Dass der Eventhandler in jedem Tick läuft, erklärt die Notwendigkeit von gs_dng_handled_pos. Damit soll verhindert werden, dass ein Event auf derselben Kachel im nächsten Tick sofort erneut feuert. Events sollen idealerweise nur beim „frischen Betreten“ einer Kachel abgearbeitet werden. Im Folgenden habe ich den Exploit samt Codestellen tabellarisch als Gist formatiert (mein Versuch, das hier sauber als Tabelle zu formatieren, scheiterte u. a. an der maximalen Linkanzahl pro Post): https://gist.github.com/cmsautter/a5e3c16ccb29c9041ac3246d9419ae29 Runde 1 ist das erste „Betreten“ des Geröllfeldes. Runde 2 ist dann geteilt: a) Ohne Exploit bzw. ohne sofortige neue Vorwärts-Eingabe landet man effektiv wieder auf dem Feld vor dem Geröll. b) Mit Exploit (↑ im richtigen Timing bzw. „Spam“) kann man auf dem Geröllfeld verbleiben bzw. darüber hinwegkommen, weil der Rollback-Block nicht mehr triggert. Der Kern des Exploits ist (so wie ich es aktuell verstehe): In Runde 1 läuft der Geröll-Block und setzt die Gruppe per Rollback wieder auf die vorherige Position (*_bak) zurück. ABER: gs_dng_handled_pos wird am Ende trotzdem auf pos gesetzt, und pos ist zu diesem Zeitpunkt noch die Event-Kachel (Geröllfeld), nicht die zurückgesetzte *_bak-Position. Damit ist handled_pos danach „Geröll“, obwohl die Gruppe effektiv wieder vor dem Geröll steht. Wenn dann in Runde 2 sofort wieder „Vorwärts“ gelesen wird, ist pos erneut „Geröll“. Da handled_pos ebenfalls „Geröll“ ist, greift die Guard-Bedingung (pos != handled_pos) nicht mehr. Dadurch wird der Rollback-Branch übersprungen, und man bleibt auf dem Geröllfeld stehen (bzw. kann darüber hinaus). Ich hoffe, das macht klar, warum der Bug sich schwer an einer einzelnen Codestelle ablesen lässt. Es ist keine reine „Ein-Zeile-ist-falsch“-Sache, sondern eine Art falsche Schleifeninvariante bzw. Annahme über zwei Iterationen hinweg. Rollback und handled_pos-Update sind inkonsistent, wenn im nächsten Tick sofort wieder Input verarbeitet wird. Damit ist auch nicht ganz eindeutig, wie das Ganze am besten gefixt wird. Mein Vorschlag wäre: gs_dng_handled_pos sollte nur dann auf pos gesetzt werden, wenn pos nach der Eventbehandlung auch wirklich der aktuellen Gruppenposition entspricht. Wenn per Rollback auf *_bak zurückgesetzt wurde, sollte handled_pos entsprechend auf die *_bak-Position (oder auf ein invalides Feld) gesetzt werden. Damit wäre die ganze Klasse an „Rollback-Events mit handled_pos-Guard“ sauber gefixt. Alternativ könnte man bei Events dieser Klasse den Guard pos != handled_pos entfernen, weil das Event durch den Rollback ohnehin „sich selbst“ verlässt. Das müsste man aber sorgfältig pro Event prüfen. In der Prem-Mine gibt es z. B. Stellen, die beabsichtigt dauerhaft freigelegt werden können. Dort existiert vermutlich zusätzliche Logik („ist Hindernis bereits entfernt?“). RE: Die Zwingfeste in Thorwal - siebenstreich - 25.02.2026 Vielen Dank! Da hast du dir ja richtig Mühe gemacht. Heute habe ich keine Zeit mehr (Freizeitstress...), aber ich werde es mir demnächst genau durchlesen. RE: Die Zwingfeste in Thorwal - cmfrydos - 25.02.2026 Es geht. Lass dir nur Zeit. Falls dann noch Fragen übrig sind, stell sie gerne! Ich wollte sowieso die betreffenden Codestellen nochmal präzise rausschreiben, um vielleicht später noch das Mysterium mit den Cycles zu klären. RE: Die Zwingfeste in Thorwal - siebenstreich - 08.03.2026 Mit etwas Verspätung habe ich mir das ganze jetzt angeschaut und endlich verstanden. Vielen Dank für die Erklärung! Bisher hatte ich nicht gesehen, wo es einen Unterschied macht, dass es der unmittelbar nächste Schleifendurchlauf ist, an dem das Feld wieder betreten wird. Die entscheidende Beobachtung ist: Der Dungeon-Handler wird in jedem Schleifendurchlauf aufgerufen, und unter normalen Umständen (wenn nicht sofort wieder Pfeil-nach-oben gedrückt wurde) wird dabei die falsch gesetzte Variable gs_dng_handled_po korrigiert. (25.02.2026, 14:01)cmfrydos schrieb: gs_dng_handled_pos sollte nur dann auf pos gesetzt werden, wenn pos nach der Eventbehandlung auch wirklich der aktuellen Gruppenposition entspricht. Ich glaube es gibt auch Dungeon-Felder B, wo man durch den Event-Handler zu einem dritten Feld C (also nicht das Ausgangsfeld A) geschickt wird. Bei denen wäre dann gs_dng_handled_pos (hab ich in meinem Fork jetzt in gs_dng_pos_bak umbenannt) entsprechend der Grundlogik falsch gesetzt, nämlich auf das vorletzte Feld A anstelle des letzten Feldes B. Da immer nur target_pos != handled_pos verglichen wird, ist damit vermutlich trotzdem alles stimmig. Aber 100%ig sicher bin ich mir nicht. Es muss bedacht werden, dass sich die Gruppe immer auch mit einem Transversalis bewegen kann, beispielsweise auch von C nach B. (25.02.2026, 14:01)cmfrydos schrieb: Ich verstehe aktuell noch nicht vollständig, warum „Vorwärts (↑) gedrückt halten“ nur manchmal zuverlässig greift (bei niedrigen Cycles oft konsistenter, bei hohen teils gar nicht). Ich kenne mich mit hardwarenahen Sachen nicht gut aus, aber es ist (bzw. war zu MS-DOS Zeiten) doch wohl irgendwie so: Beim Gedrückthalten einer Taste produziert der hardwareseitige Tastatur-Controller den Tastenanschlag dieser Taste immer wieder, mit einer gewissen Frequenz: Zwischen erstem und zweitem Anschlag mit ~1/2 Sekunde delay, danach mit einer repeat rate von ~10 Zeichen pro Sekunde oder auch etwas mehr. Deswegen klingt es für mich durchaus plausibel, dass die Tastatur das Anschlagsignal nur manchmal schon so früh erzeugt, dass der Exploit greift. Senkt man die cycle-Rate der dosbox, so läuft das Programm langsamer, bei gleich bleibender repeat rate der Tastatur. Damit vergrößert sich das Zeitfenster, innerhalb dessen der Tastananschlag eintreffen muss. Die Folge ist eine erhöhte Chance für das Eintreten des Exploits. Bei ausreichend kleiner cycle-Rate ist das Zeitfenster länger als ein ganzer repeat-Zyklus der Tastatur. Der Exploit funktioniert dann zu 100%. Es gibt ja auch einen BIOS-seitigen Puffer für nicht abgearbeitete Tastenanschläge. Man müsste nach einer Möglichkeit suchen, den Puffer vorab entsprechend zu befüllen, so dass die Aktionen "erstes Betreten des Felds", "Auswahl der Antwort auf die Textbox", "zweites Betreten des Felds" komplett durch vorgepufferte Tastenanschläge ausgelöst werden. Dann sollte der Exploit meinem Verständnis nach zuverlässig funktionieren. Insgesamt bauen wir hier natürlich auch darauf, dass die Dosbox Hardware und BIOS von damaligen Rechnern exakt simuliert. Im Prinzip müsste man den Exploit an einem originalen 386er mit MS-DOS testen (und nicht nur in der Dosbox), um sicher zu sein. RE: Die Zwingfeste in Thorwal - siebenstreich - 09.03.2026 Ich hatte ja oben den Gedanken geäußert, den Exploit zuverlässig(er) herbeizuführen, indem man den Tastaturpuffer geeignet vorbefüllt. Zur konkreten Umsetzung ist mir gerade diese Idee gekommen: Bei verschiedenen Aktionen tritt ein grafischer Fading-Effekt auf, währenddessen das Spiel kurz pausiert wird und man somit etwas Zeit hat, die erforderlichen Tastatureingaben zu tätigen. In Dungeons gibt es (mindestens) die folgenden Möglichkeiten, den Fading-Effekt herbeizuführen:
Ob es wirklich funktioniert, kann ich mangels eines geeigneten Spielstands gerade nicht verifizieren. RE: Die Zwingfeste in Thorwal - cmfrydos - 22.03.2026 Ah, vielen Dank, siebenstreich, das mit den periodischen Tastaturanschlägen (alle ~100 ms) würde das Phänomen wirklich sehr gut erklären. Daran hatte ich gar nicht gedacht bzw. hatte erwartet, dass das eher low-level je Taste abgefragt wird (Taste oben bzw. gedrückt). (OT: Aktuell betreibe ich etwas digitales Fasten, daher ist es gerade etwas ruhiger bei mir und ich habe deinen Beitrag vorhin erst entdeckt.) |