Author Topic: I'll get you fat pigeon  (Read 19843 times)

JormundElver

  • Baron Von Parakeet
I'll get you fat pigeon
« on: May 14, 2009, 03:45:41 AM »
If you were willing to click on this completely random thread, you deserve some completely random scripts (these take so long to translate back into vanilla rumia mode); I also removed the FREE player line from these so you don't need to run them through applocale or something like that, apologies to people who play as rumia:

EDIT:  Didn't throw in anything terribly complicated because this stuff takes forever to convert, maybe I'll post some cool ones later instead of all this terrible drivel.

Fat Pigeon 1 - Standard dumb crap, I turned all the card graphics into arrow things so that makes it even worse.  It shoots some terrible tiny laser things and giant yin yang orb things I don't know, and some red and white seeker things.

Code: [Select]
#TouhouDanmakufu
#Title[Fat Pigeon 1]
#Text[Test script]
#ScriptVersion[2]

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

    let frame = 0;

    @Initialize {
        SetLife(3000);
        SetTimer(70);
        SetScore(2000000);
        SetInvincibility( 60 );

        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 (frame == 0){
    Attack;
    }

frame++;
yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task Attack(){
let Length = 0;
let BaseX = GetX;
let BaseY = GetY;

let Angular = rand(0, 360);
let angular = 0;

let RollerX;
let RollerY;
let b;
let speed;
let speedx;
let speedy;
let argh = 75;

loop(150){
yield;
}

loop{
loop(5){
b = rand(0, 360);
ascent(a in 0..40){
CreateShot01(GetX, GetY, 4, b+a*9, RED21, 5);
DelayShot(GetX, GetY, 4, b+a*9, RED21, 5);
}
loop(25){
yield;
}
}
    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,70,GetClipMaxX()-100,100);
descent(a in 0..50){
ascent(b in 0..4){
loop(3){
CreateLaser01(GetX+rand(-30, 30), GetY+rand(-30, 30), 1+a*0.12, GetAngleToPlayer+b*90, 45, 8, WHITE01, 0);
}
}
loop(2){
yield;
}
}

let zoink = GetAngleToPlayer;
loop(45){
loop(3){
    RollerX = GetX + Length * cos(Angular);
    RollerY = GetY + Length * sin(Angular);
ascent(a in -1..2){
LargeRoller(RollerX, RollerY, 0, zoink+a*40, BLUE02, 5, argh);
}
    RollerX = GetX - Length * cos(Angular);
    RollerY = GetY - Length * sin(Angular);
ascent(a in -1..2){
LargeRoller(RollerX, RollerY, 0, zoink+a*40, BLUE02, 5, argh);
}
Angular += 3;
if (Length < 75){
Length += 1;
}
}
argh--;
yield;
}
loop(30){
yield;
}
Length = 0;
Angular = rand(0, 360);
argh = 75;
loop(2){
yield;
}

    angular=180;
loop(45){
ascent(a in 1..4){
    speed=2+0.75*a;
    speedx = speed * cos(angular) * 0.4;
    speedy = speed * sin(angular) * 0.4;
    CreateShotA(0, GetX, GetY, 0);
    SetShotDataA_XY(0, 0, speedx, speedy, 0, 0.02, 5, 5, GREEN21);
    FireShot(0);
}
angular += 4;
loop(2){
yield;
}
}

    SetMovePositionRandom01(50,20,5,GetClipMinX()+100,70,GetClipMaxX()-100,100);
loop(150){
yield;
}

    }
}

    task DelayShot(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 == 30){
Obj_SetSpeed(obj, 0);
        }

        if (bounce == 80){
Obj_SetSpeed(obj, 5);
        ObjShot_SetGraphic(obj, WHITE21);
Obj_SetAngle(obj, atan2(GetPlayerY - Obj_GetY(obj), GetPlayerX - Obj_GetX(obj)));
        }

bounce++;
        yield;
        }
    }

    task LargeRoller(x, y, v, angle, graphic, delay, gotime){
        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 (gotime == 0){
Obj_SetSpeed(obj, 0.5);
        }

gotime--;
        yield;
        }
    }

}

Fat Pigeon 2 - Even more standard dumb crap.  If anyone else is a WoW nerd who's been in Naxxramas then I am going to tell you now that this pattern is not a coincidence, but is in fact based off Grobbulus.  Long survival, can get kind of tricky near the end.

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

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

    let frame = 0;

let time = 999;

let wait = 90;

    @Initialize {
        SetLife(3000);
        SetTimer(130);
        SetScore(2000000);
        SetInvincibility( 60 );

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

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

    @MainLoop {

    if (frame == 0){
    Mist;
    }

frame++;
time = GetTimer;
yield;
    }

    @DrawLoop {
SetAlpha( 120 );
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

    task Mist(){
controlbutton;
let p = 0;
_Wait(200);
SetMovePosition02(GetPlayerX, GetPlayerY, 40);
_Wait(40);

loop{
SetColor(25, 220, 25);
Concentration01(wait);
SetColor(255, 255, 255);
_Wait(wait);
GasCloud(GetX, GetY, 0, 0, WHITE01, 0);
p = 135;
loop(30){
CreateShot01(GetX, GetY, rand(1, 1.5), GetAngleToPlayer+p+rand(-9, 9), GREEN12, rand(5, 20));
p -= 9;
yield;
}
loop(30){
CreateShot01(GetX, GetY, rand(1, 1.5), GetAngleToPlayer+p+rand(-9, 9), GREEN12, rand(5, 20));
p += 9;
yield;
}
_Wait(60);
SetMovePosition02(GetPlayerX, GetPlayerY, wait);
_Wait(wait);
}


    }

    task GasCloud(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
let a = 0;
let b = 0;
let r = 0;
let n = 0.05;
        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_SetAutoDelete(obj, false);
ObjShot_SetBombResist(obj, true);
        while (!Obj_BeDeleted(obj)){
if (a == 30){
r = rand(0, 360);
ascent(z in 0..30){
GasShot(Obj_GetX(obj), Obj_GetY(obj), n, r+z*12, GREEN03, 0);
}
a = 0;
n += 0.05;
}

if (b == 2100){
Obj_Delete(obj);
}

b++;
a++;
yield;
}
}

    task GasShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
let a = 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_SetAutoDelete(obj, false);
ObjShot_SetBombResist(obj, true);
        while (!Obj_BeDeleted(obj)){

if (a == 60){
Obj_SetSpeed(obj, 0);
ObjShot_FadeDelete(obj);
}
a++;
yield;
}
}

task controlbutton{
let l = 0;
loop{
if (l == 0 && time < 90){
wait = 55;
l++;
}
if (l == 1 && time < 60){
wait = 45;
l++;
}
if (l == 2 && time < 45){
wait = 35;
l++;
}
if (l == 3 && time < 30){
wait = 30;
l++;
}
if (l == 4 && time < 15){
wait = 20;
l++;
}
yield;
}
}

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

}

