Copy to Clipboard Test

Popo (AutoGhost) Code

// import "std.zh"
// import "string.zh"
// import "ghost.zh"


// Wait time between movement
const int POPO_MIN_WAIT_TIME = 90;
const int POPO_MAX_WAIT_TIME = 240;

// Number of jumps before stopping
const int POPO_MIN_JUMPS = 8;
const int POPO_MAX_JUMPS = 12;

ffc script Popo
{
    void run(int enemyID)
    {
        npc ghost;
        int numJumps;
        int waitTime;
        float angle;
        float step;
        int homing;

        // Initialize
        ghost=Ghost_InitAutoGhost(this, enemyID, GHF_NORMAL);
        step=ghost->Step/100;
        homing=ghost->Homing;

        while(true)
        {
            // Wait before moving; slow animation for most of that time
            waitTime=Rand(POPO_MIN_WAIT_TIME, POPO_MAX_WAIT_TIME);
            ghost->ASpeed*=2;
            for(int i=0; i<waitTime; i++)
            {
                if(i==Floor(2*waitTime/3))
                    ghost->ASpeed/=2;
                Ghost_Waitframe(this, ghost, true, true);
            }

            // Pick angle - aim for Link based on homing factor
            if(Rand(256)<homing)
                angle=ArcTan(Link->X-Ghost_X, Link->Y-Ghost_Y)*57.2958;
            else
                angle=Rand(360);

            // Jump across the ground
            numJumps=Rand(POPO_MIN_JUMPS, POPO_MAX_JUMPS);

            for(int i=0; i<numJumps; i++)
            {
                Ghost_Jump=0.5;
                do
                {
                    Ghost_MoveAtAngle(angle, step, 3);
                    Ghost_Waitframe(this, ghost, true, true);
                } while(Ghost_Z>0);

                Ghost_Waitframes(this, ghost, true, true, 12);
            }
        }
    }
}