Author Topic: Touhou Spellcard Replica Thread  (Read 60137 times)

Touhou Spellcard Replica Thread
« on: May 07, 2009, 04:05:11 AM »
Hey. I'll be posting random remakes of ZUN spellcards here, consider it spell practice mode outside of Imperishable Night. I welcome any and all of your own spellcard remakes, so feel free to post like the fury.

So, I've got a few here, keep in mind that these are best played using a properly installed Shot Replace Script (lib\SHOT_REPLACE\shot_replace.dnh), and some just aren't possible to play properly without it.

If you guys want, I can compile everybody's spellcard remakes into this one post/file, and properly credit you if you wish. That way we could have a large library of remade spellcards. Tell me what you guys think.



All (of my) spellcards are remakes of Lunatic versions only.



Batch File (Get all three)
Keep in mind that sounds and graphics will not play or be drawn properly if you just copy the scripts, so I recommend downloading the batch file, which includes the scripts as well as the "stuff" folder and sounds/graphics used thus far.

Yamame's Spider "Cave Spider's Nest"
Don't know why I remade this, but I have it lying around so you guys can take a look at it.
Code: [Select]
#TouhouDanmakufu
#Title[Spider "Cave Spider's Nest"]
#Text[Remake of Yamame's first spellcard, lunatic.]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

let ImgBoss = GetCurrentScriptDirectory~"stuff\ExRumia.png";
let se = GetCurrentScriptDirectory~"stuff\shot.wav";
let frame = 0;
let frame2 = 0;
let radius = 0;
let angle = 0;
let delay = 0;
let r = 0;
let x = 0;
let al = 0;

    @Initialize {

    SetLife(4000);
SetTimer(50);
SetEnemyMarker(true);
    SetDamageRate(100, 30);
    SetInvincibility(150);
SetEnemyMarker(true);
    LoadGraphic(ImgBoss);
CutIn(YOUMU, "Spider "\""Cave Spider's Nest"\", "", 0, 0, 0, 0);
    SetMovePosition02(GetCenterX, GetClipMinY + 120, 120);

    }

    @MainLoop {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);
SetShotAutoDeleteClip(300, 300, 300, 2); //I made the delete clip larger so that it wouldn't delete our bullets when they are spawned outside of the window.

//Get the angle relative to the player just before spawning the bullets, then set it to be slightly off so the bullets won't spawn on top of the player.
if(frame==118){
x = GetAngleToPlayer + 11.25;
}

//Start spawning bullets. We set six bullets to spawn every frame for 70 frames, because when the counter "frame2" hits 70, we exit out of the loop. We increment "radius"
//every loop so that the bullet will get spawned 6 pixels further from the boss every frame. We give the bullet a slight angular velocity (r, which we randomize) when we want to move it, so that it will curve around the boss
//instead of go right through her. We multiply this angular velocity by 40 later on to compensate for the 40 frame delay, when we start decelerating the bullets.
if(frame==120){
PlaySE(se);
loop(16){
CreateShotA(0, GetX + radius*cos(angle), GetY + radius*sin(angle), 10);
SetShotDataA(0, 0, 0, angle, 0, 0, 0, GREEN12);
SetShotDataA(0, 120 - delay, 0, angle - 190, -r, 0.1, 4, GREEN12);
SetShotDataA(0, 160 - delay, 4, angle - 190 - (r*50), 0, -0.05, 1.5, GREEN12);
FireShot(0);
angle+=360/16;
}
r = rand(-0.05, 0.25);
delay++;
frame2++;
radius+=6;
angle = rand(-5, 5) + x;
frame = 119;
if(frame2==70){ //Exit out of the loop, and set all variables to 0 for when we start the loop again.
radius = 0;
angle = 0;
frame2 = 0;
delay = 0;
frame = 200;
}
}

//Repeat the pattern, but curve towards the other direction (positive angular velocity instead of negative).
if(frame==378){
x = GetAngleToPlayer + 11.25;
}
if(frame==380){
PlaySE(se);
loop(16){
CreateShotA(0, GetX + radius*cos(angle), GetY + radius*sin(angle), 10);
SetShotDataA(0, 0, 0, angle, 0, 0, 0, BLUE12);
SetShotDataA(0, 120 - delay, 0, angle - 170, r, 0.1, 4, BLUE12);
SetShotDataA(0, 160 - delay, 4, angle - 170 + (r*50), 0, -0.05, 1.5, BLUE12);
FireShot(0);
angle+=360/16;
}
r = rand(-0.05, 0.25);
delay++;
frame2++;
radius+=6;
angle = rand(-5, 5) + x;
frame = 379;
if(frame2==70){ //We set everything back to 0 for when we start spawning more bullets.
radius = 0;
angle = 0;
frame2 = 0;
delay = 0;
frame = -60; //Repeat the whole pattern.
}
}
frame++;

    }
    @DrawLoop {
if(al<255){
al++;
}
SetTexture(ImgBoss);
SetAlpha(255);
if(GetSpeedX()==0){SetGraphicRect(64,1,127,64);}
else if(GetSpeedX()>0){SetGraphicRect(192,1,255,64);}
else if(GetSpeedX()<0){SetGraphicRect(128,1,191,64);}
DrawGraphic(GetX, GetY);


    }

    @Finalize {
DeleteGraphic(ImgBoss);
    }

}


Remilia's Scarlet Sign "Scarlet Meister"
I know a few people have remade this spellcard, so here's my take that I made a few weeks ago. A bit harder than the lunatic version, I think. Not sure.
Code: [Select]
#TouhouDanmakufu
#Title[Scarlet Sign "Scarlet Meister"]
#Text[Remake of Remi's attack "Scarlet Meister" (using tasks).]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

///////////////////////////
///////////////////////////
/////Remake of Remi's attack, "Scarlet Meister", using a task. A bit harder than the lunatic version, I think. Not by much, anyway.
///////////////////////////
///////////////////////////

