~Hakurei Shrine~ > Rika and Nitori's Garage Experiments
I'll get you fat pigeon
<< < (3/6) > >>
JormundElver:
Ahaha... oh dear, someone actually saved that :P .  Forgot about that one too...
Demonlord Pichu:
Decided to be manly and try Pigeon 6 (I'll do the others in a sec), I saw 'cruelly insane' and thought I'd try the it out first just to see how cruelly insane it was. Turns out it's exactly what it says on the tin.

GJ

Gonna give the others a go in just as sec.
JormundElver:
Time for some more... yes with any luck the fat pigeon will be gotten someday.

Fat Pigeon 7 - A last word, a long and arduous last word, but by no means impossible.  I was happy when I capped this and then unhappy when danmakufu corrupted the replay so I couldn't upload it to youtube :( .  Anyhow, this has 7 revolving... things, they are thrown out as the boss takes damage, and then eventually the center starts spewing more crap; you'll see, I guess.


--- Code: ---#TouhouDanmakufu
#Title[Fat Pigeon 7]
#Text[Test script]
#ScriptVersion[2]

script_enemy_main {
    let ImgBoss = "script\img\ExRumia.png";

    let count=-70;

let l = 0;

let rar = 1;

let anglac = 0;

    @Initialize {
        SetLife(1600);
        SetDamageRate(10, 0);
        SetTimer(199);
        SetScore(2000000);
        SetInvincibility( 270 );

        LoadGraphic(ImgBoss);
        SetTexture(ImgBoss);
        SetGraphicRect(0, 0, 64, 64);
SetMovePosition02(GetCenterX, GetCenterY - 80, 70);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);
    }

    @MainLoop {
if (!OnBomb) {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);
}

    if ((l == 0 && count == 100)){
    BlueOrb(GetX, GetY, 0, anglac, WHITE01, 0);
l++;
    }

if (l == 1 && GetEnemyLife < 1400){
    CyanOrb(GetX, GetY, 0, anglac-51.428, WHITE01, 0);
l++;
}

if (l == 2 && GetEnemyLife < 1200){
    GreenOrb(GetX, GetY, 0, anglac-102.856, WHITE01, 0);
l++;
}

if (l == 3 && GetEnemyLife < 1000){
    YellowOrb(GetX, GetY, 0, anglac-154.284, WHITE01, 0);
l++;
}

if (l == 4 && GetEnemyLife < 800){
    OrangeOrb(GetX, GetY, 0, anglac-205.712, WHITE01, 0);
l++;
}

if (l == 5 && GetEnemyLife < 600){
    RedOrb(GetX, GetY, 0, anglac-257.14, WHITE01, 0);
l++;
}

if (l == 6 && GetEnemyLife < 400){
    PurpleOrb(GetX, GetY, 0, anglac-308.568, WHITE01, 0);
l++;
}

if (l == 7 && GetEnemyLife < 200){
    DoomWhirl;
l++;
}
   
anglac += 2;
    count++;
    yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
}

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task BlueOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
BlueLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t == 7){
ascent(a in 0..4){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 1.4, atan2(Obj_GetY(obj)-GetPlayerY, Obj_GetX(obj)-GetPlayerX)+a*90, BLUE23, 20);
}
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task BlueLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, BLUE01, 20 );
loop( 1 ){
yield;
}
}

    }

}

task CyanOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
CyanLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac-51.428;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t == 35){
loop(4){
let speed=rand(1, 2);
let angular=rand(240, 300);
let speedx = speed * cos(angular);
let speedy = speed * sin(angular);
CreateShotA(0, Obj_GetX(obj), Obj_GetY(obj), 20);
SetShotDataA_XY(0, 0, speedx, speedy, 0, 0.01, 5, 5, AQUA04);
FireShot(0);
}
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task CyanLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, AQUA01, 20 );
loop( 1 ){
yield;
}
}

    }

}

task GreenOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