Fat Pigeon 3 - The worst thing, it's some hideous color wheel horror thing.  First it shoots this completely meaningless ring of purple bullets which for some unknown reason turn into colorful shots... I dunno!  Shots alternate from 0-3.5 in speed, then from 3.5 down to negative 3.5, then rinse repeat.  It's as easy as it is colorful.

Code: [Select]
#TouhouDanmakufu
#Title[Fat Pigeon 3]
#Text[Test script]
#ScriptVersion[2]

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

    let frame = 0;

let Color = [RED12, ORANGE12, YELLOW12, GREEN12, AQUA12, BLUE12, PURPLE12];

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

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 60);
        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 (frame == 0){
    Phyto;
    }

frame++;
yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task Phyto(){
let a = 0;
let baney = 0;
let c = 0;
let q = 0;
_Wait(60);
_Wait(30);
loop{
    PlaySE(GetCurrentScriptDirectory~"SFX\Shot1.wav");
ascent(b in 0..10){
SplashShot(GetX, GetY, 4, q+b*36, PURPLE04, 5, a, c);
}
c++;

if (c > 6){
c = 0;
}

if (baney == 0){
a += 0.08;
}
else{
a -= 0.08;
}

if (a > 3.5){
baney=1;
}
if (a < -3.5){
baney=0;
}

q += 4.7;
_Wait(3);
}
}

    task SplashShot(x, y, v, angle, graphic, delay, second, kurt){
        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 > 20 && Obj_GetSpeed(obj) > 0){
Obj_SetSpeed(obj, Obj_GetSpeed(obj) - 0.1);
}

if (Obj_GetSpeed(obj) < 0){
Obj_SetSpeed(obj, 0);
}

if (bounce == 80){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), second, Obj_GetAngle(obj), Color[kurt], 10);
Obj_Delete(obj);
}

        bounce++;
        yield;
        }
    }

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

}

They all run, but I might have forgotten to tear some random stuff out of the scripts that make them larger but don't affect anything.

Re: I'll get you fat pigeon
« Reply #1 on: May 14, 2009, 04:06:15 AM »
Ahh, haven't seen the Jormund in a few months. Nice scripts, difficulty is pretty nice as well. FP1 is just lol, random things being fired off... Man, I dunno what to say. It's just... I dunno! Cool, I guess? FP2 was a kick in the balls the first time I played it. Had no idea what the hell was going on.... It's not too difficult after the first play through, but dang, it's scary as ass on attempt number one. FP3 is just kick-ass. Could be more difficult, but I needn't reduce the kick-assness of this spellcard with foolish claims regarding it's pansy-level.

Can't wait to see this non-drivel you speak of.

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #2 on: May 14, 2009, 11:24:42 PM »
Whew, only one reply so far; thanks Naut.  I think the only way to attract more attention to pigeons is by cranking this beast down a notch:

Fat Pigeon 4 - Heavily based on PC-98 Alice's purple lasers.  There is nothing special or remotely remarkable about this one, one set of laser beams with their mini lasers fire, then the second, repeat.  Lasers appear 180 degrees from you and take half a second to swing around at which point they immediately materialize; the only thing this does is look a little cooler I guess and also harder to track where the lasers are going to hit.  Pretty easy overall.

Code: [Select]
#TouhouDanmakufu
#Title[Fat Pigeon 4]
#Text[Test script]
#ScriptVersion[2]

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

    let frame = 0;

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

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 60);
        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 (frame == 0){
    Ray;
    }

frame++;
yield;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task Ray(){
let t = 0;
_Wait(200);
loop{
LaserSnap;
loop(10){
t = rand(0, 360);
ascent(b in 0..28){
CreateLaser01(GetX, GetY, 5, t+b*12.857, 45, 8, PURPLE01, 0);
}
_Wait(8);
}
_Wait(40);
LaserSnap2;
loop(10){
t = rand(0, 360);
ascent(b in 0..28){
CreateLaser01(GetX, GetY, 5, t+b*12.857, 45, 8, RED01, 0);
}
_Wait(8);
}
_Wait(40);
}
}

task LaserSnap{
let n = 0;
loop(40){
if (n%2 == 0){
CreateLaserA(0, GetX, GetY, 600, 15, PURPLE01, 30);
SetLaserDataA(0, 0, GetAngleToPlayer+180, 6, 0, 0, 0);
SetLaserDataA(0, 30, NULL, 0, 0, 0, 0);
SetShotKillTime(0, 80);
FireShot(0);
}
else{
CreateLaserA(0, GetX, GetY, 600, 15, PURPLE01, 30);
SetLaserDataA(0, 0, GetAngleToPlayer+180, -6, 0, 0, 0);
SetLaserDataA(0, 30, NULL, 0, 0, 0, 0);
SetShotKillTime(0, 80);
FireShot(0);
}
n++;
_Wait(2);
}
}

task LaserSnap2{
let n = 0;
loop(40){
if (n%2 == 0){
CreateLaserA(0, GetX, GetY, 600, 15, RED01, 30);
SetLaserDataA(0, 0, GetAngleToPlayer+180, 5.85, 0, 0, 0);
SetLaserDataA(0, 30, NULL, 0, 0, 0, 0);
SetShotKillTime(0, 80);
FireShot(0);
}
else{
CreateLaserA(0, GetX, GetY, 600, 15, RED01, 30);
SetLaserDataA(0, 0, GetAngleToPlayer+180, -5.85, 0, 0, 0);
SetLaserDataA(0, 30, NULL, 0, 0, 0, 0);
SetShotKillTime(0, 80);
FireShot(0);
}
n++;
_Wait(2);
}
}

    task ReflectShot(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(i == 0){
if (((Obj_GetX(obj) > 410) || (Obj_GetX(obj) < 40))){
        Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
i++;
        }
}
if(i == 0){
    if (((Obj_GetY(obj) < 25) || (Obj_GetY(obj) < 25))){
        Obj_SetAngle(obj, 360 - Obj_GetAngle(obj));
i++;
        }
        }
        yield;
        }
    }

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

}

