IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Objekte unsichtbar machen
AntwortenNeues ThemaNeue Umfrage

Objekte unsichtbar machen

Geschrieben um 01:18 am 09.09.2004 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Ich weiß, die Frage hat Tanan schon mal so ähnlich hier im Forum gestellt, nur leider scheint die Antwort zu dem Beitrag gelöscht worden zu sein, also frag ich noch einmal:

Momentan ist mir nur die Möglichkeit über das Attribut „fest“ zum Unsichtbarmachen von Objekten bekannt. Um solche Objekte dennoch zu nehmen (oder auf andere entsprechende Weise zu manipulieren), schalte ich vor der Ausführung das Attribut „fest“ aus und evtl. nach der Ausführung wieder ein; das kann in manchen Fällen recht umständlich sein. Gibt es noch eine andere Möglichkeit, Objekte unsichtbar zu machen, z.B. über ein Objekt-Attribut „unsichtbar“?

Geschrieben um 11:34 am 09.09.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Es stimmt, lediglich Objekte mit dem Attribut fest und Dekos werden in Raumbeschreibungen nicht angezeigt. Dekos sind spezielle Objekte, die ihren Ort und ihren Zustand wähend des Spiels nicht ändern können und immer Dekos bleiben. Die einzige Möglichkeit, über Attribute die Sichtbarkeit zu ändern, ist also wie von dir beschrieben mit fest, das dem Objekt gegeben oder weggenommen wird.

Der Hintergrund ist folgender: Alle Objekte, die der Spieler mitnehmen und woanders wieder ablegen kann, werden im dynamischen Teil der Raumbeschreibung, der Liste der Objekte erwähnt. Das ist so, damit der Spieler immer über den Zustand des Raums inklusive seines Inhalts Bescheid weiß. Das Attribut fest ist für nicht bewegliche Objekte gedacht, die in der (statischen) Raumbeschreibung explizit erwähnt werden. Soll ein solcher Gegenstand in der Liste der beweglichen Objekte auftauchen, womöglich mit einer Erst-Beschreibung (die ja immer angezeigt würde, da das Objekt nicht mitgenommen werden kann und so auch nie vom Programm das Attribut bewegt bekommt), so muss es das Attribut immobil bekommen. (Diese Objekte können natürlich den Raum wechseln, wenn es der Autor so programmiert. Nur der Spieler kann sie nicht mit sich herumtragen.)

Ein Verbergen von Objekten ist natürlich erst einmal eine Irreführung des Spielers, und als solche nicht erwünscht. Es sei denn, sie ist Bestandteil eines Rätsels, und dann ist sie wohl eine Ausnahme, zu der man ruhig etwas mehr Programmieraufwand in Kauf nehmen kann, finde ich. Wenn es in deinem Spiel, aus welchen Gründen auch immer, viele solcher Objekte gibt, ist die wohl eleganteste Lösung eine ObjKlasse, die das Attribut fest so setzt und löscht, wie du es möchtest.

Eine weitere Möglichkeit, ein Objekt unsichtbar zu machen, ist, die Aktion SichtUndRw zu verwenden. Im nachfolgenden Beispiel kann man den Dreizack immer betrachten und anfassen, er wird aber nicht in der Raumbeschreibung erwähnt:


#DAT 'normal.adv'

Aktion Anfang

Ausf

    Text 'Irgendwo hier muss der Dreizack versteckt ein.

    [#][#][f]Z U M   G R E I F E N   N A H[n]

    [x]Ein interaktives Objekteraten[#]'

    geheZu Versteck

EndeAusf

Raum Strand

Name 'Strand'

S Versteck

Besch 'Dieser weiße Sandstrand erstreckt sich von Westen nach

    Osten. Im Süden erhebt sich eine steile Felswand mit einer

    schmalen Öffnung.'

Raum Versteck

Name 'Versteck'

N Strand

Besch 'Dies ist das geheime Versteck von Ragnar dem

    Rotbärtigen, eine klamme und nur leidlich beleuchtete

    Höhle. Der einzige Ausgang ist im Norden, zurück zum

    Strand.'

Obj Zechine

Name 'Zechnine' f

Adj 'golden'

Vor 'gold'

Subst 'zechine' f, 'münze' f

Besch 'Eine goldene Zechine aus Venedig, verziert mit dem

    Konterfei eines der Borgia.'

Ort Versteck

Obj Sextant

Name 'golden^ Sextant' m

Adj 'golden' 'nautisch'

Vor 'gold'

Subst 'sextant' m, 'instrument' n

Besch 'Ein nautisches Instrument, Präzisionsarbeit aus

    Nantes und purem Gold.'

Ort Versteck

Obj Brosche

Name 'Brosche' f

Adj 'golden'

Vor 'gold' 'salamander'

Subst 'brosche' f, 'salamander' m

Besch 'Es ist eine goldene Brosche in der Form eines

    Salamanders.'

Ort Versteck

Raum Limbo

Name 'Zwischen dieser und jener Welt'

Besch 'An einer der immateriellen Wände steht: "Wer das

    liest, ist tot."'

Obj Dreizack

Name 'Dreizack' m

Adj 'golden'

Vor 'gold'

Subst 'dreizack' m, 'gabel' f

Besch 'Ein Dreizack von etwa fünf Ellen Länge, wie er

    früher in der Ägäis benutzt wurde - nur, dass dieser

    aus purem Gold ist.'

Ort Limbo

Aktion SichtUndRw

Ausf

    wenn (aRaum = Versteck) und (iObj = Dreizack) und

        (iObj in Limbo) und /(aBef = Lage) dann

        ObjInRw iObj

        ObjInSicht iObj

    Ende

EndeAusf

Alternativ könnte man in SichtUndRw auch die Sichtbarkeit des Dreizacks beim Befehl "Lage" mit ObjAußerSicht unterdrücken und würde einen Raum sparen. Dann würde der Dreizack (wenn es nicht anders abgefangen würde) im Versteck immer unsichtbar sein, auch wenn er aufgehoben und wieder abgelegt wird. (Das ist mir zu spät eingefallen, ich hatte den Code schon geschrieben...)

Geschrieben um 17:41 am 09.09.2004 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Herzlichen Dank für die ausführliche Antwort und das schöne Beispiel. Dein Vorschlag mit der Aktion SichtUndRw ist bei weitem eleganter, als das, was ich mir da zurechtgebastelt hatte. Es sollen an bestimmten Stellen im Spiel alle anwesenden (beweglichen) Gegenstände unsichtbar werden - so wird’s viel übersichtlicher, danke nochmals.

Geschrieben um 14:19 am 13.09.2004 | Zitat | Editieren | Löschen
Florian
Gast

ChristianB:

[...] nur leider scheint die Antwort zu dem Beitrag gelöscht worden zu sein

Sie lautete meiner Erinnerung nach

Walafrid:

Erst ''

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz