Author Topic: Custom scripts by Frazer  (Read 11212 times)

Custom scripts by Frazer
« on: May 31, 2009, 07:51:59 PM »
I want to show off a few scripts of a spellcard on the four different difficulties (easy, normal, hard & lunatic) I have made in minutes. This is one of the few scripts (of many test ones) of which I have actually even tried to make a spellcard, even if by accident.

Comments and opinions would be appreciated.



EDIT: Lowered the speed to make the spell cards slightly easier.



Blossom Sign - Blooming Flower ~ Easy
Code: [Select]
#TouhouDanmakufu
#Title[Blooming Flower Easy]
#Text[Test script]
#Image[.\img\Scarletsign.png]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

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

let count = 0;
let count2 = 0;
let num = 240;
let a = 0;
let b = 180;
let speed = 1;

@Initialize {
SetLife(2500);
SetTimer(60);
SetScore(10000000);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Blossom Sign "\""Blooming Flower"\", "", 0, 0, 0, 0);

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

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

SetShotAutoDeleteClip(200, 200, 200, 200);

if(count == 60){
loop(num){
CreateShotA(1, GetX, GetY, 0);
SetShotDataA(1, 0, speed-1, a, 4, -0.15, 0, GREEN12);
SetShotDataA(1, 60, speed, a+180, 8, 0, 6, RED12);
SetShotDataA(1, 90, NULL, NULL, 0, 0, 6, RED12);

a += 19;
speed += 0.008;

FireShot(1);
}
}

speed = 1;


if(count == 120){
loop(num){
CreateShotA(2, GetX, GetY, 0);
SetShotDataA(2, 0, speed-1, b, -4, -0.15, 0, GREEN12);
SetShotDataA(2, 60, speed, b+180, -8, 0, 6, YELLOW12);
SetShotDataA(2, 90, NULL, NULL, 0, 0, 6, YELLOW12);

b -= 19;
speed += 0.008;

FireShot(2);
}

speed = 1;

count=0
}



if(count2 == 60){
SetMovePositionRandom01(50,20,5,GetClipMinX()+100,30,GetClipMaxX()-100,100);

count2 = 0;
}

count++;
count2++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}




Blossom Sign - Blooming Flower ~ Normal
Code: [Select]
#TouhouDanmakufu
#Title[Blooming Flower Normal]
#Text[Test script]
#Image[.\img\Scarletsign.png]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

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

let count = 60;
let count2 = 0;
let num = 480;
let a = 0;
let b = 180;
let speed = 1;

@Initialize {
SetLife(2500);
SetTimer(60);
SetScore(10000000);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Blossom Sign "\""Blooming Flower"\", "", 0, 0, 0, 0);

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

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

SetShotAutoDeleteClip(200, 200, 200, 200);

if(count == 120){
loop(num){
CreateShotA(1, GetX, GetY, 0);
SetShotDataA(1, 0, speed-1, a, 4, -0.25, 0, GREEN12);
SetShotDataA(1, 60, speed, a+180, 8, 0, 6, RED12);
SetShotDataA(1, 90, NULL, NULL, 0, 0, 6, RED12);

a += 10;
speed += 0.008;

FireShot(1);
}
}

speed = 1;


if(count == 240){
loop(num){
CreateShotA(2, GetX, GetY, 0);
SetShotDataA(2, 0, speed-1, b, -4, -0.25, 0, GREEN12);
SetShotDataA(2, 60, speed, b+180, -8, 0, 6, YELLOW12);
SetShotDataA(2, 90, NULL, NULL, 0, 0, 6, YELLOW12);

b -= 10;
speed += 0.008;

FireShot(2);
}

speed = 1;

count=0
}



if(count2 == 120){
SetMovePositionRandom01(50,20,5,GetClipMinX()+100,30,GetClipMaxX()-100,100);

count2 = 0;
}

count++;
count2++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}




Blossom Sign - Blooming Roses and Violets ~ Hard
Code: [Select]
#TouhouDanmakufu
#Title[Blooming Roses and Violets Hard]
#Text[Test script]
#Image[.\img\Scarletsign.png]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

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

let count = 0;
let count2 = 0;
let num = 480;
let a = 0;
let b = 180;
let speed = 1;

@Initialize {
SetLife(2500);
SetTimer(60);
SetScore(10000000);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Blossom Sign "\""Blooming Roses and Violets"\", "", 0, 0, 0, 0);

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

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

SetShotAutoDeleteClip(200, 200, 200, 200);

if(count == 60){
loop(num){
CreateShotA(1, GetX, GetY, 0);
SetShotDataA(1, 0, speed-1, a, 4, -0.15, 0, GREEN12);
SetShotDataA(1, 60, speed, a+180, 4, 0, 6, RED12);
SetShotDataA(1, 90, NULL, NULL, 0, 0, 6, RED12);

a += 10;
speed += 0.008;

FireShot(1);
}
}

speed = 1;


if(count == 120){
loop(num){
CreateShotA(2, GetX, GetY, 0);
SetShotDataA(2, 0, speed-1, b, -4, -0.15, 0, GREEN12);
SetShotDataA(2, 60, speed, b+180, -4, 0, 6, BLUE12);
SetShotDataA(2, 90, NULL, NULL, 0, 0, 6, BLUE12);

b -= 10;
speed += 0.008;

FireShot(2);
}

speed = 1;

count=0
}



if(count2 == 60){
SetMovePositionRandom01(50,20,5,GetClipMinX()+100,30,GetClipMaxX()-100,100);

count2 = 0;
}

count++;
count2++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}





Blossom Sign - Blooming Roses and Violets ~ Lunatic
Code: [Select]
#TouhouDanmakufu
#Title[Blooming Roses and Violets Lunatic]
#Text[Test script]
#Image[.\img\Scarletsign.png]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

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

