Autor |
Nachricht |
< Wie lege ich den Spieler beim Start des Spieles ins Bett? |
|
Verfasst am:
Fr, 20 Feb 2004 - 13:44
|
|
|
Wasserträger
Anmeldungsdatum: 26.08.2002
Beiträge: 107
Wohnort: Coburg
|
|
Ich habe ein Problem, ich möchte das Spiel im Schlafzimmer beginnen und ich soll schon bei Beginn des Spiels im Bett liegen (und nicht sinnlos im Raum herumstehen obwohl ein sehr gemütliches Bett vorhanden ist). Ich habe jede Menge ausprobiert, aber ich stehe mir beim Start des Spiels immer noch die Beine in den Bauch. _________________ http://www.bier.de |
|
|
|
|
|
Verfasst am:
Fr, 20 Feb 2004 - 18:31
|
|
|
Neuling
Anmeldungsdatum: 07.10.2003
Beiträge: 15
Wohnort: Verden
|
|
Hi,
bei deinem Problem kann ich dir helfen, denk ich.
Code: | Aktion Anfang
Ausf
Text 'bla bla'
...
GeheZu eins
Ausf liegen_auf bett !! die lösung
EndeAusf
Raum eins
Name 'eins'
Besch 'Testareal 1'
Obj bett
Name 'bett' n
Subst 'bett' n
Ort eins
Attr liege
Besch 'Ein flauschiges Bettchen.'
|
So das wars. Damit kann dein Spieler frisch gestärkt den Spieletag beginnen. :-) |
|
|
|
|
|
Verfasst am:
Fr, 20 Feb 2004 - 19:37
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Das Liegen birgt einige Tücken. Man kann zwar gehezu mit Objekten benutzen, dann bleibt aber die Variable bSitz undefiniert. Da gehezu auch die Raumbeschreibung ausgibt, muss man bSitz vorher setzen:
Code: |
#DAT 'normal.adv'
Aktion Anfang
Ausf
Text 'Drrrring! Uuaaah! Was? Schon 9:05 Uhr?[#]
[f]D A S E R W A C H E N[n]
[x]eine Geschichte für nicht ganz Ausgeschlafene.[#]'
sei bSitz %liegen
geheZu in dein_Bett
EndeAusf
Raum dein_Zimmer
Name 'Dein Zimmer in der IF-de-WG'
raus dort_lauert_der_Tod
Besch 'Dies ist dein Zimmer, das du vor einem Jahr in
der IF-de-WG bezogen habe. Es ist das "Curses!"-Zimmer,
weil du immer so laut fluchen musst, wenn du über das
Kabel der Stehlampe stolperst. Das zweite Möbelstück
neben der Stehlampe ist dein Bett, das in der Mitte des
Zimmers steht, um den Raum größer wirken zu lassen. Es
ist nicht das schönste Zimmer, etwas schlampig in Inform
impementiert, aber besser als nichts.
[[*** Programming Error: Tried to read entry 5 from array
"bewohner" which has entries from 0 up to 2. ***]]'
Obj dein_Bett
Name 'Bett' n
Subst 'bett' n, 'heia' f
Besch 'Das Bett hast du von deinem Vormieter, Christoph,
übernommen.'
Ort dein_Zimmer
Attr Sitz Liege fest Ablage in_Obj
Weg dort_lauert_der_Tod
Ausf
Text '[[***Programming Error: Tried to move "wg" into
"flur" which is a child of "wg" thus creating an
infinite loop. ***]]'
gestorben
EndeAusf
|
Torstens Lösung funktioniert auch, allerdings muss der Spieler bereits im richtigen Raum sein und es wird dann "Du liegst nun in dem Bett" ausgegeben. Daher muss man das Liegen still ausführen, und dann die Raumbeschreibung explizit anfordern:
Code: |
Aktion Anfang
Ausf
Text 'Drrrring! Uuaaah! Was? Schon 9:05 Uhr?[#]
[f]D A S E R W A C H E N[n]
[x]eine Geschichte für nicht ganz Ausgeschlafene.[#]'
setze still
gehezu dein_Zimmer
Ausf liegen_auf dein_Bett
lösche still
Ausf lage
EndeAusf
|
P.S.: Es kann sein, das das in älteren (sprich uralten) T.A:M.s nicht funktioniert. Dann bitte die neueste T.A.M. verwenden. Danke. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mo, 23 Feb 2004 - 11:14
|
|
|
Wasserträger
Anmeldungsdatum: 26.08.2002
Beiträge: 107
Wohnort: Coburg
|
|
Klasse, hat mir geholfen Danke. Habe aber die 2 Lösungen kombinieren müssen, da bei Martins Lösung die DOS-Tam vor der Raumbeschreibung die Zahlenfolge "1, 1" ausgibt, sowie angibt daß der Spieler auf dem Bett liegt, was nicht vonnöten ist, da sich schon aus der Beschreibung des Raumes ergibt, daß der Spieler liegt. Meine Lösung im folgenden:
Code: |
...
Sei bSitz %liegen
GeheZu Schlafzimmer
Ausf liegen_auf Bett
...
|
Diese Version bringt in der DOS-Tam sowie in der Windows-Tam das gewünschte Ergebnis. _________________ http://www.bier.de |
|
|
|
|
|
Verfasst am:
Mi, 10 März 2004 - 16:43
|
|
|
Neuling
Anmeldungsdatum: 27.01.2004
Beiträge: 10
Wohnort: Hannover
|
|
Ich habe die Lösung von binzl übernommen, aber ich würde gerne dem Spieler weitere Aktionen verbieten bis er aufgestanden ist. Das, was ich bisher zustande gekriegt habe ist das:
Code: |
aktion vorher
ausf
wenn (aRaum=krankenflügel) und (bSitz=%liegen) und
/(aBef=aufstehen lage inventar) dann
text 'Du musst vorher aufstehen.'
stop
ende
endeAusf
|
Allerdings kommt dann immer wenn man aufstehen will die Meldung 'Wieso? Du stehst doch schon.' Wo ist der Fehler? Wenn ich die Aktion ausschalte, funktioniert alles wieder einwandfrei. |
|
|
|
|
|
Verfasst am:
Mi, 10 März 2004 - 19:07
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Hmm, tatsächlich funktioniert Binzls Ansatz. Ich hätte gedacht, dass nach der Raumbeschreibung etwas wie "Du hast dich ins Bett gelegt" kommt. Aha - kommt es auch. Nicht, wenn das Spiel anfängt, aber nach dem Neustart. Auch, wenn das eher ein Fehler der T.A.M. zu sein scheint (bzw. ist), bitte still setzen, wenn der Spieler am Anfang ins Bett gelegt wird.
Was beim Abfangen fehlschlägt, weiß ich auch nicht genau. Irgendwie wird aSitz oder etwas ähnliches verbogen, so dass der Spieler jetzt nicht mehr auf dem Bett ist. In der Statuszeile und auch bei der Raumbeschreibung taucht die Information darüber jedenfalls nicht mehr auf.
Folgendes funktioniert aber:
Code: |
Aktion Vorher
Ausf
wenn (aSitz = dein_Bett) und (bSitz = %liegen) und
/(aBef = steigen_von aufstehen lage inventar) dann
Text 'Du musst vorher aufstehen.'
stop
Ende
EndeAusf
|
Hier wird aSitz statt aRaum abgefangen. Damit wird das Bett, nicht das Krankenzimmer überprüft. Bei den Befehlen, die übersprungen werden, muss steigen_von hinzugefügt werden, denn aufstehen wird in steigen_von aSitz umgewandelt. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Do, 11 März 2004 - 19:33
|
|
|
Wasserträger
Anmeldungsdatum: 26.08.2002
Beiträge: 107
Wohnort: Coburg
|
|
Ich selbst habe allen Objekten die der Spieler im Liegen nicht erreichen kann das Attribut 'unerreichbar' gegeben, somit war gesichert, daß der Spieler nicht alles im Liegen machen kann und quasi dazu gezwungen ist aufzustehen um weiterzukommen. Sobald der Spieler steht ist das Attribut automatisch hinfällig. _________________ http://www.bier.de |
|
|
|
|
|
Verfasst am:
So, 6 Jun 2004 - 12:17
|
|
|
Neuling
Anmeldungsdatum: 04.06.2004
Beiträge: 2
Wohnort: Thüringen
|
|
Bisher hat es zwar gereicht, still und heimlich mitzulesen, aber jetzt muss ich doch auch mal ne Frage stellen.
Die Lösungen bedeuten ja, den Spieler AUF das Bett zu legen, aber nicht IN das Bett. Lediglich Martin's Lösung legt den Spieler direkt in das Bett, erzeugt aber bekanntermaßen 1, 1 vor der Ausgabe. Lässt sich das umgehen oder gibt es noch eine andere Möglichkeit, den Spieler zu Beginn in ein Objekt zu legen?
Und lässt sich "lege auf" und "lege in" trennen? Wenn man mit Martins Code arbeitet, kann ich nichts mehr auf das Bett legen, sondern es wird automatisch in das Bett gelegt. Ist es möglich, etwas in das Bett zu legen und etwas darauf legen zu können?
(ist als Ablage und Behälter definiert) |
|
|
|
|
|
Verfasst am:
Mo, 7 Jun 2004 - 12:21
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Nadine hat folgendes geschrieben: | Und lässt sich "lege auf" und "lege in" trennen? |
Ich habe mir ein Bett gebaut, in das man sich hinein- oder draufLEGEN kann; man kann sich aber auch hinein- oder draufSETZEN. Ebenso können Dinge darauf abgelegt und/oder hineingelegt werden (z.B. das Tablett AUF das Bett und die Giftschlange IN das Bett!).
Code: | Obj Bett
Name 'Bett' n
Subst 'bett' n 'poofe' f 'heia' f
Ort Wohnzimmer
Attr immobil Sitz Ablage Behälter Liege In_Obj
Besch 'Ein selbst gezimmertes Bett aus echtem Regenwald-Teakholz.'
VorAusf
(sitzen_auf liegen_auf)
Wenn (aPräp = 'auf') dann
AttrWeg selbst In_Obj
Ende
Wenn (aPräp = 'in') dann
AttrHin selbst In_Obj
Ende
EndeAusf |
|
|
|
|
|
|
Verfasst am:
Di, 8 Jun 2004 - 16:43
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Noch mal zum ursprünglichen Thema: Wenn man den Spieler in einem Bett aufwachen lassen will, ohne dass er erkennen kann, in welchem Raum er sich befindet (und ohne dass er irgendwelche Objekte außer denen im Bett manipulieren kann), könnte man das Bett doch auch als Raum deklarieren. Nach dem Aufstehen wird dieser Raum dann nie wieder betreten, denn nach dem Aufstehen würde man sich wie gehabt in (oder auf) das Objekt "Bett“ legen. Natürlich müssen mit dem Aufstehen eventuell im Raum "Im_Bett“ zurückgelassene Objekte in (oder auf) das Objekt "Bett" gelegt werden.
Das ist vielleicht nicht ganz elegant, aber die Eleganz könnte doch auch mal dem Effekt Platz machen.
Beispiel für einen Startraum „Im_Bett“:
Code: | Raum Im_Bett
Name 'Im Bett'
Besch 'Du liegst in einem Bett. Wo du genau bist, kannst du nicht erkennen.'
VorAusf
(aufstehen)
Text 'Langsam rappelst du dich hoch. Jetzt kannst du auch
sehen, dass du dich in deinem Wohnzimmer befindest. Warum das
Bett in deinem Wohnzimmer steht, kannst du dir beim besten
Willen nicht erklären.[#]'
Schleife xObj
Wenn (xObj hier) und /(xObj beiMir) dann
ObjNach xObj in Bett ! oder "auf Bett"
Ende
Ende
GeheZu Wohnzimmer
Stop
EndeAusf |
|
|
|
|
|
|
Verfasst am:
Fr, 11 Jun 2004 - 12:28
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Zitat: | Lediglich Martin's Lösung legt den Spieler direkt in das Bett, erzeugt aber bekanntermaßen 1, 1 vor der Ausgabe. |
Also, die DOS-T.A.M. vom 06.03.2003, die auch im aktuellen Paket enthalten ist, erzeugt bei mir kein "1, 1". Bitte aktualisieren!
Zitat: | Und lässt sich "lege auf" und "lege in" trennen? Wenn man mit Martins Code arbeitet, kann ich nichts mehr auf das Bett legen, sondern es wird automatisch in das Bett gelegt. Ist es möglich, etwas in das Bett zu legen und etwas darauf legen zu können? (ist als Ablage und Behälter definiert) |
Wenn ich das Spiel oben kompiliere, kann ich nur Dinge auf das Bett legen, das Hineinlegen wird mit "Das Bett ist keine Ablage" quittiert. Wenn ich zusätzlich das Attribut Ablage definiere, kann man Dinge ins Bett legen, aber der Ablage- und der Behälterteil des Betts werden getrennt: "Auf dem Bett siehst du eine alte Zeitung und drei Äpfel. In dem Bett siehst du einen Kompass."
In diesem Fall will man wohl eher, dass "lege Ball ins Bett" und "lege Ball aufs Bett" dasselbe bedeuten. Ein einfaches Umleiten von hineinlegen in darauflegen funktioniert nicht, aber mit dem folgenden Code haut's hin:
Code: |
Obj dein_Bett
...
VorAusf
(empfangen) sei aPräp 'auf'
EndeAusf
Attr Sitz Liege fest Ablage in_Obj
|
_________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Do, 15 Jul 2004 - 15:52
|
|
|
Wasserträger
Anmeldungsdatum: 10.07.2004
Beiträge: 104
Wohnort: Hannover
|
|
Ich habe auch vor, den Spieler ins Bett zu legen, aber nur, wenn er einen Befehl eingibt.
Wie mache ich das denn?
Code: | Bef Hokuspokus
Name 'zaubern'
Verb 'hokuspokus'
Ausf
geheZu in Bett
EndeAusf |
In etwa so? Oder wie? Wie ist das mit dem Liegen? _________________ Subst 'TAG-Amateur' m
Adj 'lieb' 'nett'
Attr Person
Besch 'Er ist im Moment [selbst.Zust].' |
|
|
|
|
|
Verfasst am:
Do, 15 Jul 2004 - 16:08
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Zitat: | Wie mache ich das denn? ... In etwa so? Oder wie? |
Ja, genau. Vermutlich so. Hast du den Code nicht ausprobiert, bevor du uns im Forum fragst? Ruhig deine Idee mal kompilieren uns sehen, ob's klappt - viel passieren kann ja nicht. (Ein hängengebliebenes DOS-Fenster ist bei mir nicht "viel". ;-)
Zitat: | Wie ist das mit dem Liegen? |
Die Antwort hierzu* haben die Forums-Benutzer auf dieser Seite versteckt. Findest du sie?
________
*) sei bSitz %liegen _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Do, 15 Jul 2004 - 17:29
|
|
|
Wasserträger
Anmeldungsdatum: 10.07.2004
Beiträge: 104
Wohnort: Hannover
|
|
Das heißt, es geht folgendermaßen?
Code: | Bef Hokuspokus
Name 'zaubern'
Verb 'hokuspokus'
Ausf
geheZu in Bett
sei bSitz %liegen
EndeAusf |
Wie ist es denn mit
Code: | Ausf
[...]
Ausf liegen_auf bett
[...]
EndeAusf |
_________________ Subst 'TAG-Amateur' m
Adj 'lieb' 'nett'
Attr Person
Besch 'Er ist im Moment [selbst.Zust].' |
|
|
|
|
|
Verfasst am:
Do, 15 Jul 2004 - 22:43
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Zitat: | Das heißt, es geht folgendermaßen? |
Nochmal: Die beste Möglichkeit, zu überprüfen, ob Code funktioniert, ist ihn tatsächlich zu erzeugen und auszuprobieren. Das geht leicht und bringt auch das ein oder andere Erfolgserlebnis, probier's aus!
Wenn dann etwas nicht klappt, kann man den Code immer noch hier posten und die Forenbenutzer um Rat fragen. (Es besser zu wissen als andere ist immer schön, den Code für andere zu schreiben, weniger. :-)
Dein Code ist fast korrekt, du musst die Variable bsitz vor der Anweisung gehezu definieren, da in dieser die Raumbeschreibung ausgegeben wird, und dann muss bekannt sein, ob der Spieler auf dem Bett liegt, sitzt oder steht.
Code: |
Ausf
sei bSitz %liegen
geheZu in Bett
EndeAusf
|
Dein zweiter Code funktioniert nur, wenn das Bett zum Zeitpunkt des Zauberns sichtbar ist. Vorsicht! Da dies nicht überprüft wird, wenn du Ausf benutzt - die gesamte Überprüfung wird vom Parser vorgenommen - ist dieser Code recht gefährlich und macht eventuell das Spiel kaputt: Der Spieler kann dann auf dem Bett liegen, obwohl er immer noch im Garten ist, wo das Bett nicht steht. Die Meldung heißt dann er liege im Bett, der Spieler kann aber das Bett nicht sehen. Aus dieser Situation kommt man nicht so leicht wieder heraus, also Obacht.
Außerdem schreibt die zewite Möglichkeit etwas wie "Du hast dich ins Bett gelegt.", was bei einem Zauberspruch (oder was auch immer) sicher nicht gewünscht ist. _________________ Every silver lining has a cloud. |
|
|
|
|
|