Author Topic: pikaguy900's Box of Stuff  (Read 23671 times)

Nimono

  • wat
pikaguy900's Box of Stuff
« on: May 20, 2009, 04:12:31 AM »
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 here

It'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:

Code: [Select]
#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! :D

Let me know if the form is any better now, okay? ^_^
« Last Edit: May 25, 2009, 12:37:16 AM by pikaguy900 »

Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #1 on: May 20, 2009, 04:22:40 AM »
Miracle Matter. You've got to be kidding me, I was actually in the middle of recreating that epic Kirby battle... No joke! I have to play this.

Nimono

  • wat
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #2 on: May 20, 2009, 04:35:13 AM »
Miracle Matter. You've got to be kidding me, I was actually in the middle of recreating that epic Kirby battle... No joke! I have to play this.
Heh. Oh, I want to warn you, it's not EXACTLY like the battle, I left out some stuff due to lack of ideas at the time, such as the Ice, Stone, and Bomb forms. (So, all you get are Invincible, Fire, Spark, Cutter, and Needle.)

Needle, I feel is the most accurate. To make it more difficult, since sitting in one place the whole time would be BORING and too easy, I made the lasers shift positions every time they reappeared (they're my needle substitutes) and I created two sets of ORANGE23 bullets that spun out, each opposite the other, then they curved inward, turned around, and flew out. Surprisingly difficult if you don't pay attention to what you're doing!
Hint: When the bullets come for you, right left right left right left. Seriously, just keep moving back and forth in each wave, it becomes simple. ...then you have to worry about the lasers. Maybe. They move in degrees of 22.5.

Spark was greatly changed. It's more like Bomb now, minus the fact that the bubbles bounced off Miracle Matter, and I also have some yellow Laser01's coming at you!
Hint: Move as little as possible. Really, this is the easiest form for me to NOT get hit on.

Fire is absolutely fun for me to play, and it's also changed a bit. My original plan was to make the lasers hit the walls and create bullets that shot out, making a great threat to you. I couldn't figure out how to do it, so I went with the next best thing- LASER CHASER. Miracle Matter goes to your X position and fires two lasers- one is aimed DIRECTLY AT YOU. The other is aimed in the exact opposite direction. If you want to beat this form, you'd better learn to misdirect the lasers. The lasers fire about a second after the boss hits your X position, so use that time to lure the lasers into a position where you can safely get under the boss and shoot! (Homing shots need not worry about this...much...) Just be careful not to hit the red bullets flying all over the place, though.

Speaking of that, that is my least favorite part of the form. I just couldn't get the bullets to fly away in the EXACT same formation in EVERY direction at the time. However, I believe I have a way to do it now, but it may be a while before I even TRY to do it... XD

Cutter. How I despise you. This form is NOTHING like the original. I couldn't think of a single way to make it similar to it and be DIFFICULT. :( Also, it can be VERY annoying. Watch out for the knives flying at you. Stay still and they won't hurt you. But once the GREEN03 bullets start firing at places where they can hit you, you'll want to move away. I'd advise you NOT to try to go between the knives, or you might get cut. Don't try it on the sides, either- death for you no matter what, due to the size of the playing field...

So yeah. That's all I have to say for now. Man, I'm tired...

SONIC BHOCOLATE STRIKER

  • Doing >9000 Barrel Rolls
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #3 on: May 20, 2009, 04:22:25 PM »
Do you have a video preview on youtube?
I gotta have something for my sig, so...

Nimono

  • wat
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #4 on: May 20, 2009, 05:20:12 PM »
Nope, I don't have any recording software or anything, so I can't show you anything. :/ Perhaps someone else can show how insane it is?

Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #5 on: May 21, 2009, 12:39:46 AM »
I would do record it, but dang... I keep failing HARD on this. You might want to consult the services of GODrake. I'll keep practicing though.

And...! When you declare script paths for images and sound effects, try to remember that not everybody will use the same directories. So, to fix this, we use the "GetCurrentScriptDirectory~" function, which does exactly as it says. I've edited your script slightly so that the images and sounds work properly. Here's what I changed:

From
Code: [Select]
let BossImage = "script\Etc\miraclecube.PNG";To
Code: [Select]
let BossImage = GetCurrentScriptDirectory~"miraclecube.PNG";For the four script queries: BossImage, BossCutIn, ShotSFX and LaserSFX.

Which will then work for everybody's script directories, not just your own. Be sure to always implement this if you plan on sharing your scripts.

Nimono

  • wat
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #6 on: May 21, 2009, 01:02:32 AM »
Oh, about that stuff~...


1: I purposefully didn't use GetCurrentScriptDirectory. I was using it before, but I was sick of constantly copying the same files to different folders. It's just wasted filespace, y'know?
2: As I said, this stuff isn't meant to be beatable- it's meant to be downright unfair, unforgiving, and hilarious. AKA, it's just a big joke. :( But the bosses alone are perfectly serious, and I tried to make THEM fair.


By the way, I've been using Danmakufu for months now, getting help often at the old boards. :) And when I say months, I mean MONTHS. I usually just play around with ideas, never building on anything...

Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #7 on: May 21, 2009, 01:08:53 AM »
Unfair, unforgiving and hilarious is how I like my scripts. I usually make them beatable, but dang, this stuff is tough. I've gotten down to only losing two lives on both bosses though, getting there...!

I didn't mean you have to write and copy the files everywhere, just make sure that everybody can enjoy your lovely animated Miracle Matter when you upload it!

EDIT: I'm uploading a video of Copy Sign "Miracle Matter", by the way. Fun as balls. Can't do well enough on Armageddon to get a replay I'd record... GODrake might, if Keith's up to it~

http://www.youtube.com/watch?v=DYJRdVxmnuo&fmt=22
« Last Edit: May 21, 2009, 10:06:17 AM by Naut »

Drake

  • *
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #8 on: May 21, 2009, 03:44:49 AM »
Someone call?

Well, I wasn't able to do much, since Danmakufu slows down at a minimum of half the speed. I can beat it without a continue if I bomb spam, though lol
« Last Edit: May 21, 2009, 04:01:11 AM by Drake »

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

Nimono

  • wat
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #9 on: May 21, 2009, 05:12:38 AM »
Aha, nice playthrough, Naut! I couldn't do that as well as you did, I'd be too slow to react. The attack really looks harder in your video, though, 'cause Danmakufu runs a bit slower for me due to my laptop. It's both good and bad. (Especially bad, since it makes the PC-98 games slow sometimes, so when they speed back up, I freak out and mess up.)

Also, just want to say this: Naut, I specifically made the Miraculous Armageddon script for you. :P I noticed in Onthenet's thread that you said you loved Lunatic-mode attacks, so I figured I'd try to make Miracle Matter EVEN TOUGHER, just for you. ;) I'm hoping I got that effect for you.