Fat Pigeon 5 - Another miserable long survival card, this was the first in a new set I made one day because I didn't like my old survivals being just one phase that continued to get faster (interestingly enough the second was Fat Pigeon 2 which was basically what I was trying to avoid, but that one was fun), and wanted ones that had multiple steps like ZUN does.  This one features heavy and awful random number generator luck, which I really didn't want to keep in but eventually we have to indulge our dark side and leave an RNG spellcard here and there.  Fireballs are replaced with arrows, I have the most trouble with the first part, although the third part is harder with vanilla graphics as opposed to CtC ones (shots are larger but it's still easily managed).

Code: [Select]
#TouhouDanmakufu
#Title[Fat Pigeon 5]
#Text[Test script]
#ScriptVersion[2]

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

    let frame = 0;

let time = 100;

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

        SetMovePosition02(GetCenterX, GetCenterY, 60);
        CutIn(YOUMU, "Test Sign "\""Test"\", "", 0, 0, 0, 0);

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

    @MainLoop {

    if (frame == 170){
    Burn;
    }

time = GetTimer;
frame++;
yield;
    }

    @DrawLoop {
SetAlpha(0);
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

    task Burn(){
let speedx;
let speedy;
let speed;
    let f;

    let u = 0;

    loop(700){
if (u == 6){
u = 0;
}
speed = rand(4, 5);
f = rand(260, 280);
        speedx = speed * cos(f);
        speedy = speed * sin(f);
        CreateShotA(0, rand(GetClipMinX+20, GetClipMaxX-20), rand(GetClipMaxY, GetClipMaxY-70), rand(40, 75));
        SetShotDataA(0, 0, speed, f, 0, 0, 5, RED21);
        SetShotDataA_XY(0, 1, speedx, speedy, 0, 0.03, 5, 5, RED21);
        FireShot(0);
Light(rand(GetClipMinX+20, GetClipMaxX-20), rand(GetClipMaxY, GetClipMaxY-70), RED21, rand(40, 75));
_Wait(2);
u++;
}

_Wait(180);

loop(60){
Light(rand(GetClipMinX+10, GetClipMaxX-10), rand(GetClipMinY, GetClipMinY+30), RED01, rand(40, 75));
Light(rand(GetClipMinX+10, GetClipMaxX-10), rand(GetClipMinY, GetClipMinY+30), RED01, rand(40, 75));
yield;
}

loop(500){
if (u == 4){
u = 0;
}
BurnLeaf(rand(GetClipMinX+10, GetClipMaxX-10), rand(GetClipMinY, GetClipMinY+30), rand(0.4, 1), rand(0, 360), 0);
Light(rand(GetClipMinX+10, GetClipMaxX-10), rand(GetClipMinY, GetClipMinY+30), RED01, rand(40, 75));
Light(rand(GetClipMinX+10, GetClipMaxX-10), rand(GetClipMinY, GetClipMinY+30), RED01, rand(40, 75));
_Wait(3);
u++;
}

_Wait(120);
loop(60){
Light(rand(GetClipMinX, GetClipMinX+40), rand(GetClipMinY, GetClipMaxY), RED01, rand(40, 75));
Light(rand(GetClipMaxX, GetClipMaxX-40), rand(GetClipMinY, GetClipMaxY), RED01, rand(40, 75));
yield;
}
SideBurner;
loop{
Light(rand(GetClipMinX, GetClipMinX+40), rand(GetClipMinY, GetClipMaxY), RED01, rand(40, 75));
Light(rand(GetClipMaxX, GetClipMaxX-40), rand(GetClipMinY, GetClipMaxY), RED01, rand(40, 75));
_Wait(1);
}
    }

task SideBurner{
let q = rand(-5, 5);
let z = GetClipMaxY+q;

loop{
while(z > GetClipMinY-10){
CreateShot01(GetClipMinX, z, 0.5, 0, RED02, 5);
CreateShot01(GetClipMaxX, z-12, 0.5, 180, RED02, 5);
z -= 24;
}
if (time > 20){
_Wait(100);
}
else{
_Wait(80);
}
q = rand(-5, 5);
z = GetClipMaxY+q;
}
}


    task BurnLeaf(x, y, v, angle, delay){
        let obj = Obj_Create(OBJ_SHOT);
let bounce = 0;
let crap = rand(75, 105);
        Obj_SetX(obj, x);
        Obj_SetY(obj, y);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, ORANGE11);
        ObjShot_SetDelay(obj, delay);
        Obj_SetAlpha(obj, 255);
        let SpeedX = v * cos(crap);
        let SpeedY = v * sin(crap);
        let accelerate = 0.15;
        _GiantLightRed();
        while (!Obj_BeDeleted(obj)){

if (bounce == 1){
        ObjShot_SetGraphic(obj, GREEN11);
}

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

        }

    task _GiantLightRed{

    while( !Obj_BeDeleted( obj ) ){
    let _x = Obj_GetX( obj ) + rand( - 20, 20 );
    let _y = Obj_GetY( obj ) + rand( - 20, 20 );
    Light( _x, _y, ORANGE01, 20 );
    loop( 1 ){
        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;
    }
}

}

Fat Pigeon 6 - I honestly forgot this peice of junk existed until like 30 mins ago when I stumbled upon it.  What sweeter revenge then to release this abomination upon the world, I thought.  It took forever to convert over, but it was worth it to make everyone else suffer through it.  The difficulty is over-scaled, I never bothered to really balance it, I made it one late night after a long and miserable workday.  Features an explosive entrance, health regeneration, and an internal timer during phase 2.  If you kill the boss to slowly during the second round then the time between the attacks quickly diminish and you will inevitably die.  Enjoy!

Code: [Select]
#TouhouDanmakufu
#Title[Fat Pigeon 6]
#Text[Test script]
#ScriptVersion[2]

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

    let frame = 0;

let aftershock=0;

    let move = -70;

let permareveal = 0;
let reveal = 0;

let phase = 0;

let waiting = 260;

let firstwait = 0;

    @Initialize {
        SetLife(650);
        SetDamageRate(10, 0);
        SetTimer(999);
        SetInvincibility( 470 );

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

     Startup;
    }

    @MainLoop {

if (reveal == 1){
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);
}

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

    if (frame == 300){
SpinOut;
Checker;
    }

if (reveal == 1){
    frame++;
    move++;
}

frame++;
yield;
    }

    @DrawLoop {
if (reveal == 1){
SetAlpha( 255 );
}
else{
SetAlpha(0);
}
        DrawGraphic(GetX, GetY);
}

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

task Startup(){
SetMovePosition02(GetCenterX, GetClipMinY + 120, 1);
_Wait(80);
LightRay(GetCenterX, GetClipMaxY, 21, 0, WHITE01, 0, 5,270);
LightRay(GetCenterX, GetClipMaxY, 21, 180, WHITE01, 0, 5,270);
LightRay(GetCenterX, GetClipMaxY, 18, 0, WHITE01, 0, 3,270);
LightRay(GetCenterX, GetClipMaxY, 18, 180, WHITE01, 0, 3,270);
_Wait(560);
CurtainBlast(GetCenterX, GetClipMinY, 0, 0, WHITE01, 0);
_Wait(600);
    Concentration01(300);
_Wait(300);
ascent(v in 0..60){
ascent(i in 0..60){
CreateShot01(GetX, GetY, 0.2+i*0.125, GetAngleToPlayer+v*6, WHITE22, 0);
}
}
reveal=1;
permareveal=1;
firstwait = 1;
    CutIn(YOUMU, "Test Sign"\""Test"\", "", 0, 0, 0, 0);
    SetScore(21000);

}

task Checker(){
let q = 0;
loop{

if (q == 0){
if (GetEnemyLife < 150){
q++;
Concentration01(120);
_Wait(120);
reveal = 0;
_Wait(300);
LightRay(GetCenterX, GetClipMaxY, 21, 0, WHITE01, 0, 5,270);
LightRay(GetCenterX, GetClipMaxY, 21, 180, WHITE01, 0, 5,270);
LightRay(GetCenterX, GetClipMaxY, 18, 0, WHITE01, 0, 3,270);
LightRay(GetCenterX, GetClipMaxY, 18, 180, WHITE01, 0, 3,270);
_Wait(560);
LightRay(GetCenterX, GetClipMinY+5, 21, 0, WHITE01, 0, 5,90);
LightRay(GetCenterX, GetClipMinY+5, 21, 180, WHITE01, 0, 5,90);
LightRay(GetCenterX, GetClipMinY+5, 18, 0, WHITE01, 0, 3,90);
LightRay(GetCenterX, GetClipMinY+5, 18, 180, WHITE01, 0, 3,90);
_Wait(560);
LightRay(GetCenterX, GetClipMinY+5, 21, 0, WHITE01, 0, 5,90);
LightRay(GetCenterX, GetClipMinY+5, 21, 180, WHITE01, 0, 5,90);
LightRay(GetCenterX, GetClipMaxY, 18, 0, WHITE01, 0, 3,270);
LightRay(GetCenterX, GetClipMaxY, 18, 180, WHITE01, 0, 3,270);
_Wait(620);
let liferegen = 650 - GetEnemyLife;
Concentration01(liferegen + 60);
loop(liferegen){
AddLife(1);
yield;
}
_Wait(60);
reveal=1;
aftershock=1;
ascent(v in 0..60){
ascent(i in 0..60){
CreateShot01(GetX, GetY, 0.2+i*0.125, GetAngleToPlayer+v*6, WHITE22, 0);
}
}
}
}
yield;
}
}


task SpinOut(){
let a;
let b = 0;
let chooser;

loop{
if (firstwait == 1){
_Wait(300);
firstwait++;
}

if (aftershock==2){
if (waiting > 19){
waiting -= 10;
}
}

if (aftershock==1){
_Wait(300);
aftershock++;
}

if (reveal == 1){
chooser=rand_int(0, 6);
alternative(chooser)
case(0){
BowlerShot(GetX, GetY, 0, 0, WHITE01, 0);
}
case(1){
ascent(a in 0..3){
SpindleShot(GetX, GetY, 0, 120+a*120, WHITE01, 0);
}
}
case(2){
RevolvoBlast;
}
case(3){
SpinBlast;
}
case(4){
WhirlKill(GetX, GetY, 0, 0, WHITE01, 0);
WhirlKill(GetX, GetY, 0, 180, WHITE01, 0);
}
case(5){
SpinShooter(GetX, GetY, 0, 210, WHITE01, 0, 45, 35);
SpinShooter(GetX, GetY, 0, 330, WHITE01, 0, 135, -35);
}
case(6){
ascent(a in 0..3){
RingShot(GetX, GetY, 0, 120+a*120, WHITE01, 0);
}
}

_Wait(waiting);
}
else{
_Wait(1);
    }
}
}

task SpinBlast(){
let a;
    loop(2){
a = rand(170,190);
    SpinShot(GetX, GetY, 4, a, RED22, 0, 0);
   SpinShot(GetX, GetY, 4, a-180, RED22, 0, 0);
  _Wait(90);
}
}

task RevolvoBlast(){
let b=GetAngleToPlayer;
b=GetAngleToPlayer;
loop(90){
ascent(a in -2..3){
CreateShot01(GetX, GetY, 2.5, b+a*15, BLUE22, 7);
}
b += 20;
_Wait(2);
}
}

    task CurtainBlast(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
let v;
let o = 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);
        while (!Obj_BeDeleted(obj)){

        if (bounce == 35){
ascent(v in 0..25){
SetShotColor(0, 0, 0);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 0.7, v*14.4-o, WHITE01, 0);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 0.7, v*14.4+o, WHITE01, 0);
SetShotColor(255, 255, 255);
}
o++;
        bounce=0;
        }

        if (((Obj_GetX(obj) > 410) || (Obj_GetX(obj) < 40))){
        Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
        }

        bounce++;
        yield;
        }
    }

    task LightRay(x, y, v, angle, graphic, delay, let stall, let angle2){
        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);
        Obj_SetAlpha(obj, 0);
        Obj_SetCollisionToPlayer(obj,false);
        ObjShot_SetBombResist(obj, true);
        while (!Obj_BeDeleted(obj)){
        if (bounce == stall){
CreateLaser01(Obj_GetX(obj), Obj_GetY(obj), 4, angle2, 150, 10, WHITE01, 0);
        bounce=0;
        }

        if (((Obj_GetX(obj) > 410) || (Obj_GetX(obj) < 40))){
        Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
        }

if (i == 440){
Obj_Delete(obj);
}

i++;
        bounce++;
        yield;
        }
    }

    task BowlerShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

        let Length = 30;

        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);
        ObjShot_SetBombResist(obj, true);
