Autor |
Nachricht |
< Teil von etwas (Inventar) |
|
Verfasst am:
Fr, 21 Jan 2011 - 17:05
|
|
|
Neuling

Anmeldungsdatum: 19.01.2011
Beiträge: 10
|
|
Hallo zusammen,
ich kaempfe mich gerade durch die Untiefen von Inform7 und da kommen wohl zwangslaeufig einige Fragen auf.
Ist es moeglich im Inventar Dinge die zusammen gehoeren, auch gemeinsam aufzulisten? Im konkreten Fall: Wenn ich einen Anzug habe und einen weiteren Gegenstand der (wenn man ihn anzieht) "part of the" Anzug wird, kann man den zweiten Gegenstand dann direkt nach dem Anzug, am besten etwas eingerueckt, anzeigen lassen? Oder noch besser, wenn etwas "part of something" wird, dass es dann immer mit dem, ich nenn's jetzt mal Elternteil, aufgelistet wird?
Idealerweise sollte das Teil welches "part of" wird, dann auch mit abgelegt werden, wenn das "Elternteil" aus dem Inventory verschwindet.
Vielleicht liege ich da mit der Eigenschaft "is part of something" ja auch voll daneben?!
Gruss
Christian |
|
|
|
 |
|
Verfasst am:
Sa, 22 Jan 2011 - 0:53
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Hallo Christian, willkommen im flachen Gewässer!
Teile von Dingen werden in I7 nicht automatisch im Inventar zusammengefasst. Der Inhalt von Dingen (Behältern) hingegen schon. Hier mal ein Beispiel mit extra eingerücktem Inventar und Spiegelstrichen, in dem ein Kostüm, das in Wirklichkeit ein Behälter ist, aus drei Teilen besteht:
"Testlabor"
Include German by Team GerX.
Use inventory indent and the inventory hyphen bullet. [Tiefere Einrückungen und Spiegelstriche im Inventar.]
A thing is usually privately-named. A room is usually privately-named. [Englische Objektbezeichner können verwendet werden.]
The Lab is a room. The printed name is "Labor". Understand "Labor" as the Lab.
The pyjama bottoms is a wearable female thing. The printed name is "blau[^] Pyjamahose". Understand "blau", "Pyjamahose", "Hose" as the pyjama bottoms.
The T-shirt is a wearable neuter thing. The printed name is "blau-rot[^] T-Shirt". Understand "T Shirt", "T-Shirt", "Shirt", "Hemd", "Oberteil" as the t-shirt.
The mask is a wearable female thing. The printed name is "Spiderman-Maske". Understand "Spiderman" and "Maske" as the mask.
The costume is a neuter wearable container. The printed name of the costume is "Spiderman-Kostüm[-s]". Understand "Spiderman", "Kostuem" and "Outfit" as the costume.
The costume is worn by the player.
The pyjama bottoms are in the costume.
The T-shirt is in the costume.
The mask is in the costume.
Test me with "inventar".
Das ergibt:
Code: | >[1] inventar
Du hast Folgendes bei dir:
- ein Spiderman-Kostüm (angezogen)
- eine blaue Pyjamahose
- ein blau-rotes T-Shirt
- eine Spiderman-Maske |
Man kann sowas sicher auch für echte Teile hinkriegen, oder Dinge von Hand im Inventar gruppieren, aber da muss ich leider passen. Ich habe mal ein Spiel geschrieben, in dem Kostüme aus verschiedenen Teilen eine wichtige Rolle spielen (allerdings in I6); das sieht erstmal harmlos aus, ist aber alles andere als trivial.
In dem obigen Beispiel funktioniert das Ausziehen von Teilen des Kostüms nicht, weil Dinge nicht gleichzeitig in dem Kostüm und angezogen sein können (zumindest in I7). Mit Teilen wird's noch schwieriger, denn die sind fest mit dem Mutterobjekt verschweißt. Ich habe das in meinem Spiel (Klub Karisma) so gelöst, dass alle Einzelteile Kleidung waren, solange, bis das Kostüm einmal komplett angezogen war. Dann wurden alle Teile zu einem Gesamtkostüm zusammengesetzt, das man nur als Ganzes wieder ausziehen (und danach auch wieder anziehen) konnte. Das Zerlegen in die Einzelteile war für das Spiel nicht wichtig und deshalb habe ich mir diese Mühe gespart. Erschwerend hinzu kam noch, dass man die Kleidung in mehreren Schichten tragen konnte. Ich habe für das ganze Anziehen und Ausziehen eine neue Klasse (Kind) für Kostüme definiert, in der der ganze Kram geregelt wurde. Es gab zusätzlich noch eine Klasse "Gown", die man über einem Kostüm tragen konnte. Und dann noch bestimmte Unterwäsche, die man erst ausziehen konnte, wenn man die Schicht darüber ausgezogen hat. Und Schuhe, mit Socken drunter oder auch nicht. Ziemlicher Irrsinn.
Viel Erfolg und immer 'ne Handbreit Wasser unterm Kiel,
Christian |
|
|
|
 |
