こんばんは、海東ヨウクです。
梅雨に入り、この夏最後の涼しさを噛み締めながら書いております。
嫌だなー、これから夏かぁ。
あっついの嫌いなんですよ……。
汗かくし、気温の高さが不快ってだけならまだいいんですけどね。
虫は多いし、何より頭がボーッとするのが嫌なんです。
夏になると僕、とにかくふわ~っとしてるんです。
身体に熱がこもってる感じで。
動物園の動物がくたーっと横たわってる気持ちがよくわかりますよ。
まあそんな話は置いておきまして。
こないだ、プチコン3号というニンテンドー3DSソフトでゲームプログラミングを行い、ちょっとしたゲームを作りました。
目立ったバグもなくキチンと仕上げられたのは自身の中で初です。
3DSなのでテレビやパソコンに映像を出力出来ないため、動画にするのは難しくて実際のゲーム画面をお見せできないのが残念ですが……今回はその開発の話をしたいと思います。
と言っても、プログラミングの話は難しいので、専門のワードをあまり使わずにいきたいと思います。
さて今回作ったのは、インベーダーゲームもどきです。
なので『ベーダーベーダー』と名付けてます。
元となるインベーダーゲームは僕は世代ではないため、具体的な仕様はあまり知らないのですが、敵が右に左にまとまって動いて、段々下の方に降りてくる。
それをプレイヤーが射撃で倒していって、こちらの陣地まで来られたらゲームオーバー。
そんなイメージです。
インベーダー(侵略者)もどきはプチコン3号の中にサンプルプログラムがあるのですが、あくまでサンプルなので、未完成品になってます。
それが地味に、プログラマー心をくすぐるんですよ。
未完成なプログラムは、自分で完成させてしまおうって思うわけです。
ただ、人の作ったプログラムはよくわからんのです。
なので僕は1から作ることにしました。
ゲームを1から作るっていうのは、イメージが湧くでしょうか?
最初は、真っ黒な画面があるだけです。
予め色んなドット絵のパーツが敷き詰められたセットがあり、それを呼び出すことでキャラクターは表示させられます。
文字も、PRINTっていう命令で表示させられます。
ただ、プログラムって……表示させただけじゃ意味を持たないんです。
キャラを表示させたところで、何のボタンを押しても動かない状態となるのです。
皆さんが普段遊ぶような……例えば横スクロールの2Dアクションゲームでは、
・プレイヤーキャラを表示し
・ボタン操作に合わせてキャラを動かし
・その動きに合わせてキャラクターをアニメーションさせ
・背景をスクロールさせる
真横に動かすためだけでも最低限これだけの処理が同時に行われているわけです。
そこに、走る速度や地面に沿った動き、ジャンプの高さや角度……敵の出現、動作などなど。
それらは全部プログラミングで出来ているのです。
ゲームの魅力は、グラフィック、音楽……人によって様々な感じ方をされると思いますけど、一定のグラフィック、音楽があっても、プログラミング次第であらゆるゲームに化けます。
アクション、シューティング、RPG、レーシング、アドベンチャー……etc……
プログラミングってすごいんですよ。
無限の可能性があるんです。
……ただ、ちゃん作るには数学の知識が必要になるんですけどね……。僕、今の所複雑な計算式とか考えられてませんよ。
さて、ベーダーベーダーでは、
・自機を左右に動かす。(画面外には出ないように)
・Aボタンでショットを打つ。
・敵を横に10体、それを縦に2列で20体表示させ、右に動かす。→画面端に来たら、一列下に下がり、左に折り返す。→左端でまた折り返す……を繰り返す。
・敵に弾が当たったらその敵が消える。
・全員倒したらゲームクリアにする
・一体でもこちらの陣地まで侵入されたらゲームオーバーとする。
といった仕様にしました。
一つ一つのプログラミングについて解説するとやはり難しい話になるので割愛します。
今回作って思ったのが、動かせても、そこからの調整次第で完成度は全然変わるんだなってことです。
箇条書きした要素を全て乗っけられても、それが面白いゲームになるとは限らないんです。
敵のスピード、自機のスピード、弾の速度。速度系は特に細かな調整が必要ですね。
アクションゲームだったら当たり判定もかなり微調整しなくちゃいけないと思いますし。
しかしプログラミング初心者の僕の場合……細かな部分にこだわる前に色々な問題にぶつかります。
敵が画面端に来たときに、ゾロゾローって真下に向かって落ちてったりとか。
弾が当たったのに敵が消えなかったりとか。
倒して消えたはずの敵が陣地に入ってゲームオーバーとか。
それぞれの問題を解決するのに時間が掛りました。
この、"問題を解決しなければならない"っていう部分に嫌気が差して二年前、僕はゲームプログラミングを諦めてます。
仕様を追加しても、それが全然思ったように動かなかったら絶望感がすごいんですよ。
計算式と英語の命令文で出来てるので、パッと見でわからないどころか、よく見ても何がどういうバグの元になってるかわからない。
──なので今回、そういう問題が起きたとき……深く考えるのをやめました。
これ、なかなかヒドイ結論ですよ。(笑)
難解なパズルを目の前にして、「難し過ぎるから、俺もう考えない!」って言ってるようなものですからね。
でも、ゲームプログラミングだからこそなのだと思いますけど、ミスが目に見えるのがまた面白いんですよ。
ミスしても良いんです。
始めから、こうすれば理論的に合ってるから絶対に大丈夫……ってする必要が無いんです。
これ、他の仕事だと怒られるやつですね。(笑)
とりあえず試してみて、修正する。
修正する時も、どうやったらいい感じに動くか、試すことの連続。
これが面白いんです。
そこに面白さを見出だせたからこそ、今回は僕でも作り上げられたんだと思います。
また、試す際に妙な挙動を起こしたりして。それがアイデアに繋がることもあるんです。
今回のベーダーベーダーでも、弾が当たったキャラを上手く消せなかったので、見た目だけ消して、もっかい上の方に持ってきちゃおうっていう仕様にしたんです。
それを一回、見た目を消さずに実行してみると、倒したはずの敵が次々、画面上に再出現して、動くんです。
つまりエンドレスなんですよ。何なのこのゲーム。(笑)
けどこれ、見た目が面白くて。
倒すタイミングとか、人それぞれだし同じ人でも毎回違うので、自然とランダムなパターンになるんです。
もともと列を組んで動いてたものが段々とワチャワチャと動くようになって。
だけどもそれぞれキチンとルールに則って画面端で折り返して近づいてくるんですよ。
それが見た目だけじゃなくてゲームとしても面白いので、エンドレスモードとして入れとこうってなりました。
結果、モードが二つになってるんですよ。
Aボタンで始めると、元の仕様の、全員倒したらクリア。
Xボタンで始めると、倒した敵が再出現するエンドレスモード。
通常のモードでも、敵が一体ずつ壁に当たったら折り返すようにしたら面白かったのでそのままにしてたり、
(本来のインベーダーは確か、どれか一体でも壁に当たったらみんなその場で折り返してたはず)
オリジナルの挙動になってます。
ただ、このゲーム。何回でも遊べるようにしたいって思って作り始めました。
何回やっても飽きずに楽しめる。それはゲームの仕様がどうこうじゃなくて、単純に、触ってみて感じることだと思うので、一回作り終えた後に追加していった要素があります。
主に、エンドレスモード用に色々追加したんですけど、結果として、そっちがメインになりましたね。(笑)
エンドレスモード用に追加したのが、スコア。それに合わせたスピードアップ処理。
エンドレスでモチベーションになるのって、やはりスコアだと思うんですよ。
どこまで記録を伸ばせるか。
それを色んな人と競い合えることを想定して、表示させ……ゲームオーバー画面でチカチカと色んな色に点滅(正確には色変化のみ)させたり。
自分で何度かプレイしてみると、数回に一度、1万点を超えるんです。
たまにしか行かなくて、調子が悪いと3千点くらいで終わるんですけどね。
けど調子が良いと、1万点を超えてもずっと続けられそうに感じて。
そんな時、あれ、これヌルゲーじゃない?って思うんですよ。
なので、1万点を超えると、敵がスピードアップするような仕様にしました。
でもそもそも1万点を超えることってそんなに頻繁には起こらないので、どれくらいスピードアップしてるのか、試すのも地味に苦労するんですよ。
1万点超える時点で結構すごいんだぞってわかるように、スコアの文字を赤くさせましたからね。
それでいざ1万点を超えると、敵がめちゃくちゃ早くなるんですよ!(笑)
思わず笑っちゃいましたけど、これは理不尽だ……とも思ったので、少し下げまして。
でももうひたすらそこの調整をするのも面倒なので、それ以上はしていません。
なのでもしかしたら、エンドレスモードなのに無限には出来ない速さになってる可能性もあります。
まあでも、限られた点数の中でも競えれば面白いと思うので。
結局、実際無限に出来ちゃうと……耐久勝負になっちゃいますしね。
ハイスコア目指すためにひたすら時間ばかり掛かるのは嫌じゃないですか。
そんな感じで、作り手というよりプレイヤーとしてのこだわりを入れて制作しました。
それは良いと思います。
制作者のこだわってるポイントって、案外プレイヤーからするとどうでもいい部分だったりしますからね。
もちろん、細かなこだわりが詰まってることで、コアなファンを喜ばせることが出来るとも思います。
しかし限られた時間や人員で作るとなると、何よりも遊んだ時の面白さを優先させて欲しいって思うんですよ、僕は。
正直、グラフィックが綺麗でも、遊んでてつまらないゲームってたくさんありますからね。
って……これだけ言うと、自分の思う面白さに絶対的な自信があるように思われそうですけど……自信は、あんまり無いです。
ただ、クリエイターとして、自分の思う"良さ"を表現するのが一番ですから。
自分のわからない分野について表そうとしても、そっちに詳しい人からしたら、不満だらけになると思うんですよ。
なので、僕は僕の好きなものにちゃんと触れて感じて、そこから得たもの、思いついたものを自分なりに表現したいんです。
幸いなことに、ゲームに関しては一つのジャンルに執着することなく色々なものを気に入ったりしますので……自分の好みはそんなに偏ってないんじゃないかなって勝手に思ってます。
とにかく飽きやすい性格なので、意外とそれも役立ってるかもしれないですね。
食の好みもホント変化してるっていうか、飽きやすすぎて嫌いなもの増えまくりです……。
歌とかもそうかもですね。
あんまり頻繁に聴いてると、急にパッタリ聴かなくなったりします。
どこかおかしいのかもしれませんね。
考えてみると、ゲーム実況に対してあれだけ熱意があったのに、今はあんまりやりたいと思えないんですよ……。
絵や小説に関しても同じで……。
うーん……。
とはいえ、単純に興味を失いやすいだけで、ちょっとしたキッカケでまたやり始めることも多いです。
モチベーションをコントロール出来ないのが難点ですけどね……。
悪い面ばかりですけど、うまいこと制作に役立てられれば良いなぁって思いますね。
実際、繰り返しの作業系のゲームはすぐ飽きちゃうので、プレイする度に新鮮さを感じられるものを作るっていうのは自分の中でのテーマの一つです。
そんなわけで、今回は自分のものづくりの話をしました。
また新しいゲームを作ったら、それの制作話を綴ります。
実はつい最近、RPGを作ろうと思って制作を始めたんですけど、マップ上をなんとか移動できるようになった段階で、今後メニュー画面とかメッセージウィンドウとか、戦闘画面とかも作らなきゃなんだよなぁ……って思い、後回しにしようとしていたアクションゲームの方に取り掛かろうと思ってます。
ゲームって、仕組みさえできればあとは要素の追加になってくるので、いくつもの画面切り替えがあるRPGよりはアクションゲームの方が短期間で作りやすいと思うんです。
全体の量としても、アクションゲームなら最悪1ステージだけでも作れれば全体の作りを習得したと言えると思うので、良いんです。
でもRPGだと、なかなかそうはいかないですからね。
複数のマップを行き来出来たり、ダンジョンに入ったりしたいじゃないですか。
欲を言えば、途中でちょっとしたミニゲームでも入れられればなぁとか思っていて。
そんなの何ヶ月掛かるんだよ……って勝手にショックを受けてます。(笑)
移動だけでも十分プログラムが入り組んでるんですけどね……。
こんがらがりまくりですよ。
動くのかな、僕の直感的なプログラミングで。
多分他のプログラマーの方よりも何倍も回り道しまくってるので、処理が重くなりそうですね……。
不安も尽きないですけど、とにかく当たって砕けろの姿勢で進んでいきます。
無茶しすぎて3DSが物理的に砕けたら困りますけどね。
そんなわけで、ちょっと長々とお話ししてしました。
ではまた次回〜