summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/System.c4g/MagicLightningBolt.c
diff options
context:
space:
mode:
authorJan <>2015-07-10 18:11:22 +0200
committerJan <_>2015-07-10 18:47:01 +0200
commitf1ece16c08d8c01e1d49a25f0314a96c021e73cb (patch)
tree9bc9f547f2524dee8e62f168f317df465a6cbcdd /TemplePushing.c4s/System.c4g/MagicLightningBolt.c
parent80b15646d73587f4e15a2897314692b58aa1a47f (diff)
downloadtempelschubsen-f1ece16c08d8c01e1d49a25f0314a96c021e73cb.tar.gz
tempelschubsen-f1ece16c08d8c01e1d49a25f0314a96c021e73cb.zip
r0.921
Diffstat (limited to 'TemplePushing.c4s/System.c4g/MagicLightningBolt.c')
-rw-r--r--TemplePushing.c4s/System.c4g/MagicLightningBolt.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/TemplePushing.c4s/System.c4g/MagicLightningBolt.c b/TemplePushing.c4s/System.c4g/MagicLightningBolt.c
new file mode 100644
index 0000000..bd94dd9
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/MagicLightningBolt.c
@@ -0,0 +1,65 @@
+/*-- Lightning Bolt --*/
+
+#strict 2
+
+#appendto LGTS
+
+private func Advance()
+{
+ var obj;
+
+ // Einschlag
+ var iVtx = GetVertexNum()-1, iVtxX = GetVertex(iVtx, 0), iVtxY = GetVertex(iVtx, 1);
+ if (GBackSolid(iVtxX-GetX(), iVtxY-GetY() ))
+ return(Remove());
+
+ // Neuen Eckpunkt
+ if (!AddVertex( iVtxX+iAdvX+RandomX(-5,5), iVtxY+iAdvY+RandomX(-5,5)))
+ return(Remove());
+
+ SetPosition(GetVertex(GetVertexNum()), GetVertex(GetVertexNum(), 1));
+
+ // Im Wasser?
+ if (GBackLiquid(iVtxX-GetX(), iVtxY-GetY() ))
+ {
+ // Alle Lebewesen in der Nähe bekommen was ab
+ for (obj in FindObjects(Find_InRect(iVtxX-GetX()-400, iVtxY-GetY()-400, 800, 800), Find_Or(Find_OCF(OCF_Alive), Find_Func("IsForceField")), Find_NoContainer(), Find_Layer(GetObjectLayer()) ))
+ {
+ if(!PathFree(iVtxX, iVtxY, GetX(obj), GetY(obj))) continue;
+ if(!GBackLiquid(GetX(obj)-GetX(), GetY(obj)-GetY())) continue;
+ // Selber so ausrichten, dass die Schlagrichtung stimmt
+ var xdiff = GetX(obj) - GetVertex(Max(GetVertexNum()-3, 0), 0);
+ if (!xdiff) xdiff = iAdvX;
+ if (xdiff > 0) SetDir(DIR_Right); else SetDir(DIR_Left);
+ obj->~LightningStrike(this);
+ Punch(obj, 12);
+ if(!Frozen(obj)) Freeze(obj);
+ DrawParticleLine ("LightningSpark2", iVtxX-GetX(), iVtxY-GetY(),
+ GetX(obj)-GetX(), GetY(obj)-GetY(), 6, 60, RGB(0,100,255));
+ DrawParticleLine ("LightningSpark2", iVtxX-GetX(), iVtxY-GetY(),
+ GetX(obj)-GetX(), GetY(obj)-GetY(), 3, 25, RGB(250,250,255));
+ }
+ return(Remove());
+ }
+
+ // Objektanziehung
+ iVtx = GetVertexNum()-1; iVtxX = GetVertex(iVtx, 0); iVtxY = GetVertex(iVtx, 1);
+ if (iVtx>7)
+ {
+ for (var obj in FindObjects( Find_AtRect(iVtxX-GetX()-13, iVtxY-GetY()-13, 26, 26), Find_Or(Find_OCF(OCF_Alive), Find_Func("IsForceField")), Find_Layer(GetObjectLayer()), Find_NoContainer() ) )
+ {
+ if(!PathFree(iVtxX, iVtxY, GetX(obj), GetY(obj))) continue;
+ Attraction(obj);
+ break;
+ }
+ }
+ for(obj in FindObjects(Find_ID(GetID()), Find_Distance(35,iVtxX-GetX(), iVtxY-GetY()), Find_Layer(GetObjectLayer()), Find_Exclude(this())))
+ {
+ AttractionLightning(obj);
+ break;
+ }
+
+ Timer();
+ // Weiter
+ return;
+} \ No newline at end of file