東方の弾幕を再現した配位が何かが違う……

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
COFE
記事: 97
登録日時: 14年前

東方の弾幕を再現した配位が何かが違う……

#1

投稿記事 by COFE » 14年前

東方紅魔郷6面ボス、レミリア・スカーレットの通常弾幕を再現してみました
下のコードは龍神録でそのまま再生できます(オリジナルの関数とか使ってないので)

コード:

void RemiKnifeEasy(){
	static float angle1=PI2;
	int i,k,t=boss_shot.cnt%200;
	if(t%5==0){
		for(i=0;i<4;i++){
			if((k=search_boss_shot())!=-1){
				boss_shot.bullet[k].x     = boss.x;
				boss_shot.bullet[k].y     = boss.y;
				boss_shot.bullet[k].knd   = 3;
				boss_shot.bullet[k].col   = 0;
				boss_shot.bullet[k].angle = angle1+PI2/4*i;
				boss_shot.bullet[k].flag  = 1;
				boss_shot.bullet[k].cnt	  = 0;
				boss_shot.bullet[k].state = 0;
				boss_shot.bullet[k].spd	  = 1;
			}
			if((k=search_boss_shot())!=-1){
				boss_shot.bullet[k].x     = boss.x;
				boss_shot.bullet[k].y     = boss.y;
				boss_shot.bullet[k].knd   = 3;
				boss_shot.bullet[k].col   = 0;
				boss_shot.bullet[k].angle = angle1+PI2/4*i-PI/180*10;
				boss_shot.bullet[k].flag  = 1;
				boss_shot.bullet[k].cnt	  = 0;
				boss_shot.bullet[k].state = 0;
				boss_shot.bullet[k].spd	  = 2;
			}
		}
	}
	angle1-=PI/180*2;
}
再現できて嬉しかったことには嬉しかったのですが、どこか本家と違うような気が^^;
スピードいじったりしてみたのですが、やっぱり何かが違います????

いろいろやってるうちに頭がグルグルになってきました、本家の美しい弾幕に近づけるにはどうの辺りを改良すればいいでしょうか?
よろしくお願いします

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

Re: 東方の弾幕を再現した配位が何かが違う……

#2

投稿記事 by Tatu » 14年前

3つ目の通常弾幕だったか。
撃ちっぱなしなのが美しく見えない原因だと思うので
撃たない時間を作ってみては?

COFE
記事: 97
登録日時: 14年前

Re: 東方の弾幕を再現した配位が何かが違う……

#3

投稿記事 by COFE » 14年前

ああ、はい、もちろんその時間は造ります
たしか打たない時間でボスがすっと動いたりもしてましたよね

でもそういう問題ではないんです、私自身何度かレミリアの弾幕を見返しましたが、この弾幕とどこか違う気がして気がして……
Tatuさん的にはこれで再現できていると思いますか?

COFE
記事: 97
登録日時: 14年前

Re: 東方の弾幕を再現した配位が何かが違う……

#4

投稿記事 by COFE » 14年前

なんか違うと思ってよくよく見直したら、本家とは逆回りで回転していました(きっとコレがなにか違うと思った原因でしょうね)
さらにTatuさんに言われた通り弾幕を止めて、ボスを少し動かすという動作をしたところかなり本家に近くなりました
また紅魔郷からナイフの画像を吸い出して、そっちを使ったところ、あら不思議。どう見てもレミリアの弾幕ではありませんか!
本家の方を初見で見たときにあまりに美しかったので、そのイメージが強すぎたようです。(龍神録はナイフの画像の色が少し濃いめなので、そこも脳内イメージとの食い違いを生んだようです)
ある程度のところで妥協することの大切さを知りました。

今度からはもっとよくソース以外の部分も推敲してから質問します
Tatuさんありがとうございました

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

Re: 東方の弾幕を再現した配位が何かが違う……

#5

投稿記事 by Tatu » 14年前

完成したコードがのってませんがこんな感じですかね。
無題.png

コード:

void boss_shot_bulletE234(){
	int t=boss_shot.cnt%240;
	int turn=boss_shot.cnt/240;
	int col;
	int k;

	if(t==0){
		boss_shot.base_angle[0]=rang(PI);
	}
	if(t<120 && t%3==0){
		if(turn%2==0){
			col=0;
		}
		else col=1;

		for(int i=0;i<4;i++){
			if((k=search_boss_shot())!=-1){
				boss_shot.bullet[k].flag=1;
				boss_shot.bullet[k].knd=3;
				boss_shot.bullet[k].col=col;
				boss_shot.bullet[k].x=boss.x;
				boss_shot.bullet[k].y=boss.y;
				boss_shot.bullet[k].angle=boss_shot.base_angle[0]+PI2/4*i;
				boss_shot.bullet[k].spd=3;
				boss_shot.bullet[k].state=0;
				boss_shot.bullet[k].till=0;
				boss_shot.bullet[k].eff=0;
			}
			if((k=search_boss_shot())!=-1){
				boss_shot.bullet[k].flag=1;
				boss_shot.bullet[k].knd=3;
				boss_shot.bullet[k].col=col;
				boss_shot.bullet[k].x=boss.x;
				boss_shot.bullet[k].y=boss.y;
				boss_shot.bullet[k].angle=boss_shot.base_angle[0]+PI2/4*i;
				boss_shot.bullet[k].spd=2;
				boss_shot.bullet[k].state=0;
				boss_shot.bullet[k].till=0;
				boss_shot.bullet[k].eff=0;
			}
		}
		se_flag[0]=1;

		if(turn%2==0){
			boss_shot.base_angle[0]+=PI2/44;
		}
		else boss_shot.base_angle[0]-=PI2/44;
	}
	if(t==120){
		move_boss_pos(64,64,FMX-64,156,64,120);
	}
}

閉鎖

“C言語何でも質問掲示板” へ戻る