let count = 0;
let count2 = 0;
let num = 480;
let a = 0;
let b = 180;
let speed = 1;

@Initialize {
SetLife(2500);
SetTimer(60);
SetScore(10000000);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Blossom Sign "\""Blooming Roses and Violets"\", "", 0, 0, 0, 0);

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

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

SetShotAutoDeleteClip(200, 200, 200, 200);

if(count == 60){
loop(num){
CreateShotA(1, GetX, GetY, 0);
SetShotDataA(1, 0, speed-1, a, 4, -0.15, 0, GREEN12);
SetShotDataA(1, 60, speed, a+180, 8, 0, 6, RED12);
SetShotDataA(1, 90, NULL, NULL, 0, 0, 6, RED12);

a += 10;
speed += 0.008;

FireShot(1);
}
}

speed = 1;


if(count == 120){
loop(num){
CreateShotA(2, GetX, GetY, 0);
SetShotDataA(2, 0, speed-1, b, -4, -0.15, 0, GREEN12);
SetShotDataA(2, 60, speed, b+180, -8, 0, 6, BLUE12);
SetShotDataA(2, 90, NULL, NULL, 0, 0, 6, BLUE12);

b -= 10;
speed += 0.008;

FireShot(2);
}

speed = 1;

count=0
}



if(count2 == 60){
SetMovePositionRandom01(50,20,5,GetClipMinX()+100,30,GetClipMaxX()-100,100);

count2 = 0;
}

count++;
count2++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}
« Last Edit: May 31, 2009, 08:43:34 PM by Frazer »

Drake

  • *
Re: Custom scripts by Frazer
« Reply #1 on: May 31, 2009, 08:09:33 PM »
The green ones don't do anything, and you could do with a little speed reduction. It's pretty good, though.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Re: Custom scripts by Frazer
« Reply #2 on: May 31, 2009, 08:15:55 PM »
The flowers are spawned green, then change to either blue or red. Speed does seem a bit much for lunatic, but I'm certainly not gonna complain. It's a really cool effect, good stuff.

Re: Custom scripts by Frazer
« Reply #3 on: May 31, 2009, 08:21:45 PM »
The reason the bullets start out green is to imitate a bud before bloom. Then they change color when the buds bloom. The green ones are the ones that change color into red, blue and yellow flowers.

And I will keep the speed reduction suggestion in mind.

Re: Custom scripts by Frazer
« Reply #4 on: June 03, 2009, 07:27:20 PM »
Here is another spell card of mine that I made before. Personally, I like it even how it is right now.





Code: [Select]
#TouhouDanmakufu
#Title[Dreadnought "The Faring Assault"]
#Text[Test script]
#Image[.\img\Dreadnought.bmp]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {
let ImgBoss = "script\thC\IMAGE\CHAR\DOT\boss_remilia.png";

let count = 0;
let time = 0;

