JirkaDellOro / FUDGE_Story

A FUDGE module for the easy development of interactive stories, visual novels and simple adventure games
https://jirkadelloro.github.io/FUDGE_Story/
7 stars 9 forks source link

Möglichkeit, das Skippen der Dialoge zu deaktivieren #33

Open alexanderreiprich opened 2 years ago

alexanderreiprich commented 2 years ago

Es wäre toll, wenn es eine Möglichkeit gebe, das Skippen von Dialogen temporär zu deaktivieren, da der Spieler sich die Dialoge dann durchlesen muss und man so manchen Szenen spannender gestalten kann. Ich habe mehrere Workarounds versucht, wie z.B. EventListener kurzzeitig auszuschalten, den Keypress abzufangen, oder einen Timer zu stellen, der erst danach den nächsten Dialogteil aufruft, aber bislang habe ich keine funktionierende Methode gefunden.

Wäre es möglich, so eine Funktion einzubauen, bzw. gibt es eine gute Alternative dafür?

JirkaDellOro commented 2 years ago

Mit Dialogen meinst Du einfach die "Speech"? Wann darf es dann weitergehen, wie stellen wir fest, ob das Nutzeri fertiggelesen hat? Wie geht es dann weiter?

alexanderreiprich commented 2 years ago

Jap, genau, ich meine den Aufruf von Speech.tell(). Das Nutzeri sollte wie bei normalen Speech.tell() Aufrufen auch mit Linksklick/Spacebar weitergehen können, jedoch sollte der Text vorher vollständig angezeigt werden. Das heißt, der Linksklick sollte erst den nächsten Dialog aufrufen können, wenn der letzte Buchstabe des Textes angezeigt wurde.

JirkaDellOro commented 2 years ago

Hm... technisch ist das natürlich machbar. Aber ist es sinnvoll? Du erzwingst ja nicht, dass das Nutzeri liest, sondern dass es warten muss. Du kannst den Tickerspeed auch hochdrehen bzw. gleich den ganzen Text anzeigen lassen. Das erscheint sinnvoller...

alexanderreiprich commented 2 years ago

Meiner Meinung nach gibt es definitiv Anwendungsfälle dafür, z.B. für Einstiegssequenzen in Kombination mit passender musikalischer Untermalung. Dadurch könnte man als Entwickler beispielsweise die Musik oder Soundeffekte auf den gerade auftauchenden Text abstimmen. Als Equivalent könnte man unüberspringbare Cutscenes in anderen Videospielgenres sehen.

Bezüglich meines Anwendungsfalls gibt es in meiner Novel einen älteren Charakter, welcher sehr langsam spricht. Sollte man sich trotz des langsamen Sprechens seinen gesamten, recht langen Dialog anhören (es gibt die Möglichkeit an manchen Stellen des Dialogs abzubrechen), soll der Spieler belohnt werden. Durch das Skippen des Dialogs wäre dieser Part sinnlos.

Ich bin der Meinung, dass es sinnvoll wäre, dem Entwickler die Möglichkeit zu bieten, die Dialoge nicht früher beenden zu lassen bis der Text durchgelaufen ist. Mehr künstlerische Freiheit ist ja etwas gutes.

Rina14 commented 2 years ago

dem stimme ich zu, ich finde das kann auch die Atmosphäre deutlich verändern, z. B. in Bezug auf die Spannung etc. und kommt in VNs/ Spielen mit VN-Dialogstil ebenfalls nicht gerade selten vor.

JirkaDellOro commented 2 years ago

Du kannst mal folgendes probieren. Speech hat unter anderem folgende statische EIgenschaft

    public static signalForwardTicker = Progress.defineSignal([() => getKeypress(ƒ.KEYBOARD_CODE.SPACE), EVENT.POINTERDOWN]);

Die solltest Du überschreiben können, z.B. so:

Speech.signalForwardTicker = Progress.defineSignal([() => false]);
alexanderreiprich commented 2 years ago

Soweit ich es ausprobiert habe, hat das Überschreiben der Eigenschaft nur bewirkt, dass der Text nun direkt angezeigt wird, ohne die Animation des Tickerspeeds. Laut Browserkonsole wird das Signal trotz Überschreiben dennoch gesendet, da dort "Ticker interrupted" ausgegeben wird.