let ImgBoss = GetCurrentScriptDirectory~"stuff\ExRumia.png";
let se = GetCurrentScriptDirectory~"stuff\shot.wav";

    @Initialize {

    SetLife(3000);
SetScore(1000000);
SetTimer(30);
SetEnemyMarker(true);
    SetDamageRate(100, 30);
    SetInvincibility(150);
SetEnemyMarker(true);
    LoadGraphic(ImgBoss);
CutIn(YOUMU, "Scarlet Sign "\""Scarlet Meister"\", "", 0, 0, 0, 0);
    SetMovePosition02(GetCenterX, GetClipMinY + 120, 120);
    SetGraphicRect(30, 30, 100, 100);

meister; //attack.

    }

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

yield;

    }
    @DrawLoop {
SetTexture(ImgBoss);
if(GetSpeedX()==0){SetGraphicRect(64,1,127,64);}
else if(GetSpeedX()>0){SetGraphicRect(192,1,255,64);}
else if(GetSpeedX()<0){SetGraphicRect(128,1,191,64);}
DrawGraphic(GetX, GetY);
    }

    @Finalize {
DeleteGraphic(ImgBoss);
    }

task meister{
Concentration01(120); //charge
loop(120){yield;} //pause for two seconds.
let gatp = GetAngleToPlayer; //set the angle to player as a variable, so even if you the player moves during the attack it won't aim at another spot.
loop(5){
PlaySE(se);
CreateShot01(GetX, GetY, 7, gatp + rand(-2, 2), RED03, 0); //Five large red shots aimed at the player then with 12 small shots and 4 medium shots as well.
loop(12){
CreateShot01(GetX, GetY, rand(1, 6.8), gatp + rand(-15, 15), RED01, rand_int(0, 6));
}
loop(3){
CreateShot01(GetX, GetY, rand(3, 6.8), gatp + rand(-15, 15), RED02, rand_int(0, 3));
}
loop(4){
yield;
}
}
SetMovePosition03(rand(GetCenterX, GetCenterX + 150), rand(GetClipMinY + 60, GetClipMinY + 100), 10, 2.4); //move around towards the right side.
ascent(i in 1..19){
PlaySE(se);
CreateShot01(GetX, GetY, 7, gatp + (i*20), RED03, 0);
loop(17){
CreateShot01(GetX, GetY, rand(1, 6.8), gatp + rand(-15, 15) + (i*20), RED01, rand_int(0, 6));
}
loop(4){
CreateShot01(GetX, GetY, rand(3, 6.8), gatp + rand(-15, 15) + (i*20), RED02, rand_int(0, 3));
}
loop(2){
yield;
}
}


loop(50){yield;} //Pause for a second.
gatp = GetAngleToPlayer; //Get the angle to the player again.

//repeat for counterclock-wise movement.

loop(5){
PlaySE(se);
CreateShot01(GetX, GetY, 7, gatp + rand(-2, 2), RED03, 0);
loop(12){
CreateShot01(GetX, GetY, rand(1, 6.8), gatp + rand(-15, 15), RED01, rand_int(0, 6));
}
loop(3){
CreateShot01(GetX, GetY, rand(3, 6.8), gatp + rand(-15, 15), RED02, rand_int(0, 3));
}
loop(4){
yield;
}
}
SetMovePosition03(rand(GetCenterX - 150, GetCenterX), rand(GetClipMinY + 60, GetClipMinY + 100), 10, 2.4); //move around again, towards the left side.
ascent(i in 1..19){
PlaySE(se);
CreateShot01(GetX, GetY, 7, gatp - (i*20), RED03, 0);
loop(17){
CreateShot01(GetX, GetY, rand(1, 6.8), gatp + rand(-15, 15) - (i*20), RED01, rand_int(0, 6));
}
loop(4){
CreateShot01(GetX, GetY, rand(3, 6.8), gatp + rand(-15, 15) - (i*20), RED02, rand_int(0, 3));
}
loop(2){
yield;
}
}
meister; //repeat the whole attack, by calling the task again~!
}
}


Kanako's "Virtue of Wind God"
Beastly. Almost identical, save for minute angle variations that I just can't properly mimic. I recommend for you to download from the batch file, includes beastly sounds and whatnot. YOUTUBE VIDEO!

Code: [Select]
#TouhouDanmakufu
#Title[Virtue of Wind God]
#Text[VIRTUE OF WIND GOD, OH YEAH]
#BackGround[User(.\stuff\black.png, 1, 1)]
#BGM[.\stuff\ForeverEDIT.mp3]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////

#include_function "lib\SHOT_REPLACE\shot_replace.dnh";
let ImgBoss = GetCurrentScriptDirectory~"stuff\ExRumia.png";
let angle = 0;
let frame = 0;
let time = 0;
let groupangle = 10; //this helps group them in fours, and not pass through the center of each "circle".
let r = 0; //random number generator. Offsets the pattern randomly everytime it starts drawing.
let v = 3; //velocity, change if you're a wussy (lower) or a juggernaut (higher).
let delay = 30; //delay between the shot waves. This is changed about twenty seconds in to be smaller, as per the original spellcard.

let se = GetCurrentScriptDirectory~"stuff\shot.wav";
let ling = GetCurrentScriptDirectory~"stuff\kira00.wav";

    @Initialize {

shotinit;
    SetLife(10000);
SetScore(5000000);
SetTimer(150);
SetEnemyMarker(true);
    SetDamageRate(100, 10);
    SetInvincibility(150);
SetEnemyMarker(true);
    LoadGraphic(ImgBoss);
LoadSE(se);
LoadSE(ling);
CutIn(YOUMU, "Virute of Wind God", "", 0, 0, 0, 0);
    SetMovePosition02(GetCenterX, GetClipMinY + 160, 1);
    SetGraphicRect(30, 30, 100, 100);

windgod; //attack.

    }

    @MainLoop {
    SetCollisionA(GetX, GetY, 32);
    SetCollisionB(GetX, GetY, 16);
time++;
if(time==1200){
delay = 10;
}

yield;

    }
    @DrawLoop {
SetTexture(ImgBoss);
if(GetSpeedX()==0){SetGraphicRect(64,1,127,64);}
else if(GetSpeedX()>0){SetGraphicRect(192,1,255,64);}
else if(GetSpeedX()<0){SetGraphicRect(128,1,191,64);}
DrawGraphic(GetX, GetY);
    }

    @Finalize {
DeleteGraphic(ImgBoss);
    }

