namespace std
{
namespace weapons
{
namespace laser
{
// Set the weapon's direction based on its angle;
// Can also makes weapons unblockable
void Aim(eweapon wpn)
{
float angle=wpn->Angle%6.2832;
int dir;
if(angle<0)
angle+=6.2832;
if(angle<0.3927 || angle>5.8905)
dir=DIR_RIGHT;
else if(angle<1.1781)
dir=DIR_RIGHTDOWN;
else if(angle<1.9635)
dir=DIR_DOWN;
else if(angle<2.7489)
dir=DIR_LEFTDOWN;
else if(angle<3.5343)
dir=DIR_LEFT;
else if(angle<4.3197)
dir=DIR_LEFTUP;
else if(angle<5.1051)
dir=DIR_UP;
else
dir=DIR_RIGHTUP;
wpn->Dir=dir;
}
eweapon Fire(int weaponID, int x, int y, float angle, int step, int damage)
{
eweapon wpn=Screen->CreateEWeapon(weaponID);
wpn->X=x;
wpn->Y=y;
wpn->Step=step;
wpn->Damage=damage;
wpn->Angular=true;
wpn->Angle=ArcTan(Link->X-x, Link->Y-y)+angle;
Aim(wpn);
return wpn;
}
//DEFAULT VALUES
const int LAYER = 3;
const int COLOUR = 0x04;
const int OPACITY = 128;
const int ANGLE_VISION = 60;
const int SPEED = 120;
const int COOLDOWN = 150;
const int WEAPONID = EW_SCRIPT1;
const int SOUND = 70;
}
}
}
eweapon script laz
{
void run(int speed, int colour, int layer, int fizzlesfx, int fizzlesprite)
{
int startX = this->X; //light bending if Parent->X
Audio->PlaySound(shotsfx); //because enemy editor shot sound isn't variable yet
this->Angular = true;
this->Angle = ArcTan(Link->X-this->X, Link->Y-this->Y);
this->Step = speed;
//this->Damage = Game->LoadNPCData(this->Parent)->WeaponDamage; //should get bthis from the enemy editor
this->DrawYOffset = -32768; //make wpn sprite invisible
while(1)
{
if (Screen->isSolid(CenterX(this), CenterY(this))
{
this->DeadState = WDS_DEAD;
Audio->PlaySound(fizzlesfx);
if(fizzlesprite)
{
lweapon fiz = Screen->CreateLWeapon(LW_SPARKLE);
fiz->UseSprite(fizzlesprite);
fiz->CollDetection = false;
fiz->X = this->X;
fiz->Y = this->Y;
}
}
else
{
Screen->Line(layer, startX, this->Y, CenterX(this), CenterY(this), colour, 1, 0, 0, 0, 128);
}
Waitframe();
}
}
}
Comments