Virtue of Brofist
Code blatantly stolen from Naut.
#TouhouDanmakufu
#Title[Virtue of Brofist]
#Text[HOLY FUCKING SHIT AAAAAAHHH]
#BackGround[User(.\stuff\black.png, 1, 1)]
#BGM[.\stuff\ronaldrape.mp3]
#Player[FREE]
#ScriptVersion[2]
script_enemy_main {
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
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 = 5; //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 {
LoadUserShotData(GetCurrentScriptDirectory ~ "shot.txt");
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, 300);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(0, 160 - frame, 0, angle + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(1, 160 - frame, 0, angle + 72 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(2, 160 - frame, 0, angle + 144 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(3, 160 - frame, 0, angle + 216 + groupangle + r, 0, -0.05, -v, 300);
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, 300);
SetShotDataA(4, 160 - frame, 0, angle + 288 + groupangle + r, 0, -0.05, -v, 300);
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);
}
}
And while I'm at it, why not his Yamame card too
#TouhouDanmakufu
#Title[Bro "Brofist's Nest"]
#Text[Simply 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);
LoadUserShotData(GetCurrentScriptDirectory ~ "shot.txt");
}
@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, 300);
SetShotDataA(0, 120 - delay, 0, angle - 190, -r, 0.1, 4, 300);
SetShotDataA(0, 160 - delay, 4, angle - 190 - (r*50), 0, -0.05, 1.5, 300);
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, 300);
SetShotDataA(0, 120 - delay, 0, angle - 170, r, 0.1, 4, 300);
SetShotDataA(0, 160 - delay, 4, angle - 170 + (r*50), 0, -0.05, 1.5, 300);
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);
}
}
If your computer can run these scripts with no frame drops, then you have a godly computer.
If you can somehow capture these then you are above even godly.