読者です 読者をやめる 読者になる 読者になる

いつクリはてブロ

いつになったらクリエイティブするの?

もう少し複雑なゲームを作ってみる(前編)

この記事はDXRubyAdventCalendar2015、11日目の記事です。
www.adventar.org

昨日は土屋つかささんの「司エンジンの開発経緯」でした。
DXRuby Advent Calendar 2015 10日目:司エンジンの開発経緯 - 土屋つかさのテクノロジーは今か無しか

2012年からのプロジェクトということで、途中で歩みを止めることなくじっくり時間を掛けて着実に進歩している模様です。
24日にリリース予定ということで、期待が高まります!
DXRubyは、本体だけでなく各ジャンルのゲームに特化したエンジンがいろいろ作られているのもすごいところですね。
日々ゲームが作りやすくなっていると考えると、もっとゲーム作らなきゃ! という気分になります。

もう少し複雑なゲームを作ってみる(前編)

前回までの記事で取り上げた「PIZZA COOKER」は、最小限の構成でゲームを作るというコンセプトで進めました。
今回と次回の記事では、もう少し複雑なゲームを作るときにどのようにしたらいいかを紹介します。
……とはいえ、私自身もそんなにゲームを公開しているわけではないので、半分くらいは私自身がゲームを完成させる手順を確立させるための試行錯誤です。
お付き合いいただけますと幸いです。

今回の内容
  • 2本の柱:フレイバーとメカニクス
  • いい感じのフレーバーで盛り上げる
  • メカニクス:ゲームサイクルをまとめる
  • ペーパープロトタイプ:画面構成から細かい仕様を考える
  • 便利なライブラリで手間を省く

2本の柱:フレイバーとメカニクス

作りたいゲームが少し複雑だなと思ったら、コーディングに入る前に素案を練る必要があるでしょう。
私の場合は、いつもフレイバーとメカニクスの2つを意識して考えます。

フレイバーとは「匂い」「(アイスなどの)味」のことです。
ゲームにおいてフレーバーとは、ゲーム部分には全く関わりのない舞台設定やシナリオのことを指します。
メカニクスとは、ゲームの仕組み(骨格)のことです。

二つは全く別の性質のものですが、お互いがお互いを助け、広げ合う関係にあります。
メカニクスからフレーバーを補完したり、フレーバーに合わせてメカニクスを拡張したり。
いわば二人三脚です。
足並みが揃えばゲームの素案作りはどんどん進んでいきますが、片方の力が強すぎるとその場で転んでストップしてしまいます。
それぞれを同じくらいほどほどに抑えておくのがゲームを完成させるコツです。

いい感じのフレーバーで盛り上げる

舞台設定の核となる部分が決まると、ゲームの内容が見えやすくなり、やる気も出てきます。
古いコンピューターゲームのように、ゲーム開始時に毎回表示される前文のようなテキストを書いてみましょう。

教皇庁が魔法薬学に関する見解を変更したとの知らせが、辺境に住むあなたの元に一日遅れで届いた。
従来、教皇庁は「生命のあるべき姿を歪める」として、発展的な魔法医学や魔法薬学の研究を規制していた。
そのため、重病にかかった者やその家族たちは、ただ神に祈るか、黒魔術師たちの力を頼る他なかった。
(多くの魔術師たちは、神への祈りは静かに死を待つに等しいことと認識していた。)

数年前から蔓延する瘴気による流行り病は、頭の硬い教皇庁の見解を変えさせるに充分なほど、既に死者を出していた。
教皇庁は魔法薬学に関する規制を段階的にゆるめ、そして昨日ついにその終着駅である「生命の霊薬」の研究を異端としないと発表した。
それとともに、王立アカデミーにて研究チームを結成し、流行り病を一日も早く根絶する旨も宣言された。

今、あなたは一通の手紙を手にしている。
差出人はアカデミー時代の恩師で、王立アカデミーの研究チームへの参加を呼びかけるものであった。
ただし、政治的な理由で、本格的なチーム結成には時間が掛かるであろうことが書き添えてある。

あなたほどに優秀な魔法薬学の研究者は王国の中でも数名しか存在しないが、研究の主導権を握る研究室長ともなれば、それは1人に限られる。
おそらくは、他の誰よりも先んじて「生命の霊薬」への足がかりを掴んだ者がその座に着くことになるだろう。
ぐずぐずしてはいられない。今すぐに始めなくては。

なんかこんな感じのゲームを作りたいと思います(願望)

肝心なのは、先ほども書いたようにやり過ぎないことです。やりすぎると、

  • これ自体が面白くなってしまい、他の作業が遅れる→遅れるに連れてやる気がなくなる
  • 実現のための作業量(コーディング、データやテキストの用意)が膨大になり、やる気がなくなる

というようなことになりがちです。

以下の条件に従えばちょうどいい量に収まるのではないかと思います。

  • ゲームの初めと終わりだけに絞る(ゲーム開始時点の主人公(プレイヤー)の状況と、何がゲームのゴールなのかだけを書く)
  • 30分以内に書き切る