Drake

  • *
Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #10 on: May 21, 2009, 05:27:30 AM »
it's not so much tough as it is impossible to react quick enough to dodge anything

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

Re: Miraculous Insanity - Playing around + Remixed script...?
« Reply #11 on: May 21, 2009, 10:05:44 AM »
Also, just want to say this: Naut, I specifically made the Miraculous Armageddon script for you. :P I noticed in Onthenet's thread that you said you loved Lunatic-mode attacks, so I figured I'd try to make Miracle Matter EVEN TOUGHER, just for you. ;) I'm hoping I got that effect for you.

I fucking love you.

Have my children.

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #12 on: May 24, 2009, 05:00:14 AM »
Naut: Heh... Glad you like it so much... Anyways...

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. ;)

Re: pikaguy900's Box of Stuff
« Reply #13 on: May 24, 2009, 05:48:49 AM »
A cool concept, I think you could've gone about it better though. I dislike the random angles the stars launch off at when they hit a wall, it sometimes creates impossible barriers that you just can't pass through in time. I also dislike the stars coming from behind.... Maybe falling stars? I dunno, I'm just not comfortable with them shooting up my ass. I'm playing against Yukari here, not Reisen! I also fixed your collision detection up a bit, the ball will no longer vibrate on somebody's paddle.

For Pong.txt:
Code: [Select]
#TouhouDanmakufu
#Title[Cheating at Pong!!]
#Text[Yukari, you're such a sore loser! Do you HAVE to turn PONG, of all games, into a one-sided danmaku battle?!]
#Image[.\CheatingAtPong.bmp]
#BackGround[Default]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main
{
let BossImage = GetCurrentScriptDirectory ~ "boss_yukari.png";
let BossCutIn = GetCurrentScriptDirectory ~ "Yukari.png";
let frame = -120;
let timer = 0;
let frame2 = -120;
let BallExist = false;
let PaddleExist = false;
let PlayerPosition = 0;
let OldY = 0;
let Paddle1 = NULL;
let Paddle2 = NULL;
let Ball = NULL;
let BounceCount = 0;
let Dir = [215, 305, 215, 305];
let Wait = 4;
let Settings1 = 0;
let Settings2 = 0;
let Settings3 = false;
let PlayerWins = 0;

task Pong(who)
{
if(who == 0)
{
if(Obj_BeDeleted(Paddle1))
{
Paddle1 = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Paddle1, GetPlayerX, GetPlayerY - 30);
Obj_SetCollisionToPlayer(Paddle1, false);
Obj_SetCollisionToObject(Paddle1, true);
Obj_SetSpeed(Paddle1, 0);
ObjShot_SetDelay(Paddle1, 10);
ObjShot_SetGraphic(Paddle1, 4);
ObjShot_SetBombResist(Paddle1, true);
Obj_SetAngle(Paddle1, 270);
Obj_SetAlpha(Paddle1, 250);
}
while(! Obj_BeDeleted(Paddle1))
{
Obj_SetPosition(Paddle1, GetPlayerX, 425 - 30);
yield;
}
}
else if(who == 1)
{
if(Obj_BeDeleted(Paddle2))
{
Paddle2 = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Paddle2, GetX, GetY + 30);
Obj_SetCollisionToPlayer(Paddle2, false);
Obj_SetCollisionToObject(Paddle2, true);
Obj_SetSpeed(Paddle2, 0);
ObjShot_SetDelay(Paddle2, 10);
ObjShot_SetGraphic(Paddle2, 4);
ObjShot_SetBombResist(Paddle2, true);
Obj_SetAngle(Paddle2, 90);
Obj_SetAlpha(Paddle2, 250);
}
while(! Obj_BeDeleted(Paddle2))
{
Obj_SetPosition(Paddle2, GetX, (GetClipMaxY - 425) + 30);
yield;
}
}
}

task PongBall(Graphic, InitSpeed, Attack)
{
if(Obj_BeDeleted(Ball))
{
Ball = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Ball, GetCenterX, GetCenterY);
Obj_SetCollisionToPlayer(Ball, false);
Obj_SetCollisionToObject(Ball, true);
ObjShot_SetDelay(Ball, 10);
ObjShot_SetGraphic(Ball, Graphic);
ObjShot_SetBombResist(Ball, true);
Obj_SetAngle(Ball, Dir[rand_int(0, 3)]);
Obj_SetAlpha(Ball, 255);
}
while(! Obj_BeDeleted(Ball))
{
if(timer>0){
timer--;
}
if(Obj_GetX(Ball) <= GetClipMinX())
{
if(Attack == true)
{
loop(20)
{
CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 2, rand_int(25, 85), 3, 5);
}
}
Obj_SetAngle(Ball, 180-Obj_GetAngle(Ball));
}
if(Obj_GetX(Ball) >= GetClipMaxX())
{
if(Attack == true)
{
loop(20)
{
CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 2, rand_int(115, 175), 3, 5);
}
}
Obj_SetAngle(Ball, 180-Obj_GetAngle(Ball));
}
if(Collision_Obj_Obj(Ball, Paddle1) == true && timer==0)
{
let position = Obj_GetY(Paddle1) - Obj_GetY(Ball);
Obj_SetY(Ball, Obj_GetY(Paddle1) - position);
timer = 10;
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
BounceCount += 1;
}
if(Collision_Obj_Obj(Ball, Paddle2) == true && timer==0)
{
let position = Obj_GetY(Paddle2) - Obj_GetY(Ball);
Obj_SetY(Ball, Obj_GetY(Paddle2) - position);
timer = 10;
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
BounceCount += 1;
}
if(Obj_GetY(Ball) >= GetClipMaxY())
{
ShootDownPlayer();
Obj_Delete(Ball);
}
if(Obj_GetY(Ball) <= GetClipMinY())
{
PlayerWins += 1;
Obj_Delete(Ball);
}
Obj_SetSpeed(Ball, InitSpeed + (BounceCount / 5));
if(Obj_GetX(Ball) > GetX)
{
SetX(GetX + 3);
}
if(Obj_GetX(Ball) < GetX)
{
SetX(GetX - 3);
}
yield;
}
}


