• Welcome to Touhou Wiki!
  • Registering is temporarily disabled. Check in our Discord server to request an account and for assistance of any kind.

User:Mddass

From Touhou Wiki
Jump to navigation Jump to search

上海アリス幻樂団 zun氏 インタビュー

話し手:上海アリス幻樂団 zun氏(以下、zun)

聞き手:出水洸太郎(以下、出水)

今回は東方Projectで有名なzun氏に、東方で使われている弾幕スクリプトの話やらゲームに対する考えなどの話を聞いて来ました。


zun:とりあえず、飲み物頼みましょう。飲み物こないとテンションがあがらないもんで…。 (ということで、ビールを注文)

弾幕スクリプト

zun:どういう話からしましょうか。

出水:ああ、黄昏洒場の時にあとがきで「弾幕スクリプトがすげー」っていうコメントがあったと思うので、そのへんを伺いたいかなと思っています。

zun:一応、そのファイルを持って来ましたんですよ。

出水:じゃあ、それを見ましょうか。 ノートPC起動しますね。

zun:神霊廟の5面ボスのスクリプトですね。

出水:ノートに本編入れてくればよかったな…。でも、キーボードでプレイになっちゃいますね。

zun:それは辛いだけだ。(笑)

出水:でも、キーボード派も多いですよね。

zun:キーボードのほうが正確に斜め入れられるからね。パッドだと勝手に斜め入っちゃうからね。

出水:98の時はキーボードの横にスティックをおいて、低速移動だけキーボードのSHIFTキーを使っていましたよ。

zun:98の時はねー、ボタンがなくて低速移動のボタンは付けられないんだよねー。僕がキーボードでずっとやっていたから…。今でもずーっとキーボードでカスタマイズされていますね。

出水:あ、PCの準備できました。

______________________

 呑んべぇ会の制作したSTG。東方Projectで使われているエンジンが母体となっている。
現在はフリーソフトとしてダウンロード可能。 http://alcostg.amatukami.com/
 PC-9801のこと。東方旧作と呼ばれる5作品がリリースされている。
 ゲームパッドを使う場合、ハードウェアの仕様として2ボタンしか認識しなかった。それらは、ショット、ボムに割り当てられていたので、低速移動はキーボードを使うことになる。

p4

zun:少ない量で書けるように、それだけを頑張って考えています。弾幕自体にいるんな引数をあたえて動かしています。特徴といえば、どんな引数でも難易度別の値をいれる事ができるところですね。if文でわけなくていいので便利です。

出水:これは面白いですね。

[image]

これは、物部布都の最初の弾幕のスクリプト。灰色の部分が、難易度別の引数の部分。コロンでくぎって4つの数値を書くにとで、それぞれEASY,NORMAL,HARD,LUNATICの値となる。 今回の場合は、EASYなら20方向の同心円弾でLUNATICなら58方向の同心円弾になる。以下左がEASY、右がLUNATICの写真であり、同心円弾の弾数が変化している。

p5

zun:命令の頭に難易度を書く場合もあります。 こういう場合はイージーとノーマルだけこっち、ハードとルナティックはこっちという事ができます。

[image]

EASY,NORMALとHARD,LUNATICでスペルカード名が変ゎる部分。if文がないのですっきりしている。

zun:そういう言語を作っているのが楽しいんだね。

出水:昔はボスだけはハードコーディングしています、って聞いてましたけど、今はこんなかん じなんですね。

zun:昔って行っても98の頃ですね。あのころは使い捨てで良かったんだけど、だんだんと使い捨てじゃなくなってきたので、そうなるとスクリプトのほうがどんどん楽になってきました。

出水:スクリプトだとプログラムを再起動せずにテストできて便利ですね。

zun:ハードコーディングするのはゲームのシステムの部分だけですね。 その部分は使いまわすことはないので。 全部スクリプトってのもないし、ハードコーディングってのもないので、そのへんのバランスを取っていくのがいいですね。

出水:敵を倒したときはどうなるんですか。

zun:ああ、そこはこういう関数を冒頭で書いてます。 指定した時問が来たり、倒されたりなんかしたらこの関数に飛ぶ、みたいな。

出水:なるほど、だいたい分かって来ました。他になにかありますか。

zun:頻繁に使うのはランダムですね。ランダムは変数に組み込むようにしてぃます。大文字でRIとかRFとか書いているのがランダムなんですよ。RIは整数だからあまり使わないかな…。RFだと0~1の浮動小数点、RF2だと-1~1の浮動小数点になります。 いちいち関数を呼び出して、というのが面倒ですからね。

出水:たしかに、乱数は頻繁に使うから関数にしない、ってのは面白いですね。 0~1と-1~1があれば概ね事足りますし。

______________________

 プログラムに直接仕様を作りこむこと。 今回はスクリプトの対義語として使っている。
 interrupt関数の事。 次のぺージのソースの冒頭に注目。

p6

皿を投げ、その皿が画面端に当たると跳弾が降り注ぐスぺルカード、投皿「物部の八十平翁」。I0の値が投げる皿の数で、1回毎に2枚づつ増える。インタビュー中にあった通り、RF2という変数は使うたびに-1~1の範囲で浮動小数点のラングムな値を返すものである。

p7

zun:こういう痒い所に手が届くのがスクリプトの良さです。それが軽く作ってあるので速いんですよね。汎用性はそんなに無いですけど。これを呼ぶのはまた別の敵なんですよ。見えない無敵の敵がいて、そいつが呼ぶわけです。

出水:じゃあ雑魚戦とかも管理する敵がいてそんな感じですか。無敵の敵がいて…。

zun:そうそう、起動すると"main"という敵がいるんですよ。C言語っぽいですね。

出水:そうですね。中ボスとかどうしています?

zun:中ボスが死ぬまで待つ、って命令があるんですね。ポスだと会話が終わるまで待つ、って関数があるはずです。

出水:これ見ていると会話シーンもスクリプトに入れたくなりますけど無いですね。

zun:会話はまた別にスク リプトがあるんです。表情替えとかもあるんですが、全角で始まっていたら会話文だ、みたいなかんじで。

出水:なるほど、会話用に特化したスクリプトをもう一つ用意しているんですね。 そのほうが、簡単に作れていいですね。

zun:こういうのも毎回毎回作っていく途中で改善しています。それも楽しいですね。それで、成長したスクリプトを自分で使ってくのも楽しいです。

あんまり汎用性がないですから、これを公開してみんなに使ってください、ってのは出来ないですね。多分公開すると色々足りないものが出てきちゃう。それに何作っても東方にしかならないし。

出水:たしかに、東方は、”っぽさ”ってのがありますね。

zun:そういう”っぽさ”ってのもスクリプトのせいかもしれませんね。

zun:あ、そろそろビールをください。

ゲ一ムの売りとは

p8