summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s
diff options
context:
space:
mode:
Diffstat (limited to 'TemplePushing.c4s')
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c47
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/IceNeedles.c4d/IceNeedles.c4d/Script.c9
-rw-r--r--TemplePushing.c4s/System.c4g/FireBall.c13
3 files changed, 58 insertions, 11 deletions
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)<GetXDir(pClonk)) == (GetX(pObj)>GetX(pClonk)) || (GetYDir(pObj)<GetYDir(pClonk)) == (GetY(pObj)>GetY(pClonk)))
+ if((GetXDir(pObj)<GetXDir(pClonk)) == (GetX(pObj)>GetX(pClonk)) || (GetYDir(pObj)<GetYDir(pClonk)) == (GetY(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$"; }
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/IceNeedles.c4d/IceNeedles.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/IceNeedles.c4d/IceNeedles.c4d/Script.c
index 12a9863..6adf673 100644
--- a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/IceNeedles.c4d/IceNeedles.c4d/Script.c
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/IceNeedles.c4d/IceNeedles.c4d/Script.c
@@ -107,3 +107,12 @@ func ContactLeft()
}
Sound("Crystal*", 0, this);
}
+
+func HyperDeflectable(object by) { return Hostile(GetOwner(), GetOwner(by)); }
+
+func HyperDeflection(int newAngle, int newSpeed, object by)
+{
+ Caster = by;
+ SetOwner(GetOwner(by));
+ iAngle = newAngle;
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/FireBall.c b/TemplePushing.c4s/System.c4g/FireBall.c
index 8578ebc..669ffc9 100644
--- a/TemplePushing.c4s/System.c4g/FireBall.c
+++ b/TemplePushing.c4s/System.c4g/FireBall.c
@@ -90,3 +90,16 @@ func FxFireballFlightTimer(pTarget, iEffectNumber, iEffectTime)
// OK; weiter existieren
return(1);
}
+
+func HyperDeflectable() { return true; }
+
+func HyperDeflection(int newAngle, int newSpeed, object by)
+{
+ var effect = GetEffect("FireballFlight", this);
+ if(!effect)
+ {
+ return;
+ }
+ EffectVar(2, this, effect) = newAngle;
+ SetOwner(GetOwner(by));
+} \ No newline at end of file