Maidens of the Kaleidoscope
~Hakurei Shrine~ => Rika and Nitori's Garage Experiments => Topic started by: Drake on October 22, 2009, 08:22:51 PM
-
THREAD
http://www.mediafire.com/download.php?qgy2inmnmbc (http://www.mediafire.com/download.php?qgy2inmnmbc)
INVESTIGATE
I AM EXCITED AND HAVE BEEN RUMMAGING FOR THE PAST FEW HOURS
Note: Dialogue is all images. The boxes, the portraits, fonts, everything. This is a VERY GOOD IDEA.
Note: SOUND EFFECTS NEED TO BE QUIETER
Note: Max Point Value Multiplier is right there to use. A few changes will prove easy to use.
Note: Apparently using ZUN sound effects is fine.
Note: SetDefaultStatusVisible(false); removes the data from the sidebar.
Note: Drawing stuff on the side of the screen:
task PlayerOther{
LoadGraphic(sys); //the system image
yield;
loop{
nGraze = truncate(GetGraze); //gets graze and score etc
nScore = truncate(GetScore);
let i_nScore = ToString(nScore); //converts to strings
let i_nGraze = ToString(nGraze);
let i_nPower = ToString(nPower);
ascent(let i in (length(i_nScore)-7)..(length(i_nScore))){ //a makeshift CharAt function
i_nScore = erase(i_nScore,(length(i_nScore)-1));
}
ascent(let i in (length(i_nGraze)-7)..(length(i_nGraze))){
i_nGraze = erase(i_nGraze,(length(i_nGraze)-1));
}
while(length(i_nScore) < 10){ //cantonates zeros when the score doesn't have 10 digits
i_nScore = "0" ~ i_nScore;
}
let oScore = []; //OBJECT ARRAYS WOO
let oGraze = []; //GHOST BLOWJOB
let oPower = [];
ascent(let p in 0..length(i_nScore)){ //drawing, should be obvious
oScore = oScore ~ [p];
oScore[p] = Obj_Create(OBJ_EFFECT);
ObjEffect_SetPrimitiveType(oScore[p], PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(oScore[p], 4);
ObjEffect_SetTexture(oScore[p],sys);
ObjEffect_SetLayer(oScore[p],8); //this spontaneously works for some reason
ObjEffect_SetVertexXY(oScore[p], 0, -8, -8);
ObjEffect_SetVertexXY(oScore[p], 1, -8, 8);
ObjEffect_SetVertexXY(oScore[p], 2, 8, -8);
ObjEffect_SetVertexXY(oScore[p], 3, 8, 8);
let cs = nString1(i_nScore[p]);
ObjEffect_SetVertexUV(oScore[p], 0, cs, 22);
ObjEffect_SetVertexUV(oScore[p], 1, cs, 37);
ObjEffect_SetVertexUV(oScore[p], 2, cs + 15,22);
ObjEffect_SetVertexUV(oScore[p], 3, cs + 15,37);
Obj_SetPosition(oScore[p],525 + p * 12,82); //position of score = 525 + spaces
}
ascent(let p in 0..length(i_nGraze)){ //drawing again
oGraze = oGraze ~ [p];
oGraze[p] = Obj_Create(OBJ_EFFECT);
ObjEffect_SetPrimitiveType(oGraze[p], PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(oGraze[p], 4);
ObjEffect_SetTexture(oGraze[p],sys);
ObjEffect_SetLayer(oGraze[p],8); //SPONTANEOUSLY
ObjEffect_SetVertexXY(oGraze[p], 0, -8, -8);
ObjEffect_SetVertexXY(oGraze[p], 1, -8, 8);
ObjEffect_SetVertexXY(oGraze[p], 2, 8, -8);
ObjEffect_SetVertexXY(oGraze[p], 3, 8, 8);
let cs = nString1(i_nGraze[p]);
ObjEffect_SetVertexUV(oGraze[p], 0, cs, 22);
ObjEffect_SetVertexUV(oGraze[p], 1, cs, 37);
ObjEffect_SetVertexUV(oGraze[p], 2, cs + 15,22);
ObjEffect_SetVertexUV(oGraze[p], 3, cs + 15,37);
Obj_SetPosition(oGraze[p],525 + p * 12,162); //position of graze
}
yield; //lol
ascent(let p in 0..length(i_nScore)){ //deletes used data to make room for more
Obj_Delete(oScore[p]);
}
ascent(let p in 0..length(i_nGraze)){ //even still drawing new numbers every frame is memory sucking
Obj_Delete(oGraze[p]);
}
}
}
Note: The graphics for system text (well, numbers) is actually a bit squashed/too large for Danmakufu.
Note: The portraits needs anti-aliasing lol
Note: The effect spawning the spell circle is nearly perfect. It stars out with an extra ring and develops. The extra circle was a terrible resolution though.
Note: Their hitbox drawing code is inefficient, we'll probably be using the one I wrote.
Note: The graphic rectangles for the heart bullets are off.
Note: Marisa's hitbox is too small.
Note: They didn't replace the star points with the yellow orbs.
Note: The spawning items do not do the neat spinning effect.
Note: I think I like their alpha setting+whatever for the cutin script better than Hele's :(
Note: Bubble bullets do not spin.
Note: Yes I do agree the difficulty is loleasy with the hitbox.
let OptionInv = GetCommonDataDefault("OI", 18);
if(GetEnemyShotCountEx(GetPlayerX, GetPlayerY, [18, OptionInv][18 < OptionInv], ALL) > 1){ //◆当たり判定消滅判定 現在18
//無敵補助
SetIntersectionCircle(-3000, -3000, 3.5);//hahahahahahahaha
}else{
SetIntersectionCircle(GetPlayerX, GetPlayerY, 0);//当たり判定登録
}
hahahahaha oh wow
Note: Maple leaf effect is slightly worse than Mokou's script, which we should use. Also, for some reason instead of using the effect when she's dying, it all happens after her graphic is deleted. After she disappears it just goes poofpoofpoofpoofpoofPOOF.
Note: Jesus christ no wonder it's so slow. Look at all the damn variable initializations. letletletletletletlet at the beginning of every task. You guys don't need to save the variables after finishing the function holy cow.
Note: I find it pretty ironic that I previously said "you shouldn't forbid the player from focusing" but the last survival card not only does that, but forbids you from moving left and right.
Note: The image-based dialog stuff is a very very good idea. Although in this script I noticed the portraits don't move (as in when they're talking) to the foreground in a flowing motion, it just pops up there.
For now, this is pretty much all I can determine from the visuals alone. I'll take a break and maybe do some more code gathering/cleanup later.
-
dling now, but I don't have SA on this PC. Is that going to screw me over? >_>
-
IT'S A DANMAKUFU SCRIPT
THE MAIN REASON I'M EXCITED IS NOT BECAUSE OF DATA
IT'S BECAUSE WE CAN WRENCH THROUGH THE CODE TO HELP WITH IJIYATSU
LIKE SO HARD
-
Oh, is this that one that showed up in the Touhou Festival on Nico?
THE MAIN REASON I'M EXCITED IS NOT BECAUSE OF DATA
IT'S BECAUSE WE CAN WRENCH THROUGH THE CODE TO HELP WITH IJIYATSU
LIKE SO HARD
Oh my jesus YES.
-
So much for "no posting ZUN stuff" :V (I'm refering to whoever uploaded this script)
-
Surprisingly, there actually aren't that many ZUN rips. I'm impressed, really.
-
I'm somewhat irritated at the lack of BGM. I wanted a copy of One-Way Accelerator ;_;
-
I AM downloading everything in their base at the speed of light (40kbs), you know.
-
i posted a link to it (with the music as well) in the "Combinations With You (http://www.shrinemaiden.org/forum/index.php?topic=2292.30)" thread about an hour before you posted.
the sidebar doesn't work though. i got no idea how to fix that
-
i found it two hours before you but was too busy looking through it to upload :V
First note: Dialogue is all images. The boxes, the portraits, fonts, everything. This is a VERY GOOD IDEA.
Second note: SOUND EFFECTS NEED TO BE QUIETER
-
ah. i guess that works D:
ill post the mediafire upload here anyway, since it would be faster to download for people who don't have this yet
http://www.mediafire.com/download.php?qgy2inmnmbc
-
Third note: Max Point Value Multiplier is right there to use. A few changes will prove easy to use.
Fourth note: Apparently using ZUN sound effects is fine.
-
Fourth note: Apparently using ZUN sound effects is fine.
Good. Making sound effects that don't rape your ears is hard :/
-
Fifth note: REMOVING THE DEFAULT SIDEBAR AND MAKING NEW IMAGES ON IT WTF
Sixth note:
SetDefaultStatusVisible(false); JESUS CHRIST
Seventh note: Easy to use Item spawning
Eighth note: EXCELLENT EASY TO USE BOSS MOVEMENT FUNCTION
-
SetDefaultStatusVisible(false); JESUS CHRIST
http://www.youtube.com/watch?v=-aUlEW5tgSI
:V
-
srsly people i don't want to be the only one doing this
I still can't find how they map the font images on top of the frame. Is it just possible when the DefaultStatus is invisible? That can't be, in the test script it shows both for a bit.
EDIT:
task PlayerOther{
LoadGraphic(sys); //the system image
yield;
loop{
nGraze = truncate(GetGraze); //gets graze and score etc
nScore = truncate(GetScore);
let i_nScore = ToString(nScore); //converts to strings
let i_nGraze = ToString(nGraze);
let i_nPower = ToString(nPower);
ascent(let i in (length(i_nScore)-7)..(length(i_nScore))){ //a makeshift CharAt function
i_nScore = erase(i_nScore,(length(i_nScore)-1));
}
ascent(let i in (length(i_nGraze)-7)..(length(i_nGraze))){
i_nGraze = erase(i_nGraze,(length(i_nGraze)-1));
}
while(length(i_nScore) < 10){ //cantonates zeros when the score doesn't have 10 digits
i_nScore = "0" ~ i_nScore;
}
let oScore = []; //OBJECT ARRAYS WOO
let oGraze = []; //GHOST BLOWJOB
let oPower = [];
ascent(let p in 0..length(i_nScore)){ //drawing, should be obvious
oScore = oScore ~ [p];
oScore[p] = Obj_Create(OBJ_EFFECT);
ObjEffect_SetPrimitiveType(oScore[p], PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(oScore[p], 4);
ObjEffect_SetTexture(oScore[p],sys);
ObjEffect_SetLayer(oScore[p],8); //this spontaneously works for some reason
ObjEffect_SetVertexXY(oScore[p], 0, -8, -8);
ObjEffect_SetVertexXY(oScore[p], 1, -8, 8);
ObjEffect_SetVertexXY(oScore[p], 2, 8, -8);
ObjEffect_SetVertexXY(oScore[p], 3, 8, 8);
let cs = nString1(i_nScore[p]);
ObjEffect_SetVertexUV(oScore[p], 0, cs, 22);
ObjEffect_SetVertexUV(oScore[p], 1, cs, 37);
ObjEffect_SetVertexUV(oScore[p], 2, cs + 15,22);
ObjEffect_SetVertexUV(oScore[p], 3, cs + 15,37);
Obj_SetPosition(oScore[p],525 + p * 12,82); //position of score = 525 + spaces
}
ascent(let p in 0..length(i_nGraze)){ //drawing again
oGraze = oGraze ~ [p];
oGraze[p] = Obj_Create(OBJ_EFFECT);
ObjEffect_SetPrimitiveType(oGraze[p], PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(oGraze[p], 4);
ObjEffect_SetTexture(oGraze[p],sys);
ObjEffect_SetLayer(oGraze[p],8); //SPONTANEOUSLY
ObjEffect_SetVertexXY(oGraze[p], 0, -8, -8);
ObjEffect_SetVertexXY(oGraze[p], 1, -8, 8);
ObjEffect_SetVertexXY(oGraze[p], 2, 8, -8);
ObjEffect_SetVertexXY(oGraze[p], 3, 8, 8);
let cs = nString1(i_nGraze[p]);
ObjEffect_SetVertexUV(oGraze[p], 0, cs, 22);
ObjEffect_SetVertexUV(oGraze[p], 1, cs, 37);
ObjEffect_SetVertexUV(oGraze[p], 2, cs + 15,22);
ObjEffect_SetVertexUV(oGraze[p], 3, cs + 15,37);
Obj_SetPosition(oGraze[p],525 + p * 12,162); //position of graze
}
yield; //lol
ascent(let p in 0..length(i_nScore)){ //deletes used data to make room for more
Obj_Delete(oScore[p]);
}
ascent(let p in 0..length(i_nGraze)){ //even still drawing new numbers every frame is memory sucking
Obj_Delete(oGraze[p]);
}
}
}
GO GO ME
-
Hmm Not watched this before ever but I'm getting this.
Anyways Drake you seem to be enjoying yourself.
-
First note: Dialogue is all images. The boxes, the portraits, fonts, everything. This is a VERY GOOD IDEA.
This is FUCKING GENIUS
-
i had like three cups of coffee in the past five hours
Note: The graphics for system text (well, numbers) is actually a bit squashed/too large for Danmakufu.
Note: The portraits needs anti-aliasing lol
Note: The effect spawning the spell circle is nearly perfect. It stars out with an extra ring and develops. EDIT: The extra circle was a terrible resolution.
Note: Their hitbox drawing code is inefficient, we'll probably be using the one I wrote.
Note: The graphic rectangles for the heart bullets are off.
Note: Marisa's hitbox is too small.
Note: They didn't replace the star points with the yellow orbs.
Note: The spawning items do not do the neat spinning effect.
Note: I think I like their alpha setting+whatever for the cutin script better than Hele's :(
Note: Bubble bullets do not spin.
-
What kind of fucking hitbox do I have? I'd guesstimate that around
1/4 <1/10th of the bullets can actually hit you. Fucking fake assed difficulty. I'll look through the script later, I'm too offended at this fake shit.
-
Note: Yes I do agree the difficulty is loleasy with the hitbox. ATTN NAUT
let OptionInv = GetCommonDataDefault("OI", 18);
if(GetEnemyShotCountEx(GetPlayerX, GetPlayerY, [18, OptionInv][18 < OptionInv], ALL) > 1){ //◆当たり判定消滅判定 現在18
//無敵補助
SetIntersectionCircle(-3000, -3000, 3.5);//hahahahahahahaha
}else{
SetIntersectionCircle(GetPlayerX, GetPlayerY, 0);//当たり判定登録
}
hahahahaha oh wow
Note: Maple leaf effect is slightly worse than Mokou's script, which we should use.
EDIT: Also, for some reason instead of using the effect when she's dying, it all happens after her graphic is deleted. After she disappears it just goes poofpoofpoofpoofpoofPOOF :V
Note: Jesus christ no wonder it's so slow. Look at all the damn variable initializations. letletletletletletlet at the beginning of every task. You guys don't need to save the variables after finishing the function holy cow.
Note: I find it pretty ironic that I previously said "you shouldn't forbid the player from focusing" but the last survival card not only does that, but forbids you from moving left and right.
Note: The image-based dialog stuff is a very very good idea. Although in this script I noticed the portraits don't move (as in when they're talking) to the foreground in a flowing motion, it just pops up there.
For now, this is pretty much all I can determine from the visuals alone. I'll take a break and maybe do some more code gathering/cleanup later.
-
SetIntersectionCircle(-3000, -3000, 3.5);//hahahahahahahaha
Wait what!?
Also you have like infinite lives in this script or something
-
Actually, this script is very poorly coded. It looks pretty but has a lot of glitches that could've been easily fixed. That fucking hitbox code was a whole bunch of bullshit and I'll hate whoever made this script forever for even thinking of it, but in addition to that:
That visible hitbox code is absolutely fucked. It jiggles like Micheal J. Fox on drugs, and improperly shows at random times when unfocused.
As Drake just mentioned, almost all of the tasks are so horribly coded it makes my eyes bleed. What the fuck is this:
let a = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
let i;
let p1_h = [0,32];
let p2_h = [-7.12067,31.197693,7.12067,31.197693];
let p3_h = [0,32,-13.884279,28.831003,13.884279,28.831003];
let p4_h = [-7.12067,31.197693,7.12067,31.197693,-19.951674,25.018608,19.951674,25.018608];
let p5_h = [0,32,-13.884279,28.831003,13.884279,28.831003,-25.018608,19.951674,25.018608,19.951674];
let p6_h = [-7.12067,31.197693,7.12067,31.197693,-19.951674,25.018608,19.951674,25.018608,-28.831003,13.884279,28.831003,13.884279];
let p7_h = [0,32,-13.884279,28.831003,13.884279,28.831003,-25.018608,19.951674,25.018608,19.951674,-31.197693,7.12067,31.197693,7.12067];
let p8_h = [-7.12067,31.197693,7.12067,31.197693,-19.951674,25.018608,19.951674,25.018608,-28.831003,13.884279,28.831003,13.884279,-32,0,32,0];
let p1_l = [0,32];
let p2_l = [7.12067,31.197693,-7.12067,31.197693];
let p3_l = [0,32,13.884279,28.831003,-13.884279,28.831003];
let p4_l = [7.12067,31.197693,-7.12067,31.197693,19.951674,25.018608,-19.951674,25.018608];
let p5_l = [0,32,13.884279,28.831003,-13.884279,28.831003,25.018608,19.951674,-25.018608,19.951674];
let p6_l = [7.12067,31.197693,-7.12067,31.197693,19.951674,25.018608,-19.951674,25.018608,28.831003,13.884279,-28.831003,13.884279];
let p7_l = [0,32,13.884279,28.831003,-13.884279,28.831003,25.018608,19.951674,-25.018608,19.951674,31.197693,7.12067,-31.197693,7.12067];
let p8_l = [7.12067,31.197693,-7.12067,31.197693,19.951674,25.018608,-19.951674,25.018608,28.831003,13.884279,-28.831003,13.884279,32,0,-32,0];
What is this? What the fuck is this?
The upside is it's very pretty looking. That's about it.
One last thing before I brb suicide, my computer got to 45fps on the last spellcard... That does not fly.
EDIT: And yeah, I immediately changed the player code, as well as played it with other player characters. It's better, but still has wierd glitches.
-
Like I said, the main reason for the slowdown is the constant graphic rendering and the fact that nearly all the functions create global variables instead of private ones.
Either way, it still has a ton of information.
-
i'm not sure what's going on in this thread, but i like it.
continue.
-
i'm not sure what's going on in this thread, but i like it.
continue.
-
HEY DRAKE, GUESS WHAT. I AM DOWNLOADING THIS.
Oh seems like bashing has started. You know, instead of analysing this script only. You should also analyse Aniki script as that one contains imitated screen shaking.
Also guess what #2 I have to work today till 6pm atleast and will not be at home untill 7pm probably :V FFFF
-
Oh seems like bashing has started. You know, instead of analysing this script only.
But I am just analysing the script. Looking over the visuals, it's much easier to comment on stuff that needs improvement aside from obvious AMAZING. But by noting something needs improvement, you can take the already made code and improve on that, in addition to using the good parts of it. There's no bad side to this.
imitated screen shaking.
i don't want to have to play/watch it because i hate the meme but okay
-
Aside from maybe that screen shaking portion and the frying pan card, it isn't worth it.
-
Just replace every image in the img folder to flying unicorns or something and you're good
-
(http://img198.imageshack.us/img198/9214/badc.png)
I did that long ago but drawing in MainLoop is somewhat bad, it does not appear on pause and it is strange, same for the font, the original Font.txt is far differant from ZUN rips...
-
But I am just analysing the script. Looking over the visuals, it's much easier to comment on stuff that needs improvement aside from obvious AMAZING. But by noting something needs improvement, you can take the already made code and improve on that, in addition to using the good parts of it. There's no bad side to this.
Forgive me for what I wrote in the early morning ( remind me never to post anything in the early morning ). As what I am reading now as my post makes no sense. What I tried to say was: "Oh so some mitori boss is allowed to be released while it contains like instant ZUN rips, but people bash my Afro and Kisume script :V )
i don't want to have to play/watch it because i hate the meme but okay
Who cares about the meme =/ I don't like it either but for the sense of Danmakufu it is good source material.
I just got home, so going to investigate the data ( but before that first reading the thread fully again :V )
-
OMG half of the bullets don't harm you :
- Blue large pellets
- Red Eyefucking fire
- All the suppositery
Or maybe I am running it wrong...also 30fps for the last card for me
-
EOSD PHANTASM WILL BE ITS OWN GAME HELL YES
-
Note: Dialogue is all images. The boxes, the portraits, fonts, everything. This is a VERY GOOD IDEA.
VERTEX SETTING EVERYWHERE. Drawing all that crap is seriously time consuming and needs to be done in functions for sure like done here.
Note: Apparently using ZUN sound effects is fine.
They are direct rips, explains why they are so loud as well :V
Note: The effect spawning the spell circle is nearly perfect. It stars out with an extra ring and develops. The extra circle was a terrible resolution though.
The creator spawns the circles as effect object with atleast 30+ vertex. Probably to form a full nice circle. Though the code makes 0 sense to me as my math fails hard here. Neverless, it looks frikken awesome, but I am going to stick to my own cutin animation I have been working on.
Note: I think I like their alpha setting+whatever for the cutin script better than Hele's :(
Black background. I checked the image file.
Note: Bubble bullets do not spin.
They should :V but it is CtC shotscript with added ZUN bullets. So he can't do anything about it.
Note: Maple leaf effect is slightly worse than Mokou's script, which we should use. Also, for some reason instead of using the effect when she's dying, it all happens after her graphic is deleted. After she disappears it just goes poofpoofpoofpoofpoofPOOF.
Creating my own custom effects here aswell with those maple leaves. Mainly for concentration effects.
Note: The image-based dialog stuff is a very very good idea. Although in this script I noticed the portraits don't move (as in when they're talking) to the foreground in a flowing motion, it just pops up there.
Can be custom scripted anyway. That is like easy stuff.
PS the game runs for me around 50-55 fps. Only after the first noncard I got a screenfreeze that lasted 5 seconds. The other spellcards and nonspells loaded pretty fast.
I am like only interested in the spellcircle animation how to script the exploding animation for the inner circle, aside from that I don't need anything from this.
-
-of course
-like i said needs to be quieter
-yup checked it out. the math looks pretty solid to me. I do want to use your circle, but maybe combined with this code
-i meant it looks clearer and more like the game. i think you just need to tinker with yours a bit, i'd rather use it anyways
-derp
-derp
-i know i was just mentioning a flaw that could have been easily fixed
Agh. Just taking a peek at the Aniki vibration functions, they manually add the vibration values to the bullets being shot at the time. I was hoping for a method that I couldn't have, you know, made up on my own. You need a way to pass those values on to everything without having to type it in everywhere.
-
Actually, shaping the circle like it is done here is better. The difference is, my circle is a single image 256x256 or larger. When it grows in scale it will stretch a bit, but it happens so briefly I personally find it not annoying.
Obviously this is the same method ZUN spawns the circles aswell, because the images are rectangles. If I can understand the math for this, I will probably change my spellcircle into this aswell. Because it saves me loading bigass image files to strain DNH memory aswell as makes anyone suddenly look cooler.
But like it was mentioned before, the overal scripting hurts my eyes. It is all so chaotic and unorganised >.<
Agh. Just taking a peek at the Aniki vibration functions
The way you said that sounds extremely wrong. :V
-
In this, there's that magic circle effect I was looking for. The one that revolves around the boss. yes, the linear line.
(http://img7.imageshack.us/img7/9937/etama3.png) Do you know what I'm talking about?
Jesus! I was looking everywhere how to do it! How did this guy manage to do it on his own? It's driving me crazy!!
And those annoying boxes... he managed to make those invisible too! I MUST KNOW HOW HE DID IT.
-
Read the post directly above yours.
-
Well, they did use a "proper" method. Although, it's such a shitstorm I can't figure out how exactly it was done. If you want you can take a look, but jesus.
task Spell_CircleA{
let e_r_flag = true;
let e_r = 0;
let e_r_d = 15;
let e_r_dd = -0.3;
let e_ang = 0;
let e_ang_d = 3.5;
let e_ang_sub = 360/24;
let e_x = [GetEnemyX];
let e_y = [GetEnemyY];
let obj = Obj_Create(OBJ_EFFECT);
Obj_SetPosition(obj, e_x[0], e_y[0]);
Obj_SetAngle(obj, 0);
Obj_SetSpeed(obj, 0);
Obj_SetAutoDelete(obj, false);
ObjEffect_SetTexture(obj, effect_img_cir);
ObjEffect_SetRenderState(obj, ADD);
ObjEffect_SetLayer(obj, 1);
ObjEffect_SetAngle(obj, 0, 0, e_ang);
//???_????
ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(obj, 54);
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexUV(obj, i*2*9+2*j, 80, j/8*127);
ObjEffect_SetVertexUV(obj, i*2*9+2*j+1, 95, j/8*127);
ObjEffect_SetVertexXY(obj, i*2*9+2*j, (e_r+16)*cos(120*i+e_ang_sub*j), (e_r+16)*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
}
}
ascent(let i in 0..54){
ObjEffect_SetVertexColor(obj, i, 255, 127, 127, 127);
}
yield;
//?x????????
task e_move{
let e_M_delay_t = 15;//?????x??????
loop(e_M_delay_t){
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
yield;
}
loop{
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
e_x = erase(e_x, 0);
e_y = erase(e_y, 0);
Obj_SetPosition(obj, e_x[0], e_y[0]);
yield;
}
}
e_move;
loop{
e_r += e_r_d;
e_r_d += e_r_dd;
if((e_r <= S_Circle_r)&&(e_r_d < 0)&&(e_r_flag)){
e_r = S_Circle_r;
e_r_d = -(S_Circle_r-16)/(GetTimer*60);
e_r_dd = 0;
e_r_flag = false;
}
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexXY(obj, i*2*9+2*j, (e_r+16)*cos(120*i+e_ang_sub*j), (e_r+16)*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
}
}
e_ang += e_ang_d;
if(e_ang > 360){e_ang += -360;}
if(e_ang < -360){e_ang += 360;}
ObjEffect_SetAngle(obj, 0, 0, e_ang);
if(!OnEnemySpellChirei){break;}
yield;
}
Obj_Delete(obj);
}
//?????????v???????~?uSpell Card Attack of Little Girl...?v?{???O????????
task Spell_CircleB{
let e_r = 0;
let e_ang_d = -3.5;
let e_ang = 0;
let e_ang_sub = 360/24;
let e_x = [GetEnemyX];
let e_y = [GetEnemyY];
let obj = Obj_Create(OBJ_EFFECT);
Obj_SetPosition(obj, e_x[0], e_y[0]);
Obj_SetAngle(obj, 0);
Obj_SetSpeed(obj, 0);
Obj_SetAutoDelete(obj, false);
ObjEffect_SetTexture(obj, effect_img_cir);
ObjEffect_SetRenderState(obj, ADD);
ObjEffect_SetLayer(obj, 1);
ObjEffect_SetAngle(obj, 0, 0, e_ang);
//???_????
ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(obj, 54);
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexUV(obj, i*2*9+2*j, 49, j/8*127);
ObjEffect_SetVertexUV(obj, i*2*9+2*j+1, 64, j/8*127);
ObjEffect_SetVertexXY(obj, i*2*9+2*j, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, (e_r-16)*cos(120*i+e_ang_sub*j), (e_r-16)*sin(120*i+e_ang_sub*j));
}
}
ascent(let i in 0..54){
ObjEffect_SetVertexColor(obj, i, 255, 127, 127, 127);
}
yield;
//???_???P2n???O
task e_vt_1{
let e_r_sub = 0;
let e_r_sub_ang = 0;
let e_r_sub_ang_d = 180/30;
loop(30){
e_r_sub_ang += e_r_sub_ang_d;
e_r_sub = (S_Circle_r+6)/2 - (S_Circle_r+6)/2*cos(e_r_sub_ang);
ascent(let i in 0..3){
ascent(let j in 0..5){
ObjEffect_SetVertexXY(obj, i*2*9+4*j, e_r_sub*cos(120*i+e_ang_sub*j*2), e_r_sub*sin(120*i+e_ang_sub*j*2));
}
}
yield;
}
}
//???_???Q2n+1???O
task e_vt_2{
let e_r_sub = 0;
let e_r_sub_ang = 0;
let e_r_sub_ang_d = 180/45;
loop(45){
e_r_sub_ang += e_r_sub_ang_d;
e_r_sub = (S_Circle_r+6)/2 - (S_Circle_r+6)/2*cos(e_r_sub_ang);
ascent(let i in 0..3){
ascent(let j in 0..4){
ObjEffect_SetVertexXY(obj, i*2*9+4*j+2, e_r_sub*cos(120*i+e_ang_sub*(2*j+1)), e_r_sub*sin(120*i+e_ang_sub*(2*j+1)));
}
}
yield;
}
}
//???_???R??
task e_vt_3{
let e_r_sub = 0;
let e_r_sub_ang = 0;
let e_r_sub_ang_d = 180/30;
ef_wait(15);
loop(30){
e_r_sub_ang += e_r_sub_ang_d;
e_r_sub = (S_Circle_r+6)/2 - (S_Circle_r+6)/2*cos(e_r_sub_ang) - 16;
ascent(let i in 0..3){
ascent(let j in 0..5){
ObjEffect_SetVertexXY(obj, i*2*9+4*j+1, e_r_sub*cos(120*i+e_ang_sub*2*j), e_r_sub*sin(120*i+e_ang_sub*2*j));
}
ascent(let j in 0..4){
ObjEffect_SetVertexXY(obj, i*2*9+4*j+3, e_r_sub*cos(120*i+e_ang_sub*(2*j+1)), e_r_sub*sin(120*i+e_ang_sub*(2*j+1)));
}
}
yield;
}
}
//???????X?????a?????????B
task e_vt_4{
e_r = S_Circle_r+6;
let e_r_d = -(S_Circle_r-16)/(GetTimer*60);
ef_wait(60);
loop{
e_r += e_r_d;
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexXY(obj, i*2*9+2*j, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, (e_r-16)*cos(120*i+e_ang_sub*j), (e_r-16)*sin(120*i+e_ang_sub*j));
}
}
yield;
}
}
task e_move{
let e_M_delay_t = 15;//?????x??????
loop(e_M_delay_t){
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
yield;
}
loop{
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
e_x = erase(e_x, 0);
e_y = erase(e_y, 0);
Obj_SetPosition(obj, e_x[0], e_y[0]);
yield;
}
}
//???_????
e_vt_1;//?????^?X?N?????o??
e_vt_2;
e_vt_3;
e_vt_4;
//?x????????
e_move;
//???????????]
loop{
e_ang += e_ang_d;
if(e_ang > 360){e_ang += -360;}
if(e_ang < -360){e_ang += 360;}
ObjEffect_SetAngle(obj, 0, 0, e_ang);
if(!OnEnemySpellChirei){break;}
yield;
}
Obj_Delete(obj);
}
//???????d???????^?X?N?????o??
SetSpellCardAttack(Spell_Num, flag_Durable);
BossSpellBG(bosnum); //?w?i
yield;
PlaySE("se\seUseSpellCard.wav");
DrawCutInGraphic; //?J?b?g?C??
DrawSCA; //SpellCardAtack!
Spell_CircleA; //??????
Spell_CircleB;
DrawSpellName; //?X?y????
}
-
Creating an object effect with 54 vertices is "proper"...?
Awesome //SpellCardAtack!
-
It makes a full circle as he uses some wizzkid math magic :V I am jealous and I need to know how this is done.
Oh btw, I noticed also that in the official Touhou games ( MoF+ ) the outer spellcircles lag behind when the boss moves around. Only the red main spellcircle keeps the same speed as the boss while the outer spellcircles dangle around it. I only managed to imitate this effect by turning the spellcircles into a fake familiar using SetMovePosition03. It works perfect but don't know if it is efficient.
-
ok, I just went through it a bit.
I couldn't move horizontal and vertical in respective phases during her second survival card (Beware of the Red Kappa). Until the 3rd phase where everything goes crazy. Just another thing for you guys to fix.
The hitbox is very glitchy.
Subterranean Cucumber slowed by laptop down to a glorious 30 fps.
-
I couldn't move horizontal and vertical in respective phases during her second survival card (Beware of the Red Kappa). Until the 3rd phase where everything goes crazy. Just another thing for you guys to fix.
That's Mitori's gimmick, forbidding stuff. 3rd phase was forbidding focused movement by the way.
-
Ye, the FORBID cards disable certain abilities. Nothing wrong with those.
Also I noticed that dual core / core2duo processors have diffculty in rendering Danmakufu. Example my afro boss:
Laptop --> Core2duo 1.8ghz / 1024 memory / ATI Mobility x1600 --> FPS raping occurs with most cards ~30/40.
PC --> Single core 2.0 ghz / 2048 memory / Nvidia 6800 GE (aka V9999) --> Minor FPS dropping with his crowded cards which drops from 58 to 57/56.
Why =.=
-
That's Mitori's gimmick, forbidding stuff. 3rd phase was forbidding focused movement by the way.
Yea, I sort of noticed that when I was going to sleep right after that made that post...
if it forbids focus, you can actually do it quite nicely, assuming those bullets actually hit you in this glitchy patch...
-
The hitbox isn't glitchy, either. It's just made in a way so it's just extraordinarily difficult to die.
-
Glitched? Why is it glitched?
Looks more like the hitbox is too large. That is why it looks like your character doesn't dies with most bullets (unless you are using the player you received with the script). For my own game I resized the hitbox to the same size of ReimuA/B and MarisaA/B.
-
task Spell_CircleA{
let e_r_flag = true;
let e_r = 0;
let e_r_d = 15;
let e_r_dd = -0.3;
let e_ang = 0;
let e_ang_d = 3.5;
let e_ang_sub = 360/24;
let e_x = [GetEnemyX];
let e_y = [GetEnemyY];
let obj = Obj_Create(OBJ_EFFECT);
Obj_SetPosition(obj, e_x[0], e_y[0]);
Obj_SetAngle(obj, 0);
Obj_SetSpeed(obj, 0);
Obj_SetAutoDelete(obj, false);
ObjEffect_SetTexture(obj, effect_img_cir);
ObjEffect_SetRenderState(obj, ADD);
ObjEffect_SetLayer(obj, 1);
ObjEffect_SetAngle(obj, 0, 0, e_ang);
//???_????
ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(obj, 54);
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexUV(obj, i*2*9+2*j, 80, j/8*127);
ObjEffect_SetVertexUV(obj, i*2*9+2*j+1, 95, j/8*127);
ObjEffect_SetVertexXY(obj, i*2*9+2*j, (e_r+16)*cos(120*i+e_ang_sub*j), (e_r+16)*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
}
}
ascent(let i in 0..54){
ObjEffect_SetVertexColor(obj, i, 255, 127, 127, 127);
}
yield;
//?x????????
task e_move{
let e_M_delay_t = 15;//?????x??????
loop(e_M_delay_t){
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
yield;
}
loop{
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
e_x = erase(e_x, 0);
e_y = erase(e_y, 0);
Obj_SetPosition(obj, e_x[0], e_y[0]);
yield;
}
}
e_move;
loop{
e_r += e_r_d;
e_r_d += e_r_dd;
if((e_r <= S_Circle_r)&&(e_r_d < 0)&&(e_r_flag)){
e_r = S_Circle_r;
e_r_d = -(S_Circle_r-16)/(GetTimer*60);
e_r_dd = 0;
e_r_flag = false;
}
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexXY(obj, i*2*9+2*j, (e_r+16)*cos(120*i+e_ang_sub*j), (e_r+16)*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
}
}
e_ang += e_ang_d;
if(e_ang > 360){e_ang += -360;}
if(e_ang < -360){e_ang += 360;}
ObjEffect_SetAngle(obj, 0, 0, e_ang);
if(!OnEnemySpellChirei){break;}
yield;
}
Obj_Delete(obj);
}
//?????????v???????~?uSpell Card Attack of Little Girl...?v?{???O????????
task Spell_CircleB{
let e_r = 0;
let e_ang_d = -3.5;
let e_ang = 0;
let e_ang_sub = 360/24;
let e_x = [GetEnemyX];
let e_y = [GetEnemyY];
let obj = Obj_Create(OBJ_EFFECT);
Obj_SetPosition(obj, e_x[0], e_y[0]);
Obj_SetAngle(obj, 0);
Obj_SetSpeed(obj, 0);
Obj_SetAutoDelete(obj, false);
ObjEffect_SetTexture(obj, effect_img_cir);
ObjEffect_SetRenderState(obj, ADD);
ObjEffect_SetLayer(obj, 1);
ObjEffect_SetAngle(obj, 0, 0, e_ang);
//???_????
ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(obj, 54);
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexUV(obj, i*2*9+2*j, 49, j/8*127);
ObjEffect_SetVertexUV(obj, i*2*9+2*j+1, 64, j/8*127);
ObjEffect_SetVertexXY(obj, i*2*9+2*j, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, (e_r-16)*cos(120*i+e_ang_sub*j), (e_r-16)*sin(120*i+e_ang_sub*j));
}
}
ascent(let i in 0..54){
ObjEffect_SetVertexColor(obj, i, 255, 127, 127, 127);
}
yield;
//???_???P2n???O
task e_vt_1{
let e_r_sub = 0;
let e_r_sub_ang = 0;
let e_r_sub_ang_d = 180/30;
loop(30){
e_r_sub_ang += e_r_sub_ang_d;
e_r_sub = (S_Circle_r+6)/2 - (S_Circle_r+6)/2*cos(e_r_sub_ang);
ascent(let i in 0..3){
ascent(let j in 0..5){
ObjEffect_SetVertexXY(obj, i*2*9+4*j, e_r_sub*cos(120*i+e_ang_sub*j*2), e_r_sub*sin(120*i+e_ang_sub*j*2));
}
}
yield;
}
}
//???_???Q2n+1???O
task e_vt_2{
let e_r_sub = 0;
let e_r_sub_ang = 0;
let e_r_sub_ang_d = 180/45;
loop(45){
e_r_sub_ang += e_r_sub_ang_d;
e_r_sub = (S_Circle_r+6)/2 - (S_Circle_r+6)/2*cos(e_r_sub_ang);
ascent(let i in 0..3){
ascent(let j in 0..4){
ObjEffect_SetVertexXY(obj, i*2*9+4*j+2, e_r_sub*cos(120*i+e_ang_sub*(2*j+1)), e_r_sub*sin(120*i+e_ang_sub*(2*j+1)));
}
}
yield;
}
}
//???_???R??
task e_vt_3{
let e_r_sub = 0;
let e_r_sub_ang = 0;
let e_r_sub_ang_d = 180/30;
ef_wait(15);
loop(30){
e_r_sub_ang += e_r_sub_ang_d;
e_r_sub = (S_Circle_r+6)/2 - (S_Circle_r+6)/2*cos(e_r_sub_ang) - 16;
ascent(let i in 0..3){
ascent(let j in 0..5){
ObjEffect_SetVertexXY(obj, i*2*9+4*j+1, e_r_sub*cos(120*i+e_ang_sub*2*j), e_r_sub*sin(120*i+e_ang_sub*2*j));
}
ascent(let j in 0..4){
ObjEffect_SetVertexXY(obj, i*2*9+4*j+3, e_r_sub*cos(120*i+e_ang_sub*(2*j+1)), e_r_sub*sin(120*i+e_ang_sub*(2*j+1)));
}
}
yield;
}
}
//???????X?????a?????????B
task e_vt_4{
e_r = S_Circle_r+6;
let e_r_d = -(S_Circle_r-16)/(GetTimer*60);
ef_wait(60);
loop{
e_r += e_r_d;
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexXY(obj, i*2*9+2*j, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, (e_r-16)*cos(120*i+e_ang_sub*j), (e_r-16)*sin(120*i+e_ang_sub*j));
}
}
yield;
}
}
task e_move{
let e_M_delay_t = 15;//?????x??????
loop(e_M_delay_t){
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
yield;
}
loop{
e_x = e_x ~ [GetEnemyX];
e_y = e_y ~ [GetEnemyY];
e_x = erase(e_x, 0);
e_y = erase(e_y, 0);
Obj_SetPosition(obj, e_x[0], e_y[0]);
yield;
}
}
//???_????
e_vt_1;//?????^?X?N?????o??
e_vt_2;
e_vt_3;
e_vt_4;
//?x????????
e_move;
//???????????]
loop{
e_ang += e_ang_d;
if(e_ang > 360){e_ang += -360;}
if(e_ang < -360){e_ang += 360;}
ObjEffect_SetAngle(obj, 0, 0, e_ang);
if(!OnEnemySpellChirei){break;}
yield;
}
Obj_Delete(obj);
}
//???????d???????^?X?N?????o??
SetSpellCardAttack(Spell_Num, flag_Durable);
BossSpellBG(bosnum); //?w?i
yield;
PlaySE("se\seUseSpellCard.wav");
DrawCutInGraphic; //?J?b?g?C??
DrawSCA; //SpellCardAtack!
Spell_CircleA; //??????
Spell_CircleB;
DrawSpellName; //?X?y????
}
So far, I've figured out that
let e_ang_sub = 360/24;
Gives the circle 24 "sides". That's right, it's not a perfect circle. I've reduced it to 360/3 and it gave me a perfect triangle. So far, that's all I've figured out. Can anyone else help me work on this?
-
I'm not sure playing around with the vertices is necessary. If all it uses is a bunch of vertices formed into a circle, we could just use Hele's thing. I'll have to talk with him about that.
But I'm screwing with your code a bit too. It's very nice, I'm just cleaning it up (it's so messy argh) and changing it so it look more like MoF-UFO explosions. I like how you used it as a separate enemy, but I think I'll try to turn it into just a plain function for easy use.
-
I'm not sure playing around with the vertices is necessary. If all it uses is a bunch of vertices formed into a circle, we could just use Hele's thing. I'll have to talk with him about that.
But I'm screwing with your code a bit too. It's very nice, I'm just cleaning it up (it's so messy argh) and changing it so it look more like MoF-UFO explosions. I like how you used it as a separate enemy, but I think I'll try to turn it into just a plain function for easy use.
haha thanks. Oh and uh, can you give me hele's code? I don't have it.
-
me neither
I just mean he already has a prepared image to use instead of making fifty billion vertices.
I've successfully turned your resurrection enemy into functions, but now I need to make it stop producing variables.
This is regarding UFO.
Explosion: What happens first is the enemy explosion image comes on (the one where small enemies die), I never saw that before. The leaves are in fact supposed to be all the same color. They also reach the outer limits of the screen.
Spell circle(s): Upon initializing, the spell circle actually only expands the outer layer (border of life) to the entire screen. The inner layer stays at 256x256.
Charge-up: The charge-up uses a random red circle as well as the leaves shrinking in, once again 256x256.
-
me neither
I just mean he already has a prepared image to use instead of making fifty billion vertices.
I've successfully turned your resurrection enemy into functions, but now I need to make it stop producing variables.
What do you mean?
Oh, and I started to uncover ZUN's magic circle style. You're right about having a billion vertices. Apparently, it's split into 4 parts. The call (calling the task/initializing the circle/beginning effect animation), the outside vertices, the inside vertices, and the shrinking. They're in this order (I think), but the shrink is definitely last.
e_vt_1;
e_vt_2;
e_vt_3;
e_vt_4;
I uncovered the shrinking part.
This
task e_vt_4{
e_r = S_Circle_r+6;
let e_r_d = -(S_Circle_r-16)/(GetTimer*60);
ef_wait(60);
loop{
e_r += e_r_d;
ascent(let i in 0..3){
ascent(let j in 0..9){
ObjEffect_SetVertexXY(obj, i*2*9+2*j, e_r*cos(120*i+e_ang_sub*j), e_r*sin(120*i+e_ang_sub*j));
ObjEffect_SetVertexXY(obj, i*2*9+2*j+1, (e_r-16)*cos(120*i+e_ang_sub*j), (e_r-16)*sin(120*i+e_ang_sub*j));
}
}
yield;
}
}
is equal to this
task e_vt_4{
let totalradius = radius+6; ///let the total radius of the entire circle be 6 pixels further away than the radius called earlier (originaly "S_Circle_r+6", but I named it "radius" to understand it easier)
let shrinkradius = -(radius-16)/(GetTimer*60); ////this is how much it shrinks per frame
ef_wait(60);
loop{
totalradius += shrinkradius; ///self explanatory
ascent(let s in 0..3){
ascent(let d in 0..9){
ObjEffect_SetVertexXY(obj, s*2*9+2*d, totalradius*cos(120*s+e_ang_sub*d), totalradius*sin(120*s+e_ang_sub*d));
ObjEffect_SetVertexXY(obj, s*2*9+2*d+1, (totalradius-16)*cos(120*s+e_ang_sub*d), (totalradius-16)*sin(120*s+e_ang_sub*d));
}
}
yield;
}
}
I'm still trying to uncover the rest. But If I get it right, I could probably make a circle with a lot more vertices and not having to do much work for it. This way, I'll know how it work AND I can make it look a lot more like a circle, instead of a polygon with many sides. Small stuff like that bother me. That's why I like danmakufu.
That and... because I want to make that resurrection part perfect, just like in Imperishable Night :V
Yes, I'm possessed
by the Phoenix :P
-
http://www.shrinemaiden.org/forum/index.php?topic=3256.msg141894#msg141894