Sie sind auf Seite 1von 2

Die Scripte sind auf neuestem Syntax-Stand, relativ sortiert und übersichtlich,

teilweise auch kommentiert. Vor allem aus dem Seilscript ist viel Überflüssiges
verschwunden.

Da ich länger gebraucht habe, um überhaupt zu verstehen, wie Günthers Seil


funktionierte, hier eine kurze grobe Beschreibung der Funktionsweise des neuen
Seils:

Über das Activate-Menü des Seils kann mit einem Objekt eine „erstmalige“
Verbindung hergestellt werden: Dabei wird dieses Objekt zunächst mit einer
Seilrolle verbunden. Das tragbare Seilobjekt wird während einer Verbindung als
Hintergrundobjekt bei 0,0 versteckt und sollte dort auch bleiben, da es nun die
sichtbare Verbindung und die Zugeffekte zwischen den verknüpften Objekten steuert.
Diese sichtbare Verbindung, also „das Seil“, besteht aus Partikellinien, die
zwischen in einem Array gespeicherten Punkten zwischen den Objekten verlaufen. Die
Anziehung geschieht über eine ständige Berechnung für die beiden angeseilten
Objekte, wobei jedes je nach Eigenschaften versetzt wird.
Nach dem erstmaligen Anseilen geschieht die weitere Steuerung bis zum Abnehmen und
der „Reaktivierung“ des tragbaren Seilobjekts über die Seilrolle. Wird hier mit
einem Objekt verknüpft, wird einfach das jeweilige Zielobjekt des Seils geswitcht,
z.B. von der Seilrolle zu einem Baum.

> Enterhaken: Wie geth?


Er ist im Prinzip nichts weiter als ein Haken, der mit einem (nicht abnehmbaren)
Seil verbunden wird. Das Seilende bleibt beim Clonk, der sich danach an dem Seil
entlangziehen kann. Der Haken wird nach dem Werfen Beschleunigt, damit er etwas
weiter fliegt.
Um den Wurf schöner zu gestalten, wird beim Werfen über SetObjDrawTransform eine
kleine Drehung simuliert, ohne dass sich dabei die Vertices verschieben. Ansonsten
würde das ContactAttachment nicht korrekt funktionieren.

Das Seilpack bietet ein paar Funktionen an, die die Weiterverwendung mit anderen
Objekten oder in Szenarien vereinfachen soll oder die sonst einfach nur praktisch
sind:

- GetCapturer(object pClonk)
Gibt den Clonk zurück, der pClonk zuletzt gefesselt hat.

- GetFreeClonks(int iPlr)
Gibt die Anzahl der Clonks von iPlr zurück, die leben und nicht gefesselt sind.

- Die locals fNoPickUp_0 bzw. fNoPickUp_1 im Seil können das Abnehmen von Objekten
verhindern (ActionTarget 1 bzw. 2).

- ConnectObjects(pObj1, pObj2) in einem Seil aufgerufen verknüpft pObj1 mit pObj2.

Callbacks für Szenarienscripte oder Spielziele usw.:

- OnStartTiedMember(object pClonk, object pByClonk, bool fWasTied)


Wird aufgerufen, wenn pClonk von pByClonk gefesselt wird, wobei das Seilende mit
keinem Objekt verknüpft ist. fWasTied gibt an, ob pClonk vorher schon gefesselt
war.
- OnEndTiedMember(object pClonk, object pByClonk, bool fWasTied)
Wie OnStartTiedMember, nur dass das andere Seilende mit einem Objekt (außer
Seilrollen) verbunden ist.

- OnResetTiedMember(object pClonk)
Wenn pClonk befreit wurde.

Zum Weiterverwenden des Seils sollten unbedingt die Scripte im System.c4g-Ordner


beachtet werden:

- ClonkRopeDiv.c enthält zahlreiche Erweiterungen des Clonks, die unbedingt


erforderlich für das Benutzen des Seils sind: Neben dem Abnehmen von Seilen, dem
Enterhaken-Sprungwurf oder dem Klettern an Seilen werden weitere Kleinigkeiten
ermöglicht.

- GetVertexToConnect.c: Wie schon früher kann ein Objekt mit GetVertexToConnect()


zurückgeben, an welchem Vertex das Seil an einem Objekt anknüpft.

- RopeLength.c garantiert, dass sich Seillängen beim Hineinkommen oder Verlassen


von Objekten anpassen und verhindert dadurch unschöne Zugeffekte. RopeLength.c
muss sich leider an alle Objekte anhängen (AppendTo *).