@Initialize
{
LoadGraphic(BossImage);
SetLife(400);
SetDamageRate(10,10);
SetTimer(150);
SetInvincibility(30);
CutIn(YOUMU, "Cheating at Pong!!", BossCutIn, 0, 0, 256, 320);
SetScore(70000);
SetEnemyMarker(true);
MagicCircle(true);
SetMovePosition02(GetCenterX,(GetClipMaxY - 425),30);
PlayerPosition = GetPlayerY;
OldY = GetPlayerY;
LoadUserShotData(GetCurrentScriptDirectory ~ "PongShot.txt");
}

@MainLoop
{
SetCollisionB(GetX(),GetY(),24);
if(Obj_BeDeleted(Ball))
{
BallExist = false;
BounceCount = 0;
}
if(PaddleExist == true)
{
Pong(0);
Pong(1);
}
if(BallExist == true)
{
PongBall(Settings1, Settings2, Settings3);
}
SetPlayerY(floor(PlayerPosition));
if(GetPlayerY > 425)
{
if(OldY > 425)
{
OldY = GetPlayerY;
PlayerPosition -= ((OldY - 425) / 2);
}
else{PlayerPosition -= ((OldY - 425) / 20);}
}
if(GetPlayerY < 425)
{
if(OldY < 425)
{
OldY = GetPlayerY;
PlayerPosition += ((425 - OldY) / 2);
}
else{PlayerPosition += ((425 - OldY) / 20);}
}
if(frame == 0)
{
if(PaddleExist == false)
{
PaddleExist = true;
}
if(BallExist == false)
{
BallExist = true;
if(Wait == 4)
{
if(GetTimer > 30 && PlayerWins < 2)
{
Settings1 = 1;
Settings2 = 2;
Settings3 = true;
PongBall(1, 2, true);
}
if(GetTimer <= 30 || PlayerWins >= 2)
{
Settings1 = 2;
Settings2 = 3;
Settings3 = true;
PongBall(2, 3, true);
}
Wait = 0;
}
Wait++;
}
frame = -20;
}
if(frame2 == 0)
{
loop(1)
{
CreateShot01(rand_int(GetClipMinX, GetClipMaxX), GetClipMaxY, rand(0.5, 1.0), 270, 3, 10);
}
frame2 = -25;
}
if(PlayerWins == 4)
{
SetLife(0);
}
frame++;
frame2++;
}

@DrawLoop
{
SetTexture(BossImage);
SetGraphicRect(40,33,91,94);
DrawGraphic(GetX, GetY);
DrawText(ToString(PlayerWins), GetClipMaxX-10, GetCenterY, 20, 255);
}

@Finalize
{
DeleteGraphic(BossImage);
}
}

I implemented a timing system that allows the ball to only reflect every ten frames, which means it won't vibrate along anybody's paddle because it's too far away by the time it's allowed to reflect again!

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #14 on: May 24, 2009, 06:01:25 AM »
Awesome, thanks for the advice, and thanks for fixing up that collision! ...I suppose I should make the time limit higher now, huh? Last time I played it, I won with 9 seconds left... XD

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #15 on: May 24, 2009, 08:52:33 PM »
Okay, try this version!

Let me know if it's still unfair or not.

Changes:

-Ball no longer sticks to paddle. (Thanks, Naut!)
-Stars shoot from center of screen now instead of the bottom, and also have slightly higher speeds.
-Stars shot by the ball bouncing off the sides now come in set angles instead of random angles. (Let's hope this fixes that impassable barrier issue!)
-To compensate for the lack of Sticky Paddles, if you hit the the ball while moving left or right, the ball will speed up by your character's Unfocused speed divided by 20! The same thing won't happen with Focused speed, buuut I left that code in. Instead of removing the code entirely, I just left it disabled- you can re-enable it by changing the FocusInc = false; at the top of the script to equal true instead. This will let focused movement affect the ball, too!
-Time is increased to 150.
-Yukari can be attacked now. She has 512 life, so you know. But do you really want to attack her? ;)
-You can get point items this time! There's two bonuses you can get:
  • Defeat the boss and get the Spellcard bonus and you get 12 Point Items. Don't get it, and you only get 8.
  • Defeat the boss in the same way as before and get the ball past Yukari and you receive an extra 5 Point Items for every point you gain for passing Yukari. You don't get ANYTHING from THIS bonus if you don't get a spellcard bonus... (Maybe I should make this requirement different... Like maybe, "Don't Bomb to save the ball, or you don't get anything" or "Don't let the ball past you or bomb or you'll lose points"...)

Whew... That's why you may not want to finish it so quickly. You can get a maximum of 9 points from getting the ball past Yukari, and when you get your ninth, you automatically win.

That said, keep in mind that I plan on making Normal, Hard, and Lunatic versions of this, if I can. :o I already have Normal down a bit, just need to keep testing it to make sure it's good enough. The basic changes there will be that the stars come down denser in the center, 5 at once, compared to Easy's 3 at once, and there's a second ball color, red, that looks normal at first, but when it hits Yukari's paddle, a ring of 18 stars will burst out, swirl in, then swirl out. Better hope they don't catch you. It'll be rare, though- 3:1 ratio of Blue to Red. Yeah, a 1-in-4 chance of getting Red Orb, though I've yet to see it on anything but a 50-50 chance or a 25-75 chance. XD

