Ein Reck

Turnübungen gehören zum Glück zu den selteneren Rätseln in Textadventures. Dieses Reck illustriert aber ein wichtiges Feature von TAG, die Aktion Vorher - und wie sie helfen kann, etwas ausgefallene Situationen zu implementieren.

Der Spieler steht auf der Matte, unter dem Reck. Um es zu erreichen, muss er hochspringen. Wenn er dann an dem Reck hängt, kann er mit dem Befehl ZIEHE DICH HOCH einen Felgaufschwung probieren und bekommt einen Punkt dafür.

Diese Befehle sollten für den Anfang genügen. Da der Spieler in einer ganz speziellen Situation ist, wenn er am Reck hängt, definiere ich zudem eine spezielle Flagge hängend. Etliche Verben müssen nun in der VorAusf des Raumes abgefangen werden. Wer am Reck hängt, kann nicht mit Eingabe von INVENTAR seine Turnhose durchsuchen, nicht springen, und vielleicht vor Atemnot nicht reden!

Damit ich nicht jeden einzelnen Befehl abfangen muss, verwende ich die Aktion Vorher, die übernimmt, wenn die Flagge hängend gesetzt ist und das Verb nicht separat behandelt werden soll. Sie gibt dann einen Standard-Text aus: »Das kannst du nicht tun, während du am Reck hängst!«

Es folgt der vollständige Quellcode - inklusive Initialisierung, sodass das Ersatzteil wie es ist kompiliert und ausprobiert werden kann.

#STD 'tag.std'


Aktion  Anfang
Ausf
    Text '[f]Turnstunde[n]
          [x]Ein Ersatzteil von Florian Edlbauer
          (www.edlbauer.de)[x][x]'
    GeheZu Turnsaal
EndeAusf


Flagge hängend 0     | Hängt der Spieler an etwas?


Bef     hüpfen
Name    'hüpfen'
Verb    'hüpfe' 'springe' 'springe hoch'
Ausf
  Text  'Du hüpfst wie ein Floh! Hoffentlich hat dich
        niemand gesehen.'
EndeAusf


Bef     springen
Name    'springen'
Verb    'springe' 'hüpfe' 'schwinge dich'
Syntax  über dasObj
Ausf
  Text  'Du könntest dir den Knöchel verdrehen.'
EndeAusf


Bef     hochspringen
Name    'hochspringen'
Verb    'springe hoch' 'hüpfe hoch'
Syntax  an demObj
Ausf
    Text 'Du springst hoch und gewinnst so
         für einen Sekundenbruchteil eine erhöhte
         Perspektive auf [den aObj].'
EndeAusf



Bef     ziehen
Name    'hochziehen'
Verb    'zerre heraus' 'ziehe heraus'
Verb    'ziehe raus' 'zerre raus' 'ziehe hoch'
Verb    'zerre hoch' 'ziehe' 'zerre'
Verb    'zerre herauf' 'ziehe herauf' 'stemme hoch'
Syntax  dasObj
Ausf
  Bed /(aObj Person)
        '[Der aObj] wäre sicher nicht begeistert.'
  Bed (aObj.Gew > MaxGew) oder (aObj Deko)
        'Du kannst [den aObj] nicht weit ziehen.'
  Text  'Es tut sich nichts.'
EndeAusf


Bef     hochziehen_an
Name    'ziehen'
Verb    'ziehe hoch' 'ziehe hinauf' 'ziehe rauf'
Verb    'stemme hoch' 'stemme hinauf'
Syntax  dasObj an demObj
Ausf
    Bed (aObj = ich du)
         'Du kannst grundsätzlich nur dich selbst an
         etwas hochziehen.'
    Text 'An [dem aObj2] kannst du dich nicht
         hochziehen.'
EndeAusf


Obj     Reck
Name    'Reck' n
Subst   'reck' n 'gerät' n
Attr    fest
Erst    ''
Besch   'Das Reck ist größer als du,
        selbst wenn du die Arme ausstreckst.'
Ort     Turnsaal
VorAusf
    (springen)
        Stop 'Das Reck ist größer als du. Aber wenn du
             an ihm hochspringst, kriegst du vielleicht
             die Stange zu fassen..'
    (hochspringen)
        Ausf hüpfen
        Stop
EndeAusf


Raum    Turnsaal
Name    'Im Turnsaal'
Besch   'Du stehst unter dem bedrohlich hohen Reck. Wenn
        dir nicht wenigstens ein Felgaufschwung gelingt,
        bist du durchgefallen - wegen Turnen!'
VorAusf
    (lage)    Wenn (hängend) dann
            Stop 'Du hängst am Reck.'
        Ende
    (hüpfen)
        Wenn /(hängend) dann
            Text    'Du springst am Reck hoch und
                    bekommst die Stange zu fassen.

                    Du hängst jetzt am Reck.'
            Setze hängend
            Stop
        Sonst
            Text    'Du lässt dich zurück auf die
                    Erde fallen.'
            Lösche hängend
            Stop
        Ende
    (hochziehen_an)
        Bed (hängend)
            'Du scheinst nicht in der Situation zu sein,
            in der du dich an etwas hochziehen könnest.'
        Wenn (aObj2 = Reck) dann
            Ausf ziehen
        Ende
    (ziehen)
        Wenn (aObj = ich du) dann
            Bed (hängend)
                'Du kannst dich an nichts hochziehen!'
            Text 'Du ziehst dich mit deinen Armmuskeln
                hoch! Die Freude und die Kraft währen
                nur kurz. Dann fällst du auf die weiche
                Matte. Aber es hat gereicht, um nicht
                durchzufallen![x][x]'
            Lösche hängend
            Punkte 1 1
            Stop
        Ende
     Ende
EndeAusf

Aktion Vorher
Ausf
  Wenn (hängend) dann
    Wenn /(aBef = ziehen lage warten untersuchen) dann
      Wenn /(aBef = hochziehen_an springen hüpfen) dann
          Stop   'Das kannst du nicht tun, während du am
                 Reck hängst!'
      Ende
    Ende
  Ende
EndeAusf

Damit ist das Reck funktionsfähig, aber noch lange nicht realistisch. Wer sich jetzt die Mühe macht, allerlei Befehle abzufangen und dem Spieler LASS DICH FALLEN, KLETTERE AUF DAS RECK und ähnlich naheliegende Dinge zu erlauben, wird sich nicht wundern, dass das eigentlich kurze Spiel Begegnung am Fluss 2300 Zeilen Code umfasst.