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/IceBall.c | |
| parent | 80b15646d73587f4e15a2897314692b58aa1a47f (diff) | |
| download | tempelschubsen-f1ece16c08d8c01e1d49a25f0314a96c021e73cb.tar.gz tempelschubsen-f1ece16c08d8c01e1d49a25f0314a96c021e73cb.zip | |
r0.921
Diffstat (limited to 'TemplePushing.c4s/System.c4g/IceBall.c')
| -rw-r--r-- | TemplePushing.c4s/System.c4g/IceBall.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/TemplePushing.c4s/System.c4g/IceBall.c b/TemplePushing.c4s/System.c4g/IceBall.c new file mode 100644 index 0000000..c9b67ab --- /dev/null +++ b/TemplePushing.c4s/System.c4g/IceBall.c @@ -0,0 +1,97 @@ +/*-- Iceball --*/ + +#strict + +#appendto ICEB + +public func ControlLeft() {} + +public func ControlRight() {} + +// Die restlichen Tasten mit Stop belegen, damit Klassisch auch gerade fliegen kann +public func ControlDig() {} + +public func ControlUp() {} + +public func ControlDown() {} + +// Bei JnR wenn die Taste losgelassen wird auch keine Drehung mehr +public func ControlLeftReleased() {} + +public func ControlRightReleased() {} + +// Werfen löst den Eisschlag aus +public func ControlThrow() {} + +func FxIceStrikeFlightTimer(pTarget, iEffectNumber, iEffectTime) + { + var iSize=EffectVar(0, pTarget, iEffectNumber); + var iMaxSize=EffectVar(1, pTarget, iEffectNumber); + var iAngle=EffectVar(2, pTarget, iEffectNumber)+=EffectVar(5, pTarget, iEffectNumber); + var iLaunchFree=EffectVar(3, pTarget, iEffectNumber); + var pCaster = EffectVar(4, pTarget, iEffectNumber); + if(iSize<=0) return(RemoveObject()); + + // Effekt + for( var i=1; i>0; --i) + { + CreateParticle("NoGravSpark",RandomX(-iSize/50,iSize/50), RandomX(-iSize/50,iSize/50), +RandomX(-2,2), +RandomX(-2,2), iSize*60/100+Random(15), RGB(10,RandomX(40,140),RandomX(250, 100))); + CreateParticle("Freeze",RandomX(-iSize/50,iSize/50), RandomX(-iSize/50,iSize/50), +RandomX(-2,2), +RandomX(-2,2), iSize*60/100+Random(15), RGB(10,RandomX(250,100),RandomX(40,140))); + } + + // Ausrichtung nach Caster + if (!iLaunchFree && pCaster) + { + var x=GetX(pCaster)+Sin(iAngle, 25), y=GetY(pCaster)-Cos(iAngle, 25); + if (GetX()!=x || GetY()!=y) + { + DrawParticleLine("Snow", x-GetX(), y-GetY(), 0, 0, 5, 40, 16777215, 16777215, 0); + SetPosition(x, y); + } + } + + // Noch nicht voll aufgeladen? + if (iSize < iMaxSize) + { + for( var i=5; i>0; --i) + { + var iR, iD; + var iX=Sin(iR=Random(360), iD=RandomX(iSize/10,iSize/5)); + var iY=Cos(iR, iD); + CreateParticle("Snow", iX, iY, -iX/3, -iY/3, Random(25), RGBa(Random(255),0,0,90)); + CreateParticle("Snow", iX, iY, -iX/3, -iY/3, Random(35)); + } + + // Vergrößern + EffectVar(0, pTarget, iEffectNumber) = iSize+=10; + + // Nichts weiter während des Wachsens + return(1); + } + + // Abschuss noch nicht freigegeben? + if (!iLaunchFree) return(1); + + // Maximale Laufzeit + if(iEffectTime-iLaunchFree>550) return(RemoveObject()); + + // Geschwindigkeit anpassen + SetXDir(Sin(iAngle, ICEB_Speed)); + SetYDir(-Cos(iAngle, ICEB_Speed)); + + // Suche nach Zielen + var pObj; + for(pObj in FindObjects(Find_AtPoint(0,1),Find_OCF(OCF_CrewMember),Find_NoContainer(),Find_Layer(GetObjectLayer()))) + { + if(GetOCF(pObj) & OCF_CrewMember) if (GetAlive(pObj)) return(Hit()); + } + + // OK; weiter existieren + return(1); + } + +func FxIceStrikeFlightStop(object pTarget, int iEffectNumber, int iReason, bool fTemp) + { + if (!fTemp) RemoveObject(pTarget); + return(1); + } |