Lastly, ENJOY!
« Last Edit: May 24, 2009, 08:55:23 PM by pikaguy900 »

Re: pikaguy900's Box of Stuff
« Reply #16 on: May 25, 2009, 02:11:41 AM »
As partial as I am to making difficult scripts, I'm thinking that if this is the easy version, then you should probably tone it down a bit. Typically easy should be a breeze to pass (eeeeee!? maji? iiji moodo? kimoooi! iiji moodo yurusareru no wa shougakusei made dayo ne-e! kyahahahahahahahaha!), but your version is actually somewhat difficult. Perhaps bumping this mode to "Normal" status, then making a slightly easier version and call that Easy mode. Then do whatever you'd like for Hard and Lunatic, since there is only a handful of us going to play them and none of us are wussy enough to admit that it could be "too difficult".

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #17 on: May 25, 2009, 03:01:24 AM »
Ahahaha, this is Normal? ...I'm scared to think of how you'd think my NORMAL and HARD versions to be... Oh well, Normal it is, then.

Also, tell me if you think this idea is good for a Lunatic version:

No stars come out from the center of the screen, and you are not stuck at any specific location, so you can move around the screen all you want. The paddle, however, IS locked at a specific Y position, and the ball will still kill you if it hits the bottom, as well as if you touch it. (IT'S...DANGEROUS!!) The ball will spawn the same rings upon it touching the sides, but... It comes in Red only. Thus, when it hits Yukari's paddle, it creates a large ring of bullets that spin out, come back in, then shoot out at you. About 100 bullets. (Is that too much? I don't know...) However, a twist- ANOTHER ring fires out at you at the same time, only it doesn't stop! Same goes for the triple lines, though those only come during Big balls... Each bullet is slower than the ones coming before, too.

Code: [Select]
#TouhouDanmakufu
#Title[Pong Hax -Lunatic-]
#Text[Yukari, cut it out already!! We know you're sick of losing, but geez, this is stupid!]
#Image[.\CheatingAtPong.bmp]
#BackGround[Default]
#PlayLevel[Lunatic]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main
{
let FocusInc = false; //Change this to true if you want focused movement to affect the speed of the ball!

let BossImage = GetCurrentScriptDirectory ~ "boss_yukari.png";
let BossCutIn = GetCurrentScriptDirectory ~ "Yukari.png";
let frame = -120;
let timer = 0;
let frame2 = -120;
let BallExist = false;
let PaddleExist = false;
let Paddle1 = NULL;
let Paddle2 = NULL;
let Ball = NULL;
let BounceCount = 0;
let Dir = [215, 305, 215, 305];
let Wait = 4;
let Settings1 = 0;
let Settings2 = 0;
let Settings3 = false;
let PlayerWins = 0;
let Angle = 10;
let Big = false;
let Speed = 0;
let BombBounce = false;
let BallType = [5, 5, 6, 5];
let Red = false;

task Pong(who)
{
if(who == 0)
{
if(Obj_BeDeleted(Paddle1))
{
Paddle1 = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Paddle1, GetPlayerX, GetPlayerY - 30);
Obj_SetCollisionToPlayer(Paddle1, false);
Obj_SetCollisionToObject(Paddle1, true);
Obj_SetSpeed(Paddle1, 0);
ObjShot_SetDelay(Paddle1, 10);
ObjShot_SetGraphic(Paddle1, 4);
ObjShot_SetBombResist(Paddle1, true);
Obj_SetAngle(Paddle1, 270);
Obj_SetAlpha(Paddle1, 250);
}
while(! Obj_BeDeleted(Paddle1))
{
Obj_SetPosition(Paddle1, GetPlayerX, 425 - 30);
yield;
}
}
else if(who == 1)
{
if(Obj_BeDeleted(Paddle2))
{
Paddle2 = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Paddle2, GetX, GetY + 30);
Obj_SetCollisionToPlayer(Paddle2, false);
Obj_SetCollisionToObject(Paddle2, true);
Obj_SetSpeed(Paddle2, 0);
ObjShot_SetDelay(Paddle2, 10);
ObjShot_SetGraphic(Paddle2, 4);
ObjShot_SetBombResist(Paddle2, true);
Obj_SetAngle(Paddle2, 90);
Obj_SetAlpha(Paddle2, 250);
}
while(! Obj_BeDeleted(Paddle2))
{
Obj_SetPosition(Paddle2, GetX, (GetClipMaxY - 425) + 30);
yield;
}
}
}

task PongBall(Graphic, InitSpeed, Attack)
{
if(Obj_BeDeleted(Ball))
{
if(Graphic == 1)
{
Big = false;
Red = false;
}
if(Graphic == 2)
{
Big = true;
Red = false;
}
if(Graphic == 5)
{
Big = false;
Red = true;
}
if(Graphic == 6)
{
Big = true;
Red = true;
}
Ball = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Ball, GetCenterX, GetCenterY);
Obj_SetCollisionToPlayer(Ball, true);
Obj_SetCollisionToObject(Ball, true);
ObjShot_SetDelay(Ball, 10);
ObjShot_SetGraphic(Ball, Graphic);
ObjShot_SetBombResist(Ball, true);
Obj_SetAngle(Ball, Dir[rand_int(0, 3)]);
Obj_SetAlpha(Ball, 255);
Speed = InitSpeed;
}
while(! Obj_BeDeleted(Ball))
{
if(timer > 0)
{
timer--;
}
if(Obj_GetX(Ball) <= GetClipMinX())
{
if(Attack == true)
{
Angle = 0;
loop(36)
{
CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 4, Angle, 8, 5);
Angle += 5;
}
}
Obj_SetAngle(Ball, 180-Obj_GetAngle(Ball));
}
if(Obj_GetX(Ball) >= GetClipMaxX())
{
if(Attack == true)
{
Angle = 180;
loop(36)
{
CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 4, Angle, 8, 7);
Angle -= 5;
}
}
Obj_SetAngle(Ball, 180-Obj_GetAngle(Ball));
}
if(Collision_Obj_Obj(Ball, Paddle1) == true && timer == 0 && !BombBounce)
{
let position = Obj_GetY(Paddle1) - Obj_GetY(Ball);
Obj_SetY(Ball, Obj_GetY(Paddle1) - position);
timer = 30;
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
if(GetKeyState(VK_RIGHT) == KEY_PUSH || GetKeyState(VK_RIGHT) == KEY_HOLD)
{
if(FocusInc == true)
{
if(GetPlayerMoveState == MOVE_SLOW)
{
Speed += (GetPlayerInfo(PLAYER_SPEED_LOW) / 25);
}
}
if(GetPlayerMoveState == MOVE_NORMAL)
{
Speed += (GetPlayerInfo(PLAYER_SPEED_HIGH) / 25);
}
}
else if(GetKeyState(VK_LEFT) == KEY_PUSH || GetKeyState(VK_LEFT) == KEY_HOLD)
{
if(FocusInc == true)
{
if(GetPlayerMoveState == MOVE_SLOW)
{
Speed += (GetPlayerInfo(PLAYER_SPEED_LOW) / 25);
}
}
if(GetPlayerMoveState == MOVE_NORMAL)
{
Speed += (GetPlayerInfo(PLAYER_SPEED_HIGH) / 25);
}
}
BounceCount += 1;
}
if(Collision_Obj_Obj(Ball, Paddle2) == true && timer == 0)
{
if(Red == true)
{
let shot = 0;
Angle = 0;
let stop = 0;
loop(100)
{
CreateShotA(shot, Obj_GetX(Ball), Obj_GetY(Ball), 5);
SetShotDataA(shot, 0, 2, Angle, 0, 0, 0, 7);
SetShotDataA(shot, 20, NULL, NULL, 2, 0, 0, 7);
SetShotDataA(shot, 180, NULL, NULL, 1, 0.2, 5, 7);
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 7);
FireShot(shot);
if(stop%2 == 0)
{
CreateShot01(GetX, GetY, 6, Angle, 7, 5);
}
stop++;
Angle += 3.6;
shot++;
}
if(Big)
{
let Speed = 6;
loop(10)
{
CreateShot01(GetX, GetY, Speed, GetAngleToPlayer + 20, 8, 5);
CreateShot01(GetX, GetY, Speed, GetAngleToPlayer - 20, 8, 5);
CreateShot01(GetX, GetY, Speed, GetAngleToPlayer, 8, 5);
Speed -= 0.5;

}
}
}
BombBounce = false;
let position = Obj_GetY(Paddle2) - Obj_GetY(Ball);
Obj_SetY(Ball, Obj_GetY(Paddle2) - position);
timer = 30;
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
BounceCount += 1;
}
if(Obj_GetY(Ball) >= GetClipMaxY())
{
if(OnBomb())
{
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
BombBounce = true;
}
else
{
ShootDownPlayer();
Obj_Delete(Ball);
}
}
if(Obj_GetY(Ball) <= GetClipMinY())
{
PlayerWins += 1;
Obj_Delete(Ball);
}
Obj_SetSpeed(Ball, Speed + (BounceCount / 5));
if(Obj_GetX(Ball) > GetX)
{
if(!Big)
{
SetX(GetX + 3);
}
else if(Big)
{
SetX(GetX + 5);
}
}
if(Obj_GetX(Ball) < GetX)
{
if(!Big)
{
SetX(GetX - 3);
}
else if(Big)
{
SetX(GetX - 5);
}
}
yield;
}
}

