diff options
| author | Jan <> | 2015-02-02 18:49:15 +0100 |
|---|---|---|
| committer | Jan <_> | 2015-07-10 17:52:21 +0200 |
| commit | de97f8b2898e8fd00c5d6108e2832b7e6cd3668f (patch) | |
| tree | dc8d478aec0b71e0c4dd797e51080335220d02cf /TemplePushing.c4s/System.c4g/Airblast.c | |
| parent | ca61c54b9bd69af897e4cc9d4385137fb56fd11a (diff) | |
| download | tempelschubsen-de97f8b2898e8fd00c5d6108e2832b7e6cd3668f.tar.gz tempelschubsen-de97f8b2898e8fd00c5d6108e2832b7e6cd3668f.zip | |
TemplePushingB.c4s
Diffstat (limited to 'TemplePushing.c4s/System.c4g/Airblast.c')
| -rw-r--r-- | TemplePushing.c4s/System.c4g/Airblast.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/TemplePushing.c4s/System.c4g/Airblast.c b/TemplePushing.c4s/System.c4g/Airblast.c new file mode 100644 index 0000000..473263b --- /dev/null +++ b/TemplePushing.c4s/System.c4g/Airblast.c @@ -0,0 +1,84 @@ +/* Airblast kill tracking */ + +#strict + +#appendto ABLA + +func FxAirblastNSpellTimer(object pTarget, int iNumber, int iTime) { + var iPos, pObj, iX, iY, iSpeed, iRandom, iAngle, iSize, iStep; + + var iPos = EffectVar(1,pTarget,iNumber); + // löschen falls schon zu weit alles weggeblasen + if(iPos >= EffectCall(pTarget,iNumber,"MaxRange")) return(-1); + + iStep = -iPos/18+EffectCall(pTarget,iNumber,"MaxRange")/17; + + iX = EffectVar(2,pTarget,iNumber); + iY = EffectVar(3,pTarget,iNumber); + + iAngle = EffectVar(0,pTarget,iNumber); + iSize = iStep+iPos/5; + + iX += Sin(iAngle, iPos); + iY -= Cos(iAngle, iPos); + + //Log("%d,%d",iSize,iStep); + + + // Log("%d,%d,%d,%d",iX+Sin(iAngle,iPos)-iSize,iY-Cos(iAngle,iPos)-iSize,iSize*2,iSize*2); + + // Objekte wegblasen + while(pObj=FindObject(0,iX-iSize,iY-iSize,iSize*2,iSize*2,OCF_Collectible()|OCF_Alive(),0,0,NoContainer(),pObj)) + { + if(Stuck(pObj)) continue; + if (GetProcedure(pObj) eq "ATTACH") continue; // Keine getragenen Schilde, Alchemiebeutel, etc. + iSpeed=iStep*6; + if(iSpeed<0) iSpeed=0; + + // Sound fürs Wegblasen + Sound("MgWndB", false, pObj); + + //Log("%s: %d; %d,%d",GetName(pObj),iSpeed,Sin(iAngle,iSpeed+20),-iSpeed); + + if(GetAlive(pObj)) + { + iRandom=Random(3); + //DoEnergy(-1-iRandom,pObj); + //pObj->~CatchBlow(-1-iRandom,this()); + pObj->SetKiller(EffectVar(6,pTarget,iNumber)); + Fling(pObj,Sin(iAngle,iSpeed+20)/9,-iSpeed/2/9); + } + else + { + SetSpeed(Sin(iAngle,iSpeed+20),-iSpeed/2,pObj); + + // Richtigen Controller setzen + SetController(EffectVar(6,pTarget,iNumber),pObj); + } + } + + // Explosionen bei Kombo + var iMat; + if (EffectVar(4, pTarget, iNumber)) + if (GBackSolid(iX, iY)) + { + iMat = GetMaterial(iX,iY); + if (iMat >= 0 && iMat != Material("Vehicle")) + { + Explode(17, CreateObject(ROCK, iX,iY,EffectVar(5, pTarget, iNumber))); + return(-1); + } + } + + var clr = iPos*255/EffectCall(pTarget,iNumber,"MaxRange"); + CreateParticle("PSpark",iX,iY,0,0,iSize*15,RGBa(200,200,255,clr*127/255)); + + // alle 20 Pixel wird nach Objekten gesucht + EffectVar(1,pTarget,iNumber)+=iStep; + while(pObj=FindObject(0,iX-iSize,iY-iSize,iSize*2,iSize*2,OCF_Alive(),0,0,NoContainer(),pObj)) { + if(GetKiller(pObj)!=EffectVar(6,pTarget,iNumber)) { + DoEnergy(-1,pObj, 1,,EffectVar(6,pTarget,iNumber)+1); + DoEnergy(+1,pObj, 1,,EffectVar(6,pTarget,iNumber)); + } + } +} |