メカニクス:ゲームサイクルをまとめる

メカニクスとは何かをひと言で説明するのは難しいですが、簡単に言うとそのゲームに特徴的なシステムのことです。

  • 弾が床に当たると自分のチームの色になって勝敗が色の面積で決まるシューティング
  • 弾と機体に2つの属性があり自分と同じ属性の弾に当たると有利になる弾幕シューティング
  • 身に付ける服装によってジョブが変わり使えるスキルが変わるRPG

メカニクスはフレーバーから導き出されることもあれば、メカニクスに合わせてフレーバーを作り上げることもあります。
先の例で考えると「二つのものを合成して別のもっとすごいものを作る、これを繰り返す」というメカニクスが考えられますが、逆にこれは魔法の薬ではなく、

  • 二つの金属を混ぜて合金を作る
  • モンスターを合成して別のモンスターを作る

とかでもいいわけです。

コンピューターゲームは同じ動きの繰り返しを構造として持っていることが多いです。
これはゲームサイクルと呼ばれます。
先の項で書いた短い文章と同様、ゲームサイクルを決めるとゲームの全体が見えやすくなり、やる気が出ます。
最も一般的でイメージしやすいゲームサイクルは、「拡大再生産」と呼ばれるものです。

ある作業で金銭を稼ぐ
↓
道具を買うと作業による稼ぎが増える
↓
より多くの金銭が稼げる
↓
より上位の道具を買ってもっと稼ぎが増える
↓
ゴールまで繰り返し

シミュレーションゲームはこれに任意のフレーバーを当てはめるだけで大体ゲームになってしまいます。
多くのゲームは拡大再生産の他にもいくつかのメカニクスが複合し、より大きなゲームサイクルを形成しています。*1

f:id:vivit_jc:20151221100648p:plain
(『刀剣乱舞』チュートリアルより引用)

先に挙げたフレーバーからゲームサイクルを考えてみましょう。

薬の素材を集める(薬草とか、蜘蛛の足とか、獣の内臓とか)
↓
薬を作って売り、資金を作る
↓
貴重な素材や、さらに素材を集めるための道具を買う
↓
貴重な薬を作る
↓
繰り返し

このように中心となるゲームサイクルが決まれば、例えば

  • 設備を拡張してより多くの薬を同時に作れるようになる
  • 薬を自分で飲み、身体能力を向上させ素材集めを効率化する
  • 使い魔に素材を探させる

など、使えそうなゲームシステムの候補をいろいろ考えることができます。

ただし、これもやり過ぎないことが肝心です。
たくさんのメカニクスをゲームに取り入れるとコーディングが大変になりますし、要素がたくさんあるからといって楽しいゲームになるわけではありません。
アイディアはメモにまとめて、あとで取捨選択する必要があるでしょう。
(もしアイディアがたくさん浮かんでしまって大変な場合は、こちらを参照してください)

ペーパープロトタイプ:画面構成から細かい仕様を考える

ゲームシステムを大まかにまとめたら、画面構成を考えてみましょう。
紙に画面構成を書き出してみると、いきなりコーディングを始めるよりもうまくいくことが多いです。
これを(カッコつけた言い方で)ペーパープロトタイプと呼びます。

f:id:vivit_jc:20151219225510j:plain
ペーパープロトタイプのいいところは、画面構成から曖昧だったゲームシステムを逆算していけるところです。
例えばメニューに何のボタンを置くか決めるだけで、プレイヤーが何をできるかが決まりますし、またそのボタンを押した後の画面について考える必要があることも分かります。
これはシミュレーションゲームでより効果を発揮しますが、アクションゲームやパズルゲームなど他のゲームでも有効です。

便利なライブラリで手間を省く

ところでこのようなシミュレーションゲームを作るのに、aoitakuさん謹製の「SpriteUI」というライブラリが便利です。

aoitaku/dxruby_sprite_ui · GitHub
[Ruby][DXRuby] ピザ焼けなかったので野良メイドを拾って育てるゲーム作りました - あおたくノート

開発コミュニティが活発だと、このように便利なシロモノが見つかることがあるので、有り難く利用させてもらいましょう。
次回以降は、実際にSpriteUIを利用して例として挙げた「魔法の薬」ゲームを作っていこうと思います。
(以上、取ってつけたようなDXRuby要素*2

次回予告と明日の記事

次回は「もう少し複雑なゲームを作ってみる(後編)」です。
実際にコーディングに入れると…いいな…。

明日はsato_cさんの「DXRubyで昔遊んだパズルゲームを思い出して作ってみた」です。
いい頭の体操になるゲームなので、年末年始の暇な時間にピッタリですね!
sunnyday.hatenablog.jp

*1:『クッキークリッカー』は逆転の発想で、拡大再生産そのものをテーマにしたゲームです。クッキーでおばあちゃんを雇うともっとクッキーが増える!

*2:これを書かないとマジでDXRubyが何も関係なくなってしまうところだった(汗