let lala = 0;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
GreenLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac-102.856;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t == 70){
lala=rand(0, 360);
ascent(a in 0..10){
CurbShot(Obj_GetX(obj), Obj_GetY(obj), 1.7, lala+a*36, GREEN12, 20, 1.5);
}
ascent(a in 0..10){
CurbShot(Obj_GetX(obj), Obj_GetY(obj), 1.7, 18+lala+a*36, GREEN12, 20, -1.5);
}
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task GreenLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, GREEN01, 20 );
loop( 1 ){
yield;
}
}

    }

}

    task CurbShot(x, y, v, angle, graphic, delay, curve){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
          while (!Obj_BeDeleted(obj)){

          if (bounce >= 45 && bounce <= 90){
          Obj_SetAngle(obj, Obj_GetAngle(obj)+curve);
  }


          bounce++;
          yield;
          }
     }

task YellowOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

let lala = 0;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
YellowLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac-154.284;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t >= 120 && t <= 200){
DelayShot(Obj_GetX(obj), Obj_GetY(obj), 0, atan2(GetPlayerY-Obj_GetY(obj), GetPlayerX-Obj_GetX(obj)), YELLOW01, 20);
}

if (t == 420){
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task YellowLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, YELLOW01, 20 );
loop( 1 ){
yield;
}
}

    }

}

task OrangeOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

let lala = 0;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
OrangeLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac-205.712;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t >= 80 && t <= 100){
CreateLaser01(Obj_GetX(obj), Obj_GetY(obj), 2.5, 90, 140, 30, ORANGE02, 20);
}

if (t == 150){
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task OrangeLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, ORANGE01, 20 );
loop( 1 ){
yield;
}
}

    }

}

task RedOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

let lala = 0;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
RedLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac-257.14;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t == 15){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 3.5, atan2(GetPlayerY-Obj_GetY(obj), GetPlayerX-Obj_GetX(obj))+37, RED03, 20);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 3.5, atan2(GetPlayerY-Obj_GetY(obj), GetPlayerX-Obj_GetX(obj))-37, RED03, 20);
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task RedLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, RED01, 20 );
loop( 1 ){
yield;
}
}

    }

}

task PurpleOrb(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

let lala = 0;

        let length = 0;

        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
PurpleLight();
        while (!Obj_BeDeleted(obj)){

BaseX = GetX;
BaseY = GetY;

CAngle = anglac-308.568;

if (length < 120){
length += 1;
}

if (length >= 120){
t++;
}

if (t >= 20 && t <= 55){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), rand(1.3, 2), atan2(GetPlayerY-Obj_GetY(obj), GetPlayerX-Obj_GetX(obj))+rand(-60, 60), PURPLE21, 20);
CreateLaser01(Obj_GetX(obj), Obj_GetY(obj), rand(1.3, 2), atan2(GetPlayerY-Obj_GetY(obj), GetPlayerX-Obj_GetX(obj))+rand(-60, 60), 45, 8, PURPLE01, 20);
}

if (t == 290){
t=0;
}

        RollerX = BaseX + length * cos(CAngle);
        RollerY = BaseY + length * sin(CAngle);

        Obj_SetPosition(obj, RollerX, RollerY);

yield;
}

task PurpleLight{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x, _y, PURPLE01, 20 );
loop( 1 ){
yield;
}
}

    }

}

    task DelayShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
        while (!Obj_BeDeleted(obj)){

        if (bounce >= 360 && Obj_GetSpeed(obj) < 1){
        Obj_SetSpeed(obj, Obj_GetSpeed(obj)+0.01);
}


        bounce++;
        yield;
        }
    }

task DoomWhirl{
let p = rand(0, 360);
loop{
RushShot(GetX, GetY, 0.5, p, WHITE01, 5);
p += 11.72;
_Wait(2);
}
}

    task RushShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
        while (!Obj_BeDeleted(obj)){

        if (bounce >= 100 && Obj_GetSpeed(obj) < 4){
        Obj_SetSpeed(obj, Obj_GetSpeed(obj)+0.07);
}


        bounce++;
        yield;
        }
    }

task Light( let x, let y, let graphic, let frame ){
let obj = Obj_Create( OBJ_SHOT );
Obj_SetPosition( obj, x, y );
Obj_SetSpeed( obj, 500 );
Obj_SetAngle( obj, 0 );
ObjShot_SetGraphic( obj, graphic );
ObjShot_SetDelay( obj, frame );
Obj_SetAlpha( obj, 0 );
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
ObjShot_ToItem( obj, false );
}