|
Verfasst am:
Sa, 22 Jan 2011 - 11:23
|
|
|
Neuling

Anmeldungsdatum: 19.01.2011
Beiträge: 10
|
|
Hallo Christian,
vielen Dank für die schnelle und ausführliche Antwort!
Mit Deinem Beispiel als Grundlage, hab' ich eine - für mich erst einmal - ausreichende Lösung gefunden. Ob es jetzt für die Klamotten großen Sinn macht weiß ich nicht, in meiner Story soll ein Anzug - genauer ein Raumanzug - mit zusätzlichen Ausrüstungsgegenständen "bestückt" werden können.
Irgendwie hab' ich bei meinen ersten Versuchen mit einem Haufen "Instead"-Anweisungen alles etwas durcheinandergebracht. Das meiste konnte ich dann mit "Before"- oder "After"-Konstrukten lösen, was die Inform7 Engine dann wohl etwas besänftigt hat. Das Beispiel unten wäre dann auch nur ein Minimalbeispiel, da viele Aktionen noch abgefangen werden müssten.
Btw., kann das jemand bestätigen, dass man mit "Instead" die Abläufe etwas durcheinanderwürfeln kann, wenn man nicht aufpasst?
Nun, wie dem auch sei, hier mal der Quelltext:
"Testlabor"
Include German by Team GerX.
Use inventory indent and the inventory hyphen bullet. [Tiefere Einrückungen und Spiegelstriche im Inventar.]
A thing is usually privately-named. A room is usually privately-named.
The Lab is a room. The printed name is "Labor". Understand "Labor" as the Lab.
[ -----------------------------------------------------------------------------------------------------]
A suit is a kind of thing. A suit is always wearable.
[ -----------------------------------------------------------------------------------------------------]
The pyjama bottoms is a wearable female thing in the lab. The printed name is "blau[^] Pyjamahose". Understand "blau", "Pyjamahose", "Hose" as the pyjama bottoms. A pyjama can be a costume part. The pyjama is a costume part.
The T-shirt is a wearable neuter thing in the lab. The printed name is "blau-rot[^] T-Shirt". Understand "T Shirt", "T-Shirt", "Shirt", "Hemd", "Oberteil" as the t-shirt. A T-shirt can be a costume part. The T-shirt is a costume part.
The mask is a wearable female thing in the lab. The printed name is "Spiderman-Maske". Understand "Spiderman" and "Maske" as the mask. A mask can be a costume part. The mask is a costume part.
The costume is a neuter suit. The printed name of the costume is "Spiderman-Kostüm[-s]". Understand "Spiderman", "Kostuem" and "Outfit" as the costume.
The costume is worn by the player.
[ -----------------------------------------------------------------------------------------------------]
After wearing something that is a costume part, now the noun is part of the costume.
After printing the name of a costume when taking inventory:
let K be list of things which are part of a suit;
repeat with n running through K:
say "[line break] - [n] (Teil des Kostüms)";
say "[line break] "
Before taking off something that is part of a suit:
now the player carries the noun;
say "Irgendwie fuehle ich mich nackt ohne [the noun].";
stop the action.
[ -----------------------------------------------------------------------------------------------------]
Test me with "nimm maske / nimm shirt / nimm hose / zieh maske an / zieh shirt an / zieh hose an / inventar / zieh hose aus / inventar".[/code]
Ergebnis:
Code: |
> nimm hose
In Ordnung.
> nimm maske
In Ordnung.
> nimm shirt
In Ordnung.
> i
Du hast Folgendes bei dir:
- ein blau-rotes T-Shirt
- eine Spiderman-Maske
- eine blaue Pyjamahose
- ein Spiderman-Kostüm
(angezogen)
> zieh hose an
> zieh shirt an
> zieh maske an
> i
Du hast Folgendes bei dir:
- ein Spiderman-Kostüm
- blaue Pyjamahose (Teil des Kostüms)
- blau-rotes T-Shirt (Teil des Kostüms)
- Spiderman-Maske (Teil des Kostüms)
(angezogen)
> zieh hose aus
Irgendwie fuehle ich mich nackt ohne die blaue Pyjamahose.
> i
Du hast Folgendes bei dir:
- eine blaue Pyjamahose
- ein Spiderman-Kostüm
- blau-rotes T-Shirt (Teil des Kostüms)
- Spiderman-Maske (Teil des Kostüms)
(angezogen)
> |
Was mich jetzt noch stört, ist, dass der Text "(angezogen)" am Ende der Liste erscheint und nicht hinter dem Kostüm.
> Use inventory indent and the inventory hyphen bullet.
Das sind so kleine nützliche Dinge, über die man aber glaube nur durch Zufall stolpert, oder?! :-)
Noch mal danke!
Ah, eins interessiert mich noch sehr, kann man sich im laufenden Spiel von einem Objekt alle Eigenschaften auflisten lassen? Das wäre zum debuggen sehr hilfreich. Über die Befehle "Actions on/off" bin ich auch nur durch Zufall gestolpert. Inform7 scheint ein steiniger Weg zu sein...
Gruß
Christian
Edit: In diesem Beispiel ist es natürlich Quatsch, dass man das Kostüm schon trägt wenn man den Rest noch nicht angezogen hat... - Aber das war ja nicht das Problem. |
|
|
|
 |
