[Tiptoi] Wiederholen / Spiel programmieren

Joachim Breitner mail at joachim-breitner.de
Fr Okt 16 22:50:38 CEST 2020


Hallo Thomas,

das klingt gut! Ich hoffe du hattest Spaß dabei und am Ende ein schönes
Erfolgserlebnis.

Beim einbauen ins tttool macht mir weniger die Kodierung eine Sorge,
sondern eher, wie man es dem Benutzer präsentiert.

Wenn es nur um Wiederholen und Stop geht, vielleicht 

scripts:
  hello: P(hello)
  conditional:
  - $mode==1? $mode:=2 $1+=1 P(hello)
  - $mode==2? $mode+=1 P(one,two,three)
  - $mode==3? $mode:=1 P(back)
  wiederholen: REPLAY
  stop: STOP

also, so zu tun als ob es Skript-Befehle REPLAY und STOP gibt. Diese
dürfen dann natürlich einmal vorkommen. Aber so ist es vermutlich
intuitiver (es sind ja im Grunde auch bloß anklickbare Felder) und
passt auch wenn man bestimmte OIDs ansprechen möchte:

scripts:
  5001: P(hello)
  5002:
  - $mode==1? $mode:=2 $1+=1 P(hello)
  - $mode==2? $mode+=1 P(one,two,three)
  - $mode==3? $mode:=1 P(back)
  4003: REPLAY
  4004: STOP

Die anderen Spezial-OIDs wären so nicht erreichbar, was vielleicht ok
ist, bis wir ihren Sinn voll verstanden haben.

Cheers,
Joachim



Am Freitag, den 16.10.2020, 22:37 +0200 schrieb Thomas Schäfer via
tiptoi:
> Hallo Joachim,
> danke für die Einschätzung. Das hat mir Lust gemacht, es zu versuchen. Und tatsächlich, beim ersten Versuch hat es geklappt!
> Mein Workflow (ohne Recherchieren und Einlesen):
> 1. GME-Datei in HxD öffnen (kostenloser Hex-Editor)
> 2. Adresse 0x0094 (32bit offset to special symbols) ausfindig machen.
> 2a. Nach Generierung durch tttool steht dort einfach der 32bit-Wert '0' drin.
> 3. Einen Offset eingetragen, der genau dem Dateiende+1 entspricht (würde also aus der Datei "herauszeigen")
> 3a. Ich habe hierzu den Eintrag in 0x0071 (32bit offset to the playlistlist) eingesehen - die playlistlist ist praktischerweise ziemlich am Dateiende. Da habe ich die übrigen Bytes abgezählt und kopfrechnend zum Offset in 0x0071 hinzugerechnet. Geht mit Sicherheit auch eleganter durch Subtraktion der beteiligten Adressen statt Abzählen. :D
> 4. 40 Bytes (Wert: '0') am Dateiende hinzugefügt.
> 4a. Die nötige Länge habe ich der Seite "GME Special symbols" entnommen (https://github.com/entropia/tip-toi-reveng/wiki/GME-Special-symbols).
> 5. In der GME-Datei von "Mein Wörter-Bilderbuch Tiere" die 16bit-kodierten OIDs für Wiederholen (5402) und Stop (5401) ausgelesen.
> 5a. Ich habe hierzu in dieser Datei den Offset in Adresse 0x0094 herausgesucht und bin dann an den Ort gesprungen. Die ersten 32bit enthalten die beiden o.g. 16bit-Werte.
> 6. Eintragung dieser 2x16bit in meiner GME-Datei in Adresse 0x0094+Offset. (das sind also die ersten 4 Byte der hinzugefügten 40 Bytes).
> 7. Speichern.
> 8. Geänderte GME-Datei auf den Tiptoi geladen, gestartet, mein Projekt aktiviert. Eine beliebige OID ausgewählt. Sound angehört. Wiederholungszeichen aus "Mein Wörter-Bilderbuch Tiere" angetippt. Vorigen Sound erneut gehört!
> Noch zwei Anmerkungen:
> A. Für o.g. Workflow wäre es vielleicht hilfreich, wenn tttool an Adresse 0x0094 nicht einfach den Wert 0 schreibt, sondern tatsächlich 40 Bytes am Dateiende ergänzt und dort dann darauf verweist. Wenn das einmal implementiert ist, ist der Schritt, in YAML eine Syntaxerweiterung vorzunehmen, um OID-Codes für Restart und Stop zu ergänzen, vielleicht auch nicht mehr so groß.
> Man kann sicher aber auch ein Tool basteln, das einfach blind 40 Bytes an die Datei anhängt und dann in 0x0094 den entsprechenden Offset schreibt.
> B. Keine Ahnung, ob das eigentlich selbstverständlich für die Offset-Adressierung ist, aber ich hatte beim Lesen der Seite "GME Playlistlist" (https://github.com/entropia/tip-toi-reveng/wiki/GME-Playlistlist) zunächst Zweifel. Dort steht: "A 16bit value followed by that many 32bit offsets to playlists."
> Mir war zuerst nicht klar, von wo aus diese Offsets gerechnet werden sollen. Vom Beginn der Playlistlist jedenfalls nicht, dafür waren die Werte viel zu groß. Nach etwas Nachdenken bin ich dann dahinter gekommen. Der Offset für die Playlistlist ist in Adresse 0x0071 gespeichert. Die gelisteten Offsets innerhalb dieser Playlistlist werden auch genau von Adresse 0x0071 aus adressiert! Vielleicht könnte man hinter den o.g. Satz aus der Dokumentation ergänzen: "These offsets have to be applied to the address where the playlistlist offset is stored (0x0071)."
> Ob das nötig oder sinnvoll ist, kann ich nicht bewerten. Und ich weiß auch nicht ob es sinnvoll ist, die Adresse konkret hineinzuschreiben. Ich habe es mal getan, damit deutlicher wird, was ich überhaupt meine. :)
> Viele Grüße
> Thomas
> Am 16.10.2020 um 10:46 schrieb Joachim Breitner via tiptoi:
> > Hallo,
> > 
> > Am Donnerstag, den 15.10.2020, 17:28 +0000 schrieb Thomas Schäfer via
> > tiptoi:
> > > Habe ich das aber richtig verstanden? Wenn ich die passende Adresse im HEX-Editor ausfindig mache und die OID korrekt eintrage, dann sollte/könnte das theoretisch funktionieren, ja?
> > 
> > ich denke schon. Erfolgsberichte sind willkommen, vielleicht lernst du
> > ja noch was neues (oder kannst wenigstens bestätigen was auf
> >  https://github.com/entropia/tip-toi-reveng/wiki/GME-Special-symbols
> > steht)
> > 
> > Cheers,
> > Joachim
> > 
-- 
Joachim Breitner
  mail at joachim-breitner.de
  http://www.joachim-breitner.de/






Mehr Informationen über die Mailingliste tiptoi