@Initialize
{
LoadGraphic(BossImage);
SetLife(512);
SetDamageRate(10,10);
SetTimer(152);
SetInvincibility(30);
CutIn(YOUMU, "Pong Hax", BossCutIn, 0, 0, 256, 320);
SetScore(70000);
SetEnemyMarker(true);
MagicCircle(true);
SetMovePosition02(GetCenterX,(GetClipMaxY - 425),30);
LoadUserShotData(GetCurrentScriptDirectory ~ "PongShot.txt");
}

@MainLoop
{
SetCollisionA(GetX(),GetY(),32);
SetCollisionB(GetX(),GetY(),24);
if(Obj_BeDeleted(Ball))
{
Speed = 2;
BallExist = false;
BounceCount = 0;
}
if(PaddleExist == true)
{
Pong(0);
Pong(1);
}
if(BallExist == true)
{
PongBall(Settings1, Settings2, Settings3);
}
if(frame == 0)
{
if(PaddleExist == false)
{
PaddleExist = true;
}
if(BallExist == false)
{
BallExist = true;
if(Wait == 4)
{
Settings1 = BallType[rand_int(0, 3)];
Settings2 = 2;
Settings3 = true;
PongBall(Settings1, Settings2, Settings3);
Wait = 0;
}
Wait++;
}
frame = -20;
}
if(frame2 == 0)
{
loop(4)
{
//CreateShot01(rand_int(GetClipMinX, GetClipMaxX), GetCenterY - 50, rand(1.0, 3.0), 90, 3, 10);
}
frame2 = -25;
}
if(PlayerWins >= 9)
{
PlayerWins = 9;
}
frame++;
frame2++;
}

@DrawLoop
{
SetTexture(BossImage);
SetGraphicRect(40,33,91,94);
DrawGraphic(GetX, GetY);
DrawText(ToString(PlayerWins), GetClipMaxX-10, GetCenterY, 20, 255);
//DrawText(ToString(Speed), GetPlayerX+20, GetPlayerY, 20, 255);
//DrawText(ToString(Obj_GetSpeed(Ball)), GetPlayerX+20, GetPlayerY+20, 20, 255);
}

@Finalize
{
DeleteGraphic(BossImage);
}
}

This is what I have right now. Outside of the big orbs, it doesn't seem THAT hard to me... However, I have no idea how to MAKE IT HARDER. Any ideas?

EDIT:

Code: [Select]
#PlayerShotData

ShotImage = ".\Pong.png"

ShotData
{
id = 1 //ID
rect = (32,0,64,32)
angular_velocity = 2
}

ShotData
{
id = 2 //ID
rect = (128,0,192,64)
angular_velocity = 2
}

ShotData
{
id = 3 //ID
rect = (38,56,58,76)
angular_velocity = 1
}