|
Verfasst am:
Sa, 22 Jan 2011 - 16:42
|
|
|
Wasserträger

Anmeldungsdatum: 08.11.2010
Beiträge: 48
Wohnort: Lüneburger Heide
|
|
Hallo Christian,
auch von mir noch ein herzliches "Willkommen hier im Forum"!
Zitat: | Btw., kann das jemand bestätigen, dass man mit "Instead" die Abläufe etwas durcheinanderwürfeln kann, wenn man nicht aufpasst? |
Ja, das kann passieren, weil "Instead"-Regeln die üblichen Regeln für die jeweilige Handlung umgehen (sie laufen eben "instead", also stattdessen). Wenn ich mich richtig erinnere, ist die Reihenfolge der Regeln, die ablaufen, wenn eine Handlung erfolgt, so:
1. Before
2. Instead
3. Check
4. Carry Out
5. After
6. Report.
Wenn man für eine Handlung nun eine Instead-Regel angibt, dann wird der Inhalt dieser Regel ausgeführt und danach ist die Handlung direkt beendet (d. h., alle folgenden Regeln (3-6) werden dann nicht mehr berücksichtigt). Einen genaueren Einblick gibt es u. a. in den Kapiteln 7.2, 12.2 und 12.21 in der Inform-Dokumentation.
Zitat: | Ah, eins interessiert mich noch sehr, kann man sich im laufenden Spiel von einem Objekt alle Eigenschaften auflisten lassen? |
Ja, mit "showme" kann man eine Auflistung der Objekte im aktuellen Raum anzeigen lassen, und mit "showme Objektname" (z. B. "showme Hose") werden die Eigenschaften eines Objekts aufgelistet (egal, ob es im selben Raum ist oder nicht).
Ein weiterer Test-Befehl, der manchmal nützlich sein kann: "rules on/off".
Hast Du vor, einen Grand-Prix-Beitrag einzureichen? Wäre cool!
Viel Spaß weiterhin wünscht
Michael |
|
|
|
 |
|
Verfasst am:
Sa, 22 Jan 2011 - 17:47
|
|
|
Neuling

Anmeldungsdatum: 19.01.2011
Beiträge: 10
|
|
Hallo,
danke fuer das Addendum und die Tipps!
Zitat: | Ja, mit "showme" kann man eine Auflistung der Objekte im aktuellen Raum anzeigen lassen, und mit "showme Objektname" (z. B. "showme Hose") werden die Eigenschaften eines Objekts aufgelistet (egal, ob es im selben Raum ist oder nicht).
Ein weiterer Test-Befehl, der manchmal nützlich sein kann: "rules on/off". |
Hätte ich die Befehle von Anfang an gekannt... :-)
Für einen Beitrag beim Grand Prix bin ich zu spät dran, als Autor- und Inform7-Neuling bekomme ich das auf die schnelle nicht hin. Jedenfalls nichts, was meinen Ansprüchen und vermutlich den, der meisten potentiellen Spieler, genügen würde. Das will ich dann auch keinem zumuten. ;-)
Gruß
Christian |
|
|
|
 |