Obj_SetAutoDelete(obj, false);
        while (!Obj_BeDeleted(obj)){

if (t >= 90){
Obj_Delete(obj);
}

BaseX = GetX;
BaseY = GetY;

CAngle = CAngle + 10;

Length = 90-t;

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

        Obj_SetPosition(obj, RollerX, RollerY);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 0.5+t*0.05, GetAngleToPlayer, GREEN22, 14);
t += 0.5;
yield;
}
}

    task SpinShooter(x, y, v, angle, graphic, delay, let n, let k){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

        let Length = 30;

        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);
        ObjShot_SetBombResist(obj, true);
Obj_SetAutoDelete(obj, false);
        while (!Obj_BeDeleted(obj)){

if (t >= 180){
Obj_Delete(obj);
}

BaseX = GetX;
BaseY = GetY;

Length = 50;

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

        Obj_SetPosition(obj, RollerX, RollerY);

if (bounce == 3){
ascent(i in 0..9){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 1+i*0.4, n, ORANGE22, 14);
}
n += k;
bounce=0;
}

bounce++;
t++;
yield;
}
}

    task SpindleShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

        let CAngle = angle;

        let Length = 30;

        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);
        ObjShot_SetBombResist(obj, true);
Obj_SetAutoDelete(obj, false);
        while (!Obj_BeDeleted(obj)){

if (i >= 180){
Obj_Delete(obj);
}

BaseX = GetX;
BaseY = GetY;

CAngle = CAngle + 5;

Length = 120;

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

        Obj_SetPosition(obj, RollerX, RollerY);

if (t == 4){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, atan2(Obj_GetY(obj)-GetY, Obj_GetX(obj)-GetX)-90, PURPLE22, 22);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, atan2(Obj_GetY(obj)-GetY, Obj_GetX(obj)-GetX)-0, PURPLE22, 22);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, atan2(Obj_GetY(obj)-GetY, Obj_GetX(obj)-GetX)-180, PURPLE22, 22);
t=0;
}

