Death Blade

I've got a large archive of NPCs that I've saved over the years… However, I don't know who made any of them. Therefore, I can only give credit to John Doe. If you know the original author, please tell me and I'll fix my post.

Name: Death Blade
Type: Weapon
Author: John Doe
Description: The player throws a spinning blade that returns.
Notes: Required images are attached to this post.

[code]if (playertouchsme) {
toweapons Death Blade;
hide;
}
if (weaponfired && this.flycounter<=0) {
hideimg 1;
hidesword 0.3;
this.distance = 15;
this.steplen = 1.5;

timeout = 0.05;
this.flycounter = 0;
this.oldx = playerx;
this.oldy = playery;
}
if (timeout) {
this.flycounter++;
if (this.flycounter<6) {
if (playerdir==0 || playerdir==2) playersprite = 13;
else playersprite = 6;
if (playerdir==0) showimg 1,deathblade4.gif,playerx-3.1,playery-0;
if (playerdir==1) showimg 1,deathblade1.gif,playerx+0.7,playery-1.7;
if (playerdir==2) showimg 1,deathblade1.gif,playerx+1.2,playery-1.5;
if (playerdir==3) showimg 1,deathblade3.gif,playerx-2.6,playery-1.7;
if (this.flycounter==2) freezeplayer 0.2;
timeout = 0.05;
} else if (this.flycounter==6) {
playersprite = 0;
this.mx = 0;
this.my = 0;
if (playerx>this.oldx) this.mx+=this.steplen;
if (playerx<this.oldx) this.mx-=this.steplen;
if (playery>this.oldy) this.my+=this.steplen;
if (playery<this.oldy) this.my-=this.steplen;
if (this.mx!=0 && this.my!=0) {
this.mx*=0.714;
this.my*=0.714;
}
if (this.mx==0 && this.my==0) {
if (playerdir==0) this.my-=this.steplen;
if (playerdir==1) this.mx-=this.steplen;
if (playerdir==2) this.my+=this.steplen;
if (playerdir==3) this.mx+=this.steplen;
}
this.flyx = playerx+0.5;
this.flyy = playery-0.5;
if (playerdir==0) this.flyx–;
if (playerdir==2) this.flyx–;
timeout = 0.05;
} else if (this.flycounter<6+this.distance) {
fac = cos(3.14/2*(this.flycounter-6)/this.distance);
this.flyx += this.mxfac;
this.flyy += this.my
fac;
showimg 1,deathblade.gif,this.flyx,this.flyy;
if (onwall(this.flyx+0.5,this.flyy+0.5)) {
putleaps 4,this.flyx,this.flyy;
this.flycounter = 6+this.distance;
} else
this.testhurt = 1;
timeout = 0.05;
} else {
distx = playerx+0.5-this.flyx;
disty = playery+1-this.flyy;
abs = (distx^2+disty^2)^0.5;
if (abs>=2) {
fac = arctan((this.flycounter-6-this.distance)/this.distance);
this.flyx += distx/absthis.steplenfac;
this.flyy += disty/absthis.steplenfac;
showimg 1,deathblade.gif,this.flyx,this.flyy;
this.testhurt = 1;
timeout = 0.05;
} else {
hideimg 1;
this.flycounter = 0;
}
}
}
if (playerenters) {
hideimg 1;
this.flycounter = 0;
timeout = 0;
show;
}
if (this.testhurt == 1) {
for (i=0; i<compuscount; i++) {
if (abs(this.flyx-compus[i].x)<=1 &&
abs(this.flyy-(compus[i].y-0.5))<=1.5 &&
compus[i].mode!=3)
hitcompu i,2,this.flyx+0.5,this.flyy+0.5;
}
for (i=1; i<playerscount; i++) {
if (abs((this.flyx+0.7)-(players[i].x+1.5))<=1 &&
abs((this.flyy+0.5)-(players[i].y+1.5))<=1.5)
hitplayer i,2,this.flyx+0.5,this.flyy+0.5;
}
this.testhurt = 1;
}
[/code]

[attachment deleted by admin]