IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Statuszeile Inform 6
AntwortenNeues ThemaNeue Umfrage

Statuszeile Inform 6

Geschrieben um 23:07 am 29.06.2015 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Hallo,

ich baue gerade die cyoa.h etwas um (eine einfache extension um cyoas zu erstellen), soll nix großes werden, ich will einfache Geschichten für einen Leseanfänger erstellen mit einfachen Auswahlmöglichkeiten die Geschichte voranzubringen.

D.h. eine spiel.inf und die cyoa.h sind dann alles, keine verblib, parserm usw.

Nun hätte ich aber gerne eine Statuszeile um z.B. Punkte und den aktuellen Ort anzuzeigen.

Ich habe versucht, die DrawStatusline mit den dazugehörigen Subs aus der parserm zu extrahieren, das ging aber völlig schief. Man muss sie völlig auseinander nehmen, viele Variablen/Globals wie z.B. location gibt es ja nicht.

Gibt es eine einfache Möglichlkeit für eine Statuszeile? Oder gibt es eine andere Extention um cyoas zu schreiben? Ich meine, mit menu.h ging sowas auch, aber das alles ist schon etwas länger her bei mir.

Kris

Geschrieben um 13:09 am 30.06.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 558

Wenn du etwas anzeigen willst, muss es ja logischerweise vorher irgendwo gespeichert sein. Wenn es bei dir keine location-Variable gibt, wie willst du dann den Ort ausgeben? Solche strukturellen Fragen solltest du dir stellen, bevor du über technischen Lösungen grübelst.

Geschrieben um 13:53 am 30.06.2015 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Die Struktur habe ich, nur heißt die location bei mir eben curr_situation, genauso habe ich natürlich eine Variable für die Punktzahl usw.

Meine Frage zielte auf eine isolierte Routine für eine Statuszeile die man dann nach belieben anpassen kann.

Hat jemand schonmal sowas irgendwo gesehen?

Geschrieben um 22:16 am 30.06.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Wenn Du Deine eigene DrawStatusLine() schreiben möchtest, kommst Du, glaube ich, an Z-Maschinen-Assembly (oder GLK für Glulx) nicht vorbei. Ich habe damit noch nie was gemacht, aber vielleicht findest Du bei der Auflistung der Opcodes einen Anfang (z.B. SPLIT_WINDOW):

http://inform-fiction.org/zmachine/standards/z1point0/sect15.html#split_window

Geschrieben um 09:37 am 03.07.2015 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Hallo Christian,

vielen Dank für den Hinweis. Das ist mir momentan dann erst mal zu viel Aufwand, wäre aber mal eine Projekt für längere Winterabende ;-)

Dann gibt es noch keine Statuszeile sondern Punkteausgabe u.ä. auf Tastendruck.

Viele Grüße

Kris

Geschrieben um 11:55 am 03.07.2015 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Jetzt bin ich neugierig geworden und habe mal probiert, die wichtigsten Opcodes für eine Statuszeile aus dem DM4, §42, S. 308 ff. zusammenzustellen:



    DrawStatusLine();

    print "^^^Nix los hier!";

];

! Wie in DM4 §42, S. 308 beschrieben

[ DrawStatusLine;

    @split_window 2; ! Zwei Zeilen für die Statusleiste

    @set_window 1;   ! Wähle Fenster 1 aus (1 = oberes Fenster, 0 = unteres Fenster)

    @set_cursor 1 1; ! Setze Cursor an Position (1,1) (oben links)

    style reverse;   ! Inverse Farben für den Text

    font off;        ! Proportionalschrift aus

    @buffer_mode 1;  ! Zeilenumbruch nur nach Wörtern

    @erase_window 1; ! Fenster 1 löschen

   

    ! Statuszeile auf voller Breite mit Leerzeichen füllen

    HFill(' ', 0->33);

    @set_cursor 1 1; ! Cursor auf erste Position der ersten Zeile setzen

    print "Status: Laaaangweilig!";

    @set_cursor 2 1; ! Cursor auf erste Position der zweiten Zeile setzen

    HFill(' ', 0->33);

    @set_cursor 2 1;

    print "Der Bildschirm hat ", 0->32, " Zeilen und ", 0->33, " Spalten.";

   

    ! Und dann wieder alles zurücksetzen

   

    style roman;     ! Normaler Schrift-Stil

    font on;         ! Proportionalschrift an

    @set_colour 1 1; ! 1 = Default

    @set_window 0;   ! Aktuelles Fenster: Unten

];

[ HFill ch rows      i;

    for (i = 0 : i < rows : i++) {

        print (char) ch;

    }

];```

Mit @set_colour kann man auch noch Farben ändern usw. Kapitel 42 im DM4 erzählt eigentlich alles Wichtige. (Und das Kapitel ist nicht so lang wie eine Winternacht. Aber interessanter.)
Geschrieben um 12:37 am 03.07.2015 | Zitat | Editieren | Löschen
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 558

Hier ist eine Routine, die ich mal benutzt habe:



   @split_window 1; @set_window 1; @set_cursor 1 1; style reverse;

   width = 0->33; posa = width-30;

   spaces width;

   @set_cursor 1 2;

   print (string) "bla";

   @set_cursor 1 posa;

   print (string) "blubb";

   @set_cursor 1 1; style roman; @set_window 0;

];```

D.h. der erste String ist links oben, der zweite rechts oben.
Geschrieben um 10:46 am 20.07.2015 | Zitat | Editieren | Löschen
Kris
Mitglied
Dr Gumby
Beiträge: 181

Hallo,

zuerst mal Sorry, dass ich mich nicht mehr gerührt habe, ich hatte dann doch mal über die OP-Codes gelesen, aber bei dieser Hitze habe ich nicht weiter daran arbeiten wollen und frönte anderen Hobbies.

Danke euch beiden, dass Ihr geschaut und geschrieben habt. Ich werde jetzt wohl doch eine Statuszeile einbauen, das gibt dann doch ein wenig Textadventure-Feeling.

Gruß

Kris

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz