| Geschrieben um 23:07 am 29.06.2015 | Zitat | Editieren | Löschen | |
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 | |
Mitglied Retired Gumby Beiträge: 684 | 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 | |
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 | |
Mitglied Prof Gumby Beiträge: 569 | 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 | |
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 | |
Mitglied Prof Gumby Beiträge: 569 | <td valign="top"><div class="post"><p>Jetzt bin ich neugierig geworden und habe mal probiert, die wichtigsten Opcodes für eine Statuszeile aus dem DM4, §42, S. 308 ff. zusammenzustellen:</p> <p>“`[ Main;</p> <p> DrawStatusLine();</p> <p> print “^^^Nix los hier!”;</p> <p>];</p> <p>! Wie in DM4 §42, S. 308 beschrieben</p> <p>[ DrawStatusLine;</p> <p> @split_window 2; ! Zwei Zeilen für die Statusleiste</p> <p> @set_window 1; ! Wähle Fenster 1 aus (1 = oberes Fenster, 0 = unteres Fenster)</p> <p> @set_cursor 1 1; ! Setze Cursor an Position (1,1) (oben links)</p> <p> style reverse; ! Inverse Farben für den Text</p> <p> font off; ! Proportionalschrift aus</p> <p> @buffer_mode 1; ! Zeilenumbruch nur nach Wörtern</p> <p> @erase_window 1; ! Fenster 1 löschen</p> <p> </p> <p> ! Statuszeile auf voller Breite mit Leerzeichen füllen</p> <p> HFill(’ ‘, 0->33);</p> <p> @set_cursor 1 1; ! Cursor auf erste Position der ersten Zeile setzen</p> <p> print “Status: Laaaangweilig!”;</p> <p> @set_cursor 2 1; ! Cursor auf erste Position der zweiten Zeile setzen</p> <p> HFill(’ ‘, 0->33);</p> <p> @set_cursor 2 1;</p> <p> print “Der Bildschirm hat “, 0->32, ” Zeilen und “, 0->33, ” Spalten.”;</p> <p> </p> <p> ! Und dann wieder alles zurücksetzen</p> <p> </p> <p> style roman; ! Normaler Schrift-Stil</p> <p> font on; ! Proportionalschrift an</p> <p> @set_colour 1 1; ! 1 = Default</p> <p> @set_window 0; ! Aktuelles Fenster: Unten</p> <p>];</p> <p>[ HFill ch rows i;</p> <p> for (i = 0 : i < rows : i++) {</p> <p> print (char) ch;</p> <p> }</p> <p>];“`</p> <p>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.)</p> </div></td> |
| Geschrieben um 12:37 am 03.07.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 684 | <td valign="top"><div class="post"><p>Hier ist eine Routine, die ich mal benutzt habe:</p> <p>“`[ DrawStatusLine width posa;</p> <p> @split<em>window 1; @set</em>window 1; @set_cursor 1 1; style reverse;</p> <p> width = 0->33; posa = width-30;</p> <p> spaces width;</p> <p> @set_cursor 1 2;</p> <p> print (string) “bla”;</p> <p> @set_cursor 1 posa;</p> <p> print (string) “blubb”;</p> <p> @set<em>cursor 1 1; style roman; @set</em>window 0;</p> <p>];“`</p> <p>D.h. der erste String ist links oben, der zweite rechts oben.</p> </div></td> |
| Geschrieben um 10:46 am 20.07.2015 | Zitat | Editieren | Löschen | |
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 |