task windgod{
loop(delay){yield;}
angle = 54;
sound;
loop(15){
loop(4){
CreateShotA(0, GetX + 45*cos(270 + r) + 45*cos(angle + r), GetY + 45*sin(270 + r) + 45*sin(angle + r), 6);
SetShotDataA(0, 0, 0, angle + 10 + r, 0, 0, 0, RED56);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, RED56);
FireShot(0);
CreateShotA(1, GetX + 45*cos(342 + r) + 45*cos(angle + 72 + r), GetY + 45*sin(342 + r) + 45*sin(angle + 72 + r), 6);
SetShotDataA(1, 0, 0, angle + 82 + r, 0, 0, 0, RED56);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, RED56);
FireShot(1);
CreateShotA(2, GetX + 45*cos(54 + r) + 45*cos(angle + 144 + r), GetY + 45*sin(54 + r) + 45*sin(angle + 144 + r), 6);
SetShotDataA(2, 0, 0, angle + 154 + r, 0, 0, 0, RED56);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, RED56);
FireShot(2);
CreateShotA(3, GetX + 45*cos(126 + r) + 45*cos(angle + 216 + r), GetY + 45*sin(126 + r) + 45*sin(angle + 216 + r), 6);
SetShotDataA(3, 0, 0, angle + 226 + r, 0, 0, 0, RED56);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, RED56);
FireShot(3);
CreateShotA(4, GetX + 45*cos(198 + r) + 45*cos(angle + 288 + r), GetY + 45*sin(198 + r) + 45*sin(angle + 288 + r), 6);
SetShotDataA(4, 0, 0, angle + 298 + r, 0, 0, 0, RED56);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, RED56);
FireShot(4);
angle-=5;
groupangle+=2;
yield;
frame++;
PlaySE(se);
}
groupangle = 10;
}
frame = 0; angle-=80;
sound;
loop(9){
loop(4){
CreateShotA(0, GetX + 75*cos(306 + r) + 55*cos(angle + r), GetY + 75*sin(306 + r) + 55*sin(angle + r), 6);
SetShotDataA(0, 0, 0, angle + 10 + r, 0, 0, 0, PURPLE56);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, PURPLE56);
FireShot(0);
CreateShotA(1, GetX + 75*cos(18 + r) + 55*cos(angle + 72 + r), GetY + 75*sin(18 + r) + 55*sin(angle + 72 + r), 6);
SetShotDataA(1, 0, 0, angle + 82 + r, 0, 0, 0, PURPLE56);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, PURPLE56);
FireShot(1);
CreateShotA(2, GetX + 75*cos(90 + r) + 55*cos(angle + 144 + r), GetY + 75*sin(90 + r) + 55*sin(angle + 144 + r), 6);
SetShotDataA(2, 0, 0, angle + 154 + r, 0, 0, 0, PURPLE56);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, PURPLE56);
FireShot(2);
CreateShotA(3, GetX + 75*cos(162 + r) + 55*cos(angle + 216 + r), GetY + 75*sin(162 + r) + 55*sin(angle + 216 + r), 6);
SetShotDataA(3, 0, 0, angle + 226 + r, 0, 0, 0, PURPLE56);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, PURPLE56);
FireShot(3);
CreateShotA(4, GetX + 75*cos(234 + r) + 55*cos(angle + 288 + r), GetY + 75*sin(234 + r) + 55*sin(angle + 288 + r), 6);
SetShotDataA(4, 0, 0, angle + 298 + r, 0, 0, 0, PURPLE56);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, PURPLE56);
FireShot(4);
angle-=5;
groupangle+=2;
yield;
frame++;
PlaySE(se);
}
groupangle = 10;
}
frame = 0; angle-=142;
sound;
loop(10){
loop(4){
CreateShotA(0, GetX + 112*cos(342 + r) + 75*cos(angle + r), GetY + 112*sin(342 + r) + 75*sin(angle + r), 6);
SetShotDataA(0, 0, 0, angle + 10 + r, 0, 0, 0, BLUE56);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, BLUE56);
FireShot(0);
CreateShotA(1, GetX + 112*cos(54 + r) + 75*cos(angle + 72 + r), GetY + 112*sin(54 + r) + 75*sin(angle + 72 + r), 6);
SetShotDataA(1, 0, 0, angle + 82 + r, 0, 0, 0, BLUE56);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, BLUE56);
FireShot(1);
CreateShotA(2, GetX + 112*cos(126 + r) + 75*cos(angle + 144 + r), GetY + 112*sin(126 + r) + 75*sin(angle + 144 + r), 6);
SetShotDataA(2, 0, 0, angle + 154 + r, 0, 0, 0, BLUE56);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, BLUE56);
FireShot(2);
CreateShotA(3, GetX + 112*cos(198 + r) + 75*cos(angle + 216 + r), GetY + 112*sin(198 + r) + 75*sin(angle + 216 + r), 6);
SetShotDataA(3, 0, 0, angle + 226 + r, 0, 0, 0, BLUE56);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, BLUE56);
FireShot(3);
CreateShotA(4, GetX + 112*cos(270 + r) + 75*cos(angle + 288 + r), GetY + 112*sin(270 + r) + 75*sin(angle + 288 + r), 6);
SetShotDataA(4, 0, 0, angle + 298 + r, 0, 0, 0, BLUE56);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, BLUE56);
FireShot(4);
angle-=4.7;
groupangle+=2.1;
yield;
frame++;
PlaySE(se);
}
groupangle = 10;
}
frame = 0;
loop(delay){yield;}
angle = 140;
r = rand(0, 72);
sound;
loop(15){
loop(4){
CreateShotA(0, GetX + 45*cos(270 + r) + 45*cos(angle + r), GetY + 45*sin(270 + r) + 45*sin(angle + r), 6);
SetShotDataA(0, 0, 0, angle + 10 + r, 0, 0, 0, GREEN56);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, GREEN56);
FireShot(0);
CreateShotA(1, GetX + 45*cos(342 + r) + 45*cos(angle + 72 + r), GetY + 45*sin(342 + r) + 45*sin(angle + 72 + r), 6);
SetShotDataA(1, 0, 0, angle + 82 + r, 0, 0, 0, GREEN56);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, GREEN56);
FireShot(1);
CreateShotA(2, GetX + 45*cos(54 + r) + 45*cos(angle + 144 + r), GetY + 45*sin(54 + r) + 45*sin(angle + 144 + r), 6);
SetShotDataA(2, 0, 0, angle + 154 + r, 0, 0, 0, GREEN56);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, GREEN56);
FireShot(2);
CreateShotA(3, GetX + 45*cos(126 + r) + 45*cos(angle + 216 + r), GetY + 45*sin(126 + r) + 45*sin(angle + 216 + r), 6);
SetShotDataA(3, 0, 0, angle + 226 + r, 0, 0, 0, GREEN56);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, GREEN56);
FireShot(3);
CreateShotA(4, GetX + 45*cos(198 + r) + 45*cos(angle + 288 + r), GetY + 45*sin(198 + r) + 45*sin(angle + 288 + r), 6);
SetShotDataA(4, 0, 0, angle + 298 + r, 0, 0, 0, GREEN56);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, GREEN56);
FireShot(4);
angle-=5;
groupangle+=2;
yield;
frame++;
PlaySE(se);
}
groupangle = 10;
}
frame = 0; angle-=165;
sound;
loop(9){
loop(4){
CreateShotA(0, GetX + 75*cos(306 + r) + 55*cos(angle + r), GetY + 75*sin(306 + r) + 55*sin(angle + r), 6);
SetShotDataA(0, 0, 0, angle + 10 + r, 0, 0, 0, YELLOW56);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, YELLOW56);
FireShot(0);
CreateShotA(1, GetX + 75*cos(18 + r) + 55*cos(angle + 72 + r), GetY + 75*sin(18 + r) + 55*sin(angle + 72 + r), 6);
SetShotDataA(1, 0, 0, angle + 82 + r, 0, 0, 0, YELLOW56);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, YELLOW56);
FireShot(1);
CreateShotA(2, GetX + 75*cos(90 + r) + 55*cos(angle + 144 + r), GetY + 75*sin(90 + r) + 55*sin(angle + 144 + r), 6);
SetShotDataA(2, 0, 0, angle + 154 + r, 0, 0, 0, YELLOW56);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, YELLOW56);
FireShot(2);
CreateShotA(3, GetX + 75*cos(162 + r) + 55*cos(angle + 216 + r), GetY + 75*sin(162 + r) + 55*sin(angle + 216 + r), 6);
SetShotDataA(3, 0, 0, angle + 226 + r, 0, 0, 0, YELLOW56);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, YELLOW56);
FireShot(3);
CreateShotA(4, GetX + 75*cos(234 + r) + 55*cos(angle + 288 + r), GetY + 75*sin(234 + r) + 55*sin(angle + 288 + r), 6);
SetShotDataA(4, 0, 0, angle + 298 + r, 0, 0, 0, YELLOW56);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, YELLOW56);
FireShot(4);
angle-=5;
groupangle+=2;
yield;
frame++;
PlaySE(se);
}
groupangle = 10;
}
frame = 0; angle-=144;
sound;
loop(10){
loop(4){
CreateShotA(0, GetX + 112*cos(342 + r) + 75*cos(angle + r), GetY + 112*sin(342 + r) + 75*sin(angle + r), 6);
SetShotDataA(0, 0, 0, angle + 10 + r, 0, 0, 0, ORANGE56);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, ORANGE56);
FireShot(0);
CreateShotA(1, GetX + 112*cos(54 + r) + 75*cos(angle + 72 + r), GetY + 112*sin(54 + r) + 75*sin(angle + 72 + r), 6);
SetShotDataA(1, 0, 0, angle + 82 + r, 0, 0, 0, ORANGE56);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, ORANGE56);
FireShot(1);
CreateShotA(2, GetX + 112*cos(126 + r) + 75*cos(angle + 144 + r), GetY + 112*sin(126 + r) + 75*sin(angle + 144 + r), 6);
SetShotDataA(2, 0, 0, angle + 154 + r, 0, 0, 0, ORANGE56);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, ORANGE56);
FireShot(2);
CreateShotA(3, GetX + 112*cos(198 + r) + 75*cos(angle + 216 + r), GetY + 112*sin(198 + r) + 75*sin(angle + 216 + r), 6);
SetShotDataA(3, 0, 0, angle + 226 + r, 0, 0, 0, ORANGE56);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, ORANGE56);
FireShot(3);
CreateShotA(4, GetX + 112*cos(270 + r) + 75*cos(angle + 288 + r), GetY + 112*sin(270 + r) + 75*sin(angle + 288 + r), 6);
SetShotDataA(4, 0, 0, angle + 298 + r, 0, 0, 0, ORANGE56);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, ORANGE56);
FireShot(4);
angle-=4.7;
groupangle+=2.1;
yield;
frame++;
PlaySE(se);
}
groupangle = 10;
}
frame = 0;
r = rand(0, 72);
windgod;
}

