Dokumentation GOTHIC
Verzeichnis der Vob-Klassen
Autor: Bert Speckels Version: 1.August 2001

Das Verzeichnis der Vob-Klassen

Die Basisklasse für alle Objekte, die Ihr in der Welt sehen könnt, und einige, die Ihr nicht sehen könnt, ist zVob. Davon leiten sich zahlreiche Klassen ab, die ihre eigenen speziellen Eigenschaften mitbringen.

Aber hier einmal eine Erläuterung, was ein Vob eigentlich ist:

Ein Vob ist "virtuelles Objekt". Es hat eine Position und Orientierung im Raum und kann durch ein explizit wählbares "Visual" visualisiert werden.

Die Welt wird mit Objekten (= Vob, "virtuelles Objekt") bevölkert. Jedes Objekt gehört einer Klasse an, die die Eigenschaften und Fähigkeiten dieses Objektes festlegt (z.B. Klasse "oCNPC", oder "zCTrigger"). Die Objekte kommunizieren untereinander und mit der GothicEngine über einen festgelegten Satz von Nachrichten (= Messages oder EventMessages).

Beim Design der Klassen und Nachrichten wurde das Ziel verfolgt eher viele spezialisierte verschiedene Klassen zu haben, die über relativ wenige Arten von Nachrichten kommunizieren, als wenige übermächtige Klassen, die über eine Unzahl von verschiedenen Nachrichten angesteuert werden müssen. So ist z.B. eine häufig benutzte Nachricht die "OnTrigger" Nachricht, die ein Objekt "anstößt" bzw. aktivieren soll. Was nun genau ein Objekt tut, das eine solche Nachricht empfängt, hängt von der Klasse des jeweiligen Objektes ab.

Ein Vob-Objekt der Klasse zCMover würde sich in Bewegung setzen, während ein Vob-Objekt der Kasse zCEarthquake ein lokales Erdbeben auslösen würde. Man kann eine Vob-Klasse auch als ein "Modul" sehen, das geschrieben worden ist, um ganz bestimmte Aufgaben in der Welt zu erfüllen. Die Vob-Klassen sind in einer Hierarchie angeordnet, wobei eine Klasse an einer bestimmten Position in der Hierarchie alle Eigenschaften und Fähigkeiten aller Klassen beerbt, die sich in der Hierarchie über ihr befinden.



Im Folgenden habe ich einmal die wichtigsten Klassen in einem Hierarchiebaum aufgelistet. Wie gesagt, alle Klassen sind von zCVob eingeleitet. Nicht fett gedruckte Vob-Klassen werden in der Regel nicht direkt in die Welt eingefügt. Einige Vob-Klassen, die für das Editieren der Welt völlig unwichtig sind, habe ich weggelassen.

