Project Anthem(TCストライカーズ)

ぷろじぇくとあんせむ公式サイトであり雑記ブログ。当サイトはリンクフリーです。

ゲーム開発

 ボスの状態遷移が複雑になりすぎってなかなか新しいものを作れなかったのですが、ステートパターンなる書き方を実践して見た結果、とてもわかり易いコードになりました。

  
・ステートパターンとは

 状態遷移を簡単に実装するデザインパターンです。switch文の各caseを各クラスに分割すると考えていただければよいかと思います。
  
 こちらのサイトを参考にしました。 
 東京工業大学デジタル創作同好会


 いままではボスクラスに以下のように状態遷移を書いていました。

 switchi(var){

case 1: 攻撃パターン1
case 2: 攻撃パターン2
case 3: 攻撃パターン3
}



 しかし、これだと各攻撃パターンを制御する変数をボスクラスに持たせないといけません。その結果生じる問題点が以下の項目です。
  1. 変数が増えすぎてわかりにくい
  2. 想定外に値が変わってしまう


しかし、ステートパターンを使うと以下のようにクラス・シートを分割、することができます。

  • class 攻撃パターン1を含むクラス{}
  • class 攻撃パターン2を含むクラス{}
  • class 攻撃パターン3を含むクラス{}

こうすることで識別子が同じ変数を使えるようになり、変数の管理も簡単になります。その結果、攻撃パターン作成に専念できるようになりました。



・ステートパターンを実装した意義
 開発の簡略化です。ゲームが複雑になるに連れてコードも複雑になっていきます。するとシステムを管理することに主眼が言ってしまい、肝心なゲーム性に割く時間がなくなってしまいます。
 大別するとゲームはシステムとコンテンツに分けられます。ゲームをストレスなく進めるためにはシステムの洗練さが、没入するためにはコンテンツの充実が必要です。ステートパターンによって開発をシステム作成とコンテンツ作成を分割することができます。両者の結合性が高すぎるとコンテンツをつくることでシステムに影響を与えてしまうかもしれません。それを防ぐためにもステートパターンはよいかと思います。



 弾幕STGの醍醐味とも言われる処理落ちを擬似的に実装しました。
 
 

  


 以前ツイートしたように画面内のオブジェクトが一定数を超えるとFPSが下がる仕組みになっています。

 ポイントは弾数ではなくオブジェクト数という点です。つまり自分が発射した弾、それにともなうエフェクトも対象に含まれます。怒首領蜂大復活では自身のショット数を増やすことで意図的に処理落ちをさせるというテクニックが存在します。それと同じような挙動になりました。

 CAVEシューティングに馴染みの薄い人はこのテクニックには抵抗があるようですね。以前、友人にその話をしたところ”邪道”と言われてしまいましたorz。とはいえ上級者も普通に使っているのでOKです。


・実装のメリット

 とにかく面白いです。ゲームの処理自体が遅くなることで自身が覚醒しているような感覚になります。人は覚醒すると時間をゆっくりと感じるようになるんですね。走馬灯がまさにそれです。より一層 ”俺つえええええ” を体感できるようになります。
 もう一つ開発者側としても難しい弾幕を作りやすくなります。高速高密度の弾はプレイヤーの心を折ってしまいますが、低速化することでなんとかなるかも、という印象を与えることができます。実際、私も処理落ちがなければ諦めてたゲームがたくさんありますしね。



・疑似処理落ちが面白いゲーム

Eden’s Aegis 


同人ゲーで疑似処理落ち実装してるのこのゲーム以外知らない。もしあったら教えて下さい。

怒首領蜂大復活


意図的な処理落ちについてちゃんたけさんが明言してます。動画はアーケードなので本当の処理落ちですが、steam版は疑似処理落ち仕様です。