task sound{
loop(160){yield;}
PlaySE(ling);
}
}
« Last Edit: May 08, 2009, 02:51:48 AM by Naut »

Hat

  • Just an unassuming chapeau.
  • I will never be ready.
Re: Touhou Spellcard Replica Thread
« Reply #1 on: May 07, 2009, 04:09:41 AM »
NGYAHAHAHAHAHAHH 8D

*steals and runs* Time to waste my night hours away trying to beat VoWG XD

Yeah, wow, okay. On Yamame's card, my computer slowed down to 30 fps, and VoWG was going at 45. I hate this thing.
« Last Edit: May 07, 2009, 04:17:59 AM by Karfloozly »

Re: Touhou Spellcard Replica Thread
« Reply #2 on: May 07, 2009, 04:26:26 AM »
Yamame's slowed to 30!? Good lord I don't do anything particularly computer-hogging in that one (I won't mention VoWG, we can see there are many bullets in that...), so I have no idea what could be causing that slowdown. I'll take another look but I'm going to bed soon so I might not have a reply until tomorrow.

EDIT: You could try taking out all the sound effects in each card, but other than that I cant think of anything. I'll think about this more and try to come up with something for tomorrow.
« Last Edit: May 07, 2009, 04:28:39 AM by Naut »

Hat

  • Just an unassuming chapeau.
  • I will never be ready.
Re: Touhou Spellcard Replica Thread
« Reply #3 on: May 07, 2009, 04:30:36 AM »
My computer is dumb, final answer. o~o I dunno.

stargroup

  • Insufferable Faggot
  • Telling a mod to basically fuck off... GOOD IDEA!
Re: Touhou Spellcard Replica Thread
« Reply #4 on: May 07, 2009, 10:37:51 PM »
holy shit why did I not notice this before

I love you for making danmakufu replicas for the card I want the most. I think you can guess which one.

LOOOOOOOVE YOU

Don't think too much of my measly wants, but I would love it if you made one for red magic.

Also, I tried to make eternal meek, but it didn't turn out so well. I'll post it anyways, so you guys can tweak it if you want to. Didn't put the official life or timer values though. I didn't check this out for a long time either so I don't even remember how bad this actually was haha.

Code: [Select]
#TouhouDanmakufu
#Title[Conjuring ?uEternal Meek?v]
#Text[Tutorial]
#Image[.\img.png]
#BackGround[Default]
#BGM[.\bgm.mp3]
#PlayLevel[Lunatic]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {
    let BossImage = ".\Enemy.png";
    let BossCutIn = ".\Enemy.png";
    let frame = 0;
    @Initialize {
        LoadGraphic(BossImage);
        SetLife(100);
        SetDamageRate(6, 6);
        SetTimer(50);
        SetInvincibility(30);
        CutIn(YOUMU, "Maid Sign - ?uEternal Meek?v", BossCutIn, 0, 0, 200, 600);
        SetScore(500000);
        SetEnemyMarker(true);
        Concentration01(60);
        Concentration02(60);
        MagicCircle(false);
        SetEffectForZeroLife(50, 50, 0.6);
    }
    @MainLoop {
        SetCollisionA(GetCenterX(), 150, 32);
        SetCollisionB(GetCenterX(), 150, 24);
        if(frame==21){
            let randangle1 = rand(0, 360);
            let randangle2 = rand(0, 360);
            let randangle3 = rand(0, 360);
            let randangle4 = rand(0, 360);
            CreateShot01(GetCenterX(), 150, 4.5, randangle1, BLUE01, 5);
            CreateShot01(GetCenterX(), 150, 4.5, randangle2, BLUE01, 5);
            CreateShot01(GetCenterX(), 150, 4.5, randangle3, BLUE01, 5);
            CreateShot01(GetCenterX(), 150, 4.5, randangle4, BLUE01, 5);
            frame = 20;   
        }
        frame++;         
    }

    @DrawLoop {
    }

    @Finalize {
    }

    @BackGround {
    }
}
« Last Edit: May 07, 2009, 10:42:51 PM by stargroup »