Im Spacer werden (teilweise) weitaus ausführlichere Erläuterungen auch im Hilfefenster sichtbar, wenn man die entsprechende Klasse im Vob-Hierarchiebaum des Objekt-Fensters selektiert. Auch zu den zahlreichen Eigenschaften eines Objektes gibt es oft gute Informationen.
  • oCVob
    • oCNpc
      oCNpc repraesentiert die immens wichtige Klasse der NPCs. Ein NPC-Objekt wird in den Scripten angelegt und nicht (anders als alle Gegenstände) im Spacer sondern über eine Scriptfunction an den jeweiligen Wegpunkten in die Welt eingefügt.
    • oCItem
      Ein Gegenstand, den ein (N)PC mit sich herumtragen kann und mit dem je nach Einstellung verschiedene Dinge gemacht werden können (Essen, Anziehen etc.). Ein Item-Objekt wird in den Scripten angelegt.
    • oCMOB
      Ein Objekt, das optional bewegt und/oder getragen werden kann.
      • oCMobInter
        Ein Objekt mit dem (N)SCs nach dem Interaktionsschema interagieren können.
        • oCMobBed
          Ein Bett zum reinlegen
        • oCMobFire
          Eine Feuerstelle
        • oCMobLadder
          Eine Leiter zum hochklettern
        • oCMobSwitch
          Ein Schalter mit zwei Zuständen ( an/aus )
        • oCMobWheel
          Ein Drehrad mit 4 Zuständen
        • oCMobLockable
          • oCMobContainer
            Objekte, die Items beinhalten
          • oCMobDoor
  • zCCSCamera
  • zCCamTrj_KeyFrame
  • zCEffect
    • zCEarthquake
      Reagiert auf OnTrigger und OnUntrigger Messages und loest ein Erdbeben aus (Camera-Tremor).
    • zCPFXControler
      Objekte dieser Klasse beherbergen Partikel-Effekt Visuals und steuern diese über OnTrigger (einschalten) bzw. OnUntrigger (ausschalten).
    • zCVobAnimate
      Objekte dieser Klasse sollte ein Visual zugewiesen bekommen, das Animationen abspielen kann (z.B: zCModel oder zCMorphMesh) ...
    • zCVobLensFlare
      Diese Vob-Klasse verhält sich genau wie die zCVob Basisklasse. Allerdings kann der Name eines LensFlare-Effektes angegeben werden, der mit dem Objekt zusammen dargestellt werden soll. LensFlare-Effekte werden in dem File "lensflare.zen" definiert.
    • zCVobScreenFX
      Mit einem Effekt-Vob dieser Klasse können spezielle Bildschirmeffekte ausgelöst und gesteuert werden, wie z.B. Blenden, "Kino-Balken" und FOV-Morphs. Diese Effekte werden durch Nachrichten der Klasse zCEventScreenFX an dieses Objekt gesteuert.
    • oCVisualFX
      • oCVisFX_Lightning
      • oCVisFX_MultiTarget
    • zCTouchDamage
      • oCTouchDamage
        Objekte dieser Klasse fügen anderen Objekten, die sie berühren, Schaden zu (praktisches Beispiel: Feuer).
  • zCTriggerBase
    Dies ist ein einfacher Trigger, der auf Berührung reagiert. Bei Berührung (OnTouch) und bei eingehender OnTrigger Nachricht wird eine OnTrigger Nachricht an alle Vobs mit dem Namen 'triggerTarget' verschickt. Bei Beendung einer Berührung (OnUntouch) oder eingehender OnUntrigger Nachricht werden OnUntrigger Nachrichten verschickt.
    • zCCodeMaster
      Bei einem CodeMaster kann eine Liste von Namen von sogen. 'slaveVobs' angegeben werden. Ein CodeMaster schickt erst dann ein OnTrigger-Event, wenn alle slaveVob ihm eine gesendet haben ...
    • zCMessageFilter
      Eingehende OnTrigger und OnUntrigger Nachrichten werden in andere Nachrichten umgewandelt, die dann an das angegebene triggerTarget weitergeschickt werden.
    • zCMoverControler
      Objekte dieser Klasse werden benutzt, um speziell zCMover anzusteuern, die sich im MoverBehavior 'MB_NSTATE_SINGLE_KEYS' befinden. Bei diesen Movern ist jeder Keyframe ein einzelner State und kann gezielt angesteuert werden. Objekte der Klasse zCMoverControler reagieren auf OnTrigger Nachrichten und verschicken dann an ihr triggerTarget, dass i.d.R. ein zCMover sein sollte, eine einstellbare Nachricht.
    • zCTriggerUntouch
      Dieser Trigger sendet eine OnTrigger Nachricht an sein triggerTarget, sobald sich die Berührung zu dem letzten nicht-lebenden Objekt loest wird. Dieses Objekt reagiert nicht auf eingehende OnTrigger und OnUntrigger Nachrichten.
    • zCTrigger
      Die Aufgabe eines Triggers ist es Nachrichten zu empfangen und zu filtern ("ActivationFilter"). Nachrichten, die durch den Filter gelangen, führen zu dem Verschicken von OnTrigger Nachrichten an weitere Vobs ("FireBehavior").
      • zCMover
        Die wichtigste Eigenschaft eines Movers ist die Fähigkeit sich zu bewegen, entweder auf einer Kette von Keyframes, oder falls das Visual des Movers ein Model ist, durch die Animation des Models.
      • oCTriggerChangeLevel
        Dieser Trigger aktiviert einen Levelwechsel. Dabei wird der Levelname im Feld 'levelName' eingetragen (inklusive Unterverzeichnisse und Endung). In 'startVobName' steht der Name des Vobs, wo der Spieler im neuen Level erscheint.
      • oCTriggerScript
        Die Klasse oCTriggerScript ergänzt den zCTrigger um eine zusätzliche Eigenschaft: Beim Triggern kann zusaetzlich eine Scriptfunktion ausgeführt werden.
      • zCTriggerList
        Diese Klasse ist eine Erweiterung der zCTrigger Klasse. Statt nur einem TriggerTarget kann hier eine ganze Liste von TriggerTargets mit dazugehörigen FireDelays angegeben werden. Die Abarbeitung der Liste kann auf verschiedene Weisen erfolgen (siehe "listProcess"). Die TriggerTarget und FireDelay Felder des zCTrigger sind zu ignorieren. Die Deaktivierung (z.B. über OnUntrigger Nachrichten) führt zur Sendung einer OnUntrigger Nachricht an aller TriggerTargets der Liste.
      • zCTriggerTeleport
  • zCVobLevelCompo
  • zCVobLight
    dyamische oder statische Lichtquellen
  • zCVobSpot
    Ein VobSpot beschreibt eine Position und Orientierung im Raum. An diesen Positionen können dann im Spiel zur Laufzeit entsprechende Objekte eingefügt oder hinbewegt werden. Eine andere Bezeichnung ist auch 'Freepoint'.
  • zCVobStartpoint
    An dem Startpoint wird der Spieler beim Start eines Levels eingefügt, wobei er Position und Ausrichtung übernimmt.
  • zCVobWaypoint
    Ein Waypoint beschreibt eine Position und Orientierung im Raum. Waypoints werden mit anderen Waypoints zu einem WayNet verknüpft.
  • zCZone
    • oCZoneMusic
      Mit Objekten dieser Klasse werden in der Welt Volumina angelegt, in denen sich die Wiedergabe eines Musikthemas steuern laesst.
      • oCZoneMusicDefault
        Dieses Objekt bezieht sich auf die Klasse oCZoneMusic und setzt den levelweiten Defaultwert. Es muss genau ein solches Objekt im Level vorhanden sein.
    • zCVobSound
      VobSound Objekte sind frei im Raum positionierbare, punktförmige "Geräuschquellen". Eine OnTrigger Nachricht schaltet sie ein, während eine OnUnTrigger Nachricht sie ausschaltet.
      • zCVobSoundDaytime
        Diese Geräuschquellen sind nur zu der angebenen Tages/Nachtzeit vernehmbar. Es kann optional unter "sndName2" der Name eines zweiten Sounds angegeben werden, der genau außerhalb der angegeben Tages/Nachtzeit gespielt wird. An den Zeitgrenzen werden die Sounds im Verlauf langsam ein- und ausgeblendet. Die Zeiten sind in Stunden anzugeben. Achtung: 13.5 = 13:30 ! (Praktisches Beispiel: tagsüber Vogelgezwitscher, nachts Grillen).
    • zCZoneReverb
      Mit Objekten dieser Klasse wird die Halleigenschaften des Raumes festgelegt, der sich als maximaler Ellipsoid innerhalb der BBox des zCZoneReverb Vobs befindet. Der Einfluss des Halleffektes ist zum Zentrum des Volumens maximal und nimmt du den Rändern hin ab. Mit einer Einstellung von "innerRangePerc" >=1 könnte aber z.B. bewirkt werden, daß der Effekt überall im Volumen gleichstark ist.
      • zCZoneReverbDefault
        Dieses Objekt bezieht sich auf die Klasse zCZoneReverb und setzt den levelweiten Defaultwert. Falls sich die Kamera nicht in einem Objekt der Klasse zCZoneReverb befindet, werden die Werte aus einem Objekt dieser Klasse entnommen. Die BBox von Objekten dieser Klasse ist irrelevant, es kann nur ein solches Objekt pro Level geben.
    • zCZoneVobFarPlane
      • zCZoneVobFarPlaneDefault
    • zCZoneZFog
      Mit Objekten dieser Klasse werden in der Welt Volumina angelegt, in denen sich der Tiefen-Z-Nebel steuern laesst. Die Volumen werden über die BoundingBox der Objekte angegeben und koennen beliebige Formen haben. Es koennen sich auch mehrere Fog-Zonen durchdringen. Beim Rendern einer Szene werden alle Fog-Zonen ermitteln, in denen sich die Kamera befindet, und der Einflüss einer jeden Zone wird zu einem Wert verrechnet, der die sichtbare Zone-Distanz festlegt.
      • zCZoneZFogDefault
        Dieses Objekt bezieht sich auf die Klasse zCZoneZFog und setzt den levelweiten Defaultwert. Falls sich die Kamera nicht in einem Objekt der Klasse zCZoneZFog befindet, werden die Werte aus einem Objekt dieser Klasse entnommen. Die BBox von Objekten dieser Klasse ist irrelevant, es kann nur ein solches Objekt pro Level geben.
Alle VOBs haben Eigenschaften. Diese werden im Objects-Dialog angezeigt und können dort auch verändert werden. Bei der Selektion einiger Eigenschaften erscheint im Hilfefenster ein Informationstext zu dieser Eigenschaft.

In diesem Bild sieht man zum Beispiel die Eigenschaften eines EarthQuake-Objektes. Im Ordner "Vob" befinden sich die grundlegenden zCVob-Eigenschaften. Weitere spezielle Einstellungen sind im Ordner EarthQuake zu finden, wie z.B. die Dauer, der Radius und die Amplitude des Bebens.

Ende.
Machs gut und danke für den Fisch