キャプチャ


 こんな感じでテキストファイルに会話内容を書いておきます。

 先頭の数字:フォント、キャラクターの指定 
 2番の数字:ポーズの指定

 先頭の数字でキャラクターを指定し、2番めの数字でそのキャラクターのポーズを指定します。


 
ついでに文字を一文字ずつ表示できるようになりました。こんな機能はなくてもいいのですが、こういう本筋とは関係ないところこそが遊びなんですよね。昨今のデザインを見ると細かいところでモーションするものが多いです。また、テキストファイルで読み込んだ文が終わると自動で次の段階に入ります。



・なぜする必要があったか

前作までは会話とポーズ・フォントを一つづつ指定してswitch文で遷移させていました。しかしそのやり方だと途中で挿入する場合すべて修正しなければいけません。今後の開発効率を考えると何らかの修正が必要でした。次に、英語版を作成するという理由が挙げられます。コンフィグから言語設定できるようにします。その際に引数によって読み込むファイルを変えるようにして英語版に対応したいと考えたからです。まとめると開発効率を上げるため、ですね。





・3のテクニカルシュート演出が決まりました。




2と大きく変わってはいないのですがなかなかいいと思います。

演出時に流れる文字は stay or progressと書いてあります。普通は”行くか戻るか”と表現されることが多いですが、時の流れを戻すというのは実際のところ不可能ですからね。往くか留まるか、をキーワードにしました。

テクニカルシュートに続くシリーズを象徴するキーワードになってくれるかな。



・戦闘前の掛け声として




 ギルティギアのこれが好きでね。このシリーズが登場する以前は戦闘前掛け声といえばREADY GO、が定番だったわけです。それが HEAVEN OR HELL となりかっこいい!と思ったものです。ちなみに戦闘終了時にSLASHとカット・インするのですがその部分もTCストライカーズでオマージュしています。 


・ステージクリアカット・イン

 


 2まではシームレスにステージ移行していました。今作は一般的なSTGと同様リザルト画面を設けます。演出というよりも内部的(ローディング)な理由なんですけどね。絵はもちろんテスト用です。
 リザルト絵はステージごとに変えたいのですが、めちゃくちゃ労力掛かりそうです。なので、一部外注しようかと考えています。絵は自分で描くのでこの画面に合う構図(ラフ)を誰かに考えてもらいたいです。ココナラでリクエストすれば受けてくれる人見つかるかな。一枚あたり1000〜2000円でいけると思うが。






 



 3のテクニカルシュートコールを実装しました。
 
 これ単独で作ってた時は”かっこええ!”と思ってたのですが、実装してみるとイマイチ・・・


・シリーズが続くとやることがなくなる

 当初描いていたやりたいことは2作目でほぼやってしまいました。ストーリーはまだまだ続きますが、ボス戦などの演出は2で完成しています。2作目でよくここまでやったなと自分でも感心してしまいます。2のリリースからもう半年近くたちますが、よいアイデアがでず、結局2の演出を継続、強化することで決着しました。カットインの方向を変えるとかあれこれ考えましたが、どれもパッとしない。だったら2の演出のままでカットインの枚数を増やすとかアニメーションさせるとかに進化させたほうがよい作品になると思いました。



・テクニカルシュートコールどうする?

 文字出現に合わせて”カタカタ”とタイピングSEでも入れてみましょうか。それかフォントを変えるとか。大文字にしてもいいかもしれません。



・テクニカルシュートカットインどうする?

 上述の通り、このままでいきます。Live2D等の2Dモーションソフトを使うのもいいかもしれません。会話立ち絵の枚数を増やすのが手っ取り早いですね。プレイヤーがキャラクターを生き生きと感じてもらうためにどうしたらよいのか、ゲーム開発のメインイシューです。


 追記
大文字にしたら良くなりました。


昨日の記事をレッドネグの作者様が観てくださったようでありがとうございました。またきちんとしたレビューを書かせて頂きますのでまたよろしくおねがいします。

↑このページのトップヘ