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"
#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
#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"
#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...)
#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"
#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.