From 376c20e8d9d0379ceffa28f459a3475e939cc6eb Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Sat, 6 Apr 2019 19:44:42 +0200 Subject: Add hyper mode to deflection, enabled by stacking them, that can deflect ice needles and fire balls --- .../AdditionalSpells.c4d/Deflection.c4d/Script.c | 47 +++++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) (limited to 'TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d') diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c index 31f1b0e..44319f8 100644 --- a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c @@ -57,6 +57,7 @@ func FxDeflectionPSpellStart(pClonk, iEffectNumber, iTemp) func FxDeflectionPSpellTimer(pClonk, iEffectNumber, iEffectTime) { + var hyper = EffectVar(1, pClonk, iEffectNumber); // Zeit um if(!EffectVar(0,pClonk,iEffectNumber)--) return -1; // Nicht in Gebäuden @@ -64,11 +65,15 @@ func FxDeflectionPSpellTimer(pClonk, iEffectNumber, iEffectTime) var x = GetX(pClonk), y = GetY(pClonk), xdir = GetXDir(pClonk), ydir = GetYDir(pClonk); x = x + xdir/10; y = y + ydir/10; - //Funken an der benötigten Stelle - for(var pObj in FindObjects(Find_Not(Find_And(Find_Func("GetContact", 0, -1, CNAT_Bottom)), Find_Not(Find_Func("GetSpeed"))), Find_Layer(GetObjectLayer()), Find_NoContainer(), Find_Category(C4D_Object), Find_Distance(200, GetX(pClonk), GetY(pClonk)), Find_Not(Find_Distance(11, GetX(pClonk), GetY(pClonk))))) + var categoryCondition = Find_Category(C4D_Object); + if(hyper) + { + categoryCondition = Find_Or(categoryCondition, Find_Func("HyperDeflectable", pClonk)); + } + for(var pObj in FindObjects(Find_Not(Find_And(Find_Func("GetContact", 0, -1, CNAT_Bottom))), Find_Layer(GetObjectLayer()), Find_NoContainer(), categoryCondition, Find_Distance(200, GetX(pClonk), GetY(pClonk)), Find_Not(Find_Distance(11, GetX(pClonk), GetY(pClonk))))) { // Wenn das Objekt auf den Clonk zufliegt - if( (GetXDir(pObj)GetX(pClonk)) || (GetYDir(pObj)GetY(pClonk))) + if((GetXDir(pObj)GetX(pClonk)) || (GetYDir(pObj)GetY(pClonk))) { var ox = GetX(pObj), oy = GetY(pObj), oxdir = GetXDir(pObj), oydir = GetYDir(pObj); ox = ox + oxdir/10; @@ -92,10 +97,16 @@ func FxDeflectionPSpellTimer(pClonk, iEffectNumber, iEffectTime) SetSpeed(Sin(exitAngle, exitSpeed),-Cos(exitAngle, exitSpeed), pObj); - CreateParticle("NoGravSpark", AbsX(GetX(pObj)), AbsY(GetY(pObj)), 0, 0, 80, RGB(80,50,50)); + if(hyper) + { + pObj->~HyperDeflection(exitAngle, exitSpeed, pClonk); + } + + //Funken an der benötigten Stelle + CreateParticle("NoGravSpark", AbsX(GetX(pObj)), AbsY(GetY(pObj)), 0, 0, 80, [RGB(80,50,50), GetColorDw(pClonk)][hyper]); if(!GetEffect("IntDeflected", pObj)) EffectVar(0,pClonk,iEffectNumber) = Max(EffectVar(0,pClonk,iEffectNumber)-80,0); - AddEffect("IntDeflected", pObj, 1, 20); + AddEffect("IntDeflected", pObj, 1, 1); Sound("Rip", 0, pObj); } } @@ -104,15 +115,28 @@ func FxDeflectionPSpellTimer(pClonk, iEffectNumber, iEffectTime) var iAngle = (iEffectTime*10) % 360; var px= Sin(iAngle, 15); var py= Cos(iAngle, 15); - CreateParticle("NoGravSpark", px+GetX(pClonk), py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); - CreateParticle("NoGravSpark",-py+GetX(pClonk), px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); - CreateParticle("NoGravSpark",-px+GetX(pClonk),-py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); - CreateParticle("NoGravSpark", py+GetX(pClonk),-px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + if(hyper) + { + var color = GetColorDw(pClonk); + var h, s, l, a; + SplitRGBaValue(RGB2HSL(color), h, s, l, a); + CreateParticle("NoGravSpark", px+GetX(pClonk), py+GetY(pClonk), 0, 0, 50, HSL(h, s, Max(0, l - 30)), pClonk); + CreateParticle("NoGravSpark",-py+GetX(pClonk), px+GetY(pClonk), 0, 0, 50, color, pClonk); + CreateParticle("NoGravSpark",-px+GetX(pClonk),-py+GetY(pClonk), 0, 0, 50, HSL(h, s, Max(0, l - 30)), pClonk); + CreateParticle("NoGravSpark", py+GetX(pClonk),-px+GetY(pClonk), 0, 0, 50, color, pClonk); + } + else + { + CreateParticle("NoGravSpark", px+GetX(pClonk), py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); + CreateParticle("NoGravSpark",-py+GetX(pClonk), px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + CreateParticle("NoGravSpark",-px+GetX(pClonk),-py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); + CreateParticle("NoGravSpark", py+GetX(pClonk),-px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + } return 1; } -private func FxDeflectionPSpellEffect(string szNewEffectName, object pTarget, int iNumber) -{ +private func FxDeflectionPSpellEffect(string szNewEffectName, object pTarget, int iNumber) +{ // Andere Effekte aufnehmen if(szNewEffectName == "DeflectionPSpell") { @@ -123,6 +147,7 @@ private func FxDeflectionPSpellEffect(string szNewEffectName, object pTarget, in private func FxDeflectionPSpellAdd(object pTarget, int iNumber, string szNewEffectName, int iNewEffectTimer, int iChange0, int iChange1, int iChange2, int iTime) { // Effekt übernehmen EffectVar(0,pTarget,iNumber) += 360; + EffectVar(1,pTarget,iNumber) += true; // hyper deflection } protected func FxDeflectionPSpellInfo() { return "{{MDFL}} $SpellInfo$"; } -- cgit v1.2.3-54-g00ecf