i++;
t++;
yield;
}
}

    task RingShot(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let bounce = 0;
        let i = 0;

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let t = 0;

let q;

        let CAngle = angle;

        let Length = 30;

        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);
        ObjShot_SetBombResist(obj, true);
Obj_SetAutoDelete(obj, false);
        while (!Obj_BeDeleted(obj)){

if (i >= 180){
Obj_Delete(obj);
}

BaseX = GetX;
BaseY = GetY;

CAngle = CAngle + 10;

Length = 80;

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

        Obj_SetPosition(obj, RollerX, RollerY);

if (t == 20){
ascent(q in 0..16){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 1.8, 0+q*22.5, AQUA22, 15);
}
t=0;
}

i++;
t++;
yield;
}
}

    task SpinShot(x, y, v, angle, graphic, delay, alpha){
        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);
        Obj_SetAlpha(obj, alpha);
        Obj_SetCollisionToPlayer(obj,false);
        while (!Obj_BeDeleted(obj)){
        if (bounce == 1){
        CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, 0+i*34, RED22, 15);
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, 180+i*34, RED22, 15);
        i++;
        bounce=0;
        }
        bounce++;
        yield;
        }
    }

    task WhirlKill(x, y, v, angle, graphic, delay){

let n = 0;
    let RollerY2=0;
        let RollerX2=0;

        let BaseX2;
        let BaseY2;

        let Angler2 = angle;

        let Length2 = 90;

let obj2 = Obj_Create(OBJ_SHOT);
        Obj_SetX(obj2, x);
        Obj_SetY(obj2, y);
        Obj_SetSpeed(obj2, v);
        Obj_SetAngle(obj2, angle);
        ObjShot_SetGraphic(obj2, graphic);
        ObjShot_SetDelay(obj2, delay);
Obj_SetAlpha( obj2, 0 );
Obj_SetAutoDelete(obj2, false);
Obj_SetCollisionToPlayer( obj2, false );



        let obj = Obj_Create(OBJ_SHOT);

        let RollerY=0;
        let RollerX=0;

        let BaseX;
        let BaseY;

        let Angler = angle;

        let Length = 30;

        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_SetAutoDelete(obj, false);
        while (!Obj_BeDeleted(obj)){

BaseX = Obj_GetX(obj2);
BaseY = Obj_GetY(obj2);

Angler = Angler + 19;

Length = 30;

RollerX = BaseX + Length * cos(Angler);
        RollerY = BaseY + Length * sin(Angler);

BaseX2 = GetX;
BaseY2 = GetY;

Angler2 = Angler2 + 3;

Length2 = 90;

RollerX2 = BaseX2 + Length2 * cos(Angler2);
        RollerY2 = BaseY2 + Length2 * sin(Angler2);

        Obj_SetPosition(obj2, RollerX2, RollerY2);
        Obj_SetPosition(obj, RollerX, RollerY);

if (n > 1){
CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, atan2(GetPlayerY-Obj_GetY(obj2), GetPlayerX-Obj_GetX(obj2)), YELLOW22, 15);
}

if (n == 180){
Obj_Delete(obj2);
Obj_Delete(obj);
}

n++;
yield;

        }

    }

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

}

Re: I'll get you fat pigeon
« Reply #3 on: May 14, 2009, 11:55:32 PM »
These are fat. too fat.

1 is too fat because of those fat balls of fat traping you with those fat lasers
2 is too fat because of the randomness of the green fat
3 is too fat because you have to fit through a tiny hole through fast bullets but you're too fat to do so
4 is too fat because that laser is just plain fat
5 is too fat
6 is fat fat fat

This post is fat


But honestly some of these are pretty cool. Tons of cheap shots everywhere though :V

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #4 on: May 15, 2009, 12:00:05 AM »
Agreed, but I will get that fat pigeon some day.

EDIT:  Waaaaaaait a second... #2 is barely random at all, just one step up from being fixed really.
« Last Edit: May 15, 2009, 12:06:59 AM by JormundElver »

Re: I'll get you fat pigeon
« Reply #5 on: May 15, 2009, 12:50:34 AM »
Sometimes the green spray all fires at me and sometimes nothing does :V

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #6 on: May 15, 2009, 01:06:48 AM »
Yeah it can do that, what it's doing is firing a line of shots left right right left, but then it puts a small randomization in speed and the distance between the shots so it isn't the same line... so shots can get clustered in one direction, but if that happens there would be big gaps around them, it all balances out, like the universe, and pizza.

Iryan

  • Ph?nglui mglw?nafh
  • Cat R?lyeh wgah?nagl fhtagn.
