2019年9月9日 | ブログ記事

弾幕の造形神(イドラデウス)になろう!

aya_se

どうも、19のaya_seと申します。

ちょっとは成長したからなんですかね~、最近は自分の中で世の中の「怖いもの」ってだいぶ減ったような気がします。昔はバラエティ番組で「2022年に隕石が落ちて人類が滅亡する」とかやっていたら数日間隕石の恐怖に怯えてみたり、「マリと子犬の物語」とかいう新潟の地震を題材にした映画があったんですけど、それを観(させられ)た反動で夕方に犬が吠えているのを見るとこの後大地震が来るんじゃないかってこれまた恐怖に怯えてみたりしたものですがね…。いやぁ~懐かしいですなぁ我が幼少時代(#^^#)
mari_image

嘘である

この男、首都圏に直撃する台風15号のかつてないほどの暴風に一晩中怯えてばかりなのである!!!あまりに怖いのでそれとなくイヤフォンをして爆音でゲームを遊んでみたり、いつもよりちょっと窓から遠くに椅子を動かしてみたり、全くもって寝られる気がしないので仕方なくこの記事を書いてみたりしているのだった!!!

………さてさて、そういえばこの記事は夏のブログリレー9/9の記事だったわけですが…(^^);。いやー、何を書こうかなあってずっと迷ってましてー…。本当はね?「ボカロ始めてみた」とかでも書いてみたかったんですけどねー…、ついに自分もバイト…すなわちPart-Time Jobを始めてしまいまして…、思ったよりも時間が無いんですよね…。久し振りの忙しい夏休みって感じですけど、こういうのもまぁ悪くないですよね~(#^^#)
company_black_baito

嘘である!!

この男、本当は暇人なのである!!!バイトも所詮は週2日…、課題なんてものは存在しないこの大学1年生の夏休みを死ぬほど謳歌しているのだった!!!………それにも関わらずこの3週間一切合切DTMにさえ触れずボカロなんて尚更触れているわけもなかったこの男が、一体何をしていたのかというと…???

弾幕を作っていた!!!!!

いよいよ本編始まります。←前置きが長過ぎる

東方新作が販売された

(※以下東方新作(鬼形獣)製品版に関する若干のネタバレを含みます。)
71qiFzB22IL.SX679
時は遡ること2019年8月12日、東方Project第17弾「東方鬼形獣~Wily Beast And Weakest Creature~」が満を持して発売されました。自分は夏コミ非参戦だったので、Youtubeやニコニコに上がるネタバレ動画を漁る1日だったわけですが、今作は歴代の東方作品の中でもなかなか良い作品だったと思います。ブログの本題ではないので大雑把に書きますが、

東方新作のここがスゴイ!!

進化した演出!!

特に最終面の退却演出や加勢演出が凝っていたと思います。

中毒性の高いBGM!!

近年は道中曲に良曲が多い印象でしたが、今回はボス曲がアツい!「ジェリーストーン」「セラミックスの杖刀人」など中毒性の高い曲が多いです。

意外と易しめ!!

いつもよりもダークな雰囲気である割には難易度は意外とそうでもない!うむ、易しげで稼ぎやすい。初心者にもおススメです。

…などなど、今作の良さみを語っていたら読者が呆れるほどの長文になってしまうのでこれぐらいにしておきます。。。

まぁそんなわけで、久し振りに東方大好き熱がオーバーヒートしていたわけですが、ところがどっこい、そんな自分に突然の悲報が舞い降ります!!

鬼形獣委託販売開始日は9/6!!!

遅い!!!遅すぎる!!!天空璋や紺珠伝でさえ8月中には委託されていたのに今作は9月だと!!

待てない!!

早く遊びたい!!

でも遊ぶことができない!!

ならば残された手はただ1つ…。

無いもの(弾幕)は作ればいい!!

どうしてこんな簡単なことに気が付かなかったのかしら!ないんだったら自分で作ればいいのよ!!
5

「東方弾幕風」とは

………とまぁ無駄に長過ぎる前置きを経てようやく本題に入ります。今回自分で弾幕を作るのに用いるツールは「東方弾幕風(とうほうだんまくふう)」(Ph3版)というものです。東方原作的な弾幕を作るのに特化したアプリケーションであり、自分で1からプログラムを書くのに比べれば遥かに手軽に、しかも高品質なものを実現することが可能です。
---1
一応それっぽいプログラムを自力で書く必要がありますが、自機、敵、弾などの概念が予め実装されていたり、便利な関数が多数搭載されていたりするので、AtCoderのA問題が解ければ全く問題無い程度の難易度と言えます。

作るもの

今回は東方鬼形獣の新キャラの中でもとりわけ気に入った4面ボスのキャラクター・吉弔八千慧を題材にしたスクリプトを制作します。インテリヤクザ、かわいい(確信)。
face04ct
通常攻撃8つ、スペルカード10枚というように、おおよそ本家のEXTRAボス戦に相当する分量を作ります。これをさらに3難易度(EASY,NORMAL,HARD)用意しますが、まずはNORMALから作っていきます。EASYとHARDはNORMAL版をベースに難易度を加減することで作ります。

弾幕のネタを考える

通常攻撃は本家をオマージュして作れば割と簡単にそれっぽくなりますが、スペルカードというとそうもいきません。何か元となるネタを発掘し、それをいかに弾幕上で表現するかということを考えなければいけません。
ここで今回のキャラ、吉弔八千慧について使えそうな設定を挙げてみると…

<原作から>

・原作では鬼傑組(きけつぐみ)という畜生界の組織(ヤクザ)の組長。
・鬼傑組は「土中、水中、暗闇等からの奇襲を得意とする」。つまりインテリヤクザ。
・「逆らう気力を失わせる程度の能力」を持つ。
・スペルカードで火を噴く(鬼符「搦手の畜生」)。

<キャラの元ネタから>

・元ネタは中国神話の吉弔(きっちょう)というの合成獣。
・鹿を見ると【禁則事項です】して【禁則事項です】してしまい、放出した【禁則事項です】が固まると紫稍花になると言われている。
・肉は柔らかすぎて食用に適さないが、脂肪分や紫稍花(前述)は腫れ物に効用のある漢方薬の原料となる。

などなど…。明らかに使えなさそうな設定も混じっている気がしないでもないですが、それなりにキャラも濃く、色々と作れそうな気がしますね。それでは早速ガンガン弾幕をつくって行き………

ま し た !

安定と信頼のました工法。作ったものの例がこちら………。
---3
---6
---2
---10
---5
---7
---4
---9
---8
色々作れます。きれい(避けられるとは言ってない)。

具体的な実装例

スクショ貼っただけだと微妙なので、内部のコードも少しだけ紹介します。ここで挙げるのは比較的シンプルな通常弾幕1のEASY版の例です。弾幕のプログラムの他に、敵の描画や敵撃破後の動作など色々とありますが、毎回自分で書くのはだいたい弾幕関連の箇所だけです。
--
(※インデントがおかしいとか関数の頭文字が大文字とか邪道な部分も多いですが大目に見て下さい…)

東方弾幕風はC言語に近い独自の言語で記述していきます。画像は弾幕関連の部分を切り取ったもので、ShotAというtask(関数)が最初に実行されます。例えば最初のloop(50)で囲われたloop(6)の部分ではCreateShotA2という関数を使用しています。これは名前の通り弾を作成し発射する関数で、引数は順に①初期X座標②初期Y座標③速度④角度⑤加速度⑥最高(低)速度⑦弾画像ID⑧遅延時間となっています。

まず角度に注目すると、引数にAが指定されています。Aの初期値は毎回0~360の乱数ですが、loop(6)内で毎回A+=60することで6Wayの全方位弾を発射しています。もしこのまま再度loop(6)の内容を実行するとしたら全く発射角度が同じの全方位弾を繰り返し発射することになりますが、それだと避けがいのない弾幕になってしまうので、毎回微妙にAの初期値を変更する(A+=2.5×cos(Af)+52.5)ようにしています(Aの初期値の変化量が一定だとそれまた単調で避けやすくなってしまうので、三角関数を用いた変化量にすることで対策しています)。

次に発射座標についてですが、単純に敵の座標である(ex,ey)にせず(ex+30×cos(A),ey+30×sin(A))としたことで、敵からちょうど30だけ離れた同心円状の箇所から弾を発射することができます。これに深い意味はありませんが、多少敵本体から離れた位置から弾を発射する方が見栄えが良くなることが多い気がします。

さらに速度について、初期値は5とかなり早めに設定していますが、加速度も-0.4とかなり絶対値大きめの値にすることで、すぐに減速して最低速度である0.75になります。ところがCreateShotA2直後のObjMove_AddPatternA2関数によって、発射から45フレーム後に弾の移動パターンが変化し、速度角度は維持したまま、加速度が0.03に変化するようになっているので、再設定された最高速度の2まで多少の時間を経て到達し、プレイヤーのもとにやってきます。

………という感じのことを把握して頂いた上で、この弾幕の実際のプレイ動画を見てもらうと、まぁ確かに大体そんな感じになっているなぁと感じてもらえると思いますし、工夫次第で簡単に色々な弾幕が作れそうだというのもきっと伝わると思います!

東方弾幕風はいいぞ

弾幕風は素晴らしいです。自分としてはこの東方弾幕風こそ、日本の全国の小中学校のプログラミング教育の教材として使用されるべきだとさえも思っています。「手軽でありながら多少はちゃんとしたプログラムらしいコードを書くことができ、しかもかなりハイクオリティですぐに遊べるものが作れる(具現化できる)」という点において、東方弾幕風はこれ以上ない素晴らしいアプリケーションです。皆さんもまだまだ長いかもしれない(?)この夏休み、東方弾幕風に触れて、素敵な弾幕の造形神(イドラデウス)になりませんか…!??
face06n2-1

参考

東方弾幕風Ph3配布場所
https://touhougc.web.fc2.com/products/th_dnh_ph3.html
東方弾幕風Ph3スクリプトリファレンス
https://touhougc.web.fc2.com/products/th_dnh_help_v3.html

この記事を書いた人
aya_se

サウンドや競プロをやっています。

この記事をシェア

このエントリーをはてなブックマークに追加

関連する記事

2019年9月24日
夏のブログリレーエンディング
HF
2019年9月23日
ヒダッカソンに参加しました
oribe
2019年9月22日
ベクターレイヤーを使おう
Sigma1023
2019年9月21日
5,000円の液タブ(笑)を買ってみた。
Hinaruhi
2019年9月20日
Kotlin + GradleでReactアプリを作る
RLook
2019年9月19日
定理証明で遊ぼう(しなさい)
stretchybox

活動の紹介

カテゴリ

タグ