Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///////////////////////
- /// THE DALEKS ///
- /// NPC Script ///
- /// For ZC 2.55 ///
- /// v0.2 ///
- /// 7th March, 2019 ///
- ///////////////////////
- npc script Dalek
- {
- const int LASER_LAYER = 3;
- const int LASER_COLOUR = 0x04;
- const int LASER_OPACITY = 128;
- const int ANGLE_VISION = 60;
- const int SHOT_STEP = 120;
- const int COODOWN = 150;
- const int WTYPE = EW_SCRIPT1;
- const int SHOT_SFX = 70;
- void run (int angleOfVision, int shotStep, int shotCooldownTime, int weaponType, int shotSFX)
- {
- //Get attributes
- angleOfVision = (this->InitD[0] > 0 ) ? this->InitD[0] : ANGLE_VISION;
- shotStep = (this->InitD[1]] > 0 ) ? this->InitD[1]] : SHOT_STEP;
- shotCooldownTime = (this->InitD[2] > 0 ) ? this->InitD[2] : COODOWN;
- weaponType = (ghost->InitD[3] > 0 ) ? ghost->InitD[3] : WTYPE;
- shotSFX = (ghost->InitD[4] > 0 ) ? ghost->InitD[4]: SHOT_SFX;
- int shotCooldown = shotCooldownTime;
- 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);
- //int difference = Abs((Angle(CenterX(this), CenterY(this), CenterLinkX(), CenterLinkY())) - (Dir4Angle(this->Dir)));
- //If Link is within this angle
- //if ( difference <= angleOfVision/2 )
- if ( (Abs((Angle(CenterX(this), CenterY(this), CenterLinkX(), CenterLinkY())) - (Dir4Angle(this->Dir)))) <= 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();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement