summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c
diff options
context:
space:
mode:
Diffstat (limited to 'TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c')
-rw-r--r--TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c
new file mode 100644
index 0000000..60dc5f2
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c
@@ -0,0 +1,88 @@
+/*-- Teleport --*/
+
+#strict
+
+func Range()
+{
+ var range=225;
+ return range;
+}
+
+
+
+protected func Activate(object pCaster, object pRealCaster)
+{
+ // Effekt erzeugen
+ if(!pRealCaster) pRealCaster = pCaster;
+
+ var possibleTargets = [];
+ var found=0;
+ var range=Range();
+ for(var obj in FindObjects(Find_Distance(range),Find_OCF(OCF_CrewMember),Find_Hostile(GetOwner(pRealCaster)),Sort_Distance()))
+ {
+ var dir=-1;
+ if(GetDir(obj) == DIR_Left)dir=1;
+
+ if(GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)))
+ || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)+5))
+ || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)-9)))continue;
+ if(!PathFree(GetX(obj),GetY(obj),GetX(obj)+15*dir,GetY(obj) + 5))continue;
+
+ var priority = 20 + ObjectDistance(pRealCaster, obj);
+ if(GBackSemiSolid(AbsX(obj->GetX()), AbsY(obj->GetY())))
+ priority += 100;
+
+ possibleTargets[GetLength(possibleTargets)] = [obj, priority];
+
+ }
+
+ if(!GetLength(possibleTargets))
+ {
+ var x = AbsX(GetX(pRealCaster));
+ var y = AbsY(GetY(pRealCaster));
+ var tim = CreateObject(TIM1, x, y, pRealCaster->GetOwner());
+ tim->SetVisibility(VIS_Owner);
+ AddEffect("ScheduledRemove", tim, 1, 35 * 5, 0, MATT);
+ CreateParticle("RangeSpark", 0, 0, 0, 0,((range)*1000/200)*2, RGB(200, 200, 100), tim, true);
+ Sound("Error",0,0,0,GetOwner(pRealCaster));
+ RemoveObject();
+ return;
+ }
+
+
+ // find lowest prio target from list
+ var currentLowest = 0xffffff;
+ for(var pt in possibleTargets)
+ {
+ if(pt[1] >= currentLowest) continue;
+ currentLowest = pt[1];
+ found = pt[0];
+ }
+
+ var dir=-1;
+ if(GetDir(found) == DIR_Left)dir=1;
+
+ for(var cnt=0;cnt<5;cnt++)
+ {
+ CreateParticle("PSpark",AbsX(GetX(pRealCaster)+RandomX(-5,5)),AbsY(GetY(pRealCaster)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster));
+ CreateParticle("PSpark",AbsX(GetX(found)+15*dir+RandomX(-5,5)),AbsY(GetY(found)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster));
+ }
+ SetSpeed(GetXDir(found),GetYDir(found),pRealCaster);
+ SetPosition(GetX(found)+7*dir,GetY(found),pRealCaster);
+
+ Sound("Scream");
+ return(RemoveObject());
+}
+
+
+func FxScheduledRemoveStop(target, effect, reason, temp)
+{
+ if(temp) return;
+ if(!target) return;
+ target->RemoveObject();
+}
+
+/* Zaubercombo */
+
+public func GetSpellClass(object pMage) { return(AIR1); }
+public func GetSpellCombo(pMage) { return ("222"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)