Re: I'll get you fat pigeon
« Reply #7 on: May 15, 2009, 12:13:40 PM »
Fat Pigeon 1: The different... phases seem somewhat unrelated. Still, the card is fun.

Fat Pigeon 2: Does a good job at imitating Grobbulus. It has two major problems, however. First, if you die while you are kiting the boss along the top of the screen, your character respawns at the bottom, causing the next cloud to be spawned at the bottom, pretty much ensuring severe impossible wallness. Second, the card is... way too long. 2/3 of the time would totally suffice to force the player to use the tactic. The way it is now, it gets quite tedious.

Fat Pigeon 3: Nice little pattern. Nothing too special, but not bad. Reminds me of Tatara.

Fat Pigeon 4: Yeah, the first time you play this card, you'll die. If you are not moving by the time the attack visibly starts, you get instagibd. Even the original attack hat more time. Nice twist on the attack, though. Problem: When the laser shots hate you, you can't move out of the laser cage fast enough to not get fried by the purple lasers...

Fat Pigeon 5: First part is... I don't know. You can pretty much sit in a lower corner and move slightly to left or right when some bullets fall down where you are. Second part, well... HOLY COW THIS IS AWESOME! Well, maybe not gameplaywise, but it sure is supreme eye-candy. Third part gets claustrophobic near the end, and it becomes hard to make out where the character actually is if all the bullet sprites overlap like that...

Fat Pigeon 6:  Wow.
d(O.o)b
I've tried myself to make attacks with alternating patterns. Mine are fail. Yours are win.
...BUT the part that comes when the enemies life is low, with lasers coming from the top and the bottom while the black pattern continues... is... not... a pleasure... really.
Old Danmakufu stuff can be found here!

"As the size of an explosion increases, the numbers of social situations it is incapable of solving approaches zero."

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #8 on: May 15, 2009, 01:23:17 PM »
Pigeon 1 was a like a Reimu spellcard, lasers were my imitation of needles, the little arrow shots were supposed to be the card shots but the standard spriteset lacked them so it looks weird, giant orbs are yin-yangs :) .

Agree with 2, lasts forever... I should probably make it so if the player has invincibility that the boss stays still instead of moving so it wont run down when you die.

I dunno what to do with 4, sometimes I can sit down and dominate it for a while, other times vice versa... I was thinking about just making the mini-lasers just firing off in a spiral sense instead of random rings.

5 is odd because I always had the most trouble with the first part, and the third and second I almost always live through... I didn't think about the very bottom though :P .

6 is just cruelly insane, like 90% of the garbage I have.

I'll post 3 more a little later I hope...

Iryan

  • Ph?nglui mglw?nafh
  • Cat R?lyeh wgah?nagl fhtagn.
Re: I'll get you fat pigeon
« Reply #9 on: May 15, 2009, 01:50:55 PM »
Hmm, I still have a script lying around which you posted on the old board once. A medley of the extra bosses' final attacks. It thought it was actually quite fun and awesome.

Code: [Select]
#TouhouDanmakufu
#Title[Hourai Border of Mishaguji-QED]
#Text[Ripples are delicious in any setting. (I still stink at names)]
#ScriptVersion[2]

script_enemy_main {

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

    let count1=0;

    let life = 600;

    let crap = 260;

    let time = 140;

    let l = 0;

    let reqmaxX = GetClipMaxX;
    let reqminX = GetClipMinY;
    let reqmaxY = GetClipMaxY;
    let reqminY = GetClipMinY;

    let kee = 0;

    @Initialize {
        SetLife(800);
        SetDamageRate(10, 0);
        SetScore(210000);
        SetTimer(130);
        SetInvincibility( 200 );
        LoadGraphic(ImgBoss);
        CutIn(YOUMU, ""\""Hourai Border of Mishaguji-QED"\", "", 0, 0, 0, 0);

        SetMovePosition02(GetCenterX, GetClipMinY + 120, 120);

        SetGraphicRect(0, 0, 64, 64);
    }

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

    if (count1 == 150){
    kill;
    tracers;
    controller;
    }

    count1++;
    time = GetTimer;
    life = GetEnemyLife;
    yield;
    }

    @DrawLoop {
    if (!OnBomb) {
        SetTexture(ImgBoss);
        SetGraphicAngle(0, 0, 0);
        SetGraphicRect(0, 0, 64, 64);
SetGraphicScale(1, 1);
        DrawGraphic(GetX, GetY);
        }
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }

    @BackGround{

        SetTexture(GetCurrentScriptDirectory~"img\blackbackgroundlol.png");
SetGraphicRect( 0, 0, 512, 512 );
SetGraphicScale(1, 1);
        SetAlpha(255);
        DrawGraphic(GetCenterX, GetCenterY);
    }

    task controller(){
        loop{
        if (l == 0){
        if (life < 650){
        crap = 200;
        l++;
        }
        }
        if (l == 1){
        if (life < 500){
        crap = 140;
        l++;
        }
        }
        if (l == 2){
        if (life < 350){
        crap = 100;
        l++;
        }
        }
        if (time < 20){
        if (l != 20){
        l = 20;
        crap = 100;
        aimedbutterflies;
        }
        }
        yield;
        }
    }

    task aimedbutterflies(){
        loop{
        CreateShot01(GetX, GetY, 3, GetAngleToPlayer, PURPLE22, 5);
        _Wait(30);
        }
    }


    task kill(){
        let x;
        let y;
        let a;
        loop{
        x = rand(GetClipMinX + 100, GetClipMaxX - 100);
        y = rand(GetClipMinY + 80, GetClipMinY + 160);
        ascent(a in 0..45){
        Slowbie(x, y, 1, 0+a*8, GREEN12, 5, -2);
        Slowbie(x, y, 1, 4+a*8, BLUE12, 5, 2);
        }
        _Wait(crap);
        }
        }

    task tracers(){
    Tracer(GetClipMinX+1, GetClipMinY+1, 3, 90, BLUE02, 0);
    Tracer(GetClipMaxX-1, GetClipMaxY-1, 3, 270, RED02, 0);
    }


    task Slowbie(x, y, v, angle, graphic, delay, let turn){
        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 == 0){
          if ((Obj_GetX(obj) > 420) || (Obj_GetX(obj) < 30)){
              Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
          bounce++;
          }
  if (Obj_GetY(obj) < 15){
          Obj_SetAngle(obj, 360 - Obj_GetAngle(obj));
          bounce++;
          }
          }

          if ((i > 40) && (i < 85)){
          Obj_SetAngle(obj, Obj_GetAngle(obj)+turn);
          }

          i++;
          yield;
          }
     }

    task Tracer(x, y, v, angle, graphic, delay){
        let obj = Obj_Create(OBJ_SHOT);
        let i = 0;
        let alternate = 0;
        let ignore1 = 0;
        let ignore2 = 0;
        let ignore3 = 0;
        let ignore4 = 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_SetAutoDelete(obj, false);
        ObjShot_SetBombResist(obj, true);
      Obj_SetCollisionToPlayer(obj,false);
          while (!Obj_BeDeleted(obj)){

          if (ignore1 == 0){
          if (Obj_GetX(obj) > reqmaxX){
              Obj_SetAngle(obj, Obj_GetAngle(obj)-90);
              Obj_SetX(obj, reqmaxX-1);
              if (kee < 14){
              reqmaxX = reqmaxX-10;
              }
              ignore1++;
              ignore2=0;
              kee++;
          }
          }
          if (ignore2 == 0){
          if (Obj_GetX(obj) < reqminX){
              Obj_SetAngle(obj, Obj_GetAngle(obj)-90);
              Obj_SetX(obj, reqminX+1);
              if (kee < 14){
              reqminX = reqminX+10;
              }
              ignore2++;
              ignore1=0;
          }
          }
          if (ignore3 == 0){
          if (Obj_GetY(obj) > reqmaxY){
              Obj_SetAngle(obj, Obj_GetAngle(obj)-90);
              Obj_SetY(obj, reqmaxY-1);
              if (kee < 14){
              reqmaxY = reqmaxY-10;
              }
              ignore3++;
              ignore4=0;
          }
          }
          if (ignore4 == 0){
          if (Obj_GetY(obj) < reqminY){
              Obj_SetAngle(obj, Obj_GetAngle(obj)-90);
              Obj_SetY(obj, reqminY+1);
              if (kee < 14){
              reqminY = reqminY+10;
              }
              ignore4++;
              ignore3=0;
          }
          }

          if (kee < 15){
          if (i == 15){
          if (alternate == 0){
          Permashot(Obj_GetX(obj), Obj_GetY(obj), 0, 0, RED01, 7);
          alternate++;
          i = 0;
          }
          else{
          Permashot(Obj_GetX(obj), Obj_GetY(obj), 0, 0, BLUE01, 7);
          alternate=0;
          i = 0;
          }
          }
          }

          i++;
          yield;
          }
     }

    task Permashot(x, y, v, angle, graphic, 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, graphic);
        ObjShot_SetDelay(obj, delay);