function _Wait(let frame){
loop( frame ){
    yield;
    }
}

}
--- End code ---

Fat Pigeon 8 - An extended version of Sakuya's knifestorm attack from the All Star Battle... one that is unfortunately probably not convertable anymore.  Basically this just flings bouncing knives out in all different manners, all over the freakin place.  Just a lotta bouncing junk.  This one sucks, like all of the rest.


--- Code: ---#TouhouDanmakufu
#Title[Fat Pigeon 8]
#Text[Test script]
#ScriptVersion[2]

script_enemy_main {
    let ImgBoss = "script\img\ExRumia.png";

    let count=-70;

let phase = 0;

let color = [WHITE31, RED31, GREEN31, BLUE31, AQUA31, PURPLE31, YELLOW31, ORANGE31];

let l = 0;

    @Initialize {
        SetLife(4000);
        SetTimer(99);
        SetScore(2000000);
        SetInvincibility( 60 );

        SetMovePosition02(GetCenterX, GetCenterY - 120, 70);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);

        LoadGraphic(ImgBoss);
        SetTexture(ImgBoss);
        SetGraphicRect(0, 0, 64, 64);
    }

    @MainLoop {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);

    if ((count == 100)){
    Attack;
    }

    count++;
    yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task Attack{
_Wait(60);

loop{
let a = 0;
loop(40){
ReflectShot(GetX, GetY, 2, 90+a*15, BLUE31, 2);
ReflectShot(GetX, GetY, 2, 90-a*15, BLUE31, 2);
a++;
_Wait(2);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = 0;
loop(40){
ReflectShot(GetX, GetY, 2, 0+a*15, RED31, 2);
ReflectShot(GetX, GetY, 2, a*15-180, RED31, 2);
a++;
_Wait(2);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = GetAngleToPlayer;
loop(40){
ascent(b in 0..12){
ReflectShot(GetX, GetY, 2, a+b*30, PURPLE31, 2);
}
_Wait(2);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = GetAngleToPlayer;
loop(40){
ReflectShot(GetX, GetY, 2, a*15-40, GREEN31, 2);
ReflectShot(GetX, GetY, 2, 40+a*15, GREEN31, 2);
a++;
_Wait(2);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = 0;
loop(10){
ascent(b in 0..10){
ReflectShot(GetX, GetY, 2, b*36+a*7.2, ORANGE31, 2);
}
a++;
_Wait(10);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = 0;
let randr = rand(40, 70);
loop(10){
ascent(b in 0..8){
ReflectShot(41, GetClipMinY+randr+a*41, 2+b*0.2, 0, YELLOW31, 25);
}
a++;
_Wait(10);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = 0;
loop(40){
ReflectShot(GetX-45, GetY-45, 2, 90+a*15, AQUA31, 15);
ReflectShot(GetX+45, GetY-45, 2, 90-a*15, AQUA31, 15);
a++;
_Wait(2);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
loop(40){
ReflectShot(GetX+75*cos(a*8), GetY+75*sin(a*30), 2, 90+a*14, WHITE31, 15);
ReflectShot(GetX-75*cos(a*8), GetY-75*sin(a*30), 2, 90+a*14, WHITE31, 15);
a++;
_Wait(2);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
let a = 0;
let randr = rand(5, 45);
loop(10){
ascent(b in 0..8){
ReflectShot(GetClipMinX+randr+a*43.75, 454, 2+b*0.2, 270, color[b], 25);
}
a++;
_Wait(10);
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,120,GetClipMaxX()-100,170);
}
}

    task ReflectShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
          while (!Obj_BeDeleted(obj)){
          if (bounce < 1){
          if (((Obj_GetX(obj) > 410) || (Obj_GetX(obj) < 40))){
              Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
              bounce++;
          }
  if (((Obj_GetY(obj) < 25) || (Obj_GetY(obj) < 25))){
              Obj_SetAngle(obj, 360 - Obj_GetAngle(obj));
              bounce++;
          }
          }
          yield;
          }
     }

function _Wait(let frame){
loop( frame ){
    yield;
    }
}

}
--- End code ---

Fat Pigeon 9 - I made some recollection Satori style things from all over.  I think I made about 10 before I was like "booooooooooooooooooored"... anyways, this was Sanae's bumper crop recollection style.  There are only 4 shots in a string instead of 5, and the waves come at a lower frequency.  Now however they are aimed from the sides in sets of 2 instead of directly at the center, the result is there are way less dead spots in the fallout of them hitting the sides.  Prolly about the same difficulty overall.


--- Code: ---#TouhouDanmakufu
#Title[Fat Pigeon 9]
#Text[Test script]
#ScriptVersion[2]

script_enemy_main {
    let ImgBoss = "script\img\ExRumia.png";

let RiceColor = [RED12, AQUA12, BLUE12, YELLOW12, GREEN12];

    let count=-70;

    @Initialize {
        SetLife(4000);
        SetTimer(99);
        SetScore(2000000);
        SetInvincibility( 60 );

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 70);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);

        LoadGraphic(ImgBoss);
        SetTexture(ImgBoss);
        SetGraphicRect(0, 0, 64, 64);
    }

    @MainLoop {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);

    if ((count == 100)){
    RiceShower;
    }

    count++;
    yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

    task RiceShower(){
loop{
let akurt = atan2(GetPlayerY-(GetY-8), GetPlayerX-(GetX+17));
let bkurt = atan2(GetPlayerY-(GetY-8), GetPlayerX-(GetX-17));
loop(2){
ascent(a in 0..5){
RiceRain(GetX+17, GetY-8, 4, akurt+a*72, ORANGE12, 5, RiceColor[a]);
}
ascent(a in 0..5){
RiceRain(GetX-17, GetY-8, 4, bkurt+a*72, ORANGE12, 5, RiceColor[a]);
}
_Wait(2);
}
_Wait(20);
}

}

    task RiceRain(x, y, v, angle, graphic, delay, graphicA){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
        while (!Obj_BeDeleted(obj)){
        if (bounce < 1){
        if (((Obj_GetX(obj) > 410) || (Obj_GetX(obj) < 40))){
let speed=rand(0.0025, 0.01);
let angular= (180 - Obj_GetAngle(obj))+rand(-30, 30);
let speedx = rand(0.5, 1) * cos(angular);
let speedy = rand(0.5, 1) * sin(angular);
CreateShotA(0, Obj_GetX(obj), Obj_GetY(obj), 4);
SetShotDataA_XY(0, 0, speedx, speedy, 0, speed, 5, 5, graphicA);
FireShot(0);
Obj_Delete(obj);
        }
    if (((Obj_GetY(obj) < 25) || (Obj_GetY(obj) < 25))){
let speed=rand(0.0025, 0.01);
let angular= (360 - Obj_GetAngle(obj))+rand(-30, 30);
let speedx = rand(0.5, 1) * cos(angular);
let speedy = rand(0.5, 1) * sin(angular);
CreateShotA(0, Obj_GetX(obj), Obj_GetY(obj), 4);
SetShotDataA_XY(0, 0, speedx, speedy, 0, speed, 5, 5, graphicA);
FireShot(0);
Obj_Delete(obj);
        }
        }
        yield;
        }
    }

function _Wait(let frame){
loop( frame ){
    yield;
    }
}

}
--- End code ---

EDIT:  I've used up all but one of my spells that have mini-lasers.  I must really have liked mini-lasers.
Naut:
Godly stuff, I like the orange delay cloud fire effect on 5. 8 was surprisingly difficult to pass, given the low speed of the knives (kunai? Whatever). Also like the black bullets you made for 6, that spell is really fun to play. Very nice scripts.
JormundElver:
Sorry about this... but I'm not done yet.  Thankfully there are no mini-lasers this time around, as I don't see this

as converting to well with a bunch of Rumias looming in the background; although it would look hilarious.

Don't fear though, here is three more fat pigeons, all three of them not as good as what I've posted before.  They are seriously just uncreative simple thingies that are part of things I started on and got bored of.

Fat Pigeon 10 - It's a copycat of Yumeko's knife and laser barrage from Mystic Square.  I didn't add that strange difficulty change that it normally does midway through; because while easy to implement, I really have no idea what actually changes when it happens in Mystic Square, just that it gets harder.  Honestly, this one is so awful that most of the effort was probably getting the laser light sources to look cool.


--- Code: ---#TouhouDanmakufu
#Title[Fat Pigeon 10]
#Text[Test script]
#ScriptVersion[2]

script_enemy_main {
    let ImgBoss = "script\img\ExRumia.png";

    let count=-50;

    @Initialize {
        SetLife(2500);
        SetDamageRate(100, 0);
        SetTimer(99);
        SetInvincibility( 170 );

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 120);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);

        LoadGraphic(ImgBoss);
        SetTexture(ImgBoss);
        SetGraphicRect(0, 0, 64, 64);
    }

    @MainLoop {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);

    if ((count == 100)){
    attack;
    }

    count++;
    yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task attack{
knifethrow;
laser;
let r = 0;
let y = 0;

loop{
r = GetPlayerX;
y = GetPlayerY;
loop(20){
    PlaySE(GetCurrentScriptDirectory~"SFX\Shot1.wav");
CreateShot01(GetX+15, GetY-15, 6, atan2(y - (GetY-15), r - (GetX+15)), AQUA31, 6);
CreateShot01(GetX-15, GetY-15, 6, atan2(y - (GetY-15), r - (GetX-15)), AQUA31, 6);
_Wait(2);
}

_Wait(30);

}
}

task knifethrow{
loop{
SpinShot(GetX+rand(-180, 180), GetY+rand(-40, 40), 0, rand(0, 360), YELLOW32, 0);
_Wait(11);
}
}

task laser{
let r = 0;
let y = 0;
let d = 0;
let o = 0;

loop{
r = GetPlayerX;
y = GetPlayerY;
o = rand(-40, 40);
d = rand(-180, 180);
    PlaySE(GetCurrentScriptDirectory~"SFX\lazer01.wav");
LaserRay(GetX+d, GetY-o, 6, atan2(y - (GetY-o), r - (GetX+d)), BLUE01, 300, 15, 0);

_Wait(30);

}
}

    task SpinShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
        while (!Obj_BeDeleted(obj)){

        if (bounce > -1 && bounce < 50){
Obj_SetAngle(obj, Obj_GetAngle(obj)+35);
}

if (bounce == 51){
Obj_SetAngle(obj, atan2(GetPlayerY - Obj_GetY(obj), GetPlayerX - Obj_GetX(obj)) + rand(-30, 30));
Obj_SetSpeed(obj, 5);
}

        bounce++;
        yield;
        }
    }

    task LaserRay(x, y, v, angle, graphic, length, width, bounce){
        let obj = Obj_Create(OBJ_LASER);
let i = 0;
let argh = 0;
let origilength = length;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, 0);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjLaser_SetSource(obj, true);
        ObjLaser_SetLength(obj, 1);
        ObjLaser_SetWidth(obj, width);
        let SpeedX = v * cos(angle);
        let SpeedY = v * sin(angle);
        while (!Obj_BeDeleted(obj)){

if (length > 0){
ObjLaser_SetLength(obj, ObjLaser_GetLength(obj)+v);
length -= v;
}

if (length <= 0){
        ObjLaser_SetSource(obj, false);
}
else{
if (argh == 2){
        ObjLaser_SetSource(obj, true);
}
if (argh == 4){
        ObjLaser_SetSource(obj, false);
argh=0;
}
}

if (i == 1){
ObjLaser_SetLength(obj, ObjLaser_GetLength(obj)-v);
if (ObjLaser_GetLength(obj) <= 0){
Obj_Delete(obj);
}
}

if (length <= 0){
        x += SpeedX;
        y += SpeedY;
        Obj_SetPosition(obj, x, y);
}

argh++;
        yield;
        }
    }

function _Wait(let frame){
loop( frame ){
    yield;
    }
}

}
--- End code ---

