summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Locals.c4d
diff options
context:
space:
mode:
Diffstat (limited to 'TemplePushing.c4s/Locals.c4d')
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt6
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt26
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.pngbin0 -> 5188 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c30
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt8
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt24
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.pngbin0 -> 26534 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c176
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt4
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt4
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.pngbin0 -> 20663 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt7
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt10
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.pngbin0 -> 6308 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c28
-rw-r--r--TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.pngbin0 -> 4583 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt12
-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
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt17
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt11
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.pngbin0 -> 48292 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c191
41 files changed, 905 insertions, 0 deletions
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt
new file mode 100644
index 0000000..39397ac
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt
@@ -0,0 +1,6 @@
+[Action]
+Name=Flying
+Procedure=FLOAT
+Directions=2
+Length=2
+Facet=0,0,20,20 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt
new file mode 100644
index 0000000..bef6342
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt
@@ -0,0 +1,26 @@
+[DefCore]
+id=BRK2
+Name=BigBrick
+Version=4,9,5
+Category=4
+MaxUserSelect=0
+Width=20
+Height=20
+Offset=-10,-10
+Value=50
+Mass=100
+Components=ROCK=8;
+ContactCalls=1
+Picture=0,0,20,20
+Vertices=9
+VertexX=0, -11,-11, 10, 10,-12, 0, 11, 0
+VertexY=14,-11, 11,-11, 11, 0,-12, 0, 11
+VertexCNAT=127
+SolidMask=0,0,20,20
+VertexFriction=10000,10000,10000,10000,10000,10000,10000,10000,10000
+ColorByMaterial=Brick
+TimerCall=CheckHit
+Timer=1
+
+[Physical]
+Float=200 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt
new file mode 100644
index 0000000..c69e382
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt
@@ -0,0 +1 @@
+Ein "Fahrziegel"? \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt
new file mode 100644
index 0000000..aaada9e
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt
@@ -0,0 +1 @@
+A brick as a object. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png
new file mode 100644
index 0000000..1b531ea
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt
new file mode 100644
index 0000000..b311575
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Ziegel
+US:Brick \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c
new file mode 100644
index 0000000..02b3933
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c
@@ -0,0 +1,30 @@
+/*-- Brick --*/
+
+#strict
+local pSchatten;
+local fVer,iYL,iYH;
+
+func Initialize() {
+ SetAction("Flying");
+ SetPhase(Random(2));
+ SetDir(Random(2));
+ ContactTop();
+ iYL = 650;
+ iYH = 100;
+ return(1);
+}
+
+func ContactBottom() { SetYDir(-10); }
+func ContactTop() { SetYDir(10); }
+
+func CheckHit()
+{
+ if (GetXDir() == 0 && GetYDir() == 0)
+ {
+ SetXDir(RandomX(-100,100));
+ SetYDir(RandomX(-100,100));
+ }
+ if (GetY() >= iYL) ContactBottom();
+ if (GetY() <= iYH) ContactTop();
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt
new file mode 100644
index 0000000..52447a1
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt
@@ -0,0 +1,8 @@
+[Action]
+Name=Ready
+Directions=2
+FlipDir=1
+Length=19
+Delay=0
+Facet=0,0,32,28
+NextAction=Hold
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt
new file mode 100644
index 0000000..c6c3b15
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt
@@ -0,0 +1,24 @@
+[DefCore]
+id=CANN
+Version=4,9,8
+Name=Cannon
+Category=C4D_Vehicle|C4D_SelectVehicle|C4D_SelectKnowledge|C4D_SelectHomebase
+MaxUserSelect=2
+Width=32
+Height=28
+Offset=-16,-14
+Vertices=3
+VertexX=1,-8,7
+VertexY=1,13,13
+VertexCNAT=4,9,10
+VertexFriction=100,10,10
+Value=35
+Mass=110
+Components=METL=3
+Picture=608,0,64,64
+CollectionLimit=10
+Rebuy=1
+Grab=1
+GrabPutGet=C4D_GrabGet|C4D_GrabPut
+UprightAttach=8
+VehicleControl=1
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt
new file mode 100644
index 0000000..76bb149
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt
@@ -0,0 +1 @@
+Mächtige Langstreckenwaffe. Benötigt für einen Schuss eine Ladung Schießpulver. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt
new file mode 100644
index 0000000..993a638
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt
@@ -0,0 +1 @@
+Heavy artillery. Requires one load of gunpowder per shot. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png
new file mode 100644
index 0000000..abe856a
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt
new file mode 100644
index 0000000..2a69811
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Haubitze
+US:Cannon
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c
new file mode 100644
index 0000000..c77c034
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c
@@ -0,0 +1,176 @@
+/*-- Haubitze --*/
+
+#strict
+local WpID;
+
+/* Initialisierung */
+
+protected func Initialize()
+{
+ WpID = [FLNT,EFLN,SFLN,TFLN];
+ AddEffect("CreateCon",this(),100,150,this());
+ SetAction("Ready");
+ SetPhase(10);
+}
+
+/* Steuerung */
+
+protected func ControlConf(int conf)
+{
+ if(AimStdConf(conf))
+ Sound("CatapultSet");
+}
+
+public func ControlUp(object clonk) // Zielen: hoch (klassisch)
+{
+ [$TxtAimup$|Image=CAN1:2]
+ AimUp(clonk, 4, "ControlConf");
+}
+
+public func ControlDig(object clonk) // Zielen: runter (klassisch)
+{
+ [$TxtAimdown$|Method=Classic|Image=CAN1:0]
+ AimDown(clonk, 4, "ControlConf");
+}
+
+public func ControlDown()
+{
+ [$TxtAimdown$|Method=JumpAndRun|Image=CAN1:0] // Beschreibung fuer JnR
+}
+
+public func ControlUpdate(object clonk, int comdir) // Zielen: JnR
+{
+ AimUpdate(clonk, comdir, 4, "ControlConf");
+}
+
+public func ControlDownSingle() // Sicht zurücksetzen
+{
+ [$TxtResetview$|Method=None]
+}
+
+public func ControlThrow(pClonk) // Feuern / Inhalt
+{
+ [$TxtFire$|Image=CAN1:1]
+ // Der Clonk will doch bestimmt nur etwas nachladen: nicht vorzeitig abfeuern
+ var pThing;
+ if (pThing = pClonk->Contents())
+ if (AllowLoad(GetID(pThing)))
+ return(0);
+ // Abfeuern wenn möglich, sonst Objekt herausnehmen
+ return(Fire());
+}
+
+public func ControlCommand(string szCommand,object pTarget,int iX,int iY)
+{
+ // Feuern
+ if(szCommand eq "MoveTo")
+ if(Distance(GetX(),GetY(),iX,iY)>50)
+ {
+ HaltPushers();
+ return(FireAt(iX,iY));
+ }
+}
+
+/* Prozesse */
+
+private func HaltPushers()
+{
+ var pClonk;
+ // Alle Clonks die die Haubitze anfassen, sollen stoppen
+ while(pClonk=FindObject(0,0,0,0,0,0,"Push",this(),0,pClonk))
+ SetComDir(COMD_Stop(),pClonk);
+}
+
+public func Fire(bool fAuto)
+{
+ var pProjectile=FindOtherContents(GUNP);
+ // Ich brauch kein Schießpulver!
+ // Projektil fehlt
+ if (!pProjectile)
+ {
+ Sound("Click");
+ return(0);
+ }
+
+ // Austritt berechnen
+ var iX = (GetPhase()+3)*(GetDir()*2-1);
+ var iY = GetPhase()-14;
+ var iAngle = BoundBy(GetPhase()*5-5,0,90);
+ var iXDir = Sin(iAngle,32*(GetDir()*2-1));
+ var iYDir = Cos(iAngle,-18);
+
+ // Projektil abfeuern
+ Exit(pProjectile,iX,iY,Random(360),iXDir,iYDir,+30);
+
+ // Sicht verfolgen (wenn kein automatischer Schuss)
+ if(!fAuto)
+ if(GetPlrViewMode(GetController())!=2)
+ SetPlrView(GetController(),pProjectile);
+ // Sound
+ Sound("Blast2");
+ // Rauch
+ for (var i = 0; i < 6; ++i)
+ Smoke(iX+RandomX(-5,+5),iY+RandomX(-5,+5),RandomX(5,12));
+ // Erfolgreich geschossen
+ return(1);
+}
+
+/* Zielfunktionen */
+
+public func FireAt(int iX,int iY,int fAuto)
+{
+ var iAngle;
+ // Zielwinkel
+ iAngle = Angle(GetX(),GetY(),iX,iY);
+ // Bei größerer Distanz höher zielen
+ if(Inside(iX-GetX(),+1,+300))
+ iAngle -= Abs(iX-GetX())/12;
+ if(Inside(iX-GetX(),-300,-1))
+ iAngle += Abs(iX-GetX())/12;
+ // Zielen
+ AimToAngle(iAngle);
+ // Feuern
+ return(Fire(fAuto));
+}
+
+public func AimToAngle(int iAngle)
+{
+ // Winkel anpassen
+ while(iAngle > 180) iAngle-=360;
+ // Richtung
+ if(iAngle > 0) SetDir(DIR_Right());
+ if(iAngle < 0) SetDir(DIR_Left());
+ // Zielrichtung
+ SetPhase(BoundBy( 19*Abs(iAngle)/90, 0,18));
+}
+
+/* Laden */
+
+protected func Collection() { Sound("Connect"); }
+
+protected func RejectCollect(id idObj, object pObj)
+{
+ return(!AllowLoad(idObj));
+}
+
+private func AllowLoad(id idObj)
+{
+ // Noch jede Menge Platz
+ if (ContentsCount() < 9) return(1);
+ // Niemals mehr als 10 Objekte laden: Wird gebraucht, wenn aus ControlThrow aufgerufen!
+ if (ContentsCount() >= 10) return(0);
+ // Nicht mehr als 9 Projektile laden, wenn noch Platz für Pulver gebraucht wird
+ // Laden o.k.
+ return(1);
+}
+
+/* Forschung */
+
+public func GetResearchBase() { return(CATA); }
+
+func FxCreateConTimer()
+{
+ if (ContentsCount() < 10)
+ CreateContents(WpID[Random(5)]);
+ return(1);
+ }
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt
new file mode 100644
index 0000000..43693bc
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt
@@ -0,0 +1,4 @@
+TxtAimup=Zielen: auf
+TxtAimdown=Zielen: ab
+TxtFire=Feuern
+TxtResetview=Sicht zurücksetzen
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt
new file mode 100644
index 0000000..b55ce20
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt
@@ -0,0 +1,4 @@
+TxtAimup=Aim: up
+TxtAimdown=Aim: down
+TxtFire=Fire
+TxtResetview=Reset view
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt
new file mode 100644
index 0000000..6fbcc4b
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=CAN1
+Version=4,9,8
+Name=Symbol
+Category=C4D_StaticBack
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png
new file mode 100644
index 0000000..25b3618
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt
new file mode 100644
index 0000000..8a13109
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt
@@ -0,0 +1,7 @@
+[Action]
+Name=IsOnFire
+Delay=1
+Length=1
+FacetBase=1
+NextAction=IsOnFire
+EndCall=DoExtinguish \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt
new file mode 100644
index 0000000..626702c
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt
@@ -0,0 +1,10 @@
+[DefCore]
+id=_ETG
+Version=4,9,8
+Name=Extinguisher
+Category=C4D_StaticBack|C4D_Rule
+Timer=5
+TimerCall=Check
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt
new file mode 100644
index 0000000..f8cae0d
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt
@@ -0,0 +1 @@
+Sorgt dafür, dass brennende Objekte nach einiger Zeit gelöscht werden. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt
new file mode 100644
index 0000000..0c93c3f
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt
@@ -0,0 +1 @@
+Extinguishes burning objects after a while. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png
new file mode 100644
index 0000000..6b89fed
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt
new file mode 100644
index 0000000..2466655
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Löscher
+US:Extinguisher
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c
new file mode 100644
index 0000000..87dbd75
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c
@@ -0,0 +1,28 @@
+/*-- Löschobjekt --*/
+
+#strict
+
+func Check()
+{
+ if(GetAction()ne"Idle") return(0);
+ while(Var()=FindObject(0,0,0,0,0,OCF_OnFire(),0,0,0,Var()))
+ if(!FindObject(GetID(),0,0,0,0,0,"IsOnFire",Var()) && GetAlive(Var(0)))
+ ObjectSetAction(CreateObject(GetID(),0,0,-1),"IsOnFire",Var());
+ return(1);
+}
+
+func DoExtinguish()
+{
+ if(!GetAlive(GetActionTarget())) return(RemoveObject());
+ if(GetActTime()>200 && !Random(4)) {
+ Extinguish(GetActionTarget());
+ return(RemoveObject());
+ }
+ return(1);
+}
+
+func Activate()
+{
+ MessageWindow(GetDesc(),Par());
+ return(1);
+}
diff --git a/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png
new file mode 100644
index 0000000..4c16706
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt
new file mode 100644
index 0000000..dca46a3
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt
@@ -0,0 +1,12 @@
+[Particle]
+Name=Fog
+MaxCount=300
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+Face=0,0,80,160,-40,-80
+Delay=0
+Repeats=1
+Reverse=0
+GravityAcc=0
+Additive=0 \ No newline at end of file
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
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt
new file mode 100644
index 0000000..03847bb
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt
@@ -0,0 +1,17 @@
+[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 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt
new file mode 100644
index 0000000..0781943
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt
@@ -0,0 +1,11 @@
+[DefCore]
+id=SONE
+Version=4,9,8
+Name=Sun
+Category=C4D_StaticBack|C4D_Environment
+MaxUserSelect=1
+Width=1
+Height=1
+Offset=-1,-1
+Picture=192,0,64,64
+BlitMode=1
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt
new file mode 100644
index 0000000..e2177c9
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt
@@ -0,0 +1 @@
+Die Sonne. Sie scheint und zieht über den Himmel. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt
new file mode 100644
index 0000000..d99b86e
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt
@@ -0,0 +1 @@
+The sun shines and wanders across the sky. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png
new file mode 100644
index 0000000..62add4d
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt
new file mode 100644
index 0000000..e88af87
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Sonne
+US:Sun
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c
new file mode 100644
index 0000000..ded97c5
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c
@@ -0,0 +1,191 @@
+/*-- Sonne --*/
+
+#strict
+
+local SonneX, SonneY;
+
+func IsLight() { return(1); }
+
+// Initialisierung
+protected func Initialize()
+{
+ // In den Hintergrund mit dir.
+ SetCategory(C4D_StaticBack()|C4D_Background());
+ // Action setzen
+ SetAction("SeiBrav");
+ // Nur für den Herrn und Meister sichtbar
+ SetVisibility (VIS_Owner(), this());
+ if(!FindObject(GetID()))
+ // Das erste Sonnen-Objekt prüft nur, dass jeder Spieler auch sein Umweltobjekt hat
+ {
+ SetOwner(-1,this()); // Unparteiisch sein!
+ SetCategory(1,this()); // Nicht bewegen
+ SetAction("IchWillNurSpielerZaehlen");
+ return();
+ }
+}
+
+// Sucht einen Spieler, der keine Sonne hat (-1 für Erfolglos)
+private func FindeFreienSpieler()
+{
+ for(var i=0; i<16; ++i)
+ if(GetPlayerName(i)&&(!FindObjectOwner(GetID(),i)))
+ return(i);
+ return(-1);
+}
+
+// Prüft alle Spieler durch, ob denn auch jeder seine Sonne hat
+protected func PruefeAlleSpieler()
+{
+ var FreierSpieler;
+ while((FreierSpieler=FindeFreienSpieler())!=-1)
+ ErstelleLenseflare(FreierSpieler);
+}
+
+// Erstellt eine Sonne und weist ihm einen Besitzer zu
+private func ErstelleLenseflare(FuerDiesenSpieler)
+{
+ CreateObject(GetID(),0,0,FuerDiesenSpieler);
+}
+
+
+// Von "SeiBrav" aufgerufen
+protected func TuWasBraves()
+{
+ // Bei vorhandenem Lenseflare (mit integrierter Sonne) kann dieses Objekt gelöscht werden
+ if(ObjectCount(LENS))
+ {
+ RemoveObject(this());
+ return();
+ }
+ // Hat es seinen Besitzer verloren? :(
+ if((!GetPlayerName(GetOwner())) || GetOwner()==-1)
+ {
+ RemoveObject(this());
+ return();
+ }
+ // Sonnenposition anpassen
+ BerechneSonne();
+ SetPosition(SonneX,SonneY);
+ // Nachts ausblenden
+ if(IsDay())
+ SetVisibility (VIS_Owner());
+ else
+ SetVisibility (VIS_None());
+ // Sofern der Spieler alleine ist, blenden
+ var VektorDist=GibVektorDist(GetOwner());
+ 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());
+ }
+}
+
+// Interner Kruscht!
+// Bildschirmmittelpunkt
+private func GibMittelpunktX(iSpieler)
+{
+ if(IsNetwork())
+ return(GetX(GetCursor(iSpieler)));
+ else
+ return(GetPlrViewX(iSpieler));
+}
+
+private func GibMittelpunktY(iSpieler)
+{
+ if(IsNetwork())
+ return(GetY(GetCursor(iSpieler)));
+ else
+ return(GetPlrViewY(iSpieler));
+}
+
+// Sonnenkoordinate
+private func BerechneSonne()
+{
+ BerechneSonneX();
+ BerechneSonneY();
+}
+private func BerechneSonneX()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ SonneX = LandscapeWidth() / 2;
+ else
+ {
+ // Da die Winkelangaben aufgrund ihres Integer-Wesens zu ungenau für eine schöne Laufbahn sind
+ // muss hier getrickst werden. Über Sin/Cos werden die Eckpunkte eines n-Ecks errechnet, auf den Linien
+ // dazwischen fährt dann die Sonne.
+ var Winkel = GibTageszeit()*360/100 +90;
+ var VonEck = LandscapeWidth()/2+Cos(Winkel,LandscapeWidth()/2);
+ Winkel = (GibTageszeit()+1)*360/100 +90;
+ var ZuEck = LandscapeWidth()/2+Cos(Winkel,LandscapeWidth()/2);
+ // Wieviele Ticks verstreichen während einem "Punkt" bei Tageszeit?
+ // Sprich: Wieviele Zwischenschritte liegen zwischen VonEck und ZuEck?
+ var Zwischenschritte = PrivateCall(ZeitObjekt,"TimeResolution") / 100;
+ // Schrittweite in 1/100000 Pixel
+ var Schrittweite = (ZuEck-VonEck)*100000 / (Zwischenschritte*TIME_Tick());
+ // Wieviel TIME-Ticks sind seit der letzten "vollen" Tageszeit vergangen?
+ var Vergangen = Local(1, ZeitObjekt) - GibTageszeit()*100;
+ Vergangen=Vergangen*TIME_Tick()+FrameCounter()%10;
+ SonneX = VonEck + (Vergangen*Schrittweite)/100000; // 100000 = 100000 wegen der 1/100000 Schrittweite
+ }
+}
+
+private func BerechneSonneY()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ SonneY = 150;
+ else
+ {
+ // Da die Winkelangaben aufgrund ihres Integer-Wesens zu ungenau für eine schöne Laufbahn sind
+ // muss hier getrickst werden. Über Sin/Cos werden die Eckpunkte eines n-Ecks errechnet, auf den Linien
+ // dazwischen fährt dann die Sonne.
+ var Winkel = GibTageszeit()*360/100 +90;
+ var VonEck = GetHorizonHeight(0)-Sin(Winkel,300)-50;
+ Winkel = (GibTageszeit()+1)*360/100 +90;
+ var ZuEck = GetHorizonHeight(0)-Sin(Winkel,300)-50;
+ // Wieviele Ticks verstreichen während einem "Punkt" bei Tageszeit?
+ // Sprich: Wieviele Zwischenschritte liegen zwischen VonEck und ZuEck?
+ var Zwischenschritte = PrivateCall(ZeitObjekt,"TimeResolution") / 100;
+ // Schrittweite in 1/100000 Pixel
+ var Schrittweite = (ZuEck-VonEck)*100000 / Zwischenschritte;
+ Schrittweite/=TIME_Tick(); // Jedes Time-Tick besteht aus 10 einzelnen Ticks
+ // Wieviel TIME-Ticks sind seit der letzten "vollen" Tageszeit vergangen?
+ var Vergangen = Local(1, ZeitObjekt) - GibTageszeit()*100;
+ Vergangen=Vergangen*TIME_Tick()+FrameCounter()%10;
+ SonneY = VonEck + (Vergangen*Schrittweite)/100000; // 100000 = 100000 wegen der 1/100000 Schrittweite
+ }
+}
+
+private func TIME_Tick()
+{
+ return(10);
+}
+
+private func GibTageszeit()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if (!ZeitObjekt) return(-1);
+ return(Local(1, ZeitObjekt)*100/PrivateCall(ZeitObjekt,"TimeResolution")); // 0-100=Mittag-Mittag
+}
+
+private func GibVektorDist(iSpieler)
+{
+ return(Distance(GibMittelpunktX(iSpieler),GibMittelpunktY(iSpieler),SonneX,SonneY));
+}
+
+// Bodenhöhe. Aus dem Schmetterling übernommen und aktuelle Syntax und global gemacht und so. k?
+private func GetHorizonHeight(iX)
+{
+ var iY = - GetY(); // Zu globaler Koordinate wandeln
+ iX -= GetX(); // Zu globaler Koordinate wandeln
+ while ( (iY<LandscapeHeight())&&(!GBackSemiSolid(iX,iY)))
+ {
+ iY+=10;
+ }
+ return(iY+GetY());
+} \ No newline at end of file