ShotData
{
id = 4 //ID
rect = (73,69,117,78)
angular_velocity = 0
}

ShotData
{
id = 5 //ID
rect = (0,0,32,32)
angular_velocity = 2
}

ShotData
{
id = 6 //ID
rect = (64,0,128,64)
angular_velocity = 2
}

ShotData
{
id = 7 //ID
rect = (21,36,37,54)
angular_velocity = 0
}

ShotData
{
id = 8 //ID
rect = (8,51,22,72)
angular_velocity = 0
}



Forgot that I added some shots...
« Last Edit: May 25, 2009, 03:08:24 AM by pikaguy900 »

Re: pikaguy900's Box of Stuff
« Reply #18 on: May 25, 2009, 03:19:27 AM »
Slow down the bullets, but add more. Set higher delays so they don't all stack on each other, and offset them by a random angle. So something like:

let angle = rand(0, 36);
let angle2 = rand(0, 36);
let angle3 = rand(0, 36);
loop(60){
  CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 3, angle, 8, 0);
  CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 3, angle2, 8, 15);
  CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 3, angle3, 8, 30);
  angle+=6;
  angle2+=6;
  angle3+=6;
}

Get what I mean? This way it's more "dodge shit" rather than "reaction time of a God". Stuff like this. Fill the screen with Danmaku.

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #19 on: May 25, 2009, 03:31:00 AM »
Slow down the bullets, but add more. Set higher delays so they don't all stack on each other, and offset them by a random angle. So something like:

let angle = rand(0, 36);
let angle2 = rand(0, 36);
let angle3 = rand(0, 36);
loop(60){
  CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 3, angle, 8, 0);
  CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 3, angle2, 8, 15);
  CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 3, angle3, 8, 30);
  angle+=6;
  angle2+=6;
  angle3+=6;
}

Get what I mean? This way it's more "dodge shit" rather than "reaction time of a God". Stuff like this. Fill the screen with Danmaku.

Yeah, but I need to keep that orb in mind, too- too dense of a pattern, and you can't keep it bouncing, and since this is Yukari applying massive hax to Pong, it wouldn't seem right to disable- Wait, better idea. Turn the player paddle AGAINST you. So, enemy gets two paddles, and it won't miss the orb. So, you have threats from the paddles, threats from the orb, threats from Yukari. Heheheheheeee...

Re: pikaguy900's Box of Stuff
« Reply #20 on: May 25, 2009, 04:30:03 AM »
You could have it so that Yukari and Ran are playing Pong against eachother, and you're just stuck in the middle trying to survive! Muahahaha!

CK Crash

  • boozer
Re: pikaguy900's Box of Stuff
« Reply #21 on: May 25, 2009, 10:41:47 AM »
You could have it so that Yukari and Ran are playing Pong against eachother, and you're just stuck in the middle trying to survive! Muahahaha!
I demand you change the ball to Chen. NOW

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #22 on: May 25, 2009, 03:27:59 PM »
You could have it so that Yukari and Ran are playing Pong against eachother, and you're just stuck in the middle trying to survive! Muahahaha!

A nice idea, but I'm not so sure I'd want to code in another way for the CPUs to miss the ball so it's like a real Pong match... Now, if you have an idea about how I could actually do this, though, please tell me and I'll try to put it in. IT'S NOT PONG IF YOU DON'T MISS THE BALL. Unless it's Yukari. Then she just haxes you.

Re: pikaguy900's Box of Stuff
« Reply #23 on: May 26, 2009, 12:33:08 AM »
Same thing you do now. Have them both move at 3 pixels, and set the ball's speed to be slightly random, so whoever misses it will be randomly generated.

Also, I agree with the Chenball. Make it happen.

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #24 on: May 26, 2009, 02:42:52 AM »
Code: [Select]
#TouhouDanmakufu
#Title[Destroyer "Chenball"]
#Text[Chen, the only thing you're good for is being a ball in my little game, so get in there and help me crush this pest! If you don't, no food for a whole week!]
#Image[.\CheatingAtPong.bmp]
#BackGround[Default]
#PlayLevel[Lunatic]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main
{
let FocusInc = false; //Change this to true if you want focused movement to affect the speed of the ball!

let BossImage = GetCurrentScriptDirectory ~ "boss_yukari.png";
let BossCutIn = GetCurrentScriptDirectory ~ "Yukari.png";
let frame = -160;
let timer = 0;
let frame2 = -60;
let BallExist = false;
let PaddleExist = false;
let Paddle1 = NULL;
let Paddle2 = NULL;
let Ball = NULL;
let BounceCount = 0;
let Dir = [35, 125, 215, 305];
let Wait = 4;
let Settings1 = 0;
let Angle = 10;
let Speed2 = 3;

task Pong(who)
{
if(who == 0)
{
if(Obj_BeDeleted(Paddle1))
{
Paddle1 = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Paddle1, GetX, 425 - 30);
Obj_SetCollisionToPlayer(Paddle1, false);
Obj_SetCollisionToObject(Paddle1, true);
Obj_SetSpeed(Paddle1, 0);
ObjShot_SetDelay(Paddle1, 10);
ObjShot_SetGraphic(Paddle1, 4);
ObjShot_SetBombResist(Paddle1, true);
Obj_SetAngle(Paddle1, 270);
Obj_SetAlpha(Paddle1, 250);
}
while(! Obj_BeDeleted(Paddle1))
{
Obj_SetPosition(Paddle1, GetX, 425 - 30);
yield;
}
}
else if(who == 1)
{
if(Obj_BeDeleted(Paddle2))
{
Paddle2 = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Paddle2, GetX, GetY + 30);
Obj_SetCollisionToPlayer(Paddle2, false);
Obj_SetCollisionToObject(Paddle2, true);
Obj_SetSpeed(Paddle2, 0);
ObjShot_SetDelay(Paddle2, 10);
ObjShot_SetGraphic(Paddle2, 4);
ObjShot_SetBombResist(Paddle2, true);
Obj_SetAngle(Paddle2, 90);
Obj_SetAlpha(Paddle2, 250);
}
while(! Obj_BeDeleted(Paddle2))
{
Obj_SetPosition(Paddle2, GetX, (GetClipMaxY - 425) + 30);
yield;
}
}
}

