Partikel

Partikel sind abgespeckte Objekte, die im Netzwerk nicht synchronisationsrelevant sind. Das heißt einerseits, dass man Partikel relativ problemlos in größeren Mengen erstellen kann, um interessante Effekte zu erzielen. Andererseits existieren nur sehr wenige Möglichkeiten, un das Verhalten von Partikeln zu steuern. Wenn die Möglichkeiten von Partikeln also für einen Effekt nicht ausreichen, sollten stattdessen reguläre Objekte verwenden, mit denen sich alle durch Partikel darstellbaren Effekte auch erzielen lassen.
Wenn ein Partikel in einer c4d-Datei definiert ist, wird ein ebenfalls in dieser Gruppendatei vorhandenes Objekt nicht geladen. Im veralteten Grafiksystem konnte man so ein alternatives Objekt anbieten, das im neuen Grafiksystem nicht geladen wird.
Partikel werden nicht in Spielständen gespeichert, da sie nur für kurzzeitige Effekte gedacht sind.

Partikel-Komponenten (C4D)

Particle.txt
Partikeleigenschaften.
Graphics.png
Partikelgrafik.
Zusätzlich dazu sind natürlich auch alle von Objektdefinitionen bekannten Elemente für das Frontend verfügbar (also z.B. Title.bmp, DescDE/US.txt, etc.)

Particle.txt

In dieser Datei werden - analog zur DefCore.txt bei Objektdefinitionen - die Eigenschaften des Partikeltyps beschrieben.
Sektion [Particle]
Wert Datentyp Beschreibung
Name Zeichenfolge (max. 30) Name des Partikeltyps. Dieser Name dient zugleich zur Referenzierung in Scripten. Für Mehrsprachigkeit im Frontend sollte die Names.txt benutzt werden.
MaxCount Integer Maximale Instanzzahl für diesen Partikeltyp. Siehe Mengenkontrolle.
MinLifetime Integer Nur für Rauchpartikel: Untere Grenze für die Lebensdauer, die nach Zufall zwischen MinLifetime und MaxLifetime gesetzt wird.
MaxLifetime Integer Nur für Rauchpartikel: Obere Grenze für die Lebensdauer, die nach Zufall zwischen MinLifetime und MaxLifetime gesetzt wird.
InitFn Zeichenfolge (max. 30) Identifikator für die Funktion, die zur Initialisierung des Partikels verwendet wird. Für gültige Funktionen siehe Sektion Partikelfunktionen.
ExecFn Zeichenfolge (max. 30) Identifikator für die Funktion, die jedes Frame zur Ausführung des Partikels verwendet wird. Für gültige Funktionen siehe Sektion Partikelfunktionen.
DrawFn Zeichenfolge (max. 30) Identifikator für die Funktion, die zum Zeichnen des Partikels verwendet wird. Für gültige Funktionen siehe Sektion Zeichenfunktionen.
CollisionFn Zeichenfolge (max. 30) Identifikator für die Funktion, die Kollision des Partikels mit der Landschaft aufgerufen wird. Siehe auch Kollisionsabfrage
Face 6 Integer Zielrechteck für die Grafik in der Graphics.png. Siehe Partikelgrafik.
YOff Integer Obere Grenze für diesen Partikeltyp. An dieser Stelle werden die Partikel abgeschnitten, als wäre die Landschaft schon dort zu Ende. Nur StdExec.
Delay Integer Wartezeit zwischen den Animationsphasen. Bei Delay=0 wird eine Zufallsphase dauerhaft benutzt.
Repeats Integer Anzahl der Animationswiederholungen, bis sich das Partikel zerstört.
Reverse Integer 0 oder 1. Bei 1 wird jede zweite Animation rückwärts abgespielt.
FadeOutLen Integer Falls angegeben, wird diese Anzahl der Animationsphasen von hinten abgenommen und für eine Endanimation reserviert, die nach Repeats Abläufen der Standardanimation ausgeführt wird.
FadeOutDelay Integer Wartezeit zwischen zwei in FadeOutLen angegebenen Animationsphasen.
RByV Integer 0 bis 3. 0 für keine Partikel-Drehung. Bei 1 dreht sich das Partikel nach Bewegungsrichtung; vorne ist dabei oben. Bei 2 dienen die Geschwindigkeitparameter nur der Ausrichtung; das Partikel bewegt sich nicht. Bei 3 dreht sich das Partikel zufällig (ab 4.9.8.0).
GravityAcc Integer Gravitationsauswirkung. Bei 0 wird das Partikel gar nicht von der Gravitation beschleunigt, bei 100 normal. Negative Werte sind ebenfalls möglich.
WindDrift Integer Abtrieb durch Wind. Wie die gleichnamige Materialeigenschaft. Ab CR 4.9.8.4.
VertexCount Integer 0 oder 1. Bei 1 wird eine Kollisionsabfrage durchgeführt.
VertexY Integer Prozentualer Wert fürs Y-Offset des Abfragepunktes für Kollisionen mit der Landschaft. Siehe auch Kollisionsabfrage.
Additive Integer 0 oder 1. Bei 1 wird das Partikel additiv gezeichnet.
AlphaFade Integer 0 bis 40. Ausfaden pro Frame. Wenn das Partikel vollends ausgefadet ist, verschwindet es.
Parallaxity 2 Integer Parallaxität in X- und in Y-Richtung. 0 ist fest mit dem Bildschirm; 100 ist Standard (fest mit der Landschaft).
Attach Integer 0 oder 1. Bei 1 bewegt sich das Partikel bei angegebenem Zielobjekt relativ zu diesem. Ab 4.95.4.

Eigenschaften

