summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d
diff options
context:
space:
mode:
Diffstat (limited to 'TemplePushing.c4s/Locals.c4d/Lenseflare.c4d')
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt129
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt11
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.pngbin0 -> 81997 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c183
7 files changed, 327 insertions, 0 deletions
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt
new file mode 100644
index 0000000..bbf5a41
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt
@@ -0,0 +1,129 @@
+[Action]
+Name=SeiBrav
+Procedure=FLOAT
+Length=1
+Delay=1
+EndCall=TuWasBraves
+NextAction=SeiBrav
+Facet=0,0,192,192,-96,-96
+
+[Action]
+Name=IchWillNurSpielerZaehlen
+Procedure=FLOAT
+Length=1
+Delay=10
+FacetBase=0
+EndCall=PruefeAlleSpieler
+NextAction=IchWillNurSpielerZaehlen
+
+[Action]
+Name=Fleck0
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=0,192,39,39,-19,-19
+
+[Action]
+Name=Fleck1
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=58,192,89,89,-44,-44
+
+[Action]
+Name=Fleck2
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=29,231,20,20,-10,-10
+
+[Action]
+Name=Fleck3
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=0,281,61,61,-30,-30
+
+[Action]
+Name=Fleck4
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=0,231,29,29,-14,-14
+
+[Action]
+Name=Fleck5
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,64,19,19,-9,-9
+
+[Action]
+Name=Fleck6
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,92,6,6,-3,-3
+
+[Action]
+Name=Fleck7
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,83,9,9,-4,-4
+
+[Action]
+Name=Fleck8
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=147,192,38,38,-19,-19
+
+[Action]
+Name=Fleck9
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=354,0,70,70,-35,-35
+
+[Action]
+Name=Fleck10
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=39,192,19,19,-9,-9
+
+[Action]
+Name=Fleck11
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=211,64,28,28,-14,-14
+
+[Action]
+Name=Fleck12
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=256,0,98,98,-49,-49
+
+[Action]
+Name=Fleck13
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,98,195,195,-97,-97 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt
new file mode 100644
index 0000000..79c4c82
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt
@@ -0,0 +1,11 @@
+[DefCore]
+id=LENS
+Version=4,9,8
+Name=Lenseflare
+Category=C4D_StaticBack|C4D_Environment|C4D_MouseIgnore
+MaxUserSelect=1
+Width=1
+Height=1
+Offset=-1,-1
+Picture=192,0,64,64
+BlitMode=1
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt
new file mode 100644
index 0000000..b708475
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt
@@ -0,0 +1 @@
+Dieses Objekt fügt Sonnenlicht und Blendeneffekte ins Szenario ein. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt
new file mode 100644
index 0000000..d29ea89
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt
@@ -0,0 +1 @@
+This object adds sunlight and lense effects to the scenario. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png
new file mode 100644
index 0000000..bc94254
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt
new file mode 100644
index 0000000..acac2d2
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Blendenflecke
+US:Lense Flare
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c
new file mode 100644
index 0000000..ed5fbf2
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c
@@ -0,0 +1,183 @@
+/*-- Lenseflare --*/
+// Sonnenskript includieren
+#include SONE
+
+#strict
+
+local SonneX, SonneY;
+
+// Initialisierung
+protected func Initialize()
+{
+ // Nur für den Herrn und Meister sichtbar
+ SetVisibility (VIS_Owner(), this());
+ if(!FindObject(GetID()))
+ // Das erste Lenseflare-Objekt prüft nur, dass jeder Spieler auch sein Umweltobjekt hat
+ {
+ SetOwner(-1,this()); // Unparteiisch sein!
+ SetCategory(1 | C4D_MouseIgnore(),this()); // Nicht bewegen
+ SetAction("IchWillNurSpielerZaehlen");
+ return();
+ }
+}
+
+// Initialisierung als Haupt-Lenseflare
+public func WerdeHauptlenseflareFuerDeinenHerrn()
+{
+ SetCategory(C4D_StaticBack()|C4D_Background()| C4D_MouseIgnore());
+ for(var i=0; i<MIJON(); ++i)
+ {
+ Local(i) = CreateObject(GetID());
+ SetOwner(GetOwner(),Local(i));
+ SetCategory(C4D_StaticBack()| C4D_MouseIgnore()|C4D_Foreground(),Local(i));
+ ObjectSetAction(Local(i),Format("Fleck%d",i%14));
+ }
+ SetAction("SeiBrav");
+}
+
+// Erstellt einen Lenseflare und weist ihm einen Besitzer zu
+private func ErstelleLenseflare(FuerDiesenSpieler)
+{
+ var Flare = CreateObject(GetID());
+ SetOwner(FuerDiesenSpieler,Flare);
+ Flare->WerdeHauptlenseflareFuerDeinenHerrn();
+}
+
+
+// Von "SeiBrav" aufgerufen
+protected func TuWasBraves()
+{
+ // Hat es seinen Besitzer verloren? :(
+ if((!GetPlayerName(GetOwner())) || GetOwner()==-1)
+ {
+ for(var i=0; i<MIJON(); ++i)
+ RemoveObject(Local(i));
+ RemoveObject(this());
+ return();
+ }
+ // Sonnenposition anpassen
+ BerechneSonne();
+ SetPosition(SonneX,SonneY);
+ // unskalierten Vektor ermitteln
+ var VektorX=GibVektorX(GetOwner());
+ var VektorY=GibVektorY(GetOwner());
+ var VektorDist=GibVektorDist(GetOwner());
+ // Die Modulation ist für alle Flares gleich
+ var FarbModulation = RGBa(GibFarbMod(),GibFarbMod(),GibFarbMod(),GibAlphaMod(VektorDist));
+ // Genauso auch die Abstandsangabe
+ var Abstaende = 1000-BoundBy((3000-VektorDist*10)/3,0,1000); // Promilleangabe 0 = nahe, 1000 = weit weg; 300 Pixel sind dabei "weit weg"
+ var AbstaendeAbsolut = (50*Abstaende)/10; // Wieviele 1/100 Pixel zwischen den einzelnen Lenseflares sind
+ // Ist unsere liebe Sonne überhaupt sichtbar (also Tag + unverdeckt)
+ var SonneSichtbar = IsDay() && (!GBackSemiSolid(0,0));
+ // Tagsüber die Sonne einblenden
+ if(IsDay())
+ {
+ SetVisibility (VIS_Owner());
+ }
+ else
+ {
+ SetVisibility (VIS_None());
+ }
+ // Alle Lenseflares durchgehen
+ for(var i=0; i<MIJON(); ++i)
+ {
+ if(SonneSichtbar)
+ {
+ // Tags sichtbar
+ SetVisibility (VIS_Owner(), Local(i));
+ SetClrModulation(FarbModulation,Local(i));
+ var LensDist = (i*AbstaendeAbsolut)/100;
+ SetPosition(GibLensPosX(LensDist,VektorX,VektorDist), GibLensPosY(LensDist,VektorY,VektorDist),Local(i));
+ }
+ else
+ // Nachts unsichtbar ODER bei verdeckter Sonne
+ SetVisibility (VIS_None(), Local(i));
+ }
+ // Sofern der Spieler alleine ist
+ if(GetPlayerCount()==1)
+ if(IsDay())
+ {
+ var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg"
+ SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000),
+ RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128),
+ RGB(255,255,255), GammaRampe_Lenseflare());
+ }
+}
+
+// Für die Farbmodulation (Entfernung + Nacht)
+private func GibHelligkeit()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ return(100);
+ return(Local(2, ZeitObjekt));
+}
+
+private func GibSonnenMod() // Dämmerung
+{
+ var Helligkeit = GibHelligkeit();
+ // Folgende Farbwerte sind in Promille
+ var Rot = 1000;
+ var Grun = 1000;
+ var Blau = 1000;
+ if(Inside(Helligkeit,1,20)) // Dämmerung -> Rotstich
+ {
+ var RotStich = Cos(Helligkeit*4,500);
+ Grun -= RotStich/2;
+ Blau -= RotStich;
+ }
+ // Nun die Farbe berechnen
+ return(RGB((255*Rot)/1000,(255*Grun)/1000,(255*Blau)/1000));
+}
+
+private func GibFarbMod()
+{
+ return((255*GibHelligkeit())/100);
+}
+
+private func GibAlphaMod(iEntfernung)
+{
+ var Staerke = BoundBy((2000-iEntfernung)/20,75,100); // Prozentangabe 75 = weit weg, 100 = nahe; 2000 Pixel sind dabei "weit weg"
+ return(255-(255*Staerke)/100);
+}
+
+// Genutzte Gammarampe
+global func GammaRampe_Lenseflare()
+{
+ return(2);
+}
+
+// Den (unskalierten) Vektor. Er wird skaliert, um die Lenseflare-Positionen zu errechnen
+private func GibVektorX(iSpieler)
+{
+ return(GibMittelpunktX(iSpieler) - SonneX);
+}
+
+private func GibVektorY(iSpieler)
+{
+ return(GibMittelpunktY(iSpieler) - SonneY);
+}
+
+// Skaliere den Vektor mit der gewünschten Entfernung Lenseflare->Sonne
+private func GibLensPosX(iEntfernung, VektorX, VektorDist)
+{
+ // Skalierung in Promille
+ var Skalierung = (iEntfernung*1000) / VektorDist;
+ var TempX = (VektorX * Skalierung)/1000;
+ return(TempX + SonneX);
+}
+
+private func GibLensPosY(iEntfernung, VektorY, VektorDist)
+{
+ // Skalierung in Promille
+ var Skalierung = (iEntfernung*1000) / VektorDist;
+ var TempY = (VektorY * Skalierung)/1000;
+ return(TempY + SonneY);
+}
+
+// Wieviele Lenseflares hätten's denn gerne
+private func MIJON()
+{
+ // etwa alle 50 Pixel einen Lenseflare
+ return(LandscapeWidth() / 2 / 50);
+} \ No newline at end of file