task PongBall(InitSpeed)
{
if(Obj_BeDeleted(Ball))
{
Ball = Obj_Create(OBJ_SHOT);
Obj_SetPosition(Ball, GetCenterX, GetCenterY);
Obj_SetCollisionToPlayer(Ball, true);
Obj_SetCollisionToObject(Ball, true);
ObjShot_SetDelay(Ball, 10);
ObjShot_SetGraphic(Ball, 9);
ObjShot_SetBombResist(Ball, true);
Obj_SetAngle(Ball, Dir[rand_int(0, 3)]);
Obj_SetSpeed(Ball, InitSpeed);
Obj_SetAlpha(Ball, 255);
}
while(! Obj_BeDeleted(Ball))
{
if(timer > 0)
{
timer--;
}
if(Obj_GetX(Ball) <= GetClipMinX())
{
Angle = 0;
loop(36)
{
Speed2 = 3;
let stop = 0;
let shot = 0;
loop(10)
{
CreateShotA(shot, Obj_GetX(Ball), Obj_GetY(Ball), 15);
if(stop%2 == 0)
{
SetShotDataA(shot, 0, Speed2, Angle, 0.5, 0, 0, 3);
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 3);
}
else
{
SetShotDataA(shot, 0, Speed2, Angle, -0.5, 0, 0, 3);
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 3);
}
FireShot(shot);
shot++;
Speed2 -= 0.25;
stop++;
}
Angle += 10;
}
Obj_SetAngle(Ball, 180-Obj_GetAngle(Ball));
}
if(Obj_GetX(Ball) >= GetClipMaxX())
{
Angle = 180;
loop(36)
{
Speed2 = 3;
let stop = 0;
let shot = 0;
loop(10)
{
CreateShotA(shot, Obj_GetX(Ball), Obj_GetY(Ball), 15);
if(stop%2 == 0)
{
SetShotDataA(shot, 0, Speed2, Angle, -0.5, 0, 0, 3);
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 3);
}
else
{
SetShotDataA(shot, 0, Speed2, Angle, 0.5, 0, 0, 3);
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 3);
}
FireShot(shot);
shot++;
Speed2 -= 0.25;
stop++;
}
Angle -= 10;
}
Obj_SetAngle(Ball, 180-Obj_GetAngle(Ball));
}
if(Collision_Obj_Obj(Ball, Paddle1) == true && timer == 0)
{
let shot = 0;
Angle = rand_int(0, 359);
let stop = 0;
loop(100)
{
CreateShotA(shot, Obj_GetX(Ball), Obj_GetY(Ball), 5);
SetShotDataA(shot, 0, 2, Angle, 0, 0, 0, 7);
SetShotDataA(shot, 20, NULL, NULL, -2, 0, 0, 7);
if(stop%2 == 0)
{
SetShotDataA(shot, 180, NULL, NULL, -1, 0, 0, 7);
}
else
{
SetShotDataA(shot, 180, NULL, NULL, 1, 0, 0, 7);
}
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 7);
FireShot(shot);
if(stop%2 == 0)
{
CreateShot01(GetX, GetY, 2, Angle, 7, 5);
}
stop++;
Angle += 3.6;
shot++;
}
Angle = rand_int(180, 216);
let Angle2 = rand_int(0, 36);
let Angle3 = rand_int(0, 36);
loop(60)
{
CreateShot01(GetX, GetY, 1, Angle, 8, 0);
CreateShot01(GetX, GetY, 1.5, Angle2, 8, 10);
CreateShot01(GetX, GetY, 2, Angle3, 8, 15);
Angle += 6;
Angle2 += 6;
Angle3 += 6;
}
let position = Obj_GetY(Paddle1) - Obj_GetY(Ball);
Obj_SetY(Ball, Obj_GetY(Paddle1) - position);
timer = 30;
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
BounceCount++;
}
if(Collision_Obj_Obj(Ball, Paddle2) == true && timer == 0)
{
let shot = 0;
Angle = rand_int(0, 359);
let stop = 0;
loop(100)
{
CreateShotA(shot, Obj_GetX(Ball), Obj_GetY(Ball), 5);
SetShotDataA(shot, 0, 2, Angle, 0, 0, 0, 7);
SetShotDataA(shot, 20, NULL, NULL, 2, 0, 0, 7);
if(stop%2 == 0)
{
SetShotDataA(shot, 180, NULL, NULL, 1, 0, 0, 7);
}
else
{
SetShotDataA(shot, 180, NULL, NULL, -1, 0, 0, 7);
}
SetShotDataA(shot, 240, NULL, NULL, 0, 0, 0, 7);
FireShot(shot);
if(stop%2 == 0)
{
CreateShot01(GetX, GetY, 2, Angle, 7, 5);
}
stop++;
Angle += 3.6;
shot++;
}
Angle = rand_int(0, 36);
let Angle2 = rand_int(0, 36);
let Angle3 = rand_int(0, 36);
loop(60)
{
CreateShot01(GetX, GetY, 1, Angle, 8, 0);
CreateShot01(GetX, GetY, 1.5, Angle2, 8, 10);
CreateShot01(GetX, GetY, 2, Angle3, 8, 15);
Angle += 6;
Angle2 += 6;
Angle3 += 6;
}
let position = Obj_GetY(Paddle2) - Obj_GetY(Ball);
Obj_SetY(Ball, Obj_GetY(Paddle2) - position);
timer = 30;
Obj_SetAngle(Ball, 360-Obj_GetAngle(Ball));
BounceCount++;
}
if(Obj_GetY(Ball) >= GetClipMaxY())
{
Obj_Delete(Ball);
}
if(Obj_GetY(Ball) <= GetClipMinY())
{
Obj_Delete(Ball);
}
if(Obj_GetX(Ball) > GetX)
{
SetX(GetX + 3);
}
if(Obj_GetX(Ball) < GetX)
{
SetX(GetX - 3);
}
Obj_SetSpeed(Ball, InitSpeed + (BounceCount / 5));
Angle = rand_int(0, 360);
let stop = 0;
if(frame2 == 0)
{
loop(10)
{
if(stop%2 == 0)
{
CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 1.5, Angle, 10, 0);
}
else
{
CreateShot01(Obj_GetX(Ball), Obj_GetY(Ball), 1.5, Angle, 11, 0);
}
stop++;
Angle += 36;
}
frame2 = -60;
}
frame2++;
yield;
}
}

