はじめに
前回の記事では、はじプロに関する技術論で長々書いてしまったので、今回は個人的な思いやゲーム制作時の裏話的なことについて緩く書いてみたいと思います。
(前回の記事はこちら↓)
1. 私にとってのゲーム作成
このアドベントカレンダーの企画で、みなさんのゲーム作成に対する思いやこだわりを読んでとても面白かったので、私も自分自身について少し分析してみようかと思いました。
1.1 作りたいゲーム?
私が普段良く遊ぶのはRPGやシミュレーションなどですが、攻略とか効率的なプレイにはあまり興味がなく、とことんやり込むというよりは好きなキャラで気ままに遊ぶということが多いです。また、アクションやシューティングについてはFC, SFCの頃は割とよく遊んでいましたが、最近のゲームはあまり詳しくありません。
そんなわけで、これを作りたい!というゲームがなかなか思いつきません。
1.2 好きなこと
それでは私はなぜはじプロでプログラミングをしているのだろうと考えると、やはり「プログラミング自体が好きだから」という結論に達しました。
「作りたいゲーム」という観点では自分の中に強い想いはありませんでしたが、「プログラミング」をする上ではいくつか重視したいポイントがあります。
(1)思いついたアイディアを形にすることを楽しみたい。
(2)難しい課題を解いて解決したい。
(3)実現した何かを誰かに楽しんでもらいたい。
(4)作るからにはより良いもの(自分が納得できるもの)を目指したい。
これらを実現する過程や結果で得られる達成感や満足感があるからこそ、私はプログラミングという行為が好きなんだと思います。
私にとって作る題材は必ずしもゲームである必要はなくて、いろいろ作りたい物の中の1つのジャンルとして「ゲーム」があるという感じです。実際、これまで作ってきたものの中にはゲームとは呼べない代物も結構あったりします(^^;
1.3 目指すところ
私がはじプロで作品を作る動機を一言で言ってしまえば「作るのが面白そうだから作る!」となります。
これだけだとただの自己満足になってしまいますので、職業プログラマの端くれとしてひと様に作品を提供するうえで心掛けている点もあります。
(1)分かりやすいこと、親切であること
(2)正しく動作すること(重大なバグがないこと)
(3)機能が十分であること(リソース制限で仕様を取捨選択するにあたり、本質的に重要な部分を適切に選ぶこと)
ただ、いざ作ってみると思ったように達成できていないことも多いです。
特に最近は(2)がダメで、公開後に致命的なバグが見つかることが多発しております(^^;
1.4 苦手なこと
ついでに自分が苦手とすることについても考えてみると、こちらはすぐに思いつきます。
・オリジナルのゲーム性(目的・ルール作り)
・レベルデザイン(ステージ、ギミック、行動パターン、etc.)
・絵を描くこと、音楽を作ること
・個性的な世界観、物語、キャラ
・対象に対する深い想いやこだわり、愛
およそゲームクリエイターには向かない性格&技能です(^^;
自分は上に挙げたようなことがらが苦手なので、これらができているゲームにはとても感心し、作れる人をうらやましく思ったりもしていますw
私の作品にクラシカルなボードゲームやパズルが多いのは、これらの苦手なことを避けていてもそれなりに面白さを成立させられることが影響していると思われます。
2. これまでの作品について
私がこれまで作ってきた作品について、それぞれの開発時の想いや制作裏話などを書いてみたいと思います。
2.1 銀河のリバーシ・ゲーム
私のはじプロ作品の1作目。技術論的なことは前回の記事で書き尽くしたので、それ以外について。
リバーシを作ること自体は決めていましたが、ただそれだけでは素っ気ないかと思い、ちょっとした物語を付けようと思いました。そこで私が好きな銀河英雄伝説のパロディでストーリーや舞台設定を作ってみたのですが、妻には「分かりにくいし無くてもいいんじゃない」と不評でした(^^; 捨てるには惜しかったので、最終的には表現をだいぶ簡素化して残しました。ちなみにタイトルの「銀河のリバーシ・ゲーム」は、銀河英雄伝説の原案になった小説「銀河のチェス・ゲーム」のパロディです。
2.2 はじめて!バンドブラザーズP[rogramming]
ニンテンドーDS/3DSで発売された「大合奏!バンドブラザーズ」シリーズの再現作品。私の作品では珍しく、このゲームを作りたい!という思いで制作したものです。
私がなぜこのゲームが好きなのかと言えば、楽器を演奏しているかのような感触がとても心地よいからです。十字キーとABXYにドレミファソラシド、LとRに半音上げる、オクターブ上げるを割り当ててあり、自由にメロディラインを奏でることができます。
続編を待ち望んでいますが全く出る気配がなく、それなら自分でSwitch版を作ってしまえ、というわけです。
Switchでバンブラ風の操作ができたことには大変満足したのですが、ノードン制限のため、合奏はもちろんのこと伴奏すらない単音のみの演奏になってしまったのはちょっと物足りなかったです(^^;
2.3 鏡の国のヒトノードン(チェス)
リバーシに引き続きメジャーなボードゲームとして、チェスを作ってみようと思い立ちました。作成のテーマは、複雑なルールをはじプロで実現することです。それについては、当時の私の技術とノードン数の許す限り、できるだけのことをやれたと思っています。
チェスと言えば「ハドラー親衛騎団」だろうということでネタを仕込もうかとも考えたのですが、ノードンがかつかつでそんな余裕はありませんでした。また、キャスリングなど一部のルールを盛り込めなかったのも心残りです。
このころはまだノードンガレージを分かりやすく綺麗にしていたい気持ちが強く、ノードン圧縮には消極的だったのですが、今ならもう少し詰め込みができそう。
タイトルはチェスに関連して鏡の国のアリスからつけました。(読んだことはありませんw)
2.4 ペグ・ソリテール
対戦型のボードゲームは二人でないと遊べないため、一人で遊んでもらえるゲームを作りたいと思い、古典的なパズルを題材に作成しました。
最初は最もオーソドックスな駒の配置(上記画像)の1ステージのみとして作成しました。製作はスムーズにできたのですが、いざ遊んでみると「難しい、解けない、つまらない!」と残念な結果に。実は私はこのゲームを自分で作ってテストプレイするまで遊んだことが無かったのです。
調べてみると、上記の配置以外にも様々な配置の問題を収録した問題集があり、駒の少ない簡単なパターンで定石を覚え、順に難しいものに挑戦していけるような仕組みになっているのを知りました。そこで私もそれに倣い、10問に絞って易しいものから難しいものへ順に進んでいけるようステージを追加しました。結構いいバランスにできたのではないかと思っています(^^)。
2.5 オジサンの背中と足元に伸びる影
残念な結果に終わった実験作です。
はじプロの太陽は座標が固定ですが、そこで地動説を唱えれば太陽が空を廻ってくれるのではと思いつき、試してみようとした作品です。開発当初の目標としては、季節や緯度で太陽の高度が変わる様子が見て取れる学習的なソフト…となる予定でした。
座標系に対して地面を固定した場合の太陽の軌道の計算方法はネットで見つけられたので、それを逆に応用して固定の太陽に対し地面の方を動かしました。そこまでは上手くいったのですが、問題はカメラです。カメラは天頂方向が固定でロールができないため、画面の中で天地がぐるんぐるんと回ってしまい、理想通りの制御ができませんでした。
2.6 けだまるのテルミン
Joy-Conのモーションセンサーを使って何かできないかと思って生まれた作品。不思議な電子楽器のテルミンの演奏を行います。
初期バージョンではただの楽器として「好きに演奏してください」というスタンスだったのですが、これでは普通の人には楽しめないと思い、バージョン2でゲームモードを用意しました。上から降ってくる星に合わせて操作することで「大きな古時計」を演奏できます。
JoyConを向けている方向と画面内で指している位置にズレが出ないよう、掴んでいるけだまるの奥行の座標をきちんと制御するのに苦労しました。
2.7 スネークキューブ
ふとした思い付きで生まれた作品。
twitterの書き込みで、ノードンガレージにテクスチャを斜めに配置するとモノに斜めの線がまっすぐの画像を貼り付けられることを知り、それならば以下のようにすれば綺麗な三角柱ノードンができるのでは、と思ったことがスタートでした。
三角柱が1つできたら、( ゚д゚)ハッ「これを繋げたらスネークキューブになるかも!」と閃きました。
とりあえず2つ連結してヒンジで回してみました、OK.
2つでできるなら3つ、4つも同じように... OK.
連結限界が来たらワープ連結を使って同じように... と繰り返すと、24個の三角柱で同じようにできてしまいました。1つのパターンができたらほとんどコピペを繰り返すだけで完成してしまったことに驚きました。
基本的な構造ができた後は、操作性の改善が課題でした。自由な形を作れるということは自由な角度からモノが見える必要があり、どうしてもどこをどちら向きに回転させるのかを分かりやすく表現するのが難しい。結局、操作性には満足のいく解決ができなかったのですが、スネークキューブの動きを再現できた点については納得のいくものでした。
2.8 ドット&ボックス
「世界のアソビ大全51」で知って楽しかったので作ってみました。
このゲームはお互い相手にマス目を取らせないように牽制しあいながら、チェーンで一気に大量得点をした方が有利となります。この点が対戦で盛り上がる部分かと思ったので、チェーンが継続するとオシャレなモノが順に出現して音声で煽っていき、得点した方は「ヒャッホー!」、取られた方は「ぐぬぬ」となるような演出を入れてみました。イメージとしてはぷよぷよの「ファイヤー」「アイスストーム」「ダイヤキュート」「ばよえーん」です。
2.9 万華鏡(Kaleidoscope)
他の方がtwitterで公開していた作成中の画像(市松模様の円が回転している)が、子供の頃に作ったシンプルな万華鏡っぽく見えたことがきっかけで、生まれた作品です。
6つ並んだ正三角形の区画のうち、1つだけが実像、残り5つは鏡像になっています。
万華鏡を回転させたように見せるためにワールドに対して区画を固定したままカメラを逆向きに回します。このとき実像のオブジェクト(動かせるモノ)にはカメラの回転に合わせて画面下方向の力を加えることで、重力で自由落下しているように見せています。
一方、鏡像のオブジェクトは、実像のオブジェクトにつけた位置センサーと角度センサーの情報をもとに計算で位置と角度を決めて、フリースライド&ヒンジで動かしています。
こうしたらできるはず、というアイデアを実装したらきれいに思った通りの動きができて、感動しました。
2.10 のどかな村のメガネっ娘
ユーザ参加イベント「きゃべつ杯Jan2022」のエントリ作品(お題部門)。
お題は「メガネ」。審査員はメガネっ娘が好きとのコメントがありましたが、私にかわいい女の子を作る技術もセンスもありません。そこで思いついたのが元祖メガネっ娘のアラレちゃん。これなら原作のギャグをネタに何とかなるだろうと思い、子供の頃の記憶をもとにネタを詰め込みました。当時、ちょうどタイミングがいいことに、きゃべつさん (@cabbagestole) がシューティングゲーム向けの素材として地球と月のテクスチャを公開してくださっていましたので、オチとして有効利用させていただきました(^^)。
2.11 はGP シリーズ
「きゃべつ杯Apr2022 feat.かじゅま」のエントリ作品たち。
今回のお題は所定のレギュレーションにしたがった「物理車」で共通コースを走行するタイムを競うというもの。それまでロジカルなゲームを中心に作っていて物理エンジンについてのノウハウがほとんどなかった私ですが、せっかくのイベントなのでこれを機に「はじプロ自動車部」に入部しようと思い立ちました。
2.11.1 はGP_四足歩行馬
~入部届を手に向かった先は、なぜか乗馬部でした~
どんな物理車を作ろうかと考えたとき、速さでは諸先輩方にかなうはずもなく、見た目を凝るのも得意でない、...そうだ、変わった車を作ろう、という方針になりました。ちょうどそのころ、馬は走り方(常歩、速歩、駈歩、襲歩)で足の運びが異なるというのを知って、これをはじプロの物理エンジンで再現できたら面白そうと思っていました。道路交通法上は馬は軽車両という扱いらしいので、はGPに参戦しても何ら問題ないはずw
開発は予想通り難航しました。足を上げたら転ぶ。数歩進んで転ぶ。転ばないけど斜行する。直進はできるが曲がれない。...ちょっとずつ進化していきました。苦戦していたところtwitterでムラタセイサク君とジャイロ制御について教わって、そこからは一気に完成に近づきました。
プロトタイプ版では4つの走り方を実装できましたが、ノードン数の都合で本編の作品に取り込めたのは最も速く走れる襲歩のみとなりました。理想としては風のように疾駆してほしかったのですが、実際にはトコトコ歩くというのが限界でした(^^;
2.11.2 はGP_けだラート
~乗馬部の次は、体操部へ~
物理エンジンを使ったプログラミングの面白さに目覚めた私は、次の題材としてまた変わった動力を探しました。そこで思いついたのが重心移動であり、それを実現する乗り物?が体操競技の「ラート」でした。
本物のラートはおそらく繊細な力のかけ方で自在に輪を動かすのでしょうが、そんな高度なことは再現できません。輪の中で重りを付けたオシャレなモノをヒンジでぐるんぐるんと移動させることで、強引に重心移動をさせて輪を転がすことに成功しました。
なお、実際のラートは技を競うものであり、コースを走ったり速さを競ったりするものでありません。良い子はマネしないようにw
2.11.3 はGP_けだグライダー
~そして、空へ~
2作品エントリして満足していたところ、Y軸方向へのワープはレギュレーション上OKであるとの公式見解が発表されました。機体の変形ギミックを実現するための利用を想定したものと思われます。
これは悪用応用できるぞ、と閃きました。Y軸方向へのワープ=位置エネルギーを得る、ということなので、それを推進力に変換できるのではないかと。
Y軸方向(=上空)にワープしたら直ちに、傾けた翼の下に静止したモノを発射することで、それにぶつかった機体が前方に移動しました。つまり重力による鉛直方向への落下の力の一部を進行方向への力に変換することができました。
2.11.4 はGP_けだふわふわ
~再び、空へ~
twitter上では新たな動力の可能性として「ふわふわ」のモノを利用する方法が取り上げられていました。
私もさっそく実現方法を検討したところ、前回のグライダーの機体がほぼそのまま再利用できることが分かりました。傾けた翼の下に「ふわふわ」のモノを発射することで、ふわふわが機体の翼を押し上げ、かすかな浮力と推進力を得ることができました。
このように手抜き最小限の労力で課題を解決することもプログラマとして大切な資質ですね(^^;
さて、4台とも速さを度外視したイロモノばかりでしたが、どれも作っていてとても楽しかったです。
こうしたらこうなるのでは、という想像が実現できてしまう物理エンジンってすごい、と思いました。
2.12 マンカラ・カラハ
これも「世界のアソビ大全51」で初めて知ったゲームです。
当初はいつものように二人対戦型で作成し始めました。それの作成中に気づいたのですが、マンカラはプレイヤーが選択できる手が少ないため、リバーシ等と違ってCPUのロジックを組んで対戦できるのではないかと思いました。
いったん二人対戦型を完成させた後、後手側の処理をCPUのロジックに置き換えられるか試みました。まずは二人用で潤沢に使っていた石の色を変えるためだけのテクスチャなどを引きはがしてノードンを捻出します。CPUのロジックはただのランダムでは興ざめしてしまうので、最低限の知能をもった相手として、石の横取り(大量得点)の機会があればそれを無条件に選択するというものにしました。出来上がったCPUの強さとしては、マンカラに不慣れなプレイヤーが普通に負けることもあるという程度なので、ちょうどいいものができたと思います。
2.13 四川省ソリティア
pochittoさん(@pochitto)が作成された「上海ソリティア」に衝撃を受け、勝手ながら改造をさせていただきました。
このゲームで肝となるのは「他の牌の上を通らずに2回まで曲がれる経路で結べる2つの牌を取れる」という部分です。原作のように牌の選択後に経路を判定するのはノードン数と処理時間が嵩むため、牌の選択時にユーザが適切な経路をたどるという制限を入れました。実現可能な方法としては良い落としどころを見つけられたと思いますが、ゲーム内でその説明を十分できなかったことが反省点です。
なお、四川省と言えば個人的には大学生時代に一時期やり込んでいました。研究室のパソコンに入っていたため、卒論の制作に行き詰まるたびに起動してはタイムアタックを繰り返していました(^^;
2.14 SPACE INVADERS
そろそろ新しいジャンルのゲームも作ってみたいと思っていたころ、きゃべつさん(@cabbagestole)からお題として提案いただいたことがきっかけで開発した作品です。
私自身はこのゲームをほとんどプレイした経験がなく、wikipediaとYoutubeのプレイ動画で仕様を調べて再現を試みました。開発当初はどの程度のところまで盛り込めるかまったく見当がつかなかったため、メインとなる敵軍の動作から作り始め、ゲーム性に必要なものから順にノードン数の許す限り要素を追加していくという形で進めていきました。
敵軍の移動には、見えないテーブルの上にインベーダーを載せてテーブルを動かすことで敵全体を動かすという方針を取りました。実際にやってみるとテーブルの上で敵が滑ったり傾いたりするため、さらに見えない柵や蓋で押さえつける必要があり当初の想定よりもノードン数が嵩みました。
最終的には原作の要素の大部分を再現することができ大変納得のいく作品ができました ...と言えればよかったのですが、ここで大きな落とし穴が発覚。残機が0になってもゲームオーバーにならない致命的なバグが見つかりました。
このバグの調査にかなりの時間を費やし、twitter上で他の方がQA部隊を引き受けてくださったりもしました。結局原因としては、UFOの得点計算の箇所に使用したスポイトノードンが「アナログ」の設定だったことでした。これにより特定の条件の場合に得点に微小な小数が紛れ込み、それがゲーム引継ぎで使用する数値に混入し、それを分解して得られた残機数に小数が含まれて0の判定に失敗した、という複雑なものでした。(それ以外にもゲーム引継ぎの数値の合成/分解など、様々なバグが見つかりました。)
開発~リリース~デバッグという一連の過程を含め、とても思い出深いゲームです(^^)
2.15 1103号室 トロの工作室
はらだDAISUKEさん(@DAISUQE)の企画した「はじプロマンション '22 Summer」のエントリ作品。
タイトルにある通り、部屋の中には私がこれまではじプロで作成した作品のミニチュアが並んでいますが、こちらはおまけ。スイッチを押すと部屋の中に宇宙空間が投影され、光の球が飛び交う幻想的な光景となるというのが本編です。
この球が飛び交う仕組みは、以前作成した万華鏡を3Dに応用したものとなっています。
まず、メインの部屋と同じ大きさの見えないダミーの部屋を別に用意し、その中で実体を持つ見えない球(ややこしいw)が壁や球同士で反射しながら飛び続けるようにします。モノ発射で発射した物は反射で減速してしまうため、速度モードの動かせるモノを用いて、進行方向に対して定数を現在の速度で割った値を加算することで常に一定の速度を保つようにしています。
メインの部屋では、ダミー部屋にある実像の球に対する7つの虚像を作成します。1つは実像をそのままメインの部屋に平行移動したもの、残り6つはそれぞれ6面の壁を鏡として映した鏡像です。
こうすることで、壁や球同士で反射するがヒトノードンはすり抜けるという光の球を実現しています。
2.16 ある日、彼女は挑んだ。~食欲の秋~【ブロック崩し】
「きゃべつ杯feat.ひばりミカン(きゃべつ杯oct2022)」のエントリ作品。今回のお題はスコアアタックのあるミニゲームです。
スコアアタックということでどういうゲームにするかしばらく悩みましたが、今度はブロック崩しを作ってみようと思いました。ブロック崩しもほとんどやったことが無かったので、例のごとくアルカノイド(メジャーなブロック崩し)をwikipediaとYoutubeで研究しました。
2.16.1 仕様面の検討
今回は再現が目的ではなくあくまでもタイムアタック向けのゲームなので、以下のような観点で仕様を決めました。
・アルカノイドのような配置の決まったステージクリア型ではなく、1回のプレイが適度なボリュームになるような通常ステージ&ボス戦闘とする。
・得点方法は複数用意してユーザのプレイの幅が広がるようにする。
・高得点のものはリスクを伴うようにし、狙いすぎるとミスを誘発するバランスとする。
・ブロック崩しという性質上、狙った通りの操作は難しく、ある程度のランダム性は許容する。
また、ボスの出現条件にも悩みました。タイムにすると球の速度低下アイテムがデメリットになってしまうし、スコアやブロック撃破数などにするとスコアアタックとして差がつけにくかったりします。そこで、球を反射した回数とすることで、少ない反射数で効率的に稼げるとスコアが伸びるというようにしました。
2.16.2 演出面の検討
デザインなどの演出面についてもかなり悩みました。これは以下のような感じで決定していきました。
・敷き詰められたブロックが板チョコっぽく見えたので、ブロックはチョコにしよう。
・それならばひばりミカンさん(@hibari_mikan)の「チョコ兵」をお借りして出演させよう。敵はチョコ帝国だ。
・プレイヤー側をどう設定するか悩んでいる私の横で、妻がまたチョコを食べていた。「分かっているけど、やめられないんだよね」
チョコ帝国を悪役にする理由付けが見つかったw
・タイトルはどうしよう、アルカノイドのパロディにしたい。ある日、彼女が、イド...?
ああ、食欲に「挑」んで負けた!
最終的には「チョコをやめられない妻のために主人公がチョコ帝国を倒しに行く。しかし最後に主人公の前に立ちはだかったのは〇〇だった。」というストーリーとなり、タイトルとも上手くつながりました。
2.16.3 反省点
テストプレイを繰り返しバランス調整も行い、納得のいく出来でリリースしたのですが、他の方にプレイしていただくうちに多数のバグ報告(無限稼ぎ)をいただきました。
発生条件や方法は様々ですが、共通して言えるのは、ブロック崩しの機能(主にアイテム)、演出(寸劇)、ボス戦をそれぞれ独立して考えていたため、組み合わせた場合の仕様やプログラムの制御に穴があったということです。
作者としては無意識にこの場面ではこういう操作をするという思い込みがあったため、テストプレイでも想定外の操作が行われず、バグに気づけないままとなっていました。
これは今後の作品作りに活かしていかなければと思いを新たにしました。
さいごに
前回の記事が長すぎたことを反省して今回は軽く読みやすい物にしようとしていたはずが、やっぱり長くなってしまいました。(計画性のなさが改善されていませんね...)
ここまでお付き合いいただき、ありがとうございました(^^)。