|
Verfasst am:
Di, 25 Jan 2011 - 0:15
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Christian hat folgendes geschrieben: | Was mich jetzt noch stört, ist, dass der Text "(angezogen)" am Ende der Liste erscheint und nicht hinter dem Kostüm. |
Das könntest Du so ändern:
After printing the name of a costume when taking inventory:
if the costume is worn by the player, say " (angezogen)";
let K be list of things which are part of a suit;
repeat with n running through K:
say "[line break] - [n] (Teil des Kostüms)";
omit contents in listing.
Leider stimmen dann aber die Einrückungstiefen für die verschiedenen Inventar-Ebenen immer noch nicht so ganz. Und >INVENTAR ALS SATZ bringt alles durcheinander. Na ja.
Christian hat folgendes geschrieben: | > Use inventory indent and the inventory hyphen bullet.
Das sind so kleine nützliche Dinge, über die man aber glaube nur durch Zufall stolpert, oder?! :-) |
... oder wenn man in der Kurzdoku, die in GerX enthalten ist (und die man in Dokumentationsteil der Entwicklungsumgebung --> Installed Extensions --> German einsehen kann) unter Kapitel 7 nachliest oder HIER klickt ;-) Da sind noch mehr Optionen aufgelistet, die es nur in der deutschen Übersetzung gibt.
Viele Grüße,
Christian |
|
|
|
 |
|
Verfasst am:
Di, 25 Jan 2011 - 21:23
|
|
|
Neuling

Anmeldungsdatum: 19.01.2011
Beiträge: 10
|
|
Hallo!
Zitat: | Leider stimmen dann aber die Einrückungstiefen für die verschiedenen Inventar-Ebenen immer noch nicht so ganz. |
Die Einrueckungstiefe ist mit ein paar Leerzeilen ok:
Code: |
say "[line break] - [n] (Teil des Kostüms)"; |
Zitat: | Und >INVENTAR ALS SATZ bringt alles durcheinander. Na ja. |
Mhmm, stimmt. Wusste gar nicht dass es >INVENTAR ALS SATZ gibt. :-) Das koennte man ja noch umleiten auf ein "normales" >INV.
Zitat: | Zitat: | Christian hat folgendes geschrieben:
> Use inventory indent and the inventory hyphen bullet.
Das sind so kleine nützliche Dinge, über die man aber glaube nur durch Zufall stolpert, oder?! :-)
|
... oder wenn man in der Kurzdoku, die in GerX enthalten ist (und die man in Dokumentationsteil der Entwicklungsumgebung --> Installed Extensions --> German einsehen kann) unter Kapitel 7 nachliest oder HIER klickt ;-) |
Ja, ja, ich weiss! :-) Aber so kurz ist die Kurzdoku auch nicht!
Nochmals danke! Das letztendliche Ergebniss werde ich dann mal als Snippet posten.
Gruss
Christian |
|
|
|
 |
|
Verfasst am:
Di, 25 Jan 2011 - 21:49
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Christian hat folgendes geschrieben: | Mhmm, stimmt. Wusste gar nicht dass es >INVENTAR ALS SATZ gibt. :-) |
Das ist noch nicht so richtig (eigentlich gar nicht) dokumentiert (ja, warum eigentlich nicht???). Das ist ein deform-Feature, das wir erst Ende August 2010 in GerX implementiert haben -- und es funktioniert etwa so (Zitat aus dem Changelog der Version 3/100828):
Zitat: | -- Das Anzeigen des Inventars funktioniert nun wie in deform. Der Spieler
kann zwischen zwei Anzeige-Stilen wählen:
"inventar hoch/liste/lang"
"inventar als liste"
ändern den Inventar-Stil auf "Liste" und zeigen das Inventar als
Liste an (Standard).
"inventar quer/satz/breit"
"inventar als satz"
ändern den Inventar-Stil auf "Satz" und zeigen das Inventar als
Satz an.
Anstelle des Verbs "inventar" können wie gewohnt auch die synonymen
Kommandos "i/inv/besitz/eigentum" verwendet werden. Beide Einstellungen
funktionieren auch mit den Optionen Non-nested lists, inventory indent
und inventory bullet. |
Was da nicht steht, ist, dass die dazugehörige Steuervariable "inventory style" heißt und die Werte "wide inventory" und "tall inventory" annehmen kann.
Christian hat folgendes geschrieben: | Das koennte man ja noch umleiten auf ein "normales" >INV. |
Könnte man. Dann würden Fans dieser Umschaltmöglichkeit (gibt es I-Quer-Fans?) vielleicht etwas traurig sein. Oder auch nicht, wenn keiner davon weiß. Ich glaube für I6/deform war das auch nirgendwo dokumentiert. Das werde ich dann wohl mal in der nächsten GerX-Version nachholen. Vielleicht gibt's sogar noch mehr, das noch dokumentiert werden muss ...
Christian hat folgendes geschrieben: | Aber so kurz ist die Kurzdoku auch nicht! |
... deshalb vielleicht ;-)
Grüße,
Christian |
|
|
|
 |
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|