Fat Pigeon 11 - I once tried to make a Suika extra, but like so many other "extra" projects I attempt I get bored with it and forget about it.  This at least leaves me with a lot of random ammo for this thread.  Here she throws explosive things at you, almost properly lobbed at you.  Upon contact with the ground they go boom and things happen.


--- Code: ---#TouhouDanmakufu
#Title[Fat Pigeon 11]
#Text[Test script]
#ScriptVersion[2]

script_enemy_main {
    let ImgBoss = "script\img\ExRumia.png";

    let count2=0;

let move = 0;

    @Initialize {
    SetLife(500);
        SetDamageRate(10, 0);
        SetTimer(99);
        SetInvincibility( 270 );

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 120);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);

        LoadGraphic(ImgBoss);
        SetTexture(ImgBoss);
        SetGraphicRect(0, 0, 64, 64);
    }

    @MainLoop {
    if (!OnBomb) {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);
    }

    if (move == 500){
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,70,GetClipMaxX()-100,100);
    move=0;
    }

    if ((count2 == 240)){
    attack;
    }

    count2++;
    move++;
    yield;
    }

    @DrawLoop {
    if (!OnBomb) {
    DrawGraphic(GetX, GetY);
    }
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

    task attack{
let q = 0;
    let n = 0;
let y = 0;
    loop{
GiantRedBomb(GetX, GetY, 0, 0, 0);
_Wait(240);
GiantBlueBomb(GetX, GetY, 0, 0, 0);
_Wait(240);
    }
}

    task GiantRedBomb(x, y, v, angle, delay){
        let obj = Obj_Create(OBJ_SHOT);
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, RED02);
        ObjShot_SetDelay(obj, delay);
        Obj_SetAlpha(obj, 0);
        let SpeedX = ((GetPlayerX - GetX) / 180 - 0.15 * 2 / 2) + 0.15;
        let SpeedY = -4;
        let accelerate = 0.08;
        _GiantLightRed();
        while (!Obj_BeDeleted(obj)){

        x += SpeedX;
        y += SpeedY;
        Obj_SetPosition(obj, x, y);
        yield;

if (SpeedY < 8){
        SpeedY += accelerate;
}

        if (y >= GetClipMaxY){
        PlaySE(GetCurrentScriptDirectory~"SFX\tan00.wav");
        loop(100){
        Explosion(Obj_GetX(obj), Obj_GetY(obj), 1.5, rand(0, 360), RED01, rand(0, 9));
        }
BlastColumnV(Obj_GetX(obj), Obj_GetY(obj));
Obj_Delete(obj);
        }

        }

    task _GiantLightRed{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj ) + rand( - 8, 8 );
let _y = Obj_GetY( obj ) + rand( - 8, 8 );
Light( _x, _y, RED01, 20 );
loop( 1 ){
        yield;
        }
    }

    }

    }

    task GiantBlueBomb(x, y, v, angle, delay){
        let obj = Obj_Create(OBJ_SHOT);
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, RED02);
        ObjShot_SetDelay(obj, delay);
        Obj_SetAlpha(obj, 0);
        let SpeedX = ((GetPlayerX - GetX) / 180 - 0.15 * 2 / 2) + 0.15;
        let SpeedY = -4;
        let accelerate = 0.08;
        _GiantLightBlue();
        while (!Obj_BeDeleted(obj)){

        x += SpeedX;
        y += SpeedY;
        Obj_SetPosition(obj, x, y);
        yield;

if (SpeedY < 8){
        SpeedY += accelerate;
}

        if (y >= GetClipMaxY){
        PlaySE(GetCurrentScriptDirectory~"SFX\tan00.wav");
        loop(100){
        Explosion(Obj_GetX(obj), Obj_GetY(obj), 1.5, rand(0, 360), BLUE01, rand(0, 9));
        }
RainColumn(Obj_GetX(obj), Obj_GetY(obj), atan2(GetPlayerY - Obj_GetY(obj), GetPlayerX - Obj_GetX(obj)));
Obj_Delete(obj);
        }

        }

    task _GiantLightBlue{

    while( !Obj_BeDeleted( obj ) ){
let _x = Obj_GetX( obj ) + rand( - 8, 8 );
let _y = Obj_GetY( obj ) + rand( - 8, 8 );
Light( _x, _y, BLUE01, 20 );
loop( 1 ){
        yield;
        }
    }

    }

    }