Re: Touhou Spellcard Replica Thread
« Reply #5 on: May 07, 2009, 10:58:45 PM »
I am unfamiliar with "Red Magic...", the spellcard. Care to give a link or something?

I'll check your script in a few.

Drake

  • *
Re: Touhou Spellcard Replica Thread
« Reply #6 on: May 07, 2009, 11:25:30 PM »
Red Magic's the less-lethal version of Scarlet Gensokyo.

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

stargroup

  • Insufferable Faggot
  • Telling a mod to basically fuck off... GOOD IDEA!
Re: Touhou Spellcard Replica Thread
« Reply #7 on: May 08, 2009, 12:04:36 AM »
Oops my bad. Yeah I meant Scarlet Gensokyo

EDIT: yeah ok I'm retarded my bad  :-[
« Last Edit: May 08, 2009, 12:38:19 AM by stargroup »

Drake

  • *
Re: Touhou Spellcard Replica Thread
« Reply #8 on: May 08, 2009, 12:17:20 AM »
you need to download the shot replace script like everyone's only said fifty times

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

Re: Touhou Spellcard Replica Thread
« Reply #9 on: May 08, 2009, 12:37:42 AM »
Way to be helpful Drake, GAWD~!

SHOT REPLACE SCRIPT HOLY DICKS ON A STICK

Read the readme.txt, before anything!

BIG EDIT!

