ZoriaRPG icon

Dalek / BotW Guardian NPC Script for 2.55

ZoriaRPG | PRO | 03/07/19 11:25:56 AM UTC | 0 ⭐ | 679 👁️ | Never ⏰ | []
C++ |

1.85 KB

|

None

|

0 👍

/

0 👎

///////////////////////
////  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