「はじめてゲームプログラミング」でのゲーム制作メモ
Nintendo Switch用ソフト「ナビつき! つくってわかる はじめてゲームプログラミング」(以下「はじプロ」)を使ってゲーム制作した際のあれこれを備忘用に書き残しておく。
1. 制作した動機
何を隠そう、高校時代にマイコンBASICマガジン(以下「ベーマガ」)の投稿職人としてPC88用のゲームを制作していた事があり、ゲーム制作は約30年ぶりとなる。
いくつかのミニゲームやギミックを作ってみたが、高校時代に熱中した倉庫番風のゲーム制作を試みてみようと思い立った。
その中でも、ベーマガ1990年9月号に掲載された「MeDuSa」という倉庫番の発展形のような自作ゲームを移植してみようと考え、さっそく制作にとりかかった。
が、いきなりオリジナルルールの倉庫番を作るのは敷居が高すぎると感じ、まずは倉庫番の再現をするところからスタートした。
というのも、このはじプロ、配列を扱えないので見下ろし型のパズルゲームを大の苦手とするソフトである。
当然ながら倉庫番も典型的な配列を使用するゲームなので、単純な移植も困難が予想された。
だが、昔から技術的な困難を克服する事をむしろ喜びとしていた私としては、渡りに船だった。喜び勇んで、この困難に飛び込む事にした。
2. 技術的な困難と解決手法
2.1. ハコの移動
まずもって、マス目にそってハコを移動させるのが難しい。
はじプロの物理演算をもってすれば単純にハコを移動させるのは造作もない事だ。
だが、それはあくまで「リアルな」ハコの移動であって、ゲーム的なハコの移動ではないのだ。ずれてゆく角度、あらぬ方向に進んでいくハコ…。そのままでは到底倉庫番の再現は不可能だ。
そこでまず考えたのが、フリースライドれんけつノードンを使ってハコの方向を固定する事だった。実際にフリースライドれんけつノードンを連結させると、ハコが一定方向を向いたまま移動するようになった。
だがそれだけでは足りない。倉庫番におけるハコは、マス目に沿って、デジタルに移動するハコでなければならないのだ。
そこで考えたのが、「ボタンを押したら隣のマスに移動するハコ」という仕組みだ。ただ押すだけでは動かず、コントローラーのボタンを押すことによりハコが移動するようにすれば、マス目に沿って移動するハコを作れるはず。
そして障害物があれば動かない仕組みを組み合わせることで、ハコそのもののギミックは完成するはず。
そこで、さわっているノードンを複数個組み合わせて「ボタンを押すと移動するハコ」を設計した。
ちなみに移動した分の座標を記憶させるため、X,Y,Z軸それぞれにカウンターノードンを仕込んでおいた。
そして実行すると…
倉庫番的なものができた。このまま倉庫番的なゲーム作ろうかな...#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/oO4VQ9PT2f
— pochitto (@pochitto) 2021年8月22日
果たして、思い描いた通りの動きを再現することに成功した!
なお、マス目1つの大きさは1m×1mとなっている。
はじプロ標準のマス目の大きさは0.8m×0.8mだが、それだと座標を計算するたびに0.8を掛ける必要が生じ、煩わしい上にノードンを浪費してしまうためだ。
2.2. ステージづくりの問題
と、ここまでは順調に進んだが、問題は山積していた。
一番の問題は、ハコ1個に使用するノードンの数だ。その数およそ25、10個のハコを用意するだけで250ノードン、上限のおよそ半分のノードンを使用してしまう。
これではたくさんのステージを作る事など到底できない。
そこで考えたのが、「ハコの再利用」だ。
各ステージごとにハコを用意するのではなく、各ステージでハコを再利用するようにすれば、ノードン数を節約できるのではないかと考えた。
仕組みとして考えたのが、「ゲーム開始時にハコの座標を指定して、その位置にハコを移動させる」というものだ。
そのためには、ハコをある一か所に集めておいて、その座標を(0,0)とした方がやりやすい。
だが、その座標から移動する際にハコが障害物に当たると具合が悪い。フリースライドれんけつノードンでの座標指定はその場所に「瞬間移動」するのではなく、「超高速でその座標に移動する」仕組みになっている。だから途中に障害物があると、うまく機能しなくなる恐れがあった。
それを回避するために考えたのが、「ハコの初期位置を高いところに設定する」だ。上空から指定した座標に移動するようにすれば、障害物に邪魔されることなくハコを移動させられるはず。
そして…
ステージクリア機能を実装できた#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/UYcpe9Bcrl
— pochitto (@pochitto) 2021年8月25日
この仕組みもうまく組み込むことができた。
ステージの遷移は、ステージの大きさを固定にしてZ軸方向に並べて置き、ステージに応じてZ軸にゲーム画面をスクロールさせることで解決することができた。
また、ゲーム切り替えノードンを使って、ステージ開始時にハコを初期位置に戻す手間を省く事にも成功した。
そして動画を見ていただくと分かる通り、制作途中で「単純に倉庫番を移植するだけでは芸がないよな」と考え、ハコをサイコロに変更した。これもかなり苦労したのだが、ここでは割愛する。
あとはステージを増やしていけば完成…
とはいかないのがはじプロの面白さであり、難しさである。
2.3. 512ノードンの壁
最初のうちは10ステージ作ろうと考えてステージ作りを進めていたのだが、3ステージほど作ったところで痛恨のメッセージが!
「ノードンは512体しか呼び出せません」
うせやろ?(関西弁)まだ3ステージまでしか作ってないねんで?
深夜、思わず大きな声で呟いてしまった。
そう、はじプロで1つのプログラムあたりに使えるノードンの数は512までとなっている。早くもその上限に到達してしまったのだ。
何かを削らなければ…
悩みに悩んだ末に導き出した最初の答えは、「Y軸の座標指定を止める」だった。
自キャラやハコの座標指定はX,Y,Zそれぞれの軸を指定する方法を取っていたのだが、Y軸の指定をすっぱり止めてしまうことにした。
なぜなら、Y軸方向には常に重力が働いており、ハコや自キャラは重力で勝手に落ちてくると踏んだから。
その目論見は見事に当たり、Y軸の指定をすべて無くす事に成功した。
これでかなりのノードンを削減することができた。
ただこの方法だと、自キャラが落ちてくるまでに時間がかかり、その間にスティック操作をしてしまうと自キャラがあらぬ場所に落ちてしまうという不具合が出てしまった。そのため、ゲーム開始後1.5秒はスティック操作を無効にすることで、この不具合を回避した。
こうしてステージ作りをさらに進めていった。
2.4. 512ノードンの壁、再び
ステージ作りも佳境に入った頃、再びあのメッセージが表示された。
「ノードンは512体しか呼び出せません」
Oh...
ここで、10ステージ作るという目標は諦め、7ステージに削減することにした。
だがそれでもノードンが足りない。
思い悩んだ末に、ふと解決策が降りてきた。
仕事中に突然「あの処理ってマッピングノードン1つで置き換えられるんじゃね?」という啓示を受けた。帰ってさっそく試してみよう#はじめてゲームプログラミング
— pochitto (@pochitto) 2021年8月31日
各ハコ(サイコロ)の座標指定をする際に、定数と計算ノードンの2つをセットにしていたのだが、これをマッピングノードン1つで置き換えられないかというアイディアを思いついたのだ。
これだ!と思い、帰宅後さっそく試してみると…
ばっちり動く!
これで大幅にノードンを削減できる!
私は興奮を抑えつつ、既存の定数と計算ノードンをマッピングノードンに置き換える地道な作業に没頭した。
その結果、7ステージ+エンディングを入れられるだけのノードンの空きが出来た。
同時に、ワールドのX方向の幅を狭めれば壁パーツの節約になることを思いつき、それも実施した結果、さらにノードンの空きが出来た。
2.5. 仕上げ作業
ノードンの空きが出来たので、ゲームに直接関係のない演出部分に少しだけ手を加える事ができた。
- ステージ選択時とエンディング時に自キャラを表示し、床を芝生に変える
- 正しい場所にサイコロを置いたときに、チャイムを鳴らす
- Xボタンを押した際、ステージ選択画面へ戻る
最初の場面と最後の場面を芝生にしたのは、うっすらと世界観を感じてもらうためだ。平和に暮らすけだまるの元に試練が訪れ、試練を克服し、また平和が戻る...そんな世界観をうっすらとでも感じてもらうために、ギミックを組み入れた。
自キャラをけだまるにしたのには理由があって、長男と次男にテストプレイしてもらったところ、「自キャラがヒトなのにサイコロを持てないのはおかしい」と至極真っ当なツッコミをもらい、自キャラをヒトから「けだまる」に変更した次第だ。
これで、自キャラが押すことしかできない、ジャンプできない事への理由付けが出来たので結果的に良かった。
そして最後に通しのテストプレイをして、ゲームは完成した。
新作です!
— pochitto (@pochitto) 2021年9月2日
「けだまるのサイコロかたづけ」
倉庫番風のゲームです。けだまるを操作してサイコロを押し、決められた場所に置きます。
全7ステージ、ぜひ遊んでみてください!
G 002 CY6 7K1
#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/FPC3LL3mvj
3. ゲーム制作の感想と今後の制作について
久しぶりにゲーム制作で昼も夜も頭を悩ませた数週間だった。
だがしかし、楽しい!
配列がないという制約の中で倉庫番風のゲームを作れた事は、大いに自信になったし、この難問を克服するのは正直楽しかった。
ゲーム制作の楽しさを思い出させてくれたはじプロには、感謝しかない。
今回倉庫番クローンを作るつもりが、結果的にオリジナル要素を加えて新たなゲーム性を加えられたのは、私にとってプラスになった。
また、ステージ4において立体パズルの要素を加えられたことも私にとって非常にプラスになった。
自分にまだゲーム制作できるだけの頭の柔軟さが残っていた事は、驚きであり、喜びだった。
これに味を占めて、またはじプロで新たなゲームを作りたいと思う。
かつての自作ゲームの再現もさることながら、新しいゲーム性のあるゲームを作ってみたい。
制約のある中での創作活動というのは、おそらく私の性に合っているのだと思う。
そのためのツールとして、はじプロは一級品だ。
改めて、このソフトをリリースしてくれた任天堂には、感謝しかない。
かつてゲーム制作を志していた人、あるいはゲーム制作に興味のある人はぜひ手に取ってもらいたいソフトだ。
最後宣伝のようになってしまったが、私に新たなモチベーションを与えてくれたはじプロに惜しみない拍手を送りたい。