@Initialize
{
LoadGraphic(BossImage);
SetLife(512);
SetDamageRate(10,10);
SetTimer(152);
SetInvincibility(30);
CutIn(YOUMU, "Destroyer "\""Chenball"\", BossCutIn, 0, 0, 256, 320);
SetScore(70000);
SetEnemyMarker(true);
MagicCircle(true);
SetMovePosition02(GetCenterX,(GetClipMaxY - 425),30);
LoadUserShotData(GetCurrentScriptDirectory ~ "PongShot.txt");
}

@MainLoop
{
SetCollisionA(GetX(),GetY(),32);
SetCollisionB(GetX(),GetY(),24);
if(Obj_BeDeleted(Ball))
{
BallExist = false;
BounceCount = 0;
}
if(PaddleExist == true)
{
Pong(0);
Pong(1);
}
if(BallExist == true)
{
PongBall(Settings1);
}
if(frame == -60)
{
SetColor(255, 255, 255);
Concentration01(60);
}
if(frame == 0)
{
if(PaddleExist == false)
{
PaddleExist = true;
}
if(BallExist == false)
{
BallExist = true;
if(Wait == 4)
{
Settings1 = rand(0.5, 3);
PongBall(Settings1);
Wait = 0;
}
Wait++;
}
frame = -20;
}
frame++;
}

@DrawLoop
{
SetTexture(BossImage);
SetGraphicRect(40,33,91,94);
DrawGraphic(GetX, GetY);
}

@Finalize
{
DeleteGraphic(BossImage);
}
}
Code: [Select]
#PlayerShotData

ShotImage = ".\Pong.png"

ShotData
{
id = 1 //ID
rect = (32,0,64,32)
angular_velocity = 2
}

ShotData
{
id = 2 //ID
rect = (128,0,192,64)
angular_velocity = 2
}

ShotData
{
id = 3 //ID
rect = (38,56,58,76)
angular_velocity = 1
}

ShotData
{
id = 4 //ID
rect = (73,69,117,78)
angular_velocity = 0
}

ShotData
{
id = 5 //ID
rect = (0,0,32,32)
angular_velocity = 2
}

ShotData
{
id = 6 //ID
rect = (64,0,128,64)
angular_velocity = 2
}

ShotData
{
id = 7 //ID
rect = (21,36,37,54)
angular_velocity = 0
}

ShotData
{
id = 8 //ID
rect = (8,51,22,72)
angular_velocity = 0
}

ShotData
{
id = 9 //CHEEEEEENNNNNBAAAAAAAAAAALL
rect = (197,3,237,66)
angular_velocity = 4
}

ShotData
{
id = 10 //Chenball shot
rect = (131,68,137,85)
angular_velocity = 0
}

ShotData
{
id = 11 //Chenball shot
rect = (141,68,147,85)
angular_velocity = 0
}



Ask and you shall receive~! It's CHENBALL! Might be too hard, though. (And by "too hard", I mean "very very VERY unfair".)

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #25 on: May 29, 2009, 02:51:10 AM »

Sneak preview of what I'm currently working on. Cookie if you figure out what it is by this pic alone. :)

Drake

  • *
Re: pikaguy900's Box of Stuff
« Reply #26 on: May 29, 2009, 03:03:12 AM »
An even better and more accurate version of Miracle Matter?

gimme mah cookie

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

Re: pikaguy900's Box of Stuff
« Reply #27 on: May 29, 2009, 03:32:36 AM »
Animate all 20 sides of it! That would be cool as fucking balls. Toss in some angular velocity to the graphics so it spins on more than one axis, and the script is already amazing.

Also: Lunatic mode, please, etc.

Re: pikaguy900's Box of Stuff
« Reply #28 on: May 29, 2009, 03:40:51 AM »
Also: Naut mode, please, etc.
Fixed because our idea of lunatic mode isn't enough for you

Nimono

  • wat
Re: pikaguy900's Box of Stuff
« Reply #29 on: May 29, 2009, 04:14:20 AM »
An even better and more accurate version of Miracle Matter?

gimme mah cookie
Close, but no dice. No candy (or cookie) for you.

To be quite honest, I'm making a Miracle Matter player, but I've got some...issues. They're minor, to be honest: I merely have no idea what forms I want to be the attacks and which will be the Bombs. Here's my current set plans:

Attacks:
-Needle
-Cutter
-Stone
-Spark

Bombs:
-Ice

So yeah... I really need ideas for this stuff. Currently, I have just Needle, Cutter, Stone, and Ice planned out. Needle and Cutter have been done, though. Needle is just a forward-shooting type that is basically THE power shot at the moment. Cutter is the wide shot, but also has power- if you really like risking your life. My new Cutter form in the boss script has Miracle Matter shooting rings of knives at you while creating a ring of lasers around itself. It then proceeds to try to ram into you when said ring is complete. All this while shooting off the knives. Yeah. That's basically what you have here. You have weak shots that cover a wide area and lasers that form a ring around you as long as you're shooting. These lasers can be used to ram into foes for extra damage, but you WILL lose a life if you get too close, so it's a double-edged sword. You can go for the power or you can play it safe.

That's all I've done so far. My plan for stone is to have a stone shoot out, split when it reaches a certain distance, then split again into four total after that... Not sure if that's a good idea. As for the Ice bomb, I'm just planning on having 4 icecubes spin out from the center of the screen while leaving a trail of icy clouds behind for a bit.

...And that's it. Anyone have any (better) ideas? I'm stumped as to what I can do for Fire, but I have an idea for Bomb if it was a...bomb. Simply put, the exact same thing it was in Kirby 64, except the bombs don't vanish, they explode into more damaging goodness.
« Last Edit: June 06, 2009, 03:42:44 PM by pikaguy900 »