task RainColumn(x, y, angle){
let length = 0;
let spotx = x + length * cos(angle);
let spoty = y + length * sin(angle);
while(spotx < GetClipMaxX && spoty > GetClipMinY && spotx > GetClipMinX){
loop(3){
spotx = x + length * cos(angle);
spoty = y + length * sin(angle);
Rain(spotx+rand(-35, 35), spoty+rand(-35, 35), 0.3, rand(0, 360), BLUE12, 10);
length += 2;
}
yield;
}
}

task BlastColumnV(x, y){
let q = 0;
while(y > GetClipMinY){
loop(5){
Fallout(x+rand(-55, 55), y+rand(-55, 55), 0, 90, RED01, 10, rand(0.8, 1.5));
y -= 2;
}
yield;
if (q == 0 && y <= GetClipMinY){
BlastColumnHLeft(x, y);
BlastColumnHRight(x, y);
q++;
}
}
}

task BlastColumnHRight(x, y){
while(x < GetClipMaxX){
loop(5){
Fallout(x+rand(-55, 55), y+rand(-55, 55), 0, 90, RED01, 10, rand(0.8, 1.5));
x += 2;
}
yield;
}
}

task BlastColumnHLeft(x, y){
while(x > GetClipMinX){
loop(5){
Fallout(x+rand(-55, 55), y+rand(-55, 55), 0, 90, RED01, 10, rand(0.8, 1.5));
x -= 2;
}
yield;
}
}


    task Explosion(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
        while (!Obj_BeDeleted(obj)){

        if (bounce == 45){
        Obj_SetSpeed(obj, 0.5);
        }

        if (bounce == 46){
        ObjShot_FadeDelete(obj);
        }


        bounce++;
        yield;
        }

    }

