updated telekinesis

Charles Spurrill 2010-02-11 22:19:21 -08:00
parent 2f2065f456
commit b2f85fa743
3 changed files with 47 additions and 14 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -11,7 +11,7 @@ Repeats=1
GravityAcc=0
VertexCount=1
VertexY=20
AlphaFade=40
AlphaFade=35
Additive=1
RByV=3
Attach=1

View File

@ -7,9 +7,12 @@
#strict 2
local hz;
local magic;
protected func Initialize()
{
magic=0;
}
protected func HoldingEnabled() { return true; }
@ -21,25 +24,35 @@ protected func ControlUseStart(object pClonk, ix, iy)
public func ControlUseHolding(object pClonk, ix, iy)
{
var target=FindObject(Find_NoContainer(),Find_Not(Find_OCF(OCF_Alive)),Find_Distance(25,ix,iy), Find_Distance(150,0,0), Find_Exclude(pClonk));
if(magic==0 || GetEffect("Charge",this)) return 1;
//Magical particle effect
if(Distance(GetX(),GetY(),GetX()+ix,GetY()+iy)<150 && pClonk->GetProcedure()== "WALK")
{
//CastParticles("Magic",1,3,ix,iy,30,90,RGB(0,230,255),RGB(0,0,255));
//Objects which can be lifted by telekinesis
var target=FindObject(Find_Category(C4D_Object),Find_NoContainer(),Find_Not(Find_OCF(OCF_Alive)),Find_Distance(25,ix,iy), Find_Distance(150,0,0), Find_Exclude(pClonk));
var partx=-(Sin(180-Angle(0,0,ix,iy), 100)/10);
var party=-(Cos(180-Angle(0,0,ix,iy), 100)/10);
if(Random(3)==1)CreateParticle("Magic",ix,iy,partx,party,50,RGB(0,220,250));
}
if(target!=nil)
{
if(target!=nil && pClonk->GetProcedure()== "WALK")
{
//Magical particle effect
if(Distance(GetX(),GetY(),GetX()+ix,GetY()+iy)<150)
{
var partx=-(Sin(180-Angle(0,0,ix,iy), 100)/10);
var party=-(Cos(180-Angle(0,0,ix,iy), 100)/10);
if(Random(3)==1)CreateParticle("Magic",ix,iy,partx,party,magic/10+50,RGB(0,220,250));
}
//Don't mess around with underground objects. This stops you from triggering flints underground by pulling on them.
if(target->Stuck()==1) return 1;
//magical ring effect
CastParticles("MagicRing",1,0,ix,iy,170,175,RGB(0,230,255),RGB(0,100,255));
//Magic Drain
magic=magic-1;
//magical ring effect with frequency
if(hz<2) hz=hz+1;
if(hz>=2)
{
CastParticles("MagicRing",1,0,ix,iy,(magic*13)/50+100,(magic*13)/50+110,RGB(0,230,255),RGB(0,100,255));
hz=0;
}
var angle=Angle(target->GetX(),target->GetY(),pClonk->GetX()+ix,pClonk->GetY()+iy);
var xspeed=Sin(180-angle,10);
@ -60,9 +73,29 @@ public func ControlUseHolding(object pClonk, ix, iy)
protected func ControlUseStop(object pClonk, ix, iy)
{
if(magic==0 && !GetEffect("Charge",this))
{
AddEffect("Charge",this,150,3,this,this);
}
return 1;
}
protected func FxChargeTimer(object pTarget, int iEffectNumber, int iEffectTime)
{
if(magic<500)
{
PlayerMessage(Contained()->GetOwner(),"%d",Contained(),magic);
magic=magic+5;
CastParticles("Magic",1,10,0,0,40,90,RGB(0,100,255),RGB(255,255,255));
}
if(magic>=500)
{
magic=500;
return -1;
}
}
func Definition(def) {
SetProperty("Name", "$Name$", def);
}