Jedes Partikel hat eine Position (x, y), Impulse horizontal (xdir) und vertikal (ydir), sowie eine Lebenszeit (life) und zwei Extraparameter (a und b). Diese werden von den Partikelfunktionen verwaltet, und können bei der Erzeugung im Script nur mit Startwerten versehen werden. Für die Bedeutung der Attribute im Einzelnen siehe Partikelfunktionen und Zeichenfunktionen.

Grafik

Die Koordinaten für das Zielrechteck der Grafik in die Graphics.png sind vergleichbar mit Face in der ActMap.txt. Die geben nur die erste Animationsphase an, und alle weiteren Phasen sollten rechts (Bei Rauch auch unterhalb) davon liegen; die Animationslänge wird automatisch aus der Größe der Grafik ermittelt. Für das Grafikoffset sollte normalerweise die halbe Objektgröße angegeben werden, da das Standardoffset 0/0 bedeuten würde, dass das die Grafik rechts unterhalb der eigentlichen Partikelposition gezeichnet wird.
Wenn für Delay 0 angegeben ist, wird bei der Initialisierung eine zufällige Animationsphase ausgesucht, und beibehalten. Das Partikel existiert dann, bis es aus der Landschaft geflogen ist.

Mengenkontrolle

Für jedes Partikel wird eine Maximalzahl angegeben, die nach der vom Spieler in den Grafikoptionen angegebene Effektmenge noch angepasst werden kann. Sobald mehr als die Hälfte dieser Anzahl vorhanden ist, werden schon nach dem Zufallsprinzip einige Partikel nicht erstellt, so dass die Zahl der neu erzeugten Partikel mit Zunahme zur Maximalmenge schrumpft, und der übergang nicht zu hart ist, wenn die Partikelmenge an ihre Grenzen stößt. Wenn es wichtig ist, dass ein Partikel garantiert erzeugt wird, sollte in jedem Fall stattdessen ein Objekt benutzt werden, da Partikel auch nach dem Speichern verschwinden.

Kollisionsabfrage

Partikel können Kollisionsabfragen mit der Landschaft durchführen. Diese sind jedoch nicht sehr genau; schnelle Partikel können also durch dünne Materialschichten hindurchfliegen. Wenn das nicht akzeptabel ist, müssen Objekte benutzt werden.
Kollisionsabfragen werden nur bei StdExec durchgeführt, also nicht bei Rauchpartikeln. Für gültige Funktionen siehe Sektion Partikelfunktionen. Die Abfrage wird nur bei angegebenem VertexCount und an der Objektmitte durchgeführt. Der Abfragepunkt kann vertikal mit VertexY verschoben werden. Die angegebenen Koordinaten sind dabei prozentual zur Partikelgröße, das heißt VertexY=100 würde am unteren Rand des Partikels prüfen. Die in Face angegebene Größe der eigentlichen Grafik spielt dabei keine Rolle.

Partikelfunktionen

Das Verhalten von Partikeln kann durch Angabe von Partikelfunktionen gesteuert werden. Diese werden zur Initialisierung, jedes Frame und bei Kollision mit der Landschaft ausgeführt.
StdExec
Standardfunktion für ExecFn für fast alle Partikel. Das Partikel führt eine durch Face, Delay, Repeats, Reverse, FadeOutLen und FadeOutDelay definierte Animation aus, und wird dann zerstört. Dabei steht der Extraparameter a für die Größe der Grafik in Zehntelpixeln. b gibt eine Farbmodulation an; bei b=0 wird gar nicht moduliert. Sowohl aa als auch b werden von dieser Funktion nicht verändert und behalten somit ihre bei der Erschaffung angegebenen Werte. Ferner bewegt sich das Partikel nach xdir und ydir, wobei sich ydir bei angegebenem GravityAcc je nach Gravitation erhöhen oder verringern kann.
StdInit
Standardfunktion, die für InitFn zusammen mit StdExec verwendet werden sollte.
Bounce
Kollisionsfunktion: Das Partikel kehrt seine Richtung komplett um.
BounceY
Kollisionsfunktion: Das Partikel kehrt nur die vertikale Geschwindigkeit um.
Stop
Kollisionsfunktion: Das Partikel hält an.
Die
Kollisionsfunktion: Das Partikel wird sofort zerstört.
SmokeExec
Hardgecodete Lösung für ExecFn für Rauch. a ist wieder die Rauchgröße; b die Farbmodulation. Der Rauch muss 4x4 Grafiken in der Graphics.png definiert haben, von denen die unterste rechte nur sehr selten benutzt wird. Die anderen werden gleichmäßig ausgewählt. Der Rauch steigt immer gleichmäßig auf und hält an, wenn er mit der Oberkante die Landschaft kollidiert. Wenn die Lebenszeit life abgelaufen ist, fadet der Rauch aus, in dem sich die Alphakomponente von b erhöht, bis sie 255 ist und das Partikel entfernt wird.
SmokeInit
Funktion für InitFn, die zusammen mit ExecFn=SmokeExec benutzt werden sollte.

Zeichenfunktionen

Funktionen, die DrawFn zugewiesen werden können.
Std
Standardfunktion für fast alle Fälle außer Rauch. Das Partikel wird an x/y in der Größe a/5 x a/5 gezeichnet, und mit b farbmoduliert.
Smoke
Zeichenfunktion für Rauch. Sollte zusammen mit SmokeInit und SmokeExec verwendet werden.

Kontrolle

Die externe Kontrolle von Partikeln beschränkt sich auf wenige Funktionen zur Erzeugung, Gesamtverschiebung und Gesamtzerstörung. Das muss so sein, da Partikel nicht syncrelevant sind, und damit so gut wie gar nicht vom Script aus abfragbar sein können (ansonsten würden unterschiedliche Effektmengen im Netzwerk zu Desyncs führen). Partikel werden mit CreateParticle erschaffen.
Sven2, April 2002