Author Topic: SA Phantasm Investigation Thread  (Read 16890 times)

DgBarca

  • Umineko fuck yeah
  • Spoilers ?
Re: SA Phantasm Investigation Thread
« Reply #30 on: October 23, 2009, 11:40:59 AM »

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...
[21:16] <redacted> dgbarca makes great work
[21:16] <redacted> i hope he'll make a full game once

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: SA Phantasm Investigation Thread
« Reply #31 on: October 23, 2009, 05:18:59 PM »
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 )

DgBarca

  • Umineko fuck yeah
  • Spoilers ?
Re: SA Phantasm Investigation Thread
« Reply #32 on: October 23, 2009, 05:28:29 PM »
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
[21:16] <redacted> dgbarca makes great work
[21:16] <redacted> i hope he'll make a full game once

Infy♫

  • Demonic★Moe
  • *
Re: SA Phantasm Investigation Thread
« Reply #33 on: October 23, 2009, 05:35:09 PM »
EOSD PHANTASM WILL BE ITS OWN GAME HELL YES

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: SA Phantasm Investigation Thread
« Reply #34 on: October 23, 2009, 05:52:33 PM »
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.

Drake

  • *
Re: SA Phantasm Investigation Thread
« Reply #35 on: October 23, 2009, 06:04:07 PM »
-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.

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

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: SA Phantasm Investigation Thread
« Reply #36 on: October 23, 2009, 06:11:14 PM »
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 >.<

Quote from: Drake
Agh. Just taking a peek at the Aniki vibration functions
The way you said that sounds extremely wrong. :V

Fujiwara no Mokou

  • Hourai Incarnate
  • Oh, so this trial of guts is for ME?
    • Profile
Re: SA Phantasm Investigation Thread
« Reply #37 on: October 25, 2009, 01:45:48 AM »
In this, there's that magic circle effect I was looking for.  The one that revolves around the boss. yes, the linear line.
      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.
« Last Edit: October 25, 2009, 01:52:30 AM by Fujiwara no Mokou »

Re: SA Phantasm Investigation Thread
« Reply #38 on: October 25, 2009, 02:58:18 AM »
Read the post directly above yours.

Drake

  • *
Re: SA Phantasm Investigation Thread
« Reply #39 on: October 25, 2009, 03:13:51 AM »
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.

Code: [Select]
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????
}

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

Re: SA Phantasm Investigation Thread
« Reply #40 on: October 25, 2009, 04:09:44 AM »
Creating an object effect with 54 vertices is "proper"...?

Awesome //SpellCardAtack!

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: SA Phantasm Investigation Thread
« Reply #41 on: October 25, 2009, 08:03:44 AM »
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.

c l e a r

  • Carousel of Agony
Re: SA Phantasm Investigation Thread
« Reply #42 on: October 25, 2009, 09:26:04 AM »
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.

Thaws

  • _m廿廿m_
Re: SA Phantasm Investigation Thread
« Reply #43 on: October 25, 2009, 09:29:23 AM »
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.
« Last Edit: October 25, 2009, 10:06:43 AM by Thaws »

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: SA Phantasm Investigation Thread
« Reply #44 on: October 25, 2009, 10:02:20 AM »
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 =.=

c l e a r

  • Carousel of Agony
Re: SA Phantasm Investigation Thread
« Reply #45 on: October 25, 2009, 02:28:07 PM »
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...

Drake

  • *
Re: SA Phantasm Investigation Thread
« Reply #46 on: October 25, 2009, 06:51:08 PM »
The hitbox isn't glitchy, either. It's just made in a way so it's just extraordinarily difficult to die.

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

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: SA Phantasm Investigation Thread
« Reply #47 on: October 25, 2009, 08:36:18 PM »
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.

Fujiwara no Mokou

  • Hourai Incarnate
  • Oh, so this trial of guts is for ME?
    • Profile
Re: SA Phantasm Investigation Thread
« Reply #48 on: October 25, 2009, 11:43:10 PM »
Code: [Select]
   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?

Drake

  • *
Re: SA Phantasm Investigation Thread
« Reply #49 on: October 25, 2009, 11:59:29 PM »
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.

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

Fujiwara no Mokou

  • Hourai Incarnate
  • Oh, so this trial of guts is for ME?
    • Profile
Re: SA Phantasm Investigation Thread
« Reply #50 on: October 26, 2009, 12:17:09 AM »
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.

Drake

  • *
Re: SA Phantasm Investigation Thread
« Reply #51 on: October 26, 2009, 01:02:32 AM »
Spoiler:
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.
« Last Edit: October 26, 2009, 01:38:08 AM by Drake »

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

Fujiwara no Mokou

  • Hourai Incarnate
  • Oh, so this trial of guts is for ME?
    • Profile
Re: SA Phantasm Investigation Thread
« Reply #52 on: October 26, 2009, 01:42:36 AM »
Spoiler:
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.

Code: [Select]
e_vt_1;
e_vt_2;
e_vt_3;
e_vt_4;

I uncovered the shrinking part.

This
Code: [Select]
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
Code: [Select]
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
Spoiler:
Yes, I'm possessed
Spoiler:
by the Phoenix  :P
« Last Edit: October 26, 2009, 01:57:04 AM by Fujiwara no Mokou »

Drake

  • *

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