task Rain(x, y, v, angle, graphic, delay){
    let obj = Obj_Create(OBJ_SHOT);

let frame = 0;

    Obj_SetX(obj,x);
    Obj_SetY(obj,y);
    Obj_SetSpeed(obj,v);
    ObjShot_SetGraphic(obj, graphic);
    ObjShot_SetDelay(obj,delay);
    Obj_SetAngle(obj,angle);

    while (!Obj_BeDeleted(obj)){

if (frame > 300){
ObjShot_FadeDelete(obj);
}

frame++;
        yield;
        }
    }

task Fallout(x, y, v, angle, graphic, delay, max){
    let obj = Obj_Create(OBJ_SHOT);

let frame = 0;

    Obj_SetX(obj,x);
    Obj_SetY(obj,y);
    Obj_SetSpeed(obj,v);
    ObjShot_SetGraphic(obj, graphic);
    ObjShot_SetDelay(obj,delay);
    Obj_SetAngle(obj,angle);

    while (!Obj_BeDeleted(obj)){

if (frame > 220 && Obj_GetSpeed(obj) < max){
Obj_SetSpeed(obj, Obj_GetSpeed(obj)+0.02);
}

frame++;
        yield;
        }
    }

task Light( let x, let y, let graphic, let frame ){
let obj = Obj_Create( OBJ_SHOT );
Obj_SetPosition( obj, x, y );
Obj_SetSpeed( obj, 500 );
Obj_SetAngle( obj, 0 );
ObjShot_SetGraphic( obj, graphic );
ObjShot_SetDelay( obj, frame );
Obj_SetAlpha( obj, 0 );
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
ObjShot_ToItem( obj, false );
}

