ZoriaRPG icon

Enemy Laser EWeapon Script

ZoriaRPG | PRO | 10/23/19 04:34:39 PM UTC | 0 ⭐ | 707 👁️ | Never ⏰ | []
C++ |

2.36 KB

|

None

|

0 👍

/

0 👎

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