In der zweiten Hauptansicht (Objects), werden alle Objekte deines Spiels verwaltet und bearbeitet. Es existiert eine Art Objekt-Datenbank der Objekt-Pool. Diesen findest du links oben unter den Ansichten-Tabs. Der Pool enthält sozusagen die Blaupause der Objekte, welche im Spiel erschaffen werden können. Er kann nicht vom Spieler geändert werden und ist nur für den Entwickler interessant.
Im Spiel selber befinden sich immer nur Kopien eines Poolobjektes. Es können auch Objekte im Spiel existieren, die sich nicht im Pool befinden, diese besitzen dann aber keine Sicherheitskopie von sich. Die Kopie eines Objekts kann seine Eigenschaften ändern, ohne das die Blaupause im Pool geändert wird. Man kann die Objekte im Pool mit Klassen in objektorientierten Programmiersprachen vergleichen.
Klick auf eines der aufgelisteten Objekte, um es zu bearbeiten. Auch in dieser Ansicht lässt sich die Reihenfolge eines gewählten Objekts mit der + und - Taste der Tastatur ändern.
Der B+ Knopf (Basis-Objekte) öffnet eine Auswahl von vorinstallierten Objekten mit besonderen Eigenschaften.
Der Mittelteil der Ansicht ist genau wie die Raumansicht eingeteilt. Oben ist der Objektname (mit Synonymen), darunter die Kurzbeschreibung, die Langbeschreibung und die Befehle des Objektes. Die Steuerung über + Knopf und Mülleimer ist ebenfalls identisch zur Raumansicht.
Rechts ist eine große Ansicht der Objekteigenschaften des aktuelle gewählten Objekts. Diese ist ebenfalls gleich zur Liste der Raumansicht, siehe oben.
Links unten ist die Inventarliste. Hier befinden sich alle Objekte, welche der Spieler im Inventar mit sich führt. Es kann genutzt werden, um beim Start des Abenteuers dem Spieler einige Gegenstände bereits mitzugeben. Es ist auch ein nützliches Tool beim Erstellen des Spiels.
Beschreibung der einzelnen Felder:
Objektname:
Der Objektname ist, anders als bei Räumen, sein sichtbarer Name und gleichzeitig seine ID auf die referenziert wird. Objekte mit exakt gleichem Namen werden nicht unterschieden und es wird immer auf das erste Objekt referenziert welches die Bedingung des Referenzaufrufs erfüllt. Liegen zwei Steine im Raum mit exakt gleichem Namen (Stein), so wird mit "nimm Stein" der erste Stein aufgehoben den das System findet. Wird noch einmal "nimm Stein" ausgeführt, wird der zweite Stein aufgehoben, da nur noch der die Bedingung erfüllt nicht im Inventar zu sein.
Es ist also sinnvoll auch Objekte eineindeutig zu benennen.
Möchte man zwei Objekten aus spielstrategischen Gründen den gleichen Namen geben, dem Spieler aber auch die Möglichkeit anbieten gezielt mit ihnen zu interagieren, gibt es bei den Objektnamen Synonyme.
Namens-synonyme werden in das Objektnamensfeld mit einem Komma getrennt hinter den Objektnamen geschrieben. Sie sind für den Spieler nicht sichtbar, können aber von ihm referenziert werden.
Nur der erste Name des Objekts wird im Spiel angezeigt. Die Synonyme können sich selbsterklären, auf Hinweisen basieren oder speziellen Einsatzzwecken dienen.
Beispiel:
Objekt 1: "Stein,Stein 1,großer Stein"
Objekt 2: "Stein,Stein 2,kleiner Stein"
Der Spieler sieht im Raum zwei Objekte mit dem Namen Stein. Er wird mit "schau Stein" immer auf den ersten Stein der gefunden wird referenzieren. Aber mit "schau Stein 2" oder mit "schau kleiner Stein" wird er mit dem entsprechenden Objekt interagieren.
Synonyme können auch einfach dazu benutzt werden unnötig komplexe Eingaben für den Spieler zu vermeiden und Logiklücken zu schließen.
Ich denke das folgende Beispiel ist selbterklärend:
Hartlederbucheinband,Ledereinband,Bucheinband,Hartledereinband,Einband
Kurzbeschreibung:
Wie bei den Räumen ist das eine kurze Beschreibung des Objekts, welche über den Namen hinausgeht. Sie wird bei dem Befehl schau angezeigt und kann gezielte Details enthalten.
Beschreibung:
Die Langbeschreibung enthält endgültig alle Details und Eigenarten des Objektes, welche für dein Spiel wichtig sind. Hier kann eine kleine Geschichte erzählt, die Herkunft des Objektes beschrieben oder sein Einsatzzweck erklärt werden. Auch Hinweise zu Rätseln oder Teile der Hauptstory sind denkbar.
Befehle:
Befehle funktionieren grundlegend wie in Räumen, nur das sie in den Objekten mit ihren Eigenschaften verankert sind. Es gibt bestimmte Aktionsbefehle, welche nur in Verbindung mit Objekten eingesetzt werden können. Solche Konstrukte werden dann beim jeweiligen Aktionsbefehl beschrieben.
Objekteigenschaften:
Diese Eigenschaften machen ein Objekt erst zu dem, was es ist, oder sein soll. Die Eigenschaften modellieren ein Objekt zu einem Gegenstand, einer Waffe, einem NPC, Gegner, Türen oder sonstiges was man sich vorstellen kann.
Nicht alle Spielelemente und Mechaniken müssen zwingen ein Objekt sein. Viele grundlegende Dinge können auch ohne sie erschaffen werden, aber wenn man wirklich dynamische und komplexe Text-Adventures erstellen möchte sind sie das Mittel der Wahl.
Eigenschaften können bis auf gewisse Ausnahmen beliebig kombiniert werden. So kann ein NPC auch gleichzeitig ein Behälter und sammelbar sein. Kein Problem. Stell dir z.B. eine zahme Maus als Haustier vor, welche dich begleitet und sehr gern Käse mag.
Die Eigenschaften im Einzelnen:
Sammelbar:
Das Objekt kann vom Spieler sowohl aufgehoben und in seinem Inventar verstaut, als auch an einem beliebigen Ort abgelegt werden.
Lichtquelle:
Das Objekt ist eine Lichtquelle (eine generelle Spieleigenschaft). Ein Raum kann auf Lichtquellen geprüft werden, um gewisse Aktionen auszulösen.
Behälter:
Behälter können andere Objekte aufnehmen, geöffnet werden und verschlossen sein. Kisten, Schränke oder Rucksäcke sind gute Beispiele für Behälter.
Zudem hat ein Objekt, welches als Behälter deklariert ist weitere Untereigenschaften:
Volumen Max:
Stellt einen Wert dar, der die Aufnahmegröße des Behältes bestimmt. Befinden sich Objekte in ihm, die ein Volumen haben, kann dieser Maximalwert nicht überschritten werden. Der Behälter ist sozusagen voll. 0 bedeutet das sein Volumen unendlich ist.
Volumen Single:
Ein Objekt kann für sich gesehen zu groß (sperrig) für einen Behälter sein und nicht hinein passen. Das gilt auch wenn das Maximale Volumen noch nicht ausgeschöpft oder unendlich ist. 0 bedeutet das jedes Objekt hineinpassen würde.
Für:
Eine Liste von Objekten die der Behälter aufnehmen kann. Steht mindestens ein Objekt in dieser Liste, kann der Behälter ausschließlich Objekte dieser Liste aufnehmen. Ist die Liste leer, kann jedes Objekt hineingesteckt werden, das nicht auf der Nicht-Für Liste steht.
Für:
Das Gegenstück zur FÜR-Liste. Objekte auf der Nicht-Für-Liste können nicht in den Behälter gesteckt werden.
Verschließbar:
Wie es sich für ordentliche Schatzkisten, Türen oder Zugbücken gehört, können Objekte verschlossen werden. Das ist etwas anderes als geschlossen. Ist ein Objekt verschlossen, so benötigt man einen passenden Schlüssel, um es zu öffnen. Dieser Schlüssel kann ein beliebiges anderes Objekt sein. Behälter geben ihren Inhalt erst preis, wenn man sie geöffnet hat und das geht, nur wenn sie aufgeschlossen sind.
Ein Objekt gilt im Spiel nur als verschlossen, wenn es ein Schlüsselobjekt besitzt. Wird das Schlüsselobjekt angewandt (öffne Objekt mit Schlüsselobjekt), so gilt das verschlossene Objekt als aufgeschlossen UND geöffnet, verliert aber nicht automatisch sein Schlüsselelement.
Das bedeutet, das, wenn der Spieler oder eine Spielmechanik das Objekt wieder schließen, das Objekt erneut verschlossen ist, man also den Schlüssel benötigt, um es wieder öffnen zu können. Das mag am Anfang verwirrend sein, hat aber einen Grund, um einige sehr komplizierte Bedingungen (Multi-Keys) für diese Mechanik zu erfüllen.
Besitzt das Schlüsselobjekt den Befehl:
;;KillKey. So wird der Schlüssel aus der Schlüsselliste des verschlossenen Objektes entfernt. Es kann danach auch ohne den Schlüssel geöffnet werden. Das ist der sich am natürlichsten anfühlende Fall. Eine Tür verschließt sich normalerweise ja nicht selber.
Es gibt keinen Mechanismus für den Spieler ein Objekt aktiv abzuschließen. Eine vom Entwickler entworfene Mechanik, kann eine erneute Vergabe eines Schlüsselobjektes veranlassen und das Objekt damit wieder aktiv verschließen.
Multi-Schlüssel
Ein verschlossenes Objekt kann mehr als ein Schlüsselobjekt referenzieren. Das ist gar nicht so häufig der Fall wie man vermuten mag, aber es gibt diese Funktion seit neuestem in der A-Machine.
!ACHTUNG! Aus Kompatibilitätsgründen ist die Schlüsselliste kein Array, sondern ein String dessen einzelne Werte mit Komma getrennt werden.
Trage beim Schlüssel einfach alle Objektnamen getrennt mit einem Komma ohne Whitespaces ein, welche du als Schlüsselobjekt auserkoren hast.
Jetzt entstehen mehrere Situationen deren Auswahl abhängig davon ist, was der Entwickler realisieren möchte:
Ein Objekt hat mehrere Schlüsselobjekte und soll mit einem beliebigen von ihnen aufgeschlossen werden können. Z.B. Eine Tür könnte mit einem regulären Schlüssel ODER einem Dietrich aufgeschlossen werden.
- Es gibt keine zusätzlichen Regelungen -> Die Tür wird mit dem Schlüssel geöffnet und das System sagt, das du sie erfolgreich geöffnet hast. Die Tür ist jetzt offen und triggert ihr optionales ;;triggerByOpen Event.
Würde der Spieler die Tür jetzt aktiv verschließen, so wäre sie wieder verriegelt, da sie immer noch ihre Schlüsselobjekte besitzt. Du besitzt weiterhin den Schlüssel und könntest die Tür jederzeit wieder öffnen.
- Der Dietrich und der Schlüssel besitzen den Befehl: ;;KillKey. Damit würden die entsprechenden Schlüsselobjekte beim Öffnen der Tür aus der Schlüsselliste entfernt. Das ist bei einer Tür mit nur einem Schlüsselobjekt kein Problem, da die Schlüsselliste zwingend leer sein wird. Aber Achtung! Bei zwei Schlüsselobjekten wird nur EINS entfernt. Nämlich das, mit dem man aufgeschlossen hat. Schließt man die Tür also wieder, so kann sie jetzt nur noch von dem jeweils anderen Schlüssel aufgeschlossen werden, da sich dieses immer noch in der Schlüsselliste befindet. (Deadlock?)
Um zu gewährleisten, das nach dem Aufschließen die Tür aufgeschlossen bleibt, so nutzt man den Befehl ;;OpenByAllKey im Türobjekt. Dieses besagt das man ALLE Schlüssel auf das Objekt angewandt haben muss, ehe es sich öffnet. Das setzt zwingend ;;KillKey in jedem Schlüsselobjekt voraus, denn das Objekt gilt hier erst dann als aufgeschlossen, wenn es keine Schlüsselobjekte mehr besitzt.
Die häufigste und natürlichste Situation ist die, das ein verschlossenes Objekt EINEN Schlüssel hat, welcher den Befehl ;;KillKey besitzt.
Profitipp: Um das Inventar aufgeräumt und übersichtlich zu halten, kannst du in dem ;;triggerByOpen Befehl des Türobjektes ;;deleteInventarObject;Schlüsselobjekt aufrufen. Natürlich nur, wenn das Objekt nicht noch mal gebraucht wird. ;-)
Geschlossen:
Gibt an, ob ein Objekt geschlossen ist. Auch hier wieder der Hinweis geschlossen ist nicht verschlossen. Dieser Flag wechselt beim Öffnen und schließen und kann auch als Abfrage für Entscheidungen dienen.
Tragbar:
Tragbare Objekte können als Kleidung an- und ausgezogen werden.
Siehe dazu auch unter
↓ Kleidung und Accesours ↓
Objekte mit dieser Eigenschaft können nicht gleichzeitig ein Behälter sein.
(Eine kleine Einschränkung im System. Es gibt quasi keine "anziehbaren" Rucksäcke. Denk dir was anderes aus. ^-^)
Darüberhinaus wird die Für-Liste anders interpretiert als bei Behältern. Bei tragbaren Objekten steht hier das Körperteil, an dem die Sache getragen wird. Z.B. "Körper".
Zusätzlich kann mit einem ; ein sogenannter Layer, angegeben werden, der das jeweilige Körperteil noch einmal unterteilt. Das funktioniert so:
Es können normalerweise beliebig viele tragbare Objekte an einem Körperteil getragen werden, wenn keine Layer angegeben sind. Möchte man das etwas beschränken, so kann man zusätzlich zum Körperteil eine Schicht angeben:
Körper;0
Jede Schicht kann nur genau ein Objekt enthalten. Versucht man ein Objekt mit demselben Layer anzuziehen, welches das bereits getragene Objekt besitzt, so wird dies verweigert. Man muss zunächst das eine Objekt ausziehen.
Gestalte es am besten so, das du mit dem Layer 0 anfängst und dich Zwiebelschichtweise nach außen vor arbeitest:
Setting 1:
Unterhemd->Körper;0
Kettenhemd->Körper;1
Rüstung->Körper;2
Umhang->Körper;3
Orden->Körper
Setting 2:
Negligé->Körper;0
Bluse->Körper;1
Morgenmantel->Körper;2
Halstuch->Körper;3
Ansteckblume->Körper
Es wird ersichtlich das man entweder ein Unterhemd ODER ein Negligé tragen kann, aber nicht beides gleichzeitig. Dasselbe gilt für das Kettenhemd und die Bluse. Dafür kann man natürlich den Morgenmantel auch zusammen mit dem Kettenhemd und dem Umhang tragen. Ansteckblumen und Orden gehen beliebig zu kombinieren.
Natürlich kommen jetzt noch andere Körperteile hinzu, welche für sich immer unabhängig sind, also eigenständige Layer besitzen. Die Einteilung und wie feingranular das gestaltet ist, ist dem Entwickler überlassen.
NPC:
Nicht-Spieler-Charaktere und Lebewesen. Ersteres ist in der Jugendsprache scheinbar eine Beleidigung, bei uns noch eine tolle Möglichkeit Geschichten in Videospielen zu erzählen. Lebewesen, ob gut oder feindlich gesinnt, haben mehrere Besonderheiten. Zum einen kann mit ihnen Sprechen und sie nach ihrer Meinung zu bestimmten Objekten fragen. Zum anderen haben sie Lebenspunkte, einen Kraft- und einen Abwehrwert. Diese Werte können, müssen aber nicht gesetzt sein. Als Letztes kann mit dem Flag can Attack eingestellt werden, ob man das Lebewesen mit dem Standard-Kampfsystem angreifen kann.
Artikel:
Bestimme die Artikel des Objektes. Diese werden von den Standardmechaniken der A-Machine verwendet und erhöhen die Lesbarkeit und die Immersion im Spiel. Artikel sind eine Liste, und es wird je ein Artikel auf eine Zeile geschrieben.
Status:
Im Status können individuelle Eigenschaften eines Objektes gehalten werden. Ein Schwamm kann nass oder trocken sein, eine Herdplatte warm oder kalt. Beim Betrachten eines Objektes werden diese Attribute mit
Das Objekt ist ... angezeigt.
Man kann diese Eigenschaften frei abfragen und setzten, um bestimmte Bedingungen im Spiel abzubilden. Z.b.: Das Fenster kann erst geputzt werden, wenn der Lappen nass ist.
Wie die Artikel, werden Statuseigenschaften untereinander in eine Liste geschrieben, jede Zeile wird als eine Eigenschaft interpretiert.
Volumen:
Bestimmt wie "schwer" ein Objekt ist, oder wie viel Raum es einnimmt. Das Volumen wird für Behälter verwendet und kann als Spielmechanik abgefragt werde.