///////////////////////
//// THE DALEKS /////
///////////////////////
npc script Dalek
{
const int LASER_LAYER = 3;
const int LASER_COLOUR = 0x04;
const int LASER_OPACITY = 128;
void run (int angleOfVision, int shotStep, int shotCooldownTime, int weaponType, int shotSFX)
{
//Get attributes
angleOfVision = this->InitD[0];
shotStep = this->InitD[1]];
shotCooldownTime = this->InitD[2];
weaponType = ghost->InitD[3];
shotSFX = ghost->InitD[4];
int shotCooldown = shotCooldownTime;
int turnTimer = this->Rate * 10;
int laserStartX;
int laserStartY;
eweapon beam;
while(this->isValid())
{
//Shooting
if ( shotCooldown > 0 )
--shotCooldown;
//Only one beam at a time
else if ( !beam->isValid() )
{
//Check angle to Link against angle of vision
int angleToLink = Angle(CenterX(this), CenterY(this), CenterLinkX(), CenterLinkY());
int facingAngle = Dir4Angle(this->Dir);
int difference = Abs(angleToLink - facingAngle);
//If Link is within this angle
if ( difference <= angleOfVision/2 )
{
shotCooldown = shotCooldownTime; //can reduce down by reading InitD again -Z
laserStartX = CenterX(this);
laserStartY = CenterY(this);
beam = Screen->CreateEWeapon(weaponType);
beam->X = laserStartX;
beam->Y = laserStartY;
beam->Angular = true;
beam->Angle = ArcTan(Link->X-beam->X, Link->Y-beam->X);
beam->Step = shotStep;
beam->Damage = this->WeaponDamage;
Audio->PlaySound(shotSFX);
beam->DrawXOffset = 999; //Draw off-screen
}
}
//Draw laser beam
if ( beam->isValid() )
{
Screen->Line(LASER_LAYER, laserStartX, laserStartY, CenterX(beam), CenterY(beam), LASER_COLOUR, 1, 0, 0, 0, LASER_OPACITY);
}
Waitframe();
}
}
}
Comments