Obj_SetAutoDelete(obj, false);
        ObjShot_SetBombResist(obj, true);
          while (!Obj_BeDeleted(obj)){
          yield;
          }
     }

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

}

On another note, making a signature pic of your selfmade danmaku is awesome, too.  ;D
Old Danmakufu stuff can be found here!

"As the size of an explosion increases, the numbers of social situations it is incapable of solving approaches zero."

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #10 on: May 15, 2009, 01:56:52 PM »
Ahaha... oh dear, someone actually saved that :P .  Forgot about that one too...

Demonlord Pichu

Re: I'll get you fat pigeon
« Reply #11 on: May 15, 2009, 03:36:56 PM »
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

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #12 on: May 16, 2009, 04:28:09 AM »
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: [Select]
#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;
    }
}

}

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: [Select]
#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;
    }
}

}

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: [Select]
#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;
    }
}

}

EDIT:  I've used up all but one of my spells that have mini-lasers.  I must really have liked mini-lasers.
« Last Edit: May 16, 2009, 03:00:33 PM by JormundElver »

Re: I'll get you fat pigeon
« Reply #13 on: May 16, 2009, 10:59:44 PM »
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

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #14 on: May 18, 2009, 07:58:33 PM »
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: [Select]
#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;
    }
}

}

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: [Select]
#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;
    }
}

}

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: [Select]
#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;
    }
}

}
« Last Edit: May 18, 2009, 10:39:07 PM by JormundElver »

Re: I'll get you fat pigeon
« Reply #15 on: May 18, 2009, 10:20:53 PM »


Fat Pigeon 12.


FP10 is a little less creative than your usual, and it's dang easy. Don't like it very much.... FP11 is pretty freakin' cool, though I really wish you didn't have the BLUE12's disappear!

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #16 on: May 18, 2009, 10:43:36 PM »
Ooops sorry about that, fixed it.  _Wait( 9 ) was being transformed into _Wait⑨.

I know what you mean about 10, there is nothing great about it; for the most part it's just a "hey look at the strobelight lasers".  I would change the misty bombs of 11 but that would be really hard I think... then again I never tried without it either.

I'll add something actually cool to make up for 10 here in a bit...

EDIT:  Make that something epic, I know just the thing.

Stuffman

  • *
  • We're having a ball!
Re: I'll get you fat pigeon
« Reply #17 on: May 18, 2009, 10:52:54 PM »
Hey you know you can attach files by clicking "additional options" under the textbox while you're writing your post right? It would make it a lot easier than copying them all into notepad manually.

I'll give these a try in a bit.

Re: I'll get you fat pigeon
« Reply #18 on: May 18, 2009, 10:54:02 PM »
Brace for epic!

FP12 is pretty cool, but easy as well. It's coolness makes up for it's rather low difficulty though.

Stuffman

  • *
  • We're having a ball!
Re: I'll get you fat pigeon
« Reply #19 on: May 18, 2009, 11:31:01 PM »
Reactions as they happen

FP1: I could do this if it weren't for that super dense green wave
FP2: Oh god you can't do this to me
FP3: So pretty...oh hey I captured it cool
FP4: What how is it killing me? Oh that's why, fuck this is hard
FP5: Oh haha they're like red dolphins. Oh falling fire, this is easier than it looks. Oh walls I'm dead, oh wait I can just do one set at a time.
FP6: AH FUCK oh I'm in a safespot neat. I haven't seen pure black bullets befoasdfklasdf;lKJFSADLKSDJF WHAT.
FP7: Hmm maybe I can do this one. Oh nope I can't
FP8: Nnnnnngh oh come on I can't track all of this, making a different pattern for each color is unfair ;_;
FP9: Oh hey one I can do, this is neat I guess
FP10: Argh I'm gonna get streamed into the wall I don't see an opening. Surprisingly few yellow knives out to kill me
FP11: Hmm I wonder what that ball is gonna do FUCK
FP12: Oh dear those things have homing. Well this isn't hard, causing some slowdown though

