2021年6月11日に発売されたNintendo Switch用『ナビつき! つくってわかる はじめてゲームプログラミング』。プログラムをするのに必要な考えかたや仕組みを、実際にゲームを作りながら学べるソフトである本作だが、ここでは自身もゲーム開発に取り組んでいるライターの戸塚伎一が、実際に同作を使ってゲームを作ってみた。はてさて、その顛末やいかに。
※本作の概要などを伝えるレビュー記事はこちら
『ナビつき! つくってわかる はじめてゲームプログラミング』(Switch)の購入はこちら (Amazon.co.jp) 『ナビつき! つくってわかる はじめてゲームプログラミング』ニンテンドーeショップページゲーム制作ソフトとしての実力や、いかほどに?
いままでまったく経験ないけどテレビゲームを作ってみたい! という人にピッタリな『ナビつき! つくってわかる はじめてゲームプログラミング』。“ノードン”と呼ばれるプログラムの機能のまとまりどうしをワイヤーでつなぐ……というスタイルのプログラミングを、複数のサンプルゲームの制作を通して学べる新感覚のプログラミング体験ソフトです。わかりやすく無理なくステップアップしていける、ということは前回のファーストインプレッション記事で紹介しましたが、オリジナルゲームを一から作るためのソフトとしてはどうなのか? 実際どの程度のものがどのくらいの時間で作れるのかを、当記事の記者がみずから試してみました。
参考までに、記者のゲームプログラミング関連の経歴は以下の通り。
- 1980年代、BASIC(初心者向けのプログラミング言語)で制作したミニゲームが、当時のゲームプログラム投稿雑誌に何度か掲載される
- 2010年代前半にJavascriptでのゲーム制作を試みるもさっぱり理解できず挫折
- 2010年代中盤、Scratch(子ども向けのプログラミング学習環境)でアクション性のあるミニゲームを何本か作る
- 2020年、ティラノスクリプト(ノベルゲーム制作に特化したスクリプト記述型ゲームエンジン)でミニゲームを制作
初心者向けの環境でミニゲームを作れる程度のプログラミング経験はあるけれどそこからステップアップできず……といったところです。そんな中途半端な経歴だからこそ今回のような記事を担当するのに適任だと思うと“人間万事塞翁が馬”を実感せずにいられません。
基本的なゲーム内容を固めたら、即プログラミング開始
制作することにしたのは「上から降ってくる鉄骨を左右移動でひたすら避け続けるアクションゲーム」。システム上の空間がカメラ固定の2Dで済む、複雑なアクションがないからバランスもとりやすいはず……など、消極的な引き算の末たどり着いたスタイルです。
“フリープログラミング”モードで“新規作成”を選択すると、何もプログラムされていない虚無の空間に投げ出されます。ゲーム画面の大前提となる見ためを司るワールドノードンのデフォルト設定──無機質なタイルが敷き詰められた地平と雲が浮かぶ昼の空が果てしなく続くビジュアルに、創造主の使命感が刺激されます。
まずはプレイヤーキャラの設定。といってもヒトノードンを呼び出して、“左右”のポートに、Joy-ConのLスティックの左右操作用のスティックノードンを連結させれば9割がた終了です。あとはサイズ調整と、“鉄骨に当たったらゲームオーバー”という判定のため、ふるまい設定で“こわれる”を有効化するくらいです。
ノードンの仕組みに合わせてゲームシステムを再現
ゲーム画面ノードンで画面の表示範囲を指定し、床(直方体のモノノードン)を配置してからは、このゲームの肝心かなめとなる鉄骨の処理。こいつをランダムな位置からランダムなタイミングで降らせることで、何度も遊べるミニゲームとしての基礎が完成します(バランス面はさておき)。
記者がこれまでに使ってきたプログラミング環境では、まずは“鉄骨なるものの概念・構造(見ため、どういう挙動をするかなど)”をあらかじめ作成。そしてゲームプレイ中、特定のタイミングごとに画面に出現させるかどうかを判定し、いざ出現となったら所定の場所に鉄骨をインスタンス(実体)化……という形で実装するのですが、『ナビつき! つくってわかる はじめてゲームプログラミング』ではその必要がありません。というか、すでにいくつかの汎用性の高いオブジェクトが“モノ系ノードン”として構造化されていて、それらをいかに扱うかに集中できる作りになっているのです(あまりの便利さについスルーしましたが、前述のヒトノードンは、基本的なプレイヤーキャラの性質に加え“任天堂ゲームクオリティー”が反映された、相当に高度なゲーム内オブジェクトです)
というわけで使用するのは、(鉄骨に見立てられる直方体状の)モノ系ノードンを射出し続けられる“モノを発射ノードン”。砲台や弾を撃つ敵の攻撃機構として便利に使えるこのノードンを、ゲーム画面上端の表示範囲外にズラズラと並べます。それぞれ、任意のタイミングで下方向にひとつずつ発射するようプログラムすれば、いい感じになるはず。
“任意のタイミング”の決めかたは乱数。現代風にたとえると“ガチャの確率”で使われているものです。モノを発射ノードンひとつにつき、乱数(整数)を生成する“ランダムノードン”をひとつずつ割り当てて、低確率で出る特定の数字が生成されたときに発射させることにします。
各ランダムノードンは、1から1000までの乱数を延々と生成し続けるよう設定。そして、くらべるノードンで996以上の数字が出力されたときに発射させることで、簡単すぎず難しすぎずな発射頻度になることを、何度かにわたるプレイ検証から導き出しました。確率5/1000……だったら最初から1/200でよかったんじゃないの? と思うかもしれませんが、桁を多めにしておくことで小数点以下の単位での確率調整も可能になります。今回はたまたま約分できる数値になっただけです!
いかにしてゲームプレイの“循環”の仕組みを作るか
ここまでできたらメインパートはほぼ完成。あとはスコアシステムとリトライの仕組みさえ作れば、“スコアアタック形式のシンプルなミニゲーム”としての体裁が整います。スコアは、鉄骨が床に落ちて壊れるごとに (直方体だけを対象にしたモノがこわれたしゅんかんノードンで検知) 、プラス1点。プレイヤーキャラが落下中の鉄骨に触れたら(ヒトノードンだけを対象にしたモノがこわれたしゅんかんノードンで検知)ゲーム終了。そのプレイのスコアを確定し、しばらく表示した後にまた最初から……というルーチンを組みました。
鉄骨専用のモノがこわれたしゅんかんノードンをカウンターノードンに直接つなぐと、ゲームオーバーになってからも加点され続けてしまいます。そこは“鉄骨が壊れた”かつ“プレイヤーキャラが壊れていない”という複数の条件を満たしている時だけカウンターノードンに信号(+1)を送るプログラムを組むことで対処しました。
やや込み入った条件判定が必要な場面で、ロジック系ノードン(AND、NOT)やくらべるノードン(=、<、>)をいちいち配置しなければならな作りは、ほかのプログラミング言語の経験がある人ほど「もっとスマートに記述できないものか」と感じるかもしれません。しかし、ノードンひとつひとつの機能がここまで細分化されているからこそ、初学者にとっては部分的な理解が進みやすいとも言えます。
“〇〇をひとつまみ”が、ゲームの印象を左右する
これにてマスターアップ! ということにしてもいいのですが、ビジュアルや演出などの“ちょっとした味つけ”を加えることで、そのゲームが備えるメッセージがより豊かになります。
たとえば“鉄骨をよけ続ける”という謎のシチュエーションに、
“大型ロボに搭乗して出撃したいけど、整備がまだ終わっていなくて、しかも基地が敵の襲撃を受け、屋根から鉄骨がボロボロ落ちてきて危ない”
というこれまた謎なバックストーリーを想定したとします。背景(ゲーム画面の奥行き方向)に巨大ロボの姿を配置することで画面のインパクトを追加するとともに、「このロボ、何か関係あるのかな……」という期待感をプレイヤーに持たせます。
そして、スコアが100点を超えたときにロボっぽい音声を再生。同時に、ロボの真正面付近エリアに配置しておいた、さわっているセンサー(ヒトノードンにのみ反応するよう設定)からの信号を受け付けるようにします。
ここで“スコアが100点を超えてから背景のロボに重なると搭乗成功となりゲームクリアー”としてしまうと、スコアアタック形式のゲームのルールとしてはいささか不十分。そこで“スコアが100点を超えてから背景のロボに重なるごとに、画面を覆う爆発アニメーション&爆発音を再生”という、アクションゲーム上級者に不自由なプレイを強いる姑息な仕様にしました。ロボに搭乗できるかと思いきや、ただ、爆発。このバックストーリーに何の希望もなかったことが証明されてしまいました。
“わかりやすさ”を重視した結果、犠牲になっている要素も……
プレイ時間の長期化にともなう難度上昇措置は、本来であれば、鉄骨が降ってくる頻度や落下速度を変化させることで行うべきです。しかし、それらを後づけで実装するのは厳しいと判断し、今回は見送りました。
また、このゲームプログラムで見て見ぬふりをしまったバランス調整面でのもうひとつの問題点は“鉄骨を絶対避けられないケースがあること”。計8個のモノを発射ノードンの発射タイミングが完全にランダムだからこそおこりうる不具合です。対策としては“モノを発射ノードンが発射命令を受け取ったら、隣のどちらか、あるいは両隣のモノを発射ノードンの発射命令を一定時間無効化”というプログラムの組み込が考えられますが……考えるだけにしておきました。
記者が上記の作業を躊躇した理由は“複数のノードンをまとめてコピー”、“選択した同一種類のノードンの設定内容を一括変更”のような操作が、『ナビつき! つくってわかる はじめてゲームプログラミング』にはなく、調整が長時間に及ぶ可能性があったからです。そもそも初心者向けのプログラミング体験ソフトにこういった機能は不必要かもしれませんが、くり返し系の手作業が増えるほどケアレスミスが発生するのはたしかです。
ケアレスミスといえば、携帯モードのタッチ操作の意図しない反応には相当苦しめられました。ノードンやワイヤーを感覚的に操作できること自体はよいのですが、そこそこの表示倍率で操作していても、動かしたくないノードンをつかんでしまったり、出したくないワイヤーをひっぱり出したりしてしまうのです。わけがわからなくなったらアンドゥ(ひとつ前の操作状態に戻る)ボタンを押せばいいのに、とか、携帯モードでもスティックポインタで操作すればいいじゃないか、とか、動かしたくないノードンは片っ端からロック設定にしておけよ、などと言われたら、まったくその通りです。でも……指が太いおっさんだって、流れるような指さばきでゲームを作りたかったんだよ。
逆にとてもよかったのは、ドックにUSBマウスを接続するTVモードでの操作。いつでもどこでも気軽にプログラミング! という利便性が犠牲になったぶん、PCのアプリケーション感覚ですいすい操作できます。とりわけ左手でマウス、右手でJoy-Con Rを操作する“二刀流スタイル”が隔世の快適さでした。ゲーム画面/プログラム画面の切り替えや、プログラム画面の表示軸変更(XY/XZ)といったサブアクションをJoy-Conでショートカット風に利用することで、作業効率がアップしました。これは記者がたまたま左利きだからの感想であり、通常は右手でマウス操作&左手でJoy-Con R持ちで問題ないと思います。
結論・アイデアや思いつきをストレートに形にするツールとして秀逸!
本記事の締め切りなど外部条件を考慮した上で、ひとまずの完成となったのがこちら。グラフィックこそソフト側であらかじめ用意されたものをそのまま使用していますが、過去にどこかで見たようなそうでもないようなゲームプレイに仕上がっているのではないでしょうか。
プログラム画面の全景はこんな感じ。どことなく一個の生き物のようなまとまりというか躍動感が感じられます。……作った本人だからそう見えるだけですかね。
このくらいの規模やクオリティーの作品であれば、ゲームプログラムをちょっとかじったことがある人ならソフト入手から2、3日で十分作れます。まったくの初学者も、“ナビつきレッスン”モードをプレイし終えた後ならば、もっとすごいものを作れるスキルが身についているはずです。記者の頭脳では到底無理ですが、位置を角度にノードン、角度を位置にノードンなどの三角関数関連のノードンを自在に使えるようになれば、かなり本格的なアクションゲームも作れるでしょう。
ひとつのプロジェクトで使用できるノードンやワイヤーの数に上限があるため、製品レベルの超大作を生み出せるわけではありませんが、ちょっとしたネタゲーを量産したり、ほかのプログラム環境で本格的に作り込むことを前提としたゲームのテスト版を制作するには申し分ない機能が揃っている『ナビつき! つくってわかる はじめてゲームプログラミング』。Nintendo Switchを使っていてふと気が向いたときに起動できるプログラミング環境のひとつとして持っておいて損はありません!