diff options
| author | Jan <> | 2015-07-10 18:11:22 +0200 |
|---|---|---|
| committer | Jan <_> | 2015-07-10 18:47:01 +0200 |
| commit | f1ece16c08d8c01e1d49a25f0314a96c021e73cb (patch) | |
| tree | 9bc9f547f2524dee8e62f168f317df465a6cbcdd /TemplePushing.c4s/System.c4g/MagicLightningBolt.c | |
| parent | 80b15646d73587f4e15a2897314692b58aa1a47f (diff) | |
| download | tempelschubsen-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.c | 65 |
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 |
