はじめてゲームプログラミングで2D RPGを制作したときのメモ
はじめてゲームプログラミング(以下「はじプロ」)の厳しい制約の中で2D RPGを作ったときの苦労した点、工夫した点などを書いていきたいと思います。
- 制作のきっかけ
- ゲームの構想
- ワールドマップ
- マップの当たり判定
- 町への出入り口
- フリースライドれんけつワープ
- 会話システム
- 戦闘システム・レベルの概念 -チケット制とマスキングの導入-
- 実際の制作
- 実機での制作に立ちはだかる壁
- 最後の仕上げ
- 感想・反省点・雑感と今後にむけて
制作のきっかけ
ドラクエIのマップを壁紙にするぐらいのドラクエファンなのですが、ドラクエIのマップを眺めていた時、「はじプロでアレフガルドを旅するゲーム、もしかしたら作れるんじゃね?」と思った事がきっかけです。
思いついたのは1年ぐらい前ですが、実際にやってみよう!と行動を起こしたのは後述するArduino Leonardoを使ったテクスチャの自動作成を知ってからでした。
ゲームの構想
せっかく作るなら本格的なのが良いだろう、ということでノードン数の制限など考えずにレベルアップの仕組みとかアイテムを駆使してモンスターと戦う場面などを夢想しました。
あれこれ頭の中で考えてるうちは、「いけるかも…」という感触がありました。
が、いざ制作に入ると制約だらけで当初の構想は一瞬で吹っ飛んでしまいました。
ワールドマップ
まずはじめに、ワールドマップをどう再現するのかについて考えねばなりませんでした。
さっそくドラクエIのワールドマップをネットから拝借して、しばし考えこんだのですが…
これ、正攻法では絶対再現できないヤツや…
と気づきました。
というのもドラクエIのマップは128x128のマス目で構成されており、それだけで16,384コの情報が必要になります。ノードン数の上限512のはじプロで、そのまま再現できるはずもなく。
次に考えたのが、テクスチャを使った再現です。これならいけるかも、と思って計算すると…
128x16ドット=2,048ドット÷64=32。32x32=1,024
テクスチャだけで1,024ものノードンを使う計算に。
無理すぎる…
ならばドット数を落とせば再現できるはず、ということで少しずつドット数を落として計算すると…
128x3ドット=384ドット÷64=6。6x6=36
マップチップ1つあたりタテヨコ3ドット以下にすればいけるかも!という所に落ち着きました。
そのうえ、海の部分を透過させてワールドのテクスチャを海にすれば、かなりそれっぽい見た目になるはず。
手作業で冒頭のマップを再現すると、いい感じに。
アレフガルドをうろつくゲーム、作り始めたけどハードル高過ぎる
— pochitto (@pochitto) 2022年8月16日
#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/nOJlfrkVZv
これは期待できるかも…と一瞬思ったのですが、またもや問題が。
マップの当たり判定
というのも、マップをテクスチャで再現しただけでは「ただの絵」で、どこまでもスルスルと海を越え山を越え進めてしまいます。
ドラクエの文法では、山は越えられず、海や川は通れません。
それを再現するためには、マップに見えない壁を設置し、当たり判定をつけてあげる必要があります。
で、どれぐらいの当たり判定を付けたら良いのか、Excelを使ってシミュレートしてみました。すると…
250以上の見えない壁が必要だと分かりました。
マップだけでノードン上限の半分を消費してしまう…
これはまずい…
そこで、マップに忠実に壁を作るのではなく、アバウトで良いのでざっくりと壁を作って自キャラがマップから逸脱するのを防ぐ路線に切り替えました。
すると壁を約120ノードンまで圧縮することができ、現実的な数字に落ち着きました。
町への出入り口
次に頭を悩ませたのが、「町への出入り口」問題です。
町への出入り口?ワープノードンで解決するやん?
と思われがちなのですが、一筋縄ではいかないのがはじプロ。
ワープノードンは入口、出口を最大8コまでしか設置できないのです。
計画では14個の町や洞窟を設置する予定だったので、14x2=28個のワープノードンが必要となる計算です。
もう全然足りない!
任天堂に、「今からでもワープノードンを26個まで増やしませんか?」とメールを書こうかと思いました。
いや、書いてもムダか。
秒で諦めて、代替案を講じる事にしました。
かつて作った「けだまるのサイコロかたづけ」というゲームで使ったテクニックが応用できるのでは、と考えました。
それは、フリースライドれんけつノードンを使って特定のモノノードンを特定の場所に移動させる、というものです。
しばし考えて…思いつきました。
フリースライドれんけつノードンにものワープノードンを連結させたらいいんじゃね?
さっそく実験してみることにしました。
フリースライドれんけつワープ
この「フリースライドれんけつワープ」(勝手に命名)の概要は、以下のようなものです。
- フリースライドれんけつノードンを使い、指定した座標に移動できる直方体を作る
- その直方体にものワープノードン(出口)を連結する
以上。
めちゃくちゃ単純な仕組みですが、これを使えばワープの出口を自由自在に移動させることができます。
主人公がある座標に到達したことを「さわってるノードン」で検知し、フリースライドれんけつワープに移動先を伝達し、指定した場所へ移動する。そしてワープさせる。
なかなかいいアイディア、と思ったのですが問題が。
それは、
フリースライドれんけつワープが指定の位置に移動するのに、若干の時間がかかる
という事です。瞬間移動ではなく、あくまで箱庭空間上を超高速(約100m/sぐらい)で移動しているのでタイムラグが生じてしまうのです。最大で2秒程度移動時間がかかります。
それの問題を解決するために、一計を案じました。
それは、さわってるノードンの面積を広くして、座標に到着する前にフリースライドれんけつワープの移動を完了させてしまう、というアイディアです。
座標に到着するまでに1.5秒程度の時間を稼げれば、フリースライドれんけつワープはほぼ指定した場所まで移動できます。これはかなりうまく行きました。
こうして無事、フィールドから町への出入り口を確保することができました。
会話システム
RPGでは、人々と会話する事で情報を得て次の行動につなげていくプレイスタイルが一般的です。今回制作したRPGでも、それを踏襲しました。
とはいえはじプロの制約でことば付きノードンは8個しか置けないため、セリフデータを別の形で収める必要があります。
そこで、テクスチャノードンを利用することにしました。
テクスチャノードンにできるだけ小さい文字でセリフを書き込んで、吹き出しのように表示すれば良いと考えました。
とはいえテクスチャノードンに小さな文字を直接書いていくのは至難の技なので、ツールを使用して工数削減を図りました。
まずはパソコンでテクスチャの元データを作成します。
64x64ドットのキャンバスを用意し、ペイントツール(paint.net)でセリフを書き込みます。
今回は64x64ドットをフル活用したかったので、スモールフォントとして定評のある美咲フォントを使用させていただくことにしました。
美咲フォントを使えば、一文字当たり8x8ドットなので8x8=64文字をテクスチャとして収める事ができます。
そして作成したテクスチャの元データを、Arduino Leonardo 等を利用してSwitchに転送します。
詳しい手順はTACTYさん(@LaboTacty)のこちらの動画を参照してください。
youtu.beこうして町の人と会話するシステムが出来上がりました。
だいぶRPGらしくなってきました。
※この時点で、ノードンを稼ぐためにマップのテクスチャはさらに小さいサイズに変更しています。
進捗。建物に出入りする仕組みと会話の仕組みがほぼ出来た。でもまだ完成度は30%ぐらい
— pochitto (@pochitto) 2022年10月6日
#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/rUO8f2qxWd
戦闘システム・レベルの概念 -チケット制とマスキングの導入-
当初の予定では、戦闘するごとにレベルアップしてラスボスと対峙する…という、RPGの定石通りのシステムを搭載しようと考えていました。
しかし、ノードンの制約が非常に厳しい!
机上の計算では、戦闘システムもレベルの概念も到底搭載できない状況でした。
でも、せめて敵との戦闘は実現したい!
という事で知恵を絞り、「チケット制」ともいえるシステムを考えました。
- 「ロトトのカケラ」というアイテムを1つ持っていると、敵1体を倒せる。
- 敵を倒すとロトトのカケラは無くなる。
- つまり、敵の数だけロトトのカケラを集める必要がある。
戦闘は単調なものになりますが、探索と行動範囲のコントロールの両方が可能となる、一石二鳥なアイディアです(当然ながら似たようなシステムは数多あるとは思いますが)。
それ以外にも問題がありました。
レベルの概念がないため、「チケット=ロトトのカケラさえ持ってればどこでも行き放題」なマップになってしまっているのです。
後から訪れて欲しい場所もゲーム冒頭から訪問することができ、ストーリー上の面白みが薄れてしまいます。
それを防ぐために苦肉の策で考え付いたのが、
「マップの重要箇所をテクスチャでマスキングして先へ進めないようにする」
というアイディアです。
これにより、マップに簡易的なレベルデザインを施すことができました。
かなり苦肉の策ではありましたが、世界観を壊さない程度にうまく収める事ができたのでは、と思っています。
実際の制作
これらの要素を512ノードン内に収めるには、かなり用意周到な計画を立てねばなりません。
そこで、Excelを使ってゲームの設計図を作りました。具体的には、
- ワールドマップ上の敵、アイテムその他要素の配置決め
- 建物内の構造と人や敵、セリフの内容と配置
- ロジック部分に必要なノードン数の割り出し
これらをExcel上で行うことで、必要なノードン数を簡単に把握できるようになります。
また、セリフも同時に管理できるので、ストーリーの組み立ても容易になります。
この手法は作業効率アップにかなり貢献したので、今後も取り入れていきたいと思います。
こうして、制作の大半をExcel上で行い、実機での制作を最小限に抑えつつ約2か月間制作作業にあたりました。
実機での制作に立ちはだかる壁
とはいえ、設計図通りにはいかないのがはじプロの醍醐味。
次々と問題が発生します。
連結できるノードン数の制約、
ワープのタイミングのシビアさ、
迫りくる512ノードンの壁、
思いもよらぬ挙動…
そして何より、実機での制作時間の確保。
日中は子供達がほぼSwitchを占領しているので、子供達が寝静まった深夜しか作業時間を取れません。
これらを一つずつ乗り越えつつ、作業を進めました。
最後の仕上げ
最後の仕上げとして、当初から構想していた「ワールドマップの疑似立体表示」に取り組みました。これはテクスチャを高さを変えて配置することで、障害物を認識しやすくするためのものです。
具体的には、
- 第4層…霧の表現
- 第3層…通り抜けられない山岳地帯の表現
- 第2層…地表
- 第1層…水面(地面にテクスチャを貼ったもの)
このようにテクスチャを重層的に重ねて、ワールドマップのノッペリ感を多少なりとも緩和するよう努めました。
各テクスチャは透過処理が可能なので、町や洞窟内の水面表現にも応用しています。
また、制作を進めていくにつれてストーリーが若干変わった部分があったので、それに合わせてセリフのリライトを行いました。セリフの量がそこそこあるので、リライトはなかなか骨が折れる作業でした…
その他、制作の最終盤になって「セリフが出るとき何か音が出た方が雰囲気が出るかも」と思いつき、急遽モブキャラの皆さんが喋るように音を鳴らすノードンを追加しました。もうすでに512ノードンに達していたので、ノードンの空きを捻出するのが大変でした。
最後に家族の協力も得ながらテストプレイを繰り返し、完成度を高めていきました。
そして制作開始から2か月、ようやく公開に漕ぎつけました。
新作です!
— pochitto (@pochitto) 2022年10月27日
【ドラクエスト ~アフレガルト探検RPG~】
どこかで見たことのある世界、アフレガルトを探検する2D RPGです。
広大?な世界を冒険し、町の人達から情報を集め、マモノと魔王を倒そう。
ぜひ遊んでみて下さい!
G 007 F4G 9K2#はじめてゲームプログラミング#NintendoSwitch pic.twitter.com/LYVfLFiiEo
はじプロではあまり類例のない、2D RPGの完成です。
感想・反省点・雑感と今後にむけて
とりあえず完成してホッとしました。
制作中は、何時まで経っても完成しないので「これは未完成のままお蔵入りになるパターンでは…?」と内心不安でした。
そもそもRPGを作るのが初めてだったので、過去にプレイしたRPGを参考にしつつシナリオを練るのも大変でした。
512ノードンの範囲で作ったゲームとしては、そこそこボリュームは出せたのではと思っています。
あとは遊んでいただいて楽しんでもらえるかどうか、ですね。
ストーリー上いろいろ工夫はしてみたのですが、スベってないか心配です💦
反省点としては、RPGの醍醐味はモンスターとの戦闘なので、やはりモンスターとの戦闘をちゃんと実装したかったです。
また、マップの解像度をもうちょっと高められればなぁというのが正直なところです。
あと家族にテストプレイしてもらってそれを横で見ていて感じたのですが、みんな意外とRPGのセリフを読まない!なんとなくの雰囲気でプレイするのです。
なのでセリフで説明していた部分を分かりやすくマップで表示する等、なんとなく雰囲気でプレイしても進められるように調整しました。
確かに今時のRPGってセリフ読まなくてもなんとなく進められちゃいますからね…
これは考え方を改めねば、と感じさせられました。
****
今回作成したゲームのシステムを使えば、いろんなバリエーションの2D RPGが作れるのではと思っています。
また機会があれば、よりブラッシュアップされた2D RPGを制作してみたいと思います。
次回こそはオリジナルマップで勝負したいです!
皆さんもはじプロでRPG、作ってみませんか?
はじめてゲームプログラミングで「上海ソリティア」を制作したときのメモ
はじめに
先般、はじめてゲームプログラミング(以下「はじプロ」)向けに「上海ソリティア」というゲームを公開しました。
有名なゲーム、「上海」の移植版です。
おそらくはじプロでは前例のない、大量のオブジェクトを区別するタイプのゲームとなりました。
この「上海ソリティア」を制作するに至った経緯、制作の過程、工夫した点や苦労した点などを書き残したいと思います。
制作の経緯
ふと「そういえば、はじプロで上海って作られてないな」と考えたのがそもそものきっかけでした。
上海のような大量のオブジェクトを区別しなければならないパズルゲームは、はじプロが苦手とするジャンルです。
せっかくだから制作に挑戦してみよう、という所からスタートしました。
「上海」とは
その前に、「上海」とは何かについてWikipediaの説明を引用しておきます。
『上海』(シャンハイ)は、1986年7月にアメリカ合衆国のアクティビジョンから発売されたMacintosh用パズルゲーム。
最初は、季節牌4枚(春、夏、秋、冬)、花牌4枚(梅、蘭、菊、竹)を含む合計144枚の麻雀牌が積み上げられた状態が表示される。
その牌の山の中から、同じ牌を2枚選ぶと、その牌を取り除くことができる(季節牌と花牌は、季節牌同士、花牌同士であれば良い)。ただし、左右両方に隣接する牌がある場合や、上に牌が乗っている場合はその牌を選ぶことはできない。
144枚全てを取り除くことができればゲームクリア、牌が残っているにも関わらず、取り除くことのできる牌がなくなったら(手詰まりで)ゲームオーバーとなる。
まあ一種のパズルゲームですね。
1990年代初頭にかなり人気がありました。
当時私も手持ちのPC-8801MHでN88-BASICによる移植を試みましたが、当時の技術力では太刀打ちできず、諦めた記憶があります。
技術的な制約
時が経って2022年、はじプロにすっかりハマってしまった私はこの上海をはじプロに移植する事を決意しました。
さっそくサンプル的なものを作ってみると、まあまあ良い感じです。
ただいま制作中
— pochitto (@pochitto) 2022年6月9日
#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/DyiRV1hUdQ
ですがちゃんとした上海を作るとなると、技術的な課題が山ほどありました。
それをどうやって一つ一つ克服していったかについて書いていきます。
512ノードンの壁
はじプロには「512ノードンの壁」があります。
ノードン(プログラムの構成要素)はゲーム内に512個しか置けない、というものです。
この制約に引っかからず、かつモノの区別がつくようにしなければなりません。
これは非常に難しい問題です。
どうやって36種類144個のオブジェクトを区別するか
また、はじプロは、モノの区別をつけるのが非常に苦手です。
基本的には、ある基本形(直方体や円柱など)に「おしゃれなモノノードン」というものを連結して、さわっているノードンを使ってそれぞれのモノの区別を付けます。
ただ、おしゃれなモノノードンはゲーム内に32個しか配置できないため、それ以上のモノを区別するには別の方法を考える必要がありました。
当初考えていた案は、まずおしゃれなモノノードンで区別し、足りないものは複数の基本形(直方体、円柱、球)を一定法則で牌となるモノに連結し、それぞれを区別するというものでした。
たとえば次のようなものです。
🀉=○
🀛=○○
🀒=○○○
🀂=○○○○
🀊=□
🀜=□□
🀓=□□□
🀃=□□□□
この方式でいけば、16+16+40+40+40+56+56=264通りで、牌本体とロジック部分のノードンを考慮すると最大で7種類の牌を表現できるのではと考えました。
ただ、それだと「なんちゃって上海」になってしまい、往年の、あの「上海」を再現できたとは言い難いものになります。
「あの『上海』をはじプロで再現!」と銘打ちたかったので、この案は残念ながら却下することにしました。
ある気づき:モノの大きさは0.01m刻みで変えられる
それから数日悩んだある日、ふと思いつきました。
「モノの大きさって0.01m刻みで変えられるな…ならばその大きさの違いを計測すればモノを区別でき、連結するモノは1つだけで済むのでは?」
モノノードンとさわってるノードンを0.01m刻みで設置し、試行錯誤しつつ試してみると、何とうまくいくではありませんか!
今回の上海の場合は牌を重ねていくので、
0.36(36種類)+0.1(モノノードンの最小サイズ)+0.1(さわってるノードンの最小サイズ)=0.56mの厚みがあれば良いことになります。
牌そのものやその他のノードン類と干渉しないよう球の形を選んだので、自分の中で
「ボールぶらさげ方式」
と勝手に命名しています。
TACTYさん(@LaboTacty)のご厚意で牌のテクスチャを作っていただけることになり、基本部分はほぼできました。
テクスチャがいい感じ。だいぶ出来てきた
— pochitto (@pochitto) 2022年6月16日
#はじめてゲームプログラミング #NintendoSwitch pic.twitter.com/fSC57v44xr
ゲームの難易度調整、そして完成
最後に待ち構えていた難問が、難易度調整です。
ゲームの上海と聞くと、皆さんは↓のようなものを想像されるかと思います。
「DRAGON(龍配列)」と呼ばれる配列です。
もちろんこの配列をそのまま使うのは難しいのですが、おおむねこれに似た配列を採用してテストプレイしていました。
牌自体はランダムに散らばるようにして、毎回楽しめるよう工夫を凝らしました。
が、
全然クリアできない…
10回やって1回クリアできるかできないかの、超絶高難易度のゲームになってしまいました。
こういったパズルゲームは、がんばってクリアした時の達成感がキモだと思っているので、9割方詰むというのは到底容認できません。
あとから調べて分かったのですが、この配列の場合、クリアしやすいように牌の並びをプログラムで調整する必要があるのです。そうしないと容易に詰んでしまいます。
ですがはじプロで上海を作るにあたり、そのような工夫を盛り込む余裕は全くありませんでした。
そして数日悩んだある日、一つの仮説を思いつきました。
・横に並ぶ牌の数が多い列がたくさんあればあるほど、難易度が高くなる
その仮説を検証すべく、DRAGON配列を縦半分にぶった切ってテストプレイをしてみました。
すると驚いたことに、難易度が劇的に下がったのです!
詰む事はほぼなくなりました。
本当に驚きです。たったこれだけの事でこれほど難易度が変わるとは…
ただあまりにも簡単すぎるので、微妙に配置を変えて難易度調整をして、最後の仕上げをして、無事完成しました。
新作です!
— pochitto (@pochitto) 2022年6月26日
【上海ソリティア Shanghai Solitaire】
有名な「上海」のはじプロ版です。すべての牌のペアを取ればクリアです。
じっくり考えてクリアを目指そう。
ぜひ遊んでみて下さい!
G 001 BMG P8M#はじめてゲームプログラミング#NintendoSwitch#GameBuilderGarage pic.twitter.com/tMYqg3Pd6S
※オリジナルの上海を制作された皆様、また現在においても上海をリリースされている皆様、許諾も得ずに移植してしまいすみません…必要でしたら許諾を取りに伺います。
感想
当初想定していた以上に移植度の高いものが出来、自分でも驚いています。
そして改めて、上海は奥の深いゲームだなあと思いました。
派手なゲームが多いはじプロの中にあって地味なゲームかもしれませんが、自分の中では記念碑的な作品になりました。
今回の開発手法を応用すればトランプゲームなども作れると思うので、ぜひ挑戦してみたいと思います。
謝辞
テクスチャ作成の要望に快く応えてくださったTACTYさん(@LaboTacty)に最大の賛辞を送りたいと思います。
また、暇な親父の趣味に付き合ってテストプレイをしてくれた次男にも感謝したいです。
また機会があればゲーム制作と共に、そのメモを書いてみたいと思います。
最後までお読みいただき、ありがとうございました。
「はじめてゲームプログラミング」でのゲーム制作メモ
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において立体パズルの要素を加えられたことも私にとって非常にプラスになった。
自分にまだゲーム制作できるだけの頭の柔軟さが残っていた事は、驚きであり、喜びだった。
これに味を占めて、またはじプロで新たなゲームを作りたいと思う。
かつての自作ゲームの再現もさることながら、新しいゲーム性のあるゲームを作ってみたい。
制約のある中での創作活動というのは、おそらく私の性に合っているのだと思う。
そのためのツールとして、はじプロは一級品だ。
改めて、このソフトをリリースしてくれた任天堂には、感謝しかない。
かつてゲーム制作を志していた人、あるいはゲーム制作に興味のある人はぜひ手に取ってもらいたいソフトだ。
最後宣伝のようになってしまったが、私に新たなモチベーションを与えてくれたはじプロに惜しみない拍手を送りたい。