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.
#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).
#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!
#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;
}
}
}