Anyone remember my Miracle Matter recreation in Danmakufu? I don't remember if I ever showed it around here, but I made one. It was fun to play, but kinda difficult for me! Still fun, though. Well, I recently had an idea...
Download it hereIt's in that .zip. Miraculous Insanity is just a barely-modified ExRumia Stage script to change up the Enemy and Boss that appear. The "Enemy", by the way, is FOUR copies of my Miracle Matter script! If you can somehow pass my miraculous guards, you will face the true enemy: Miraculous Armageddon! He is pretty much a remixed Miracle Matter, just with different attacks. Some may be harder than the originals, some may be easier, but if you're lucky, you just may find a new Form! Blizzard, the Ice Form. Miraculous Armageddon will blast 3 small AQUA05 bullets at you while the REAL danger comes from the left- a whole bunch of BLUE11 bullets! They remind me of a snowstorm, but a blizzard would probably be faster. Though, a bit faster, and it might become absolutely UNBEATABLE. Well, without bombing the heck outta the form.
Also, Miraculous Armageddon is so crazy, he moves about randomly in all forms EXCEPT Heatwave, and not only can he be harmed in Normal form, which is Silvermine, he doesn't require you to break all his other forms to kill him! This is both helpful...and extremely dangerous. If you find you're having trouble with one form, you can't get rid of it like you can Miracle Matter- you can only hope it doesn't return! Oh yeah, speaking of Miracle Matter, I gave it an attack for its Normal form. Spin.
So uhh... Enjoy. Also, keep in mind that this wasn't meant to be BEATABLE or anything- I just made it for fun, and thought I'd share it with you all! ...and I cannot stress the "wasn't meant to be beatable" part enough...
Just try beating the four Miracle Matters without getting hit or bombing your way through them... I couldn't, but of course, I myself stink at Lunatic stuff... I'll give you some cookies if you can show me that you did it, though.
EDIT: I have a new script! This will (hopefully) be my Box of Stuff now... Anyways...
Pong...with a twist!!Seriously, play it. Some things to keep in mind when you play:
1: Your Y position gets locked the minute Yukari pops up on-screen, and no matter what, you CAN'T move up and down. Fortunately for you, Yukari's fair enough to abide by the same rule- she only moves left and right, same as you.
2: What she WON'T abide by, though, is a straight game of Pong! Oh no, Yukari's got gaps at her disposal- why WOULDN'T she use them to her advantage?! To this end, she causes stars to pop up from below you while you play. Watch out for those stars!
3: Did I mention she plays with a rigged ball? Yeah, it's true! It's rigged in two ways. One, the ball ALWAYS goes towards her, NEVER you, and two, every time the ball hits the sides, 20 stars shoot out. Find a hole, and fast! You can't move vertically, so it's easy to get trapped!
4: Genuine warning here: The Collision_Obj_Obj thing is a little screwy, as it's easy to glitch up the ball. If you get it stuck to your paddle, get it off ASAP, or else it WILL shoot behind you and make you die. (That is what happens when you miss the ball, you die.) However, this can be used to your advantage! Yukari's cheating- why not cheat yourself, too? The ball speeds up a very tiny bit every time it bounces off both players' paddles. It's not very noticable until you either play for a while or get the ball stuck to your paddle. If this happens, release it towards Yukari ASAP- if you let it stick on long enough, she can't get to the ball fast enough to avoid missing it! (I tried making code to fix this, but it didn't do ANYTHING...)
That said, enjoy my game of Pong.
Oops, I forgot one thing! When the timer gets below 30, or you have at least 2 points out of the required 4 to win, Yukari launches a BIGGER ball that starts off slightly faster. ...Not much faster, sadly, though the speed increase is VERY noticable to me... ...Still not much faster, just one point.
Okay, NOW enjoy.
EDIT: Miracle Matter script updated, along with a few files in the MIRACULOUS INSANITY set.
Download the update here.If you only want the Miracle Matter script:
#TouhouDanmakufu
#Title[Copy Sign "Miracle Matter"]
#Text[A unique spellcard created in the style of the final boss of Kirby 64, Miracle Matter. Invincible when not in an attack form, and each form has its own amount of life. Defeat them all to stop the spellcard!]
#BackGround[Default]
#Player[FREE]
#ScriptVersion[2]
script_enemy_main
{
//#include_function "lib\SHOT_REPLACE\shot_replace.dnh"
let BossImage = GetCurrentScriptDirectory ~ "miraclecube.PNG";
let BossCutIn = GetCurrentScriptDirectory ~ "miraclecubecutin.png";
let frame = -60;
let frame2 = 0;
let frame3 = -60;
let frame4 = 0;
let Angle = 0;
let Angle2 = 0;
let Move = -60;
let ShotSFX = GetCurrentScriptDirectory ~ "shot.wav";
let LaserSFX = GetCurrentScriptDirectory ~ "laser.wav";
let Form = 0;
let NdleLfe = 460;//460
let SprkLfe = 460;//460
let FireLfe = 320;//320
let CutrLfe = 460;//460
let IceLife = 100;
let Forms = [0, 1, 2, 3, 4];
let timeoffs = 0;
let laser = 0;
let laserlife = 0;
let lasermove = -22.5;
let shot = 1;
let specshot = [NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL];
let shotcreate = true;
let shotval = 0;
let CurForm = [" NORMAL", " NEEDLE", " SPARK", " FIRE", " CUTTER", " ICE"];
let InPosition = false;
let LaserExist = false;
let NextForm = 0;
let FormsAlive = 4;
let string = "Forms left: ";
let anim_frame = 0;
let Offset = 0;
task Spark(g, a, s, d, v)
{
shotcreate = false;
specshot[v] = Obj_Create(OBJ_SHOT);
ObjShot_SetGraphic(specshot[v], g);
Obj_SetAngle(specshot[v], a);
Obj_SetSpeed(specshot[v], s);
Obj_SetPosition(specshot[v], GetX, GetY);
Obj_SetCollisionToPlayer(specshot[v], true);
while(! Obj_BeDeleted(specshot[v]))
{
if(Obj_GetX(specshot[v]) <= GetClipMinX() || Obj_GetX(specshot[v]) >= GetClipMaxX())
{
Obj_SetAngle(specshot[v], 180-Obj_GetAngle(specshot[v]));
}
if(Obj_GetY(specshot[v]) <= GetClipMinY() || Obj_GetY(specshot[v]) >= GetClipMaxY())
{
Obj_SetAngle(specshot[v], 360-Obj_GetAngle(specshot[v]));
}
yield;
}
}
@Initialize
{
//shotinit;
LoadGraphic(BossImage);
SetTimer(350);
SetLife(300);
SetDamageRate(0,0);
SetInvincibility(30);
CutIn(YOUMU, "Copy Sign "\""Miracle Matter"\", BossCutIn, 5, 92, 324, 392);
SetScore(350000);
SetEnemyMarker(true);
SetMovePosition02(GetCenterX,GetCenterY,60);
}
@MainLoop
{
LoadGraphic(BossImage);
anim_frame++;
SetCollisionA(GetX(),GetY(),32);
SetCollisionB(GetX(),GetY(),24);
if(frame == 0)
{
if(Form == 0)
{
SetMovePosition02(GetCenterX,GetCenterY,20);
if(GetLife != 300)
{
SetLife(300);
}
SetDamageRate(0,0);
}
if(Form == 1)
{
SetLife(NdleLfe);
SetDamageRate(12,5);
}
if(Form == 2)
{
SetLife(SprkLfe);
SetDamageRate(10,10);
}
if(Form == 3)
{
SetLife(FireLfe);
SetDamageRate(10,10);
}
if(Form == 4)
{
SetLife(CutrLfe);
SetDamageRate(10,10);
}
if(Form == 5)
{
SetLife(IceLife);
SetDamageRate(10,10);
}
if(Form == 6)
{
SetLife(IceLife);
SetDamageRate(10,10);
}
if(Form == 7)
{
SetLife(IceLife);
SetDamageRate(10,10);
}
if(Form == 8)
{
SetLife(IceLife);
SetDamageRate(10,10);
}
}
if(frame > 0 && frame < 650)
{
if(Form == 0)
{
if(Forms[1] == 0 && Forms[2] == 0 && Forms[3] == 0 && Forms[4] == 0)
{
SetLife(0);
}
}
if(frame2 == 0)
{
if(Form == 0)
{
if(Forms[1] != 0 || Forms[2] != 0 || Forms[3] != 0 || Forms[4] != 0)
{
let a = 0;
loop(6)
{
CreateShotA(a, GetX, GetY, 5);
SetShotDataA(a, 0, 5, Angle+Offset, 0, 0, 0, PURPLE21);
SetShotDataA(a, 1, NULL, NULL, 1, 0, 0, PURPLE21);
FireShot(a);
a++;
Angle += 60;
Offset += 7;
}
frame2 = -5;
PlaySE(ShotSFX);
}
}
if(Form == 1)
{
if(laserlife <= 0)
{
laserlife = 60;
lasermove += 22.5;
}
if(laserlife > 0)
{
if(laserlife > 52)
{
CreateLaserB(laser, 300, 30, ORANGE01, 30);
SetLaserDataB(laser, 0, 0, 25, 0, Angle+lasermove, 0, Angle+lasermove, 0);
SetShotKillTime(laser, 180);
FireShot(laser);
PlaySE(LaserSFX);
Angle += 45;
}
laserlife--;
}
CreateShotA(shot, GetX, GetY, 10);
SetShotDataA(shot, 0, 5, Angle2, 0.5, 0, 0, ORANGE21);
SetShotDataA(shot, 50, 2, Angle2+180, 0, 0, 0, ORANGE21);
FireShot(shot);
shot++;
CreateShotA(shot, GetX, GetY, 10);
SetShotDataA(shot, 0, 5, Angle2+180, -0.5, 0, 0, ORANGE21);
SetShotDataA(shot, 50, 2, Angle2, 0, 0, 0, ORANGE21);
FireShot(shot);
shot--;
Angle2 += 13;
frame2 = -5;
PlaySE(ShotSFX);
if(GetLife <= 20)
{
if(GetLife <= 0)
{
SetLife = 10;
}
SetDamageRate(0,0);
Forms[1] = 0;
DeleteEnemyShot(ALL);
NextForm = 0;
Form = 0;
Concentration01(30);
frame = -1;
FormsAlive--;
}
}
if(Form == 2)
{
CreateLaser01(GetX, GetY, 3, Angle, 92, 10, YELLOW01, 0);
PlaySE(LaserSFX);
Angle += 34;
frame2 = -3;
if(GetLife <= 20)
{
if(GetLife <= 0)
{
SetLife = 10;
}
SetDamageRate(0,0);
Forms[2] = 0;
DeleteEnemyShot(ALL);
NextForm = 0;
Form = 0;
Concentration01(30);
frame = -1;
FormsAlive--;
}
}
if(Form == 3)
{
shot = 2;
if(InPosition)
{
Angle = GetAngleToPlayer;
CreateLaserB(laser, 300, 40, RED01, 20);
SetLaserDataB(laser, 0, 0, 15, 0, Angle, 0, Angle, 0);
SetShotKillTime(laser, 200);
CreateLaserB(laser+1, 300, 40, RED01, 20);
SetLaserDataB(laser+1, 0, 0, 15, 0, Angle+180, 0, Angle+180, 0);
SetShotKillTime(laser+1, 200);
FireShot(laser);
FireShot(laser+1);
PlaySE(LaserSFX);
InPosition = false;
}
CreateShot01(GetX, GetY, 4, Angle2, RED04, 5);
CreateShot01(GetX, GetY, 4, Angle2-10, RED04, 5);
CreateShot01(GetX, GetY, 4, Angle2+10, RED04, 5);
CreateShot01(GetX, GetY-20, 4, Angle2-5, RED04, 5);
CreateShot01(GetX, GetY-20, 4, Angle2+5, RED04, 5);
CreateShot01(GetX, GetY-40, 4, Angle2, RED04, 5);
Angle2 += 53;
frame2 = -5;
PlaySE(ShotSFX);
if(GetLife <= 20)
{
if(GetLife <= 0)
{
SetLife = 10;
}
SetDamageRate(0,0);
Forms[3] = 0;
DeleteEnemyShot(ALL);
NextForm = 0;
Form = 0;
Concentration01(30);
frame = -1;
FormsAlive--;
}
}
if(Form == 4)
{
shot = 0;
laser = 4;
if(Angle2 < 18)
{
CreateLaserB(laser, 150, 20, GREEN05, 0);
SetLaserDataB(laser, 0, 0, 0, 0, 0, 2, 0, 2);
PlaySE(LaserSFX);
Angle2++;
FireShot(laser);
}
if(frame4 >= 0)
{
if(Angle2 >= 18)
{
SetMovePosition01(GetPlayerX, GetPlayerY, 1);
}
frame4 = -1;
}
frame2 = -10;
if(GetLife <= 20)
{
if(GetLife <= 0)
{
SetLife = 10;
}
SetDamageRate(0,0);
Forms[4] = 0;
DeleteEnemyShot(ALL);
NextForm = 0;
Form = 0;
Concentration01(30);
frame = -1;
FormsAlive--;
}
}
if(Form == 5)
{
Angle += 13;
frame2 = -20;
if(GetLife <= 20)
{
if(GetLife <= 0)
{
SetLife = 10;
}
SetDamageRate(0,0);
Forms[1] = 0;
DeleteEnemyShot(ALL);
NextForm = 0;
Form = 0;
Concentration01(30);
frame = -1;
FormsAlive--;
}
}
}
if(frame3 >= 0)
{
if(Form == 2)
{
if(shotval < 12)
{
alternative(shotval)
case(1)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 1);
PlaySE(ShotSFX);
}
case(2)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 2);
PlaySE(ShotSFX);
}
case(3)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 3);
PlaySE(ShotSFX);
}
case(4)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 4);
PlaySE(ShotSFX);
}
case(5)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 5);
PlaySE(ShotSFX);
}
case(6)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 6);
PlaySE(ShotSFX);
}
case(7)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 7);
PlaySE(ShotSFX);
}
case(8)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 8);
PlaySE(ShotSFX);
}
case(9)
{
Spark(YELLOW02, GetAngleToPlayer, 5, 10, 9);
PlaySE(ShotSFX);
}
shotval++;
}
frame3 = -40;
}
if(Form == 3)
{
if(!InPosition && frame3 == 0)
{
SetMovePosition02(GetPlayerX, GetY, 15);
}
if(frame3 == 15)
{
InPosition = true;
}
if(frame3 == 240)
{
frame3 = -1;
}
}
if(Form == 4)
{
if(frame3 == 60)
{
PlaySE(ShotSFX);
loop(32)
{
CreateShot01(GetX, GetY, 3, Angle, GREEN32, 10);
Angle += 11.25;
}
Angle = 0;
loop(10)
{
CreateShot01(GetX, GetY, 4, Angle, PURPLE31, 10);
CreateShot01(GetX, GetY, 4, Angle+10, PURPLE31, 10);
CreateShot01(GetX, GetY, 4, Angle+20, PURPLE31, 10);
Angle += 36;
}
frame3 = -1;
}
}
}
frame2++;
frame3++;
frame4++;
}
if(frame == 600 || (Form == 0 && frame == 130))
{
Concentration01(50);
if(Form == 0)
{
NextForm = Forms[rand_int(1, 4)];
while(NextForm == 0)
{
NextForm = Forms[rand_int(1, 4)];
yield;
}
}
else{NextForm = 0;}
}
if(frame == 650 || (Form == 0 && frame == 180))
{
if(Form == 0)
{
Form = NextForm;
if(Form == 4)
{
SetMovePosition02(GetCenterX,GetCenterY-80,15);
frame = -20;
}
else{frame = -1;}
if(Form == 0)
{
frame = 179;
}
}
else if(Form == 1)
{
NdleLfe = GetLife;
frame = -1;
Form = 0;
}
else if(Form == 2)
{
SprkLfe = GetLife;
frame = -1;
Form = 0;
}
else if(Form == 3)
{
FireLfe = GetLife;
frame = -1;
Form = 0;
}
else if(Form == 4)
{
CutrLfe = GetLife;
frame = -11;
Form = 0;
}
else if(Form == 5)
{
IceLife = GetLife;
frame = -1;
Form = 0;
}
else if(Form == 6)
{
IceLife = GetLife;
frame = -1;
Form = 0;
}
else if(Form == 7)
{
IceLife = GetLife;
frame = -1;
Form = 0;
}
else if(Form == 8)
{
IceLife = GetLife;
frame = -1;
Form = 0;
}
timeoffs = 0;
Angle = 0;
Angle2 = 0;
shot = 1;
laser = 0;
DeleteEnemyShot(ALL);
shotval = 0;
frame2 = 0;
frame3 = 0;
frame4 = 0;
laser = 0;
laserlife = 0;
}
frame++;
Move++;
yield;
}
@DrawLoop
{
SetTexture(BossImage);
if(anim_frame >= 0 && anim_frame < 3)
{
SetGraphicRect(0,0,64,60);
}
if(anim_frame >= 3 && anim_frame < 6)
{
SetGraphicRect(64,0,127,60);
}
if(anim_frame >= 6 && anim_frame < 9)
{
SetGraphicRect(127,0,190,60);
}
if(anim_frame >= 9 && anim_frame < 12)
{
SetGraphicRect(190,0,253,60);
}
if(anim_frame == 12)
{
anim_frame = 0;
}
DrawGraphic(GetX, GetY);
DrawText("Current form:" ~ CurForm[NextForm], 50, 50, 17, 255);
DrawText(ToString(FormsAlive), 50, 70, 17, 255);
}
@Finalize
{
DeleteGraphic(BossImage);
}
}
(Yes, I was using the Shot Replace script...though I hate its [X]21 bullets...)
The big difference here is the Cutter form. I FINALLY found a way to make it similar to the original Miracle Matter! No, it doesn't move in the same motion, but it DOES follow you with a laser shield while shooting out a lot of knives. Really, all I had to do was look at the original form again and I KNEW what to do with it: Change everything related to the laser to CreateLaserB stuff and have the boss follow you!
Let me know if the form is any better now, okay? ^_^