Ohoho I see you're new to Danmakufu, stargroup. Welcome welcome. So let's go over your script (in the middle of a random thread... But hey, I'm happy to help where needed).

Alrighty, first off you'll want to move the boss from that silly position at the top middle of the screen. To do this we'll type, in @Initialize (so she does this at the very start of the script only once):

Code: [Select]
        SetMovePosition02(GetCenterX, GetCenterY, 70);
Which tells the boss to move to the center of the screen, taking 70 frames to get there! I won't fill this post with movement functions, as I have already ruined somebody else's thread with them here! (Protip: take a look around, a few of us have probably already answered many of the issues you might be experiencing in other threads. It isn't much reading compared to the old forums, plus the areas you'll want to look in have thread titles like "HELP", so do yourself a favour and look around)

Alrighty, next thing you'll want to do is set those coordinates in your SetCollisionA and SetCollisionB to GetX, GetY. This will tell Danmakufu, every frame, to make the boss' collision detection circles on the boss' position! Very useful, methinks.

Something you'll definately want to do is keep this page for your records. It contains a mighty overview of the default bullet types, so you can change those bullets from BLUE01's to something prettier (erm, should you feel like it, that is).

And one last thing. It is unecessary to store those random angles in variables, since they're completely random and ever-changing. So, for the angle parameter in CreateShot01, you can just put "rand(0, 360)" instead of "randangle" 1 through 4. Works for all four bullets, which is pretty convienient, eh.


If you feel like you wanna remake this card and fancy it up as you see fit, I'll throw the finished version on the first post, crediting it to you. But for now, work on fixing some of these issues, and practice practice practice! Good luck.
« Last Edit: May 08, 2009, 01:06:40 AM by Naut »

stargroup

  • Insufferable Faggot
  • Telling a mod to basically fuck off... GOOD IDEA!
Re: Touhou Spellcard Replica Thread
« Reply #10 on: May 08, 2009, 01:04:39 AM »
Aha, thanks.

Just a curious question, how much experience do you have with Actionscript and scripting in general?

Re: Touhou Spellcard Replica Thread
« Reply #11 on: May 08, 2009, 01:10:48 AM »
Absolutely none, Danmakufu is the only language I know...understand...dabble with... fail at, save for English.

Hat

  • Just an unassuming chapeau.
  • I will never be ready.
Re: Touhou Spellcard Replica Thread
« Reply #12 on: May 09, 2009, 05:48:04 PM »
I used to use actionscript, but I grew tired of it. Danmakufu is much more comprehensive (i.e. you don't get ERRORS EVERYWHERE OH GOD)

Infy♫

  • Demonic★Moe
  • *
Re: Touhou Spellcard Replica Thread
« Reply #13 on: May 12, 2009, 05:28:02 PM »
a weird version of "unilateral contact"
for some reason I called unilateral food supply...
anyways, the basics are the ones that count! the bullets do move like they should!
Code: [Select]
#TouhouDanmakufu
#Title[Taboo "Unilateral Food Supply V2"]
#Text[]
#Image[.\ss.jpg]
#BackGround[IceMountain]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {
let frame = 0;
let deg = 0;
let rotvar = 0;
let frame2 = 0;
let frame3 = 0;
let frame4 = 0;
let BossImage = GetCurrentScriptDirectory ~ "huhu.gif";
let BossCutIn = GetCurrentScriptDirectory ~ "ss.jpg";
let Back = GetCurrentScriptDirectory ~ "Wormhole.jpg";
LoadSE(GetCurrentScriptDirectory ~ "tan01.wav");
LoadSE(GetCurrentScriptDirectory ~ "kira00.wav");
LoadSE(GetCurrentScriptDirectory ~ "enep01.wav");
    @Initialize {
        LoadGraphic(BossCutIn);
        LoadGraphic(BossImage);
        LoadGraphic(Back);
        SetLife(1500);
        SetDamageRate(10, 10);
        SetTimer(120);
        SetInvincibility(30);
        CutIn(YOUMU, "Taboo "/"A Supermassive Black Hole Named Flandre"/"", BossCutIn, 0, 0, 200, 600);
        SetScore(5000000);
        SetEnemyMarker(true);
        SetDurableSpellCard;
        Concentration01(120);
        Concentration02(60);
        MagicCircle(true);
        SetEffectForZeroLife(30, 100, 1);
        SetX(GetCenterX());
        SetY(100);
    }

    @MainLoop {
        SetCollisionA(GetX, GetY, 32);
        SetCollisionB(GetX, GetY, 24);
frame++;
yield;
frame2++;
if(frame == 150){
loop(200){
CreateShotPlanet(GetX,GetY,rand(1,360),rand(3,8),1);
}
}

if(frame == 300){
frame = 0;
loop(200){
CreateShotPlanet(GetX,GetY,rand(1,360),rand(3,8),-1);
}
}
}
    @DrawLoop {
SetTexture(BossImage);
        DrawGraphic(GetX, GetY);

    }

    @Finalize {
DeleteGraphic(BossImage);
DeleteGraphic(BossCutIn);
DeleteGraphic(Back);
    }

    @BackGround {
rotvar += 1;
SetGraphicAngle (0,0,rotvar);
SetTexture (Back);
SetGraphicRect (0,0,1024,768);
DrawGraphic (GetCenterX(), GetCenterY());
    }
task CreateShotPlanet(x,y,d,vv,i) {
   let  obj = Obj_Create(OBJ_SHOT);
let frame = 0;
let angle = d;
let oldangle = 0;
let jump = 0;
let frame2 = 0;
    Obj_SetPosition   (obj, x, y);
    Obj_SetSpeed      (obj, vv);
    Obj_SetAngle      (obj, d);
    if(i == 1){
ObjShot_SetGraphic(obj, RED32);
}
    if(i == -1){
ObjShot_SetGraphic(obj, BLUE32);
}
    ObjShot_SetDelay  (obj, 0);
    Obj_SetAutoDelete(obj,false);
while(! Obj_BeDeleted(obj)){
frame++;
if(frame < 80){
Obj_SetSpeed(obj,Obj_GetSpeed(obj) - Obj_GetSpeed(obj) /60);
}
if(frame > 79 && frame < 120){
angle+=4.3 * i;
Obj_SetAngle(obj,angle);
Obj_SetSpeed(obj,3);
 //Obj_SetSpeed   (obj, 2* ((GetX - Obj_GetX(obj))^2 + (GetY - Obj_GetY(obj))^2)^0.5* pi /90);
}
if(frame == 120){
Obj_SetSpeed(obj,6);
}
if(frame == 500){
ObjShot_FadeDelete(obj);
}
yield;

}
}
}

Re: Touhou Spellcard Replica Thread
« Reply #14 on: May 12, 2009, 08:32:49 PM »
I meant this thread was for direct duplicates of the spellcards (or as close as you can get them), not "based on this spellcard", or something like that.

Anyways, be sure to include any files you need to run a spellcard too, some of us don't have "huhu.gif" or "ss.jpg". Your CutIn is incorrect as well, you have:

Code: [Select]
        CutIn(YOUMU, "Taboo "/"A Supermassive Black Hole Named Flandre"/"", BossCutIn, 0, 0, 200, 600);
when it should be

Code: [Select]
        CutIn(YOUMU, "Taboo "\""A Supermassive Black Hole Named Flandre"\", BossCutIn, 0, 0, 200, 600);
Might explain the wierd text that's displayed instead of the text you've specified.
Isn't Unilateral Contact Ran's spellcard, not Flandre's? I can see what you're doing though, but we are looking for copies, right.

Sorry for being nitpicky, but that's really what this thread is about. The card is fun to play, albeit a bit long, but fun nonetheless.

RavenEngie

  • Now how'm I supposed to stop those mean ol' Mother Hubbards from tearin' me a structurally superfluous new behind? The answer, use a gun. If that don't work...
  • Gaming-Obsessed Illusionist
Re: Touhou Spellcard Replica Thread
« Reply #15 on: May 13, 2009, 09:39:16 PM »
I meant this thread was for direct duplicates of the spellcards (or as close as you can get them), not "based on this spellcard", or something like that.

I wonder if all my Yukari spells would fit into that... Apart from Danmaku Bounded Field and Boundary of Humans and Youkai, since I had to mess about with them due to laziness...

On a side note, HELLO AGAIN, EVERYONE!
WALUIGI BACK! NOW THIS SIG IS FUNNY AGAIN!
Mah arts! :3

Re: Touhou Spellcard Replica Thread
« Reply #16 on: May 13, 2009, 09:44:04 PM »
Hey, do you think you could replicate Subconscious "Rorschach in Danmaku"?

Drake

  • *
Re: Touhou Spellcard Replica Thread
« Reply #17 on: May 13, 2009, 10:01:13 PM »
I could, the only thing in the way is that I don't know how everything shoots off in the same direction like it does. Planting the bullets + movement should be easy enough to do.

Oh and I guess laziness.

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

Re: Touhou Spellcard Replica Thread
« Reply #18 on: May 14, 2009, 12:12:51 AM »
Easy isn't something I would describe. I've already posted the code for that bullet pattern that Koishi does, so if somebody wants to throw it into a spellcard you're always welcome to. And no, I didn't make the code, so don't ask me questions!

And....

Welcome back Ravenlock~!

stargroup

  • Insufferable Faggot
  • Telling a mod to basically fuck off... GOOD IDEA!
Re: Touhou Spellcard Replica Thread
« Reply #19 on: May 20, 2009, 01:49:29 AM »
You know what should be relatively easy to replicate?

Emerald Megalith.

I'm also surprised no one requested QED 495 Ripples of Bullshit
« Last Edit: May 20, 2009, 02:10:17 AM by stargroup »

Hat

  • Just an unassuming chapeau.
  • I will never be ready.
Re: Touhou Spellcard Replica Thread
« Reply #20 on: May 20, 2009, 03:19:14 AM »
Because QED is extremely simple? Frankly, Subterranean Sun would be a much better thing to reproduce.

Re: Touhou Spellcard Replica Thread
« Reply #21 on: May 20, 2009, 03:40:32 AM »
...Now why would you go and say that.

Subterranean Sun is nearing completion, I'm just testing angular values to properly mimic the card's.
« Last Edit: May 21, 2009, 02:23:10 AM by Naut »

stargroup

  • Insufferable Faggot
  • Telling a mod to basically fuck off... GOOD IDEA!
Re: Touhou Spellcard Replica Thread
« Reply #22 on: May 21, 2009, 03:24:09 AM »
well, someone either post a QED or make one anyways

I want one ;_;

CK Crash

  • boozer
Re: Touhou Spellcard Replica Thread
« Reply #23 on: May 21, 2009, 10:12:42 AM »
If anything, QED would be a great example to show people how to make bouncing bullets, which would also help me to understand the more complicated bullet commands. I say go for it.

Hat

  • Just an unassuming chapeau.
  • I will never be ready.
Re: Touhou Spellcard Replica Thread
« Reply #24 on: May 21, 2009, 05:40:46 PM »
Eep, I didn't intend on sounding mean... o.o I'll do it right away, to make up for it, mm? I already have 99% of it written (was reproducing one of EX-Alice's attacks, turned out looking like some kind of spirographic nightmare, eheh)

Ack, I have returned, but with a problem of my own. I can't see a way to normalize the bullet reflection coordinates so that they all reflect at the same time. Some of them pass the clip boundaries earlier than others, so the rings I've made for OTN are kind of busted.

Code: [Select]
#TouhouDanmakufu
#Title[QED for OTN]
#Text[Ka-pow]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

    let ImgBoss = "script\img\ExRumia.png";
    let timer = 0;
    let timerex = 240;
    let angle = 0;
    let x_feed;
    let y_feed;
    #include_function "lib\SHOT_REPLACE\shot_replace.dnh"

    @Initialize {
        SetLife(6000);
        SetTimer(120);
        SetScore(1000000);

        SetMovePosition02(GetCenterX, GetCenterY - 120, 120);
        CutIn(YOUMU, "QED "\""495 Years of Solitude"\", "", 0, 0, 0, 0);
        SetDamageRate(75, 0);

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

    @MainLoop {
        SetCollisionA(GetX, GetY, 32);
        SetCollisionB(GetX, GetY, 16);
        if(GetLife>=4000){timerex=240;}
        if(GetLife<4000 && GetLife>=2000){timerex=120;}
        if(GetLife<2000 && GetLife>=750){timerex=90;}
        if(GetLife<750){
            SetDamageRate(50, 0);
            timerex=60;}
        if(timer>=timerex){
        x_feed = rand(GetCenterX-120, GetCenterX+120);
        y_feed = rand(GetClipMinY + 20, GetClipMinY+150);
        angle = rand(0, 360);
        loop(120){
        Tshot(angle, x_feed, y_feed);
        timer = 0;
        angle+=3;}
        }

        timer++;
        yield;
       
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }
task Tshot(let angletaken, let orix, let oriy){
          loop(120){yield;}
          let getxa;
          let getya;
          let anglereflex;
          let reflectcount = 0;
          let objshot = Obj_Create(OBJ_SHOT);
          reflectcount = 0;
          Obj_SetPosition(objshot, orix, oriy);
          ObjShot_SetGraphic(objshot, BLUE12);
          Obj_SetSpeed(objshot, 1.5);
          Obj_SetAlpha(objshot, 255);
          Obj_SetAngle(objshot, angletaken);
          Obj_SetCollisionToPlayer(objshot, true);
          ObjShot_SetDelay(objshot, 6);
          while(!Obj_BeDeleted(objshot)){
           getxa = Obj_GetX(objshot);
           getya = Obj_GetY(objshot);
           if((getxa < GetClipMinX || getxa>GetClipMaxX) && reflectcount == 0){
            anglereflex = -angletaken+180;
            Obj_SetAngle(objshot, anglereflex);
            reflectcount = 5;}
           if((getya < GetClipMinY) && reflectcount == 0){
            anglereflex = -angletaken;
            Obj_SetAngle(objshot, anglereflex);
            reflectcount = 5;}
           
          yield;
          }
          }
}
I apologize for the exploded script, I modified it heavily at times (this was my first object-bullet adventure), and so it gets kind of garbled in places.
« Last Edit: May 21, 2009, 06:10:26 PM by Karfloozly »

Re: Touhou Spellcard Replica Thread
« Reply #25 on: May 21, 2009, 09:54:03 PM »
Hmm, I'm assuming you mean "why do my bullet waves look weird when the bullets reflect?"

Like you've said, it's because they all go over the ClipMax/Min at different times. So, to make the waves perfect, we get how far they've moved beyond the ClipMax/Min, then set their position to the other side (to get how far the bullet went outside of the field, we say GetClipMinX - position, then set it's coordinates to GetClipMinX + position), which will restructure the wave back into it's perfect circle form. Here it is in code:

Code: [Select]
#TouhouDanmakufu
#Title[QED for OTN]
#Text[Ka-pow]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {

    let ImgBoss = "script\img\ExRumia.png";
    let timer = 0;
    let timerex = 240;
    let angle = 0;
    let x_feed;
    let y_feed;
    #include_function "lib\SHOT_REPLACE\shot_replace.dnh"

    @Initialize {
        SetLife(6000);
        SetTimer(120);
        SetScore(1000000);

        SetMovePosition02(GetCenterX, GetCenterY - 120, 120);
        CutIn(YOUMU, "QED "\""495 Years of Solitude"\", "", 0, 0, 0, 0);
        SetDamageRate(75, 0);

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

    @MainLoop {
        SetCollisionA(GetX, GetY, 32);
        SetCollisionB(GetX, GetY, 16);
        if(GetLife>=4000){timerex=240;}
        if(GetLife<4000 && GetLife>=2000){timerex=120;}
        if(GetLife<2000 && GetLife>=750){timerex=90;}
        if(GetLife<750){
            SetDamageRate(50, 0);
            timerex=60;}
        if(timer>=timerex){
        x_feed = rand(GetCenterX-120, GetCenterX+120);
        y_feed = rand(GetClipMinY + 20, GetClipMinY+150);
        angle = rand(0, 360);
        loop(120){
        Tshot(angle, x_feed, y_feed);
        timer = 0;
        angle+=3;}
        }

        timer++;
        yield;
      
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(ImgBoss);
    }
task Tshot(let angletaken, let orix, let oriy){
          loop(120){yield;}
          let getxa;
          let getya;
          let anglereflex;
          let reflectcount = 0;
          let objshot = Obj_Create(OBJ_SHOT);
          reflectcount = 0;
          Obj_SetPosition(objshot, orix, oriy);
          ObjShot_SetGraphic(objshot, BLUE12);
          Obj_SetSpeed(objshot, 1.5);
          Obj_SetAlpha(objshot, 255);
          Obj_SetAngle(objshot, angletaken);
          Obj_SetCollisionToPlayer(objshot, true);
          ObjShot_SetDelay(objshot, 6);
          while(!Obj_BeDeleted(objshot)){
           getxa = Obj_GetX(objshot);
           getya = Obj_GetY(objshot);
           if(getxa < GetClipMinX && reflectcount == 0){
            anglereflex = -angletaken+180;
let position = GetClipMinX - Obj_GetX(objshot);
Obj_SetX(objshot, GetClipMinX + position);
            Obj_SetAngle(objshot, anglereflex);
            reflectcount = 5;}
           if(getxa > GetClipMaxX && reflectcount == 0){
            anglereflex = -angletaken+180;
let position = GetClipMaxX - Obj_GetX(objshot);
Obj_SetX(objshot, GetClipMaxX + position);
            Obj_SetAngle(objshot, anglereflex);
            reflectcount = 5;}
           if((getya < GetClipMinY) && reflectcount == 0){
            anglereflex = -angletaken;
let position = GetClipMinY - Obj_GetY(objshot);
Obj_SetY(objshot, GetClipMinY + position);
            Obj_SetAngle(objshot, anglereflex);
            reflectcount = 5;}
          yield;
          
          }
          }
}


Had to split your Obj_GetX's for the bullet task to set the position correctly for both sides of the playing field. Hopefully that addressed your problem.

Also, remember that Flandre goes into batshit crazy mode for the last twenty seconds of the card!
« Last Edit: May 21, 2009, 09:58:35 PM by Naut »

Hat

  • Just an unassuming chapeau.
  • I will never be ready.
Re: Touhou Spellcard Replica Thread
« Reply #26 on: May 22, 2009, 03:39:07 AM »
Yeah, I already knew that... I just didn't know HOW to get the distance from the barrier before it hit, so it would reflect all nice and pretty. o-o Well, thanks anyway. I can learn from that too. =D Though, none of my spellcards-to-be use object bullets just yet.

Tenbatsu! Myon Rabbie

  • I cannot and will not learn.
  • Letty is sick of my shit.
Re: Touhou Spellcard Replica Thread
« Reply #27 on: May 22, 2009, 01:28:45 PM »
Hurr.. trying QED one..
EDIT: Anyways, tried.
Its not as hard as in the Official Game.
But I guess if you practice this like hell, you could capture QED in EoSD.
Timed out the card, lost one life and about.. two to three bombs.
Good job, anyways.
« Last Edit: May 22, 2009, 01:36:53 PM by Myon »

Re: Touhou Spellcard Replica Thread
« Reply #28 on: May 28, 2009, 02:30:49 AM »
for some odd reason, your VoWG card isn't showing up on the select, but all of your other cards do. hmm..

Anyway, can you replicate Yuyuko's final spell?

Re: Touhou Spellcard Replica Thread
« Reply #29 on: May 28, 2009, 02:35:07 AM »
Whenever I get around to finishing Subterranean Sun, I'll start on her spell I guess. Most of the code is in TalonPain's Satori music synchronized script anyway, so you could probably do it faster than I'll get around to it.

Man I'm lazy, been playing other people's scripts more than actually coding... Eugh.

Can you guys like... Stop making good scripts? Srsly.