@Initialize {
SetLife(1);
SetTimer(50);
SetScore(1000000);
SetDamageRate(0, 0);
SetDurableSpellCard;

SetMovePosition02(225, 200, 60);
CutIn(YOUMU, "Dreadnought "\""The Faring Assault"\", "", 0, 0, 0, 0);

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

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

if(count == 120){
PlaySE("lib\THCCL\SE\lazer01.wav");
CreateLaserB(1, 1, 20, RED02, 0);
SetLaserDataB(1, 0, 6, 0, 0, 0, 0, 45, 0);
SetLaserDataB(1, 60, 0, 0, 0, 0, 0, 45, 0);
SetLaserDataB(1, 120, 0, NULL, 0, NULL, 0, NULL, -2);
SetLaserDataB(1, 180, 0, NULL, 0, NULL, 0, NULL, 4);
SetLaserDataB(1, 210, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 400, 0, NULL, 0, NULL, 0, NULL, 0.7);
SetLaserDataB(1, 915, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 960, 0, NULL, 0, NULL, 0, NULL, -2);
SetLaserDataB(1, 1020, 0, NULL, 0, NULL, 0, NULL, 4);
SetLaserDataB(1, 1060, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 1100, 0, NULL, 0, NULL, 0, NULL, -0.5);
SetLaserDataB(1, 1130, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 1330, 0, NULL, 0, NULL, 0, NULL, -0.5);
SetLaserDataB(1, 1380, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 1600, 0, NULL, 0, NULL, 0, NULL, -0.7);
SetLaserDataB(1, 2115, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 2180, 0, NULL, 0, NULL, 0, NULL, -3);
SetLaserDataB(1, 2240, 0, NULL, 0, NULL, 0, NULL, 4);
SetLaserDataB(1, 2285, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(1, 2315, 0, NULL, 0, NULL, 0, NULL, -0.5);

CreateLaserB(3, 1, 20, RED02, 0);
SetLaserDataB(3, 0, 6, 0, 0, 0, 0, 135, 0);
SetLaserDataB(3, 60, 0, 0, 0, 0, 0, 135, 0);
SetLaserDataB(3, 270, 0, NULL, 0, NULL, 0, NULL, 2);
SetLaserDataB(3, 330, 0, NULL, 0, NULL, 0, NULL, -4);
SetLaserDataB(3, 360, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 400, 0, NULL, 0, NULL, 0, NULL, 0.7);
SetLaserDataB(3, 915, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 960, 0, NULL, 0, NULL, 0, NULL, 2);
SetLaserDataB(3, 1020, 0, NULL, 0, NULL, 0, NULL, -4);
SetLaserDataB(3, 1060, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 1100, 0, NULL, 0, NULL, 0, NULL, 0.5);
SetLaserDataB(3, 1130, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 1330, 0, NULL, 0, NULL, 0, NULL, 0.5);
SetLaserDataB(3, 1380, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 1600, 0, NULL, 0, NULL, 0, NULL, -0.7);
SetLaserDataB(3, 2115, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 2180, 0, NULL, 0, NULL, 0, NULL, 3);
SetLaserDataB(3, 2240, 0, NULL, 0, NULL, 0, NULL, -4);
SetLaserDataB(3, 2285, 0, NULL, 0, NULL, 0, NULL, 0);
SetLaserDataB(3, 2315, 0, NULL, 0, NULL, 0, NULL, 0.5);

ascent(i in 1..10){
    CreateShotA(2, 0, 0, 10);
    SetShotDataA(2, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(4, 0, 0, 10);
    SetShotDataA(4, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(5, 0, 0, 10);
    SetShotDataA(5, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(9, 0, 0, 10);
    SetShotDataA(9, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(10, 0, 0, 10);
    SetShotDataA(10, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(11, 0, 0, 10);
    SetShotDataA(11, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(15, 0, 0, 10);
    SetShotDataA(15, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(16, 0, 0, 10);
    SetShotDataA(16, 0, 3, 90, 0, 0, 3, RED11);
    CreateShotA(17, 0, 0, 10);
    SetShotDataA(17, 0, 3, 90, 0, 0, 3, RED11);

    CreateShotA(6, 0, 0, 10);
    SetShotDataA(6, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(7, 0, 0, 10);
    SetShotDataA(7, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(8, 0, 0, 10);
    SetShotDataA(8, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(12, 0, 0, 10);
    SetShotDataA(12, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(13, 0, 0, 10);
    SetShotDataA(13, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(14, 0, 0, 10);
    SetShotDataA(14, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(18, 0, 0, 10);
    SetShotDataA(18, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(19, 0, 0, 10);
    SetShotDataA(19, 0, 3, -90, 0, 0, 3, RED11);
    CreateShotA(20, 0, 0, 10);
    SetShotDataA(20, 0, 3, -90, 0, 0, 3, RED11);

    AddShot(i*3+180, 1, 2, 20);
    AddShot(i*3+180, 1, 4, 100);
    AddShot(i*3+180, 1, 5, 180);
    AddShot(i*3+1020, 1, 9, 20);
    AddShot(i*3+1020, 1, 10, 100);
    AddShot(i*3+1020, 1, 11, 180);

    AddShot(i*3+330, 3, 6, 20);
    AddShot(i*3+330, 3, 7, 100);
    AddShot(i*3+330, 3, 8, 180);
    AddShot(i*3+1020, 3, 12, 20);
    AddShot(i*3+1020, 3, 13, 100);
    AddShot(i*3+1020, 3, 14, 180);
}

ascent(i in 1..100){
    CreateShotA(15, 0, 0, 10);
    SetShotDataA(15, 0, 3, 90, 0, 0, 3, RED12);
    CreateShotA(16, 0, 0, 10);
    SetShotDataA(16, 0, 3, 90, 0, 0, 3, RED12);
    CreateShotA(17, 0, 0, 10);
    SetShotDataA(17, 0, 3, 90, 0, 0, 3, RED12);

    CreateShotA(18, 0, 0, 10);
    SetShotDataA(18, 0, 3, -90, 0, 0, 3, RED12);
    CreateShotA(19, 0, 0, 10);
    SetShotDataA(19, 0, 3, -90, 0, 0, 3, RED12);
    CreateShotA(20, 0, 0, 10);
    SetShotDataA(20, 0, 3, -90, 0, 0, 3, RED12);

    AddShot(i*7+2240, 1, 15, 20);
    AddShot(i*7+2240, 1, 16, 100);
    AddShot(i*7+2240, 1, 17, 180);

    AddShot(i*7+2240, 3, 18, 20);
    AddShot(i*7+2240, 3, 19, 100);
    AddShot(i*7+2240, 3, 20, 180);
}

FireShot(1);
FireShot(3);
}


if(count == 1220){
SetShotDirectionType(PLAYER);
    CreateShot01(GetX, GetY, 8, 0, RED02, 0);

count=1215;
}


if(time==1290){
count=1221;
}


if(count == 1250){
SetShotDirectionType(PLAYER);
    CreateShot01(GetX, GetY, 8, 0, RED02, 0);

count=1245;
}


if(time==1380){
count=1251;
}


if(count == 1280){
SetShotDirectionType(PLAYER);
    CreateShot01(GetX, GetY, 8, 10, RED02, 0);
    CreateShot01(GetX, GetY, 8, -10, RED02, 0);
    CreateShot01(GetX, GetY, 8, 0, RED01, 0);

count=1275;
}


if(time==1501){
count=1281;
}


if(count==1380){
SetShotDirectionType(PLAYER);
    CreateShot01(GetX, GetY, 8, 30, RED02, 0);
    CreateShot01(GetX, GetY, 8, -30, RED02, 0);
    CreateShot01(GetX, GetY, 8, 0, RED01, 0);

count=1375;
}


if(time==2181){
count=1381;
}
count++;
time++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}

Re: Custom scripts by Frazer
« Reply #5 on: June 04, 2009, 05:01:10 AM »
Pretty cool. Could use a little dressing up, but it's surprisingly fun to play as is. Nice one.

Re: Custom scripts by Frazer
« Reply #6 on: June 28, 2009, 03:25:02 AM »
I messed around with a few more tests and along the way got some simplistic ideas for possible spell cards.



Clamping Oyster
Code: [Select]
#TouhouDanmakufu
#Title[Clamping Oyster]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = -60;
let count2 = -60;
let count3 = -60;

@Initialize {
SetLife(2000);
SetTimer(60);
SetScore(10000000);
SetInvincibility(90);

SetEnemyMarker(true);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Clamping Oyster", "", 0, 0, 0, 0);

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

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

if(count < 30 && count > 0) {
CreateShot01(GetClipMinX, rand(GetClipMinY, GetClipMaxY), rand(1, 2), rand(-60, 60), AQUA11, 10);
}

if(count > 60 && count < 90) {
CreateShot01(GetClipMaxX, rand(GetClipMinY, GetClipMaxY), rand(1, 2), rand(120, 240), GREEN11, 10);
}

if(count == 120) {

count=0;
}



if(count2 == 60){
SetMovePositionRandom01(50,20,5,GetClipMinX()+100,30,GetClipMaxX()-100,100);
}

if(count2 > 60){
CreateShot01(rand(GetClipMinX, GetClipMaxX), GetClipMinY, rand(1, 2), rand(30, 150), RED11, 10);
}

if(count2 == 90){

count2 = 0;
}



if(count3 > 70 && count3 < 100){
CreateShot01(GetX, GetY, 3, GetAngleToPlayer+40, ORANGE01, 10);
CreateShot01(GetX, GetY, 3, GetAngleToPlayer+20, BLUE12, 10);
CreateShot01(GetX, GetY, 3, GetAngleToPlayer, WHITE31, 10);
CreateShot01(GetX, GetY, 3, GetAngleToPlayer-20, BLUE12, 10);
CreateShot01(GetX, GetY, 3, GetAngleToPlayer-40, ORANGE01, 10);

}

if(count3 == 100){

count3 = 0;
}




count++;
count2++;
count3++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}


Distortion Sign "Four-Colored Border"
Code: [Select]
#TouhouDanmakufu
#Title[Distortion Sign "Four-colored Border"]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = 540;
let count2 = 0;
let delay = 0;
let delay2 = 0;
let delay3 = 0;
let delay4 = 0;
let minx = 0;
let minx2 = 0;
let miny = 0;
let miny2 = 0;

@Initialize {
SetLife(4000);
SetTimer(60);
SetScore(10000000);
SetInvincibility(120);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Distortion Sign"\""Four-Colored Border"\", "", 0, 0, 0, 0);

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

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

if(count == 600){
SetShotDirectionType(PLAYER);
loop(192){
CreateShotA(1, GetClipMinX, GetClipMinY+miny, delay);
SetShotDataA(1, delay, 0, rand(-180, 180), 0, 0, 0, PURPLE01);
SetShotDataA(1, delay+180, 5, NULL, 0, -0.075, 0, PURPLE01);
SetShotDataA(1, delay+240, 0, NULL, 0, 0.0025, 2, PURPLE01);

delay += 0.5;
miny += 3;

FireShot(1);
}



loop(224){
CreateShotA(2, GetClipMinX+minx, GetClipMinY, delay2);
SetShotDataA(2, delay2, 0, rand(-90, 90), 0, 0, 0, GREEN01);
SetShotDataA(2, delay2+180, 5, NULL, 0, -0.075, 0, GREEN01);
SetShotDataA(2, delay2+240, 0, NULL, 0, 0.0025, 2, GREEN01);

delay2 += 0.5;
minx += 3;

FireShot(2);
}



loop(192){
CreateShotA(3, GetClipMaxX, GetClipMaxY-miny2, delay3);
SetShotDataA(3, delay3, 0, rand(-90, 90), 0, 0, 0, AQUA01);
SetShotDataA(3, delay3+180, 5, NULL, 0, -0.075, 0, AQUA01);
SetShotDataA(3, delay3+240, 0, NULL, 0, 0.0025, 2, AQUA01);

delay3 += 0.5;
miny2 += 3;

FireShot(3);
}



loop(224){
CreateShotA(4, GetClipMaxX-minx2, GetClipMaxY, delay4);
SetShotDataA(4, delay4, 0, rand(-90, 90), 0, 0, 0, ORANGE01);
SetShotDataA(4, delay4+180, 5, NULL, 0, -0.075, 0, ORANGE01);
SetShotDataA(4, delay4+240, 0, NULL, 0, 0.0025, 2, ORANGE01);

delay4 += 0.5;
minx2 += 3;

FireShot(4);
}

delay = 0;
delay2 = 0;
delay3 = 0;
delay4 = 0;
minx = 0;
minx2 = 0;
miny = 0;
miny2 = 0;

count=0
}

count++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}


Trickster Sign "Indecisive Guide"
Code: [Select]
#TouhouDanmakufu
#Title[Trickster Sign "Indecisive Guide"]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = -60;
let a = 0;
let b = 0;
let c = 0;
let d = 0;

@Initialize {
SetLife(4000);
SetTimer(60);
SetScore(10000000);
SetInvincibility(120);

SetMovePosition01(GetCenterX, GetClipMinY + 120, 5);
CutIn(YOUMU, "Trickster Sign"\""Indecisive Guide"\", "", 0, 0, 0, 0);

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

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

if(count == 1) {
ascent( i in 1..34)
{
                CreateShotA(i, GetX, GetY, 10);
                SetShotDataA(i, 0, 3, i+a, 0, -0.05, 0, GREEN12);
                SetShotDataA(i, 60, 3, i+a-80, 0, -0.01, 0, GREEN12);
                SetShotDataA(i, 280, 2, i+a+100, -0.25, 0, 2, GREEN12);
                SetShotDirectionType(ABSOLUTE);
                FireShot(i);

a += 10;

}



ascent( j in 1..34)
{
                CreateShotA(j, GetX, GetY, 10);
                SetShotDataA(j, 0, 3, j+a, 0, -0.05, 0, GREEN12);
                SetShotDataA(j, 60, 3, j+a+80, 0, -0.01, 0, GREEN12);
                SetShotDataA(j, 280, 2, j+a-100, 0.25, 0, 2, GREEN12);
                SetShotDirectionType(ABSOLUTE);
                FireShot(j);

a += 10;

}



ascent( k in 1..400)
{
                CreateShotA(k, GetX, GetY, 10);
                SetShotDataA(k, 0, 3, k+c, 0, -0.05, 0, BLUE12);
                SetShotDataA(k, 60, 4.5, NULL, 0, -0.05, 0, BLUE12);
                SetShotDataA(k, 150+(k*0.25), 3, NULL, 0, -0.05, 1, BLUE12);
                SetShotDirectionType(ABSOLUTE);
                FireShot(k);


c += 187;

}
}



if(count >= 90 && count <= 220){
loop(2){
CreateShot01(GetX, GetY, 3, d, PURPLE12, 10);

d += 360/2;
d += 13.2;
}
}



if(count == 240){
SetMovePosition02(rand(50, 350), rand(50, 200), 30);
loop(15){
CreateLaser01(GetX, GetY, 5, b, 1500, 10, RED01, 0);
b += 360/15;
}
}

if(count == 270){
SetMovePosition02(rand(50, 350), rand(50, 200), 30);
loop(15){
CreateLaser01(GetX, GetY, 5, b, 1500, 10, RED01, 0);
b += 360/15;
}
}

if(count == 300){
SetMovePosition03(GetCenterX, GetClipMinY + 120, 10, 5);
loop(15){
CreateLaser01(GetX, GetY, 5, b, 1500, 10, RED01, 0);
b += 360/15;
}
}



if(count == 360){

count=0;
}
count++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}

Re: Custom scripts by Frazer
« Reply #7 on: June 28, 2009, 03:45:28 AM »
Clamping Oyster is pretty simple, not much to look at and no real pattern. Could be turned into a regular attack but it's not really the kind of thing you'd see for a spellcard. Meh playablility.

Four Colored Barrier is pretty awesome, I like the Cranberry Trap feel to it. However looping so many bullets in one frame (192... 224...) could be hazardous to some people's inferior computers. Keep this in mind: try not to loop more than 100 bullets a frame, if possible. A great way to prevent this is to split the action into two frames, spawning half the bullets one frame and half the bullets another frame, just subtracting one frame delay off the latter bullets. This effect can get pretty awesome if you start spawning little amounts of bullets each frame instead of them all at once (a really cool drawing effect), plus it's smoother to process on low grade computers yet still maintains aesthetic appeal.

Same issue for Indecisive Guide, 468 bullets in one frame could cause a noticable fps spike on most single core processors. Try to break up spawning the bullets into different frames. This spell has a few levels to it, which makes it instantly appealing. It's a good surprise the first time you play it, but realively simple once you see the pattern. I like it anyway, definately spellcard worthy, but it would make a nice regular attack too.

Re: Custom scripts by Frazer
« Reply #8 on: June 28, 2009, 06:26:46 AM »
Okay. I will take the advice into mind. Thank you.

DgBarca

  • Umineko fuck yeah
  • Spoilers ?
Re: Custom scripts by Frazer
« Reply #9 on: July 08, 2009, 02:29:34 PM »
I started to edit your script because I've never created a spell before, and I don't really read the tutorial...I was just bored...
But after...I read the tutorial...and it ended up with a totally different card.
Code: [Select]
#TouhouDanmakufu
#Title[Fate of the stoled script]
#Text[Test script]
#PlayLevel[Normal]
#Image[.\img\Scarletsign.png]
#BGM[.\bgm\th06_03.wav]
#Player[FREE]
#ScriptVersion[2]


script_enemy_main {

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

let count = 0;
let count2 = 0;
let count3 = 0;
let num = 36;
let num2 = 180;
let num3 = 210;
let a = 0;
let b = 180;
let c = 180;
let speed = 1;

@Initialize {
SetLife(4000);
SetTimer(99);
SetScore(10000000);

SetMovePosition02(225, 120, 60);
CutIn(YOUMU, "Stoled Card "\""First Danmakufu experiment"\", "", 0, 0, 0, 0);

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

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

SetShotAutoDeleteClip(200, 200, 200, 200);

if(count == 60){
loop(num){
CreateShotA(1, GetX, GetY, 0);
SetShotDataA(1, 0, speed+1, a, 0, -0, 0, WHITE03);
SetShotDataA(1, 120, speed-2, a+180, 1, 1, 0, YELLOW03);
SetShotDataA(1, 280, speed+1, a, 0, 0, 1, ORANGE03);

a += 10;

FireShot(1);
}
PlaySE(GetCurrentScriptDirectory~"sound\Shot1.wav")}
speed = 1;

if(count == 120){
loop(num2){
CreateShotA(2, GetX, GetY, 0);
SetShotDataA(2, 0, speed-3, b, -4, -0.15, 0, WHITE22);
SetShotDataA(2, 180, speed-2.1, b+180, 0.05, 0.01, 6, RED22);
SetShotDataA(2, 180, speed-3, NULL, -0, 0, 6, RED22);

b -= 10;
speed += 0.01;

FireShot(2);
}
speed = 1;

if(count == 120){
PlaySE(GetCurrentScriptDirectory~"sound\BulletWave.wav")}
}

if(count == 180){
loop(num3){
CreateShotA(3, GetX, GetY, 0);
SetShotDataA(3, 0, speed, c, -3, -0.15, 0, WHITE11);
SetShotDataA(3, 180, speed-2, c+180, -0.09, 0, 3, YELLOW11);
SetShotDataA(3, 180, speed, NULL, 0, 1, 4, YELLOW11);

c += 10;
speed += 0.008;

FireShot(3);
}
if(count == 180){
PlaySE(GetCurrentScriptDirectory~"sound\shot4.wav")}
speed = 1;

count=0
}


if(count2 == 60){
SetMovePositionRandom01(50,20,5,GetClipMinX()+100,30,GetClipMaxX()-100,100);

count2 = 0;
}


count++;
count2++;
}


@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}

Now I can create card myself, I will not stole stuff anymore, but this helped me a lot, thanks.

EDIT : Hu ! What I have done ?  How did I manage to do that ?

Update : Lunatic mode WTF

[21:16] <redacted> dgbarca makes great work
[21:16] <redacted> i hope he'll make a full game once

Re: Custom scripts by Frazer
« Reply #10 on: July 28, 2009, 10:36:45 AM »
I played around with Danmakufu some more and made some more attacks and spells. I would not exactly know what difficulty levels they would be classified under...



Frostbite "Ribbon of a Wondrous Child"
Code: [Select]
#TouhouDanmakufu
#Title[Frostbite "Ribbon of a Wondrous Child"]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = 300;
let a=0;
let color=BLUE03;
let color2=BLUE04;

@Initialize {
SetLife(4000);
SetTimer(60);
SetScore(10000000);
SetInvincibility(120);

SetEnemyMarker(true);

SetMovePosition01(GetCenterX, GetClipMinY + 120, 5);
CutIn(YOUMU, "Frostbite"\""Ribbon of a Wondrous Child"\", "", 0, 0, 0, 0);

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

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

if(count == 360) {
CreateShotA(1, GetClipMinX-50, rand(GetClipMinY, GetClipMaxY - 50), 0);
SetShotDataA(1, 0, 3, 0, 0.5, 0, 3, color);

ascent(i in 1..75){
      CreateShotA(2, 0, 0, 0);
      SetShotDataA(2, 0, 2, a, 0, -0.01, 0, color2);
      SetShotDataA(2, 300, NULL, a, 0, -0.03, -3, color2);

      a += 11;

      AddShot(i*5, 1, 2, 0);
}
FireShot(1);
}



if(count == 420) {
CreateShotA(1, GetClipMaxX+50, rand(GetClipMinY + 50, GetClipMaxY), 0);
SetShotDataA(1, 0, 3, 180, 0.5, 0, 3, color);

ascent(i in 1..75){
      CreateShotA(2, 0, 0, 0);
      SetShotDataA(2, 0, 2, a, 0, -0.01, 0, color2);
      SetShotDataA(2, 300, NULL, a, 0, -0.03, -3, color2);

      a += 11;

      AddShot(i*5, 1, 2, 0);
}
FireShot(1);
}



if(count == 480) {
CreateShotA(1, rand(GetClipMinX + 50, GetClipMaxX), GetClipMinY-50, 0);
SetShotDataA(1, 0, 3, 90, 0.5, 0, 3, color);

ascent(i in 1..75){
      CreateShotA(2, 0, 0, 0);
      SetShotDataA(2, 0, 2, a, 0, -0.01, 0, color2);
      SetShotDataA(2, 300, NULL, a, 0, -0.03, -3, color2);

      a += 11;

      AddShot(i*5, 1, 2, 0);
}
FireShot(1);
}



if(count == 540) {
CreateShotA(1, rand(GetClipMinX, GetClipMaxX - 50), GetClipMaxY+50, 0);
SetShotDataA(1, 0, 3, 270, 0.5, 0, 3, color);

ascent(i in 1..75){
      CreateShotA(2, 0, 0, 0);
      SetShotDataA(2, 0, 2, a, 0, -0.01, 0, color2);
      SetShotDataA(2, 300, NULL, a, 0, -0.03, -3, color2);

      a += 11;

      AddShot(i*5, 1, 2, 0);
}
FireShot(1);



count=0
}
count++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}




Norlang's Raging Whirlpool
Code: [Select]
#TouhouDanmakufu
#Title[Norlang's Raging Whirlpool]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = -60;
let count2 = 0;
let count3 = 0;
let a = 0;
let b = 0;
let c = 2;
let start= GetCenterX;

@Initialize {
SetLife(15000);
SetTimer(150);
SetScore(10000000);
SetInvincibility(120);

SetEnemyMarker(true);

SetMovePosition02(GetCenterX, GetClipMinY + 120, 60);
CutIn(YOUMU, "Norlang's Raging Whirlpool", "", 0, 0, 0, 0);

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

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

if(count > 0 && count < 180) {
loop(2){
CreateShot01(start + rand(-100, 100), GetClipMinY, rand(2, 5), rand(87, 93), BLUE04, 20);
}
}


if(count == 420){
start = rand_int(GetClipMinX, GetClipMaxX);

count=0
}



if(count2 == 180){
SetMovePosition02(GetCenterX, GetCenterY, 60);
}

if(count2 == 240){
loop(c){
CreateShot01(GetX, GetY, 2, (a*72)+b, AQUA12, 30);
a += 360/5;
a++;

}



if(GetEnemyLife < 10000 && GetEnemyLife > 7000){
c = 2;
}

if(GetEnemyLife < 7000){
c = 4;
}


count2 = 239
}



if(count3 == 420 && GetEnemyLife > 7000){
SetMovePosition02(rand_int(GetClipMinX + 100, GetClipMaxX - 100), rand_int(GetClipMinY + 100, GetClipMaxY - 300), 120);

count3 = 240
}

if(count3 == 420 && GetEnemyLife < 7000 && GetEnemyLife > 4000){
SetMovePosition02(rand_int(GetClipMinX + 100, GetClipMaxX - 100), rand_int(GetClipMinY + 10, GetClipMaxY - 300), 30);

count3 = 390
}


if(count3 == 420 && GetEnemyLife < 4000){
SetMovePosition02(rand_int(GetClipMinX + 100, GetClipMaxX - 100), rand_int(GetClipMinY + 10, GetClipMaxY - 300), 15);

count3 = 405
}

b = b + (0.0018*a);


count++;
count2++;
count3++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}




Misery Sign "Mourning a Lost Cause"
Code: [Select]
#TouhouDanmakufu
#Title[Misery Sign "Mourning a Lost Cause"]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = 0;
let count2 = -1;
let count3 = -60;
let a=90;
let b=90;

@Initialize {
SetLife(3000);
SetTimer(60);
SetScore(10000000);
SetInvincibility(120);

SetEnemyMarker(true);

SetMovePosition01(GetCenterX, GetClipMinY + 120, 8);
CutIn(YOUMU, "Misery Sign"\""Mourning a Lost Cause"\", "", 0, 0, 0, 0);

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

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

if(count == 60) {
CreateShot01(GetX, GetY, 3, 90, PURPLE32, 10);


count2 = rand_int(0, 1);

count=0
}



if(count2 == 0){
loop(90){
CreateShot01(GetX, GetY, 2, a, PURPLE12, 10);

a += 2;
}
a = 90;
count2 = -1;
}

if(count2 == 1){
loop(90){
CreateShot01(GetX, GetY, 2, b, PURPLE12, 10);

b -= 2;
}
b = 90;
count2 = -1;
}




if(count3 == 120){
SetShotDirectionType(PLAYER);

CreateShotA(1, GetX, GetY, 10);
SetShotDataA(1, 0, 5, 0, 0, -0.05, 0, BLUE03);
SetShotDataA(1, 100, NULL, 0, 0, 0.1, 3, BLUE03);

CreateShotA(2, GetX+20, GetY, 10);
SetShotDataA(2, 10, 5, 0, 0, -0.05, 0, BLUE03);
SetShotDataA(2, 120, NULL, 0, 0, 0.15, 3, BLUE03);

CreateShotA(3, GetX-20, GetY, 10);
SetShotDataA(3, 10, 5, 0, 0, -0.05, 0, BLUE03);
SetShotDataA(3, 120, NULL, 0, 0, 0.15, 3, BLUE03);

CreateShotA(4, GetX+40, GetY, 10);
SetShotDataA(4, 20, 5, 0, 0, -0.05, 0, BLUE03);
SetShotDataA(4, 140, NULL, 0, 0, 0.2, 3, BLUE03);

CreateShotA(5, GetX-40, GetY, 10);
SetShotDataA(5, 20, 5, 0, 0, -0.05, 0, BLUE03);
SetShotDataA(5, 140, NULL, 0, 0, 0.2, 3, BLUE03);


SetShotDirectionType(ABSOLUTE);

FireShot(1);
FireShot(2);
FireShot(3);
FireShot(4);
FireShot(5);

count3 = 0;
}



count++;
count3++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}




Practical Eclipse (more of a regular attack I would say...)
Code: [Select]
#TouhouDanmakufu
#Title[Practical Eclipse]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = -60;
let count2 = 0;
let x = 30;
let y = 20;
let a = 0;
let b = 0;

@Initialize {
SetLife(4000);
SetTimer(60);
SetScore(10000000);
SetInvincibility(120);
LoadUserShotData(GetCurrentScriptDirectory~"UserShotData.txt");

SetEnemyMarker(true);

SetMovePosition02(GetCenterX, GetCenterY - 120, 60);
CutIn(YOUMU, "Practical Eclipse", "", 0, 0, 0, 0);

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

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

if(count == 2) {

SetShotDirectionType(PLAYER);

CreateShotA(1, x, y, 10);
SetShotDataA(1, 0, 0, 0, 0, 0, 0, GREEN04);
SetShotDataA(1, 11, 0, NULL, 0, 0.025, 2, GREEN04);


if(x >= 30 && y <= 20){
x += 10;
y += 0;
}

if(x >= 410 && y >= 20){
x += 0;
y += 10;
}

if(x <= 410 && y >= 460){
x -= 10;
y += 0;
}

if(x <= 30 && y <= 460){
x += 0;
y -= 10;
}


FireShot(1);


count=0
}




if(count2 >= 120){
SetShotDirectionType(ABSOLUTE);

CreateShot01(GetX, GetY, 2, b+180, GREEN31, 10);
CreateShot01(GetX, GetY, 2, a, GREEN31, 10);

a += 190.27;



b -= 190.27;
}


if(count2 == 240){
SetMovePosition03(rand(GetClipMinX + 50, GetClipMaxX - 50), rand(GetClipMinY + 50, GetCenterY), 10, 5);



count2 = 120;
}
count++;
count2++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}




Chaos Sign "Ultraviolet Insanity"
Code: [Select]
#TouhouDanmakufu
#Title[Chaos Sign "Ultraviolet Insanity"]
#Text[Test script]
#Player[FREE]
#ScriptVersion[2]

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

let count = 0;
let a = rand(0, 360);
let b = rand(0, 360);

@Initialize {
SetLife(1);
SetTimer(60);
SetScore(10000000);
SetDamageRate(0, 0);
SetDurableSpellCard;

SetEnemyMarker(true);

SetMovePosition01(GetCenterX, GetClipMinY + 120, 5);
CutIn(YOUMU, "Chaos Sign"\""Ultraviolet Insanity"\", "", 0, 0, 0, 0);

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

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

if(count == 120){
SetMovePosition03(GetClipMaxX - 50, 100, 10, 5);
}

if(count == 180){
CreateLaserA(1, GetX, GetY, 500, 20, RED01, 60);
CreateLaserA(2, GetX - 80, GetY, 500, 20, RED01, 60);
CreateLaserA(3, GetX + 80, GetY, 500, 20, RED01, 60);

SetLaserDataA(1, 0, 90, 0, 0, 0, 0);

SetLaserDataA(2, 0, 105, -1, 0, 0, 0);
SetLaserDataA(2, 45, NULL, 0, 0, 0, 0);

SetLaserDataA(3, 0, 75, 1, 0, 0, 0);
SetLaserDataA(3, 45, NULL, 0, 0, 0, 0);


FireShot(1);
FireShot(2);
FireShot(3);
}

if(count == 300){
SetMovePosition03(GetCenterX, 50, 10, 5);
}

if(count == 360){
CreateLaserA(1, GetX, GetY, 500, 20, RED01, 60);
CreateLaserA(2, GetX - 100, GetY, 500, 20, RED01, 60);
CreateLaserA(3, GetX + 100, GetY, 500, 20, RED01, 60);

SetLaserDataA(1, 0, 90, 0, 0, 0, 0);

SetLaserDataA(2, 0, 105, -1, 0, 0, 0);
SetLaserDataA(2, 45, NULL, 0, 0, 0, 0);

SetLaserDataA(3, 0, 75, 1, 0, 0, 0);
SetLaserDataA(3, 45, NULL, 0, 0, 0, 0);


FireShot(1);
FireShot(2);
FireShot(3);
}

if(count == 480){
SetMovePosition03(GetClipMinX + 50, 100, 10, 5);
}

if(count == 540){
CreateLaserA(1, GetX, GetY, 500, 20, RED01, 60);
CreateLaserA(2, GetX - 80, GetY, 500, 20, RED01, 60);
CreateLaserA(3, GetX + 80, GetY, 500, 20, RED01, 60);

SetLaserDataA(1, 0, 90, 0, 0, 0, 0);

SetLaserDataA(2, 0, 105, -1, 0, 0, 0);
SetLaserDataA(2, 45, NULL, 0, 0, 0, 0);

SetLaserDataA(3, 0, 75, 1, 0, 0, 0);
SetLaserDataA(3, 45, NULL, 0, 0, 0, 0);


FireShot(1);
FireShot(2);
FireShot(3);
}

if(count == 660){
SetMovePosition03(GetCenterX, 100, 10, 5);
}

if(count == 720){
CreateShotA(1, GetX, GetY, 0);
SetShotDataA(1, 0, 2.75, 25, 0, -0.05, 0, BLUE03);
SetShotDataA(1, 560, 0, 90, 0, 0.025, 5, BLUE03);

CreateShotA(2, GetX, GetY, 0);
SetShotDataA(2, 0, 2.75, 155, 0, -0.05, 0, BLUE03);
SetShotDataA(2, 560, 0, 90, 0, 0.025, 5, BLUE03);



ascent(i in 1..100){
      loop(3){
      CreateShotA(3, 0, 0, 0);
      SetShotDataA(3, 0, 2, a, 0, 0, 2, BLUE12);

      CreateShotA(4, 0, 0, 0);
      SetShotDataA(4, 0, 2, b, 0, 0, 2, BLUE12);

      a += 360/3;
      b += 360/3;
      a += 183;
      b -= 183;


      AddShot(i*5+120, 1, 3, 0);
      AddShot(i*5+120, 2, 4, 0);
}
}


FireShot(1);
FireShot(2);
}



if(count == 1460 || count == 1520){
SetMovePosition03(rand(GetClipMinX + 50, GetClipMaxX - 50), rand(GetClipMinY + 50, GetClipMinY + 100), 10, 5);
CreateLaser01(GetX, GetY, 5, GetAngleToPlayer, 2000, 20, RED01, 0);
}

if(count == 1580){
CreateLaser01(GetX, GetY, 5, GetAngleToPlayer, 2000, 20, RED01, 0);
}



if(count >= 1700 && count <= 1880){
CreateShot01(GetX, GetY, 5, GetAngleToPlayer, GREEN31, 5);
CreateShot01(GetX, GetY, 5, GetAngleToPlayer + 10, GREEN31, 5);
CreateShot01(GetX, GetY, 5, GetAngleToPlayer - 10, GREEN31, 5);
}

if(count == 1700 || count == 1745 || count == 1790 || count == 1835){
SetMovePosition03(rand(GetClipMinX + 50, GetClipMaxX - 50), rand(GetClipMinY + 50, GetClipMinY + 100), 10, 5);
}

if(count == 1880){
SetMovePosition03(GetCenterX, GetClipMinY + 100, 10, 5);
}



if(count == 2000){
CreateLaserB(1, 200, 20, RED01, 60);
SetLaserDataB(1, 0, 0, 0, 0, 0, 0, 180, 2);
SetLaserDataB(1, 300, 0, 0, 0, 0, 0, NULL, 7);


ascent(i in 1..100){
      CreateShotA(2, 0, 0, 5);
      SetShotDataA(2, 0, 2, 90, 0, 0, 2, RED12);
      CreateShotA(3, 0, 0, 5);
      SetShotDataA(3, 0, 2, 270, 0, 0, 2, RED12);

      AddShot(i*2 + 300, 1, 2, 100);
      AddShot(i*2 + 300, 1, 3, 100);
}

SetShotKillTime(1, 600);

FireShot(1);
}

if(count == 2180){
SetMovePosition03(GetCenterX, GetClipMaxY - 100, 10, 5);
}

if(count == 2600){
SetMovePosition03(GetCenterX, GetClipMinY + 100, 10, 5);
}

if(count == 2720){
CreateLaser01(GetClipMinX, rand(GetClipMinY, GetClipMaxY), 5, 0, 500, 20, RED01, 0);
}

if(count == 2730){
CreateLaser01(rand(GetClipMinX, GetClipMaxX), GetClipMinY, 5, 90, 500, 20, RED01, 0);
}

if(count == 2740){
CreateLaser01(GetClipMaxX, rand(GetClipMinY, GetClipMaxY), 5, 180, 500, 20, RED01, 0);
}

if(count == 2750){
CreateLaser01(rand(GetClipMinX, GetClipMaxX), GetClipMaxY, 5, 270, 500, 20, RED01, 0);

count = 2710
}







count++;
}

@DrawLoop {
DrawGraphic(GetX, GetY);
}

@Finalize {
DeleteGraphic(ImgBoss);
}
}

NOTE: The second wave can be extremely painful if you do not know what to do, so here is a strategy: Right after the blue bubbles fall off of the screen, move very close to the side pits of one of the laser teepees, then as the boss fires lasers at you, move very barely to the side, just enough to avoid the laser, but not enough to block yourself. Then do the same with the boss's green kunai assault: move in very small steps to the side, making sure you have enough space to survive the three second assault.
« Last Edit: July 28, 2009, 10:44:07 AM by Frazer »