summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan <>2015-02-13 17:11:37 +0100
committerJan <_>2015-07-10 18:46:25 +0200
commit6afb3c02f851f27a8aee478059a7eb9bd3ec4120 (patch)
treeaf27482650137c2b49019977bebfcdcb84aeee4a
parent5b3888901698e86ad3c49465dd298486976f91f8 (diff)
downloadtempelschubsen-6afb3c02f851f27a8aee478059a7eb9bd3ec4120.tar.gz
tempelschubsen-6afb3c02f851f27a8aee478059a7eb9bd3ec4120.zip
Overload whole frostwave script to allow custom radii and make ice cast a frostwave
-rw-r--r--TemplePushing.c4s/System.c4g/Frostwave.c94
-rw-r--r--TemplePushing.c4s/System.c4g/Ice.c20
2 files changed, 113 insertions, 1 deletions
diff --git a/TemplePushing.c4s/System.c4g/Frostwave.c b/TemplePushing.c4s/System.c4g/Frostwave.c
index 3437c6a..d30db5e 100644
--- a/TemplePushing.c4s/System.c4g/Frostwave.c
+++ b/TemplePushing.c4s/System.c4g/Frostwave.c
@@ -4,4 +4,96 @@
#appendto MFWV
-func FxFrostwaveNSpellMaxRange() { return(90); }
+local maxRadius;
+
+protected func Initialize()
+{
+ maxRadius = 90;
+}
+
+func Activate(object caster, object realcaster)
+{
+ if (realcaster) caster = realcaster;
+
+ if (AddEffect("FrostwaveNSpell", this, 130, 1, this, 0, caster, maxRadius) <= 0)
+ {
+ RemoveObject();
+ return 1;
+ }
+
+ Sound("MgWind*");
+ return 1;
+}
+
+func FxFrostwaveNSpellStart(object target, int number, int temp, object caster, int maxRadius)
+{
+ if (temp) return;
+
+ // Initial radius
+ EffectVar(1, target, number) = 20;
+
+ // Position
+ EffectVar(2, target, number) = caster->GetX();
+ EffectVar(3, target, number) = caster->GetY();
+
+ // Caster
+ EffectVar(4, target, number) = caster;
+ EffectVar(6, target, number) = caster->GetController();
+
+ // Maximum radius
+ EffectVar(7, target, number) = maxRadius;
+
+ // Combo
+ var combo = caster->FindContents(ICE1);
+ if (combo)
+ {
+ EffectVar(5, target, number) = true;
+ combo->RemoveObject();
+ }
+
+ return 1;
+}
+
+func FxFrostwaveNSpellTimer(object target, int number, int time)
+{
+ var radius = EffectVar(1, target, number);
+
+ // Remove if maximum radius is reached
+ if (radius >= EffectVar(7, target, number)) return -1;
+
+ // Position
+ var absX = EffectVar(2, target, number), relX = AbsX(absX);
+ var absY = EffectVar(3, target, number), relY = AbsY(absY);
+
+ // Combo?
+ var searchOCF = OCF_Alive;
+ if (EffectVar(5, target, number)) searchOCF |= OCF_Collectible;
+
+ // Effects!
+ CreateParticle("FrostWave", relX, relY, RandomX(-1, 1), RandomX(-1, 1), 400 + 10 * radius, RGB(255, 255, 255));
+
+ // Fling enemies
+ var caster = EffectVar(4, target, number);
+ for (var obj in FindObjects(
+ Find_Distance(radius + 5, relX, relY), Find_Not(Find_Distance(radius - 5)),
+ Find_OCF(searchOCF), Find_NoContainer(), Find_Not(caster)))
+ {
+ var angle = Angle(absX, absY, obj->GetX(), obj->GetY());
+ obj->SetKiller(EffectVar(6, target, number));
+ Fling(obj, Sin(angle, 80) / 9, -Cos(angle, 80) / 9);
+ if (!Frozen(obj)) Freeze(obj, caster);
+ }
+
+ // Increase radius
+ EffectVar(1, target, number) += 8;
+
+ return 1;
+}
+
+/* Zaubercombo */
+
+public func GetSpellClass() { return WATR; }
+public func GetSpellCombo() { return "335"; } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)
+
+/* Custom radius */
+public func SetMaxRadius(int radius) { maxRadius = radius; }
diff --git a/TemplePushing.c4s/System.c4g/Ice.c b/TemplePushing.c4s/System.c4g/Ice.c
new file mode 100644
index 0000000..329d013
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Ice.c
@@ -0,0 +1,20 @@
+/*--- Eisklumpen ---*/
+
+#strict 2
+
+#appendto ICE1
+
+local hit;
+
+protected func Hit()
+{
+ if (!hit)
+ {
+ var frostwave = CreateObject(MFWV, 0, 0, NO_OWNER);
+ frostwave->SetMaxRadius(60);
+ frostwave->Activate(this);
+ hit = true;
+ }
+
+ return _inherited();
+} \ No newline at end of file