function _Wait(let frame){
loop( frame ){
    yield;
    }
}

}
--- End code ---

Fat Pigeon 12 - Another Suika, this one was originally based on Remilia's LW in CtC, but with a twist I guess.  It ended up being some misty tentacled horror that really looks alot worse with standard shot graphics, but whatcha gonna do?  Basically stuff shoots at you.


--- Code: ---#TouhouDanmakufu
#Title[Fat Pigeon 12]
#Text[Test script]
#ScriptVersion[2]

script_enemy_main {
    let ImgBoss = "script\img\ExRumia.png";

    let count2=0;

let randcolor = [RED01, RED02, RED05];

let move = 0;

    @Initialize {
    SetLife(300);
        SetDamageRate(10, 0);
        SetTimer(99);
        SetInvincibility( 270 );

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 120);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);

        LoadGraphic(ImgBoss);
        SetTexture(ImgBoss);
        SetGraphicRect(0, 0, 64, 64);
    }

    @MainLoop {
    if (!OnBomb) {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);
    }

    if (move == 500){
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,70,GetClipMaxX()-100,100);
    move=0;
    }

    if ((count2 == 240)){
    attack;
    }

    count2++;
    move++;
    yield;
    }

    @DrawLoop {
    if (!OnBomb) {
    DrawGraphic(GetX, GetY);
    }
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

    task attack{
let q = 0;
    let n = 0;
let y = 0;
    loop{
n = rand(0, 360);
ascent(a in 0..8){
SprayWisp(GetX, GetY, 2, n+a*45, WHITE02, 0);
_Wait( 9 );
}
_Wait(180);
y = GetAngleToPlayer;
ascent(a in -7..8){
loop(27){
q = rand_int(0, 2);
CreateShot01(GetX+rand(-20, 20), GetY+rand(-20, 20), rand(0.4, 2.5), y+a*15, randcolor[q], 7);
}
_Wait(8);
}
_Wait(90);
    }
}

task SprayWisp(x, y, v, angle, graphic, delay){
    let obj = Obj_Create(OBJ_SHOT);

let alternate = 0;

let bounce = 0;

let speedz = 2;

let blargh = 0;

    Obj_SetX(obj,x);
    Obj_SetY(obj,y);
    Obj_SetSpeed(obj,v);
    ObjShot_SetGraphic(obj, graphic);
    ObjShot_SetDelay(obj,delay);
    Obj_SetAngle(obj,angle);
Obj_SetAlpha(obj, 0);
Obj_SetCollisionToPlayer(obj, false);

    while (!Obj_BeDeleted(obj)){

loop(3){
let _x = Obj_GetX( obj );
let _y = Obj_GetY( obj );
Light( _x+rand(-8, 8), _y+rand(-8, 8), AQUA01, 7 );
}

        let angle = Obj_GetAngle(obj);
        let toAngle = atan2(GetPlayerY - Obj_GetY(obj), GetPlayerX - Obj_GetX(obj));
        let targetAngle = toAngle - angle;

        if (targetAngle < 0){
targetAngle += 360;
}

        if (targetAngle > 360){
targetAngle -= 360;
}
     
        if(targetAngle >= 0 && targetAngle <= 180){
angle+=1.1;
}
        else {
angle-=1.1;
}

        if (angle < 0){
angle += 360;
}

        if (angle > 360){
angle -= 360;
}

        Obj_SetAngle(obj, angle);

Obj_SetSpeed(obj, speedz);

if (blargh < 60 && blargh > 0){
speedz -= 0.03;
}

if (blargh > 90){
speedz += 0.08;
}

if (bounce == 1){
loop(1){
DiveShot(Obj_GetX(obj), Obj_GetY(obj), 0, GetAngleToPlayer, AQUA01, 0);
}
bounce = 0;
}

blargh++;
        bounce++;
        yield;
        }
    }

task DiveShot(x, y, v, angle, graphic, delay){
    let obj = Obj_Create(OBJ_SHOT);

let frame = 0;

    Obj_SetX(obj,x);
    Obj_SetY(obj,y);
    Obj_SetSpeed(obj,v);
    ObjShot_SetGraphic(obj, graphic);
    ObjShot_SetDelay(obj,delay);
    Obj_SetAngle(obj,angle);

    while (!Obj_BeDeleted(obj)){

if (frame > 160 && Obj_GetSpeed(obj) < 2){
Obj_SetSpeed(obj, Obj_GetSpeed(obj)+0.04);
}

frame++;
        yield;
        }
    }

task Light( let x, let y, let graphic, let frame ){
let obj = Obj_Create( OBJ_SHOT );
Obj_SetPosition( obj, x, y );
Obj_SetSpeed( obj, 500 );
Obj_SetAngle( obj, 0 );
ObjShot_SetGraphic( obj, graphic );
ObjShot_SetDelay( obj, frame );
Obj_SetAlpha( obj, 0 );
Obj_SetCollisionToPlayer( obj, false );
ObjShot_SetBombResist( obj, true );
ObjShot_ToItem( obj, false );
}

function _Wait(let frame){
loop( frame ){
    yield;
    }
}

}
--- End code ---
Navigation
Message Index
Next page
Previous page

Go to full version