Re: I'll get you fat pigeon
« Reply #20 on: May 18, 2009, 11:45:03 PM »
Agh shit, FP12 causes you slowdown Stuffman? Hmm... I aparently need to redo some of my spellcards, didn't think that only that many bullets caused people slowdown. Is there a way to test for slowdown on worse specifications than my own, or do we just guesstimate what people can handle on average?

My apologies for the derail, by the way.

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #21 on: May 18, 2009, 11:53:24 PM »
Add: Derails are fine :)

Haha, thanks for the reactions.

Also yeah, I knew about the attachments, but prior to this one I just like having a lot of scrolling boxes in my post; boxes rule.  I don't have much choice with this one because it's a pretty large file and it took forever to convert over...

Unlucky Fat Pigeon 13 - I probably got to fascinated when arudoc posted his proximity detonation script a long while back.  I kept tacking on little bits at a time, eventually I went all out on the project and made a LW out of it.  Unfortunately a rather random one (inevitably, some bombs became better then others), but neat nonetheless.

There are 8 different bombs, coming in 3 different sizes.  You won't see the largest until late, each one is similar to the previous one but more powerful in some way.  Strategically setting them off intentionally is about the only way to make it through this (especially those red and white ones), as the bombs do not decay and will bounce around forever until they come into proximity or the boss dies.  It can be captured, and yeah it looks way better with CtC graphics :( .

Re: I'll get you fat pigeon
« Reply #22 on: May 18, 2009, 11:58:56 PM »
Holy shit thats awesome. Freakin' WHITE03 blocking my vision, I almost passed it!

Stuffman

  • *
  • We're having a ball!
Re: I'll get you fat pigeon
« Reply #23 on: May 19, 2009, 12:10:43 AM »
Agh shit, FP12 causes you slowdown Stuffman? Hmm... I aparently need to redo some of my spellcards, didn't think that only that many bullets caused people slowdown. Is there a way to test for slowdown on worse specifications than my own, or do we just guesstimate what people can handle on average?

You just need to make the aqua bullets not spawn every frame, every other frame would be fine. Just generally, don't put more bullets than you need to make a solid wall.

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #24 on: May 20, 2009, 03:57:11 AM »
I'm sorry for your slowdown; but it is sometimes difficult for me to know what causes lag and what does not, since my computer generally doesn't slowdown on things unless I go more overboard then I usually do.  The reason for the huge amounts of shots though is that using the CtC shotset, the alpha blend shots look really nice when piled in a line like that.  Instead of looking like a caterpillar of aqua shots it looks like one clean blended together arm.  Just tellin' ya why ;) .

One more question, for the moderator:  Are we allowed to post code or snippets of code that is basically not our own?  Reason I ask is that I was going to post a slightly modified version of CtC's boss movement script tonight, the only changes to it made were so that it ran without the loads of other things that load up with CtC... but I'm not sure if that is allowed or not.

Re: I'll get you fat pigeon
« Reply #25 on: May 20, 2009, 04:20:43 AM »
As long as you've said that it isn't your own, then it should be fine. This is just a free program, not like any of us are making money to be stolen. Moderator's discretion, in any case.

Stuffman

  • *
  • We're having a ball!
Re: I'll get you fat pigeon
« Reply #26 on: May 20, 2009, 10:37:46 PM »
As far as I know we don't have a policy on that so I guess I get to make one up on the spot.

Quote
As long as you've said that it isn't your own, then it should be fine.

Henceforth the ruling on this matter shalt be, What Naut Said.

The users of this board favor open source, good documentation, and sharing of coding techniques, which is why CtC grinds our gears so much.

JormundElver

  • Baron Von Parakeet
Re: I'll get you fat pigeon
« Reply #27 on: May 20, 2009, 11:47:22 PM »
Hmm, I didn't know CtC grinded gears... I could post the scripting on how to animate their sprites too at some later point (unless someone else already did).

Their movement script is ran simply with this, which I often put in an index that loads with alot of my attacks:

Code: [Select]
function GetGapLength( let xA, let yA, let xB, let yB ){
return ( ( xB - xA ) ^ 2 + ( yB - yA ) ^ 2 ) ^ 0.5;
}

function GetGapAngle( let xA, let yA, let xB, let yB ){
return atan2( yB - yA, xB - xA );
}

task MoveSlow( let x, let y, let frame ){
let _x = GetX();
let _y = GetY();
let force = GetGapLength( _x, _y, x, y ) * 2;
let angle = GetGapAngle( _x, _y, x, y );
SetMovePositionHermite( x, y, force, angle, 0, 0, frame - 1 );
loop( frame - 1 ){ yield; }
SetMovePosition02( x, y, 1 );
}

task MoveBoss( let minMoveX, let maxMoveX, let minMoveY, let maxMoveY, let marginX, let frame ){
let x = GetX();
let y = GetY();
let moveX = rand( minMoveX, maxMoveX );
let moveY = rand( minMoveY, maxMoveY );
if( x > GetPlayerX() ){
if( x - moveX >= GetClipMinX + marginX ){ moveX = - moveX; }
}
else{
if( x + moveX >= GetClipMaxX - marginX ){ moveX = - moveX; }
}
if( y > (GetClipMinY + 100) ){ moveY = - moveY; }
MoveSlow( x + moveX, y + moveY, frame );
}

task Move( let frame ){

let minMoveX = 40;
let maxMoveX = 80;
let minMoveY = 0;
let maxMoveY = 40;
let margin = 100;

MoveBoss( minMoveX, maxMoveX, minMoveY, maxMoveY, margin, frame );

}

This gives you two movement commands, one being just Move(frames); this one moves the boss in the players direction over the set number of frames, slowing down as they near their destination.  Handy because parameters are preset so you can pretty easily just Move(whatever) to move bosses around at certain times.

The other is MoveSlow(x, y, frames)... it's basically a move to position command but you also get the slowing down towards the end of the movement that seems to look smoother.

Hope this helps at least one person.

Re: I'll get you fat pigeon
« Reply #28 on: May 21, 2009, 12:47:35 AM »
Check for one person, I'll be using this often. I hate moving the boss around fluidly, so I'll just be abusing this script from now on. Thanks.

Also: CtC grinds gears because it's horribly documented and is completely holy shit everywhere. It's a POS resource for any mortal, so we all get pissed off at it because it does cool shit that we can't replicate.