summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d
diff options
context:
space:
mode:
authorJan <>2015-02-02 17:58:18 +0100
committerJan <_>2015-07-10 17:51:43 +0200
commitca61c54b9bd69af897e4cc9d4385137fb56fd11a (patch)
treea4363f466cea6de48ca81fadc08273d58698d2ff /TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d
parent32a9632fbca3dd7a88bd3154b84a3773af39c276 (diff)
downloadtempelschubsen-ca61c54b9bd69af897e4cc9d4385137fb56fd11a.tar.gz
tempelschubsen-ca61c54b9bd69af897e4cc9d4385137fb56fd11a.zip
TemplePushingBeta.c4s
Diffstat (limited to 'TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d')
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/ActMap.txt7
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DefCore.txt20
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Graphics.pngbin0 -> 1468 bytes
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Particle.txt14
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Graphics.pngbin0 -> 345 bytes
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Graphics.pngbin0 -> 409 bytes
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Particle.txt14
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Graphics.pngbin0 -> 339 bytes
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Particle.txt16
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c176
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Graphics.pngbin0 -> 4517 bytes
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Script.c125
18 files changed, 386 insertions, 0 deletions
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DefCore.txt
new file mode 100644
index 0000000..214c847
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=ICNL
+Name=Eisnadeln
+Version=4,9,5,4
+Category=131073
+Picture=0,0,64,64
+Value=12
+Components=ICRS=3;IICE=2; \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescDE.txt
new file mode 100644
index 0000000..e7fbadb
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescDE.txt
@@ -0,0 +1 @@
+Schießt Eisnadeln vom Zauberer weg. \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescUS.txt
new file mode 100644
index 0000000..f56d320
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/DescUS.txt
@@ -0,0 +1 @@
+Shoots ice needles in the selected direction. \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/ActMap.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/ActMap.txt
new file mode 100644
index 0000000..7dec40a
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/ActMap.txt
@@ -0,0 +1,7 @@
+[Action]
+Name=Fly
+Procedure=FLOAT
+Length=1
+Delay=1
+NextAction=Fly
+FacetBase=1
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DefCore.txt
new file mode 100644
index 0000000..13db5ff
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DefCore.txt
@@ -0,0 +1,20 @@
+[DefCore]
+id=ICNA
+Name=Eisnadel
+Version=4,9,5
+Category=4
+MaxUserSelect=10
+Width=12
+Height=3
+Offset=-6,-1
+Value=10
+Mass=10
+Timer=2
+TimerCall=Check
+Vertices=1
+VertexX=1
+VertexFriction=20
+Rotate=1
+
+[Physical]
+Float=500 \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescDE.txt
new file mode 100644
index 0000000..a5ea66e
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescDE.txt
@@ -0,0 +1 @@
+Frostig. \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescUS.txt
new file mode 100644
index 0000000..8cbca28
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/DescUS.txt
@@ -0,0 +1 @@
+Very cold. \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Graphics.png
new file mode 100644
index 0000000..d598ba4
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Particle.txt
new file mode 100644
index 0000000..b6f0130
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/FSSpark.c4d/Particle.txt
@@ -0,0 +1,14 @@
+[Particle]
+Name=FSSpark
+MaxCount=2000
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+Face=0,0,32,32,-16,-16
+Delay=0
+Repeats=6
+GravityAcc=0
+AlphaFade=4
+Additive=1
+Attach=1
+RByV=1 \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Graphics.png
new file mode 100644
index 0000000..b00b2f5
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Graphics.png
new file mode 100644
index 0000000..7fd2df2
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Particle.txt
new file mode 100644
index 0000000..61c3b8b
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle.c4d/Particle.txt
@@ -0,0 +1,14 @@
+[Particle]
+Name=MaterialParticle
+MaxCount=350
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+CollisionFn=Die
+Face=0,0,28,43,-15,-5
+Repeats=10
+GravityAcc=70
+RByV=1
+Delay=175
+VertexCount=1
+AlphaFade=0 \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Graphics.png
new file mode 100644
index 0000000..ba84750
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Particle.txt
new file mode 100644
index 0000000..63d5355
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/MaterialParticle2.c4d/Particle.txt
@@ -0,0 +1,16 @@
+[Particle]
+Name=MaterialParticle2
+MaxCount=3500
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+CollisionFn=Die
+Face=0,0,28,43,-15,-5
+Repeats=1
+GravityAcc=0
+RByV=1
+Delay=0
+VertexCount=1
+AlphaFade=4
+Additive=1
+Attach=1 \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c
new file mode 100644
index 0000000..98f3eaf
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c
@@ -0,0 +1,176 @@
+/*-- Eislanze --*/
+
+#strict
+static const ICNA_Speed=50;
+
+local timer;
+local iOldX, iOldY;
+local Gift;
+local iAngle;
+local Caster;
+local Randi;
+
+func Initialize() {
+Gift=0;
+ timer=0;
+ return(1);
+}
+
+public func Activate(pCaster,Angle)
+{
+ SetAction("Fly");
+ var xDir,yDir;
+// SetR(Angle-100+RandomX(0,20));
+ iAngle = Angle-10+RandomX(0,20);
+ SetR(iAngle-90);
+ Caster = pCaster;
+// xDir=Cos(iAngle-90,ICNA_Speed);
+// yDir=Sin(iAngle-90,ICNA_Speed);
+// SetXDir(xDir+RandomX(-10,10));
+// SetYDir(yDir+RandomX(-10,10));
+// iOldX = GetX(); iOldY = GetY();
+}
+
+protected func Hit()
+{
+ if(CheckHit()) return();
+ CastParticles("MaterialParticle",20,50,0,0,20,60,RGB(50,120,255),RGB(00,120,255));
+ if(!Random(3)) RemoveObject();
+ if(GetR() > 180) iAngle = iAngle-iAngle*2;
+ if(GetR() < 180) iAngle = iAngle+iAngle*2;
+ var iMinAngleDiff = 360, iTargetAngle = iAngle;
+ var pObj;
+ while (pObj = FindObject(0, Sin(iAngle, 200)-200/2, -Cos(iAngle, 200)-200/2, 200, 200, OCF_CrewMember, 0,0, NoContainer(), pObj))
+ {
+ if (!GetAlive(pObj)) continue;
+ if(pObj == Caster) continue;
+ if(!PathFree(GetX(),GetY(),GetX(pObj),GetY(pObj))) continue;
+ var iThisTargetAngle = Angle(GetX(), GetY(), GetX(pObj), GetY(pObj));
+ if (iThisTargetAngle > 180) iThisTargetAngle -= 360;
+ if (Abs(iThisTargetAngle - iAngle) < iMinAngleDiff)
+ {
+ iMinAngleDiff = Abs(iThisTargetAngle - iAngle);
+ iTargetAngle = iThisTargetAngle;
+ }
+ }
+ iAngle = BoundBy(iTargetAngle, iAngle-Randi, iAngle+Randi);
+}
+
+protected func Check()
+{
+//CheckCrash(this());
+// SetXDir(Cos(GetR(), 245000) * 2, 0, 100000);
+// SetYDir(Sin(GetR(), 245000) * 2, 0, 100000);
+ Randi = RandomX(0,20);
+ SetR(iAngle);
+ SetXDir(Sin(iAngle, 50));
+ SetYDir(-Cos(iAngle, 50));
+
+ // SetXDir(Sin(iAngle, 80));
+ // SetYDir(-Cos(iAngle, 80));
+
+ var iMinAngleDiff = 360, iTargetAngle = iAngle;
+ var pObj;
+ while (pObj = FindObject(0, Sin(iAngle, 200)-200/2, -Cos(iAngle, 200)-200/2, 200, 200, OCF_CrewMember, 0,0, NoContainer(), pObj))
+ {
+ if (!GetAlive(pObj)) continue;
+ if(pObj == Caster) continue;
+ if(!PathFree(GetX(),GetY(),GetX(pObj),GetY(pObj))) continue;
+ var iThisTargetAngle = Angle(GetX(), GetY(), GetX(pObj), GetY(pObj));
+ if (iThisTargetAngle > 180) iThisTargetAngle -= 360;
+ if (Abs(iThisTargetAngle - iAngle) < iMinAngleDiff)
+ {
+ iMinAngleDiff = Abs(iThisTargetAngle - iAngle);
+ iTargetAngle = iThisTargetAngle;
+ }
+ }
+ iAngle = BoundBy(iTargetAngle, iAngle-Randi, iAngle+Randi);
+
+ if(++timer > 100)RemoveObject();
+ //if(!GetR() == iAngle-90){
+ //if(GetR() < iAngle-90) SetRDir(1);
+ //if(GetR() > iAngle-90) SetRDir(-1);
+ //}
+ //if(GetR() == iAngle-80+RandomX(0,20)) SetRDir(0);
+ if(ObjectDistance(this(),pObj) < 40) SetR(iAngle-90);
+
+if(!Gift==1)
+ {
+ // CreateParticle("PSpark",0,0,0,0,20,RGBa(0,RandomX(100,120),RandomX(160,255),90));
+ CreateParticle("PSpark",0,0,0,0,180,RGBa(0,RandomX(100,120),RandomX(160,255),120));
+ CreateParticle("FSSpark",0,0,0,0,150,RGB(0,RandomX(100,120),RandomX(160,255)));
+ //CreateParticle("PSpark",-GetXDir()/5,-GetYDir()/5,0,0,40,RGB(0,RandomX(100,120),RandomX(160,255)));
+ //CreateParticle("PSpark",-GetXDir()/2,-GetYDir()/2,0,0,40,RGB(0,RandomX(100,120),RandomX(160,255)));
+ CreateParticle("MaterialParticle2",0,0,RandomX(2,-2)-GetXDir()/2,RandomX(2,-2)-GetYDir()/2,250,RGB(0,RandomX(100,120),RandomX(160,255)));
+ }
+else
+{
+ CreateParticle("FSSpark",0,0,0,0,150,RGB(100,255,0));
+ CreateParticle("PSpark",0,0,0,0,180,RGBa(100,255,0,120));
+ CreateParticle("MaterialParticle2",0,0,RandomX(2,-2)-GetXDir()/2,RandomX(2,-2)-GetYDir()/2,250,RGB(100,255,0));
+ }
+ // Auf Treffer prüfen
+ CheckHit();
+ iOldX = GetX(); iOldY = GetY();
+/* var pClonk=0;
+ while(pClonk=FindObject(0,0,-1,0,0,OCF_Alive(),0,0,NoContainer(),pClonk))
+ {
+ if(!ObjectCount(NTMG))if(Hostile(GetOwner(),GetOwner(pClonk)))continue;
+ Punch(pClonk,4);
+ RemoveObject();
+ }*/
+}
+
+private func CheckHit()
+{
+ // Nur wenn schon passende Werte da sind
+ if(!iOldX && !iOldY) return();
+ // Distance zur letzten Position berechnen
+ var iXDist = GetX()-iOldX;
+ var iYDist = GetY()-iOldY;
+ // Treffer-Überprüfung
+ var iSteps = Abs(iXDist/4);
+ if(Abs(GetXDir())<Abs(GetYDir())) iSteps = Abs(iYDist/4);
+ var iX, iY, pObj;
+ // Mit Schleife alle Zwischenpunkte abklappern
+ for(var i = iSteps; i; i--)
+ {
+ iX = -iXDist*i/iSteps; iY = -iYDist*i/iSteps;
+ if(!iY) iY = 1;
+// CreateParticle("NoGravSpark", iX, iY, 0, 0, 30, RGB(i*255/iSteps, (iSteps-i)*255/iSteps));
+ var pFObj;
+ if(pFObj = FindObject(0, iX, iY, 0, 0, OCF_OnFire(), 0, 0, NoContainer())) {
+ if(!Random(3)) RemoveObject(this());
+ }
+ if(pObj = FindObject(0, iX, iY, 0, 0, OCF_Alive(), 0, 0, NoContainer())) return(HitLiving(pObj));
+ }
+}
+
+private func HitLiving (living,pObj)
+{
+if(living == Caster) return(0);
+CastParticles("MaterialParticle",20,50,0,0,20,60,RGB(50,120,255),RGB(00,120,255));
+Sound("Crystal2", this());
+if(!Gift==1)
+ {
+ Sound("Hited", living);
+ // Schaden machen
+ Punch(living, 12);
+ if(!Frozen(living)) Freeze(living, EffectVar(4));
+ return(RemoveObject());
+ }
+if(Gift==1)
+{
+ Sound("Hited", living);
+ // Schaden machen
+ Punch(living, (10));
+ return(RemoveObject());
+ }
+ }
+
+
+protected func Destruction()
+{
+ CreateParticle("PSpark", RandomX(-1,2), RandomX(-2,1), RandomX(-3,2), RandomX(-2,1), RandomX(150,90), RGB(010,035,94));
+ CreateParticle("PSpark", RandomX(-2,1), RandomX(-1,2), RandomX(-2,3), RandomX(-1,2), RandomX(150,90), RGB(012,040,94));
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Graphics.png
new file mode 100644
index 0000000..d58fd63
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Names.txt
new file mode 100644
index 0000000..78ba18b
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Eisnadeln
+US:Ice needle \ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Script.c
new file mode 100644
index 0000000..1d439bf
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Script.c
@@ -0,0 +1,125 @@
+/* Eisnadeln */
+
+#strict
+
+local Combo;
+
+
+
+func Activate(pCaster,pRealcaster) {
+Combo=0;
+Sound("Magic",0,pCaster);
+if(FindContents(ABRL,pCaster))
+{
+Combo=1;
+RemoveObject(FindContents(ABRL,pCaster));
+}
+ var pClonk;
+ if(pRealcaster) pClonk=pRealcaster;
+ else pClonk=pCaster;
+
+ // Zielen wenn möglich
+ if (pClonk->~DoSpellAim(this())) return(1);
+
+ var angle=-90;
+ if(GetDir(pClonk) == DIR_Right()) angle=90;
+ ActivateAngle(pClonk,angle);
+ RemoveObject();
+ return(1);
+}
+
+// Aktivierung nach Zielen (iAngle: -90=links; 0=oben; +90=rechts)
+public func ActivateAngle(object pCaller, int iAngle)
+ {
+ //var pEffer = CreateObject(_WE_,0,0,GetOwner(this()));
+ //GetTarget(object pTarget,int Interval, string Element, int ElementNumber, int R, int G, int B, int a)
+ //pEffer -> GetTarget(pCaller,0, "Water", 0, 100, 100, 255, 120);
+ var WasserF = FindContents(WBRL,pCaller);
+ if(WasserF)
+ {
+ RemoveObject(WasserF);
+ CreateContents(FLNT,this());
+ }
+ if(!FindContents(FLNT,this()))
+ {
+ for(var cnt=0;cnt<3;cnt++)
+ {
+ var f=CreateObject(ICNA,AbsX(GetX(pCaller))+Cos(iAngle-90,13),AbsY(GetY(pCaller))+Sin(iAngle-90,13),GetOwner(pCaller));
+ f->Activate(pCaller,iAngle);
+ if(Combo==1) f->LocalN("Gift",f)=1;
+ var combo = FindContents(ICE1,pCaller);
+ if(combo)
+ {
+ RemoveObject(combo);
+ f->CreateContents(ROCK);
+ }
+ }
+ AddEffect("RecallMFCSAiming",pCaller,20,1,0,GetID(),iAngle);
+
+ // Objekt löschen
+ RemoveObject();
+ return(1);
+ }
+ if(FindContents(FLNT,this()))
+ {
+ for(var cnt=0;cnt<6;cnt++)
+ {
+ var f=CreateObject(ICNA,AbsX(GetX(pCaller))+Cos(iAngle-90,13),AbsY(GetY(pCaller))+Sin(iAngle-90,13),GetOwner(pCaller));
+ f->Activate(pCaller,iAngle);
+ if(Combo==1) f->LocalN("Gift",f)=1;
+ var combo1 = FindContents(ICE1,pCaller);
+ if(combo1)
+ {
+ RemoveObject(combo1);
+ f->CreateContents(ROCK);
+ }
+ }
+ AddEffect("RecallMFCSAiming",pCaller,20,1,0,GetID(),iAngle);
+
+ // Objekt löschen
+ RemoveObject();
+ return(1);
+ }
+}
+public func HoldAimer(pCaller)
+{
+ return(true);
+}
+
+protected func FxRecallICNAAimingStart(pTarget,iEffectNumber,bTemp,par1){
+EffectVar(0,pTarget,iEffectNumber)=par1;
+EffectVar(1,pTarget,iEffectNumber)=0;
+EffectVar(2,pTarget,iEffectNumber)=0;
+return(1);}
+
+protected func FxRecallICNAAimingTimer(pTarget,iEffectNumber)
+{
+ if(GetAction(pTarget) eq "Magic")return(0);
+
+ if(!EffectVar(1,pTarget,iEffectNumber))
+ {
+ pTarget->~DoMagic(ICNA);
+ EffectVar(1,pTarget,iEffectNumber)=1;
+ }
+
+ if(!EffectVar(2,pTarget,iEffectNumber) && GetAction(pTarget) eq "AimMagic")
+ {
+ var pAimer=FindObject(AIMR,0,0,0,0,0,0,pTarget,NoContainer());
+ if(pAimer)
+ {
+ LocalN("iAngle",pAimer)=EffectVar(0,pTarget,iEffectNumber);
+ LocalN("pArrow",pAimer)->~UpdateAngle(EffectVar(0,pTarget,iEffectNumber));
+ pAimer->~UpdateAngle(EffectVar(0,pTarget,iEffectNumber));
+ pTarget->~AimingAngle(EffectVar(0,pTarget,iEffectNumber));
+ EffectVar(2,pTarget,iEffectNumber)=1;
+ }
+ }
+ if(!WildcardMatch(GetAction(pTarget),"*Magic*") && !WildcardMatch(GetAction(pTarget),"*Aim*"))return(-1);
+
+ if(EffectVar(2,pTarget,iEffectNumber) && EffectVar(1,pTarget,iEffectNumber))return(-1);
+}
+
+/* Zaubercombo */
+
+public func GetSpellClass(object pMage) { return(WATR); }
+public func GetSpellCombo(pMage) { return ("444"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)