ウディタで自作ゲームを作りました【ALICE】

前回までの記事の通り最近ウディタをずっと弄っていて、ようやくひとつのゲームを作り終えることができたので公開。

タイトル:ALICE
ジャンル:アドベンチャー

下記URL(ふりーむ!)からダウンロードできます。画面キャプチャも載せていただいたのでイメージが湧くかと思います。
http://www.freem.ne.jp/win/game/10085

本当は一般公開せずに友達にやってもらうだけのつもりで作り始めたんだけど、結構細部とかこだわってる内にそれだけじゃ勿体無いかもと思うようになって、途中からは一般公開することを目標に作った。
特に使用素材には注意した。(素材の中にはツクールRTP改変というのが多く、そういった素材はツクールのライセンス保持者じゃないと使えないため)でもウディタも人気ツールだから、ウディタ対応の素材もたくさんあって素材探しはそんなに苦労しなかった。
でも、やっぱり有名なフリーゲームはだいたいオリジナルの素材を使っていることが多い。特にキャラチップとか立ち絵。ゲームのオリジナリティを出すためにはオリジナルのキャラを用意しないとだめ。
でもまあ一般公開したゲームとしては処女作だし、ALICEはこれでいいかなと。それに使わせてもらったキャラチップはとても俺好みでとても気に入っている。素晴らしい素材を有り難う御座います。

前回の記事に書いた「果物キャッチ」も改良してALICEに収録している。正直ゲームの全体の雰囲気とは違ってるからほんとは入れないほうが良かったんだろうけど、それだとあまりにもゲーム要素がなくなってしまうので、おまけ程度に入れた。せっかく作ったし。
改良部分としては、
・果物の落ちるスピードを種類別に変更(高得点のメロンは早い等)
・お邪魔虫3種を追加(採ってしまうと減点)
・超高得点の???を追加(高得点だが2個しか落ちてこない上に早い)
・結果画面を追加(総合得点を大きく表示&キャッチしたものの内訳を表示)
こんな感じ。一プレイ一分も掛からないからさくっと出来る割に結構熱中できると思う。再プレイも何度でもできるのでテンポよく飽きるまで出来る。

とりあえず完成出来たので、ネスペの勉強を再開しよう。
しかしまだゲーム制作熱は冷めていないのでウディタはちょいちょいいじり続けて、試験が終わったらまた何か作りたい。

ウディタでゲーム制作

今回は「果物キャッチ」を作った。ミニゲームとかでよくあるやつ。

ScreenShot_2015_0918_08_24_06

画面上部のランダムな横位置からランダムな果物が落ちてくるので、画面下部の籠を操作して果物をたくさん獲得するゲーム。
果物の種類は8種類くらいあって、一応種類によって点数が異なる。栗は5点だけどメロンは50点とか。しかし現れる果物は完全ランダムなのでかなり運に左右される。
あと細かいことを言えば当たり判定が適当。普通なら籠の口のところでキャッチしないと駄目なのに横から触れただけでキャッチしたことになる。
まあこれくらいなら言われなければわからないようなことだろう。実際やってるときは籠を注視してるわけじゃなく視界の端にあることになるだろうから。
できるだけ高得点を狙うなら何を差し置いてもメロンをキャッチするべし。

ss1

これは画面上部の情報を表示したり籠を表示する初期処理と、籠を左右に動かすための処理を書いている。
なぜこの2つの処理を一つにまとめたのか自分でもわからない。
本当ならわけたほうがいいのは言うまでもない。

ss2

これは果物を出現させる処理。10フレームに1個、つまり1秒間にきっかり6個の果物が降ってくることになる。
ランダム時間に出現させることもできると思う。「ウエイト:10フレーム」の固定値を乱数にすればいいだけだと思う。
パターン番号というのが果物の種類で、X座標というのが出現する横位置。横位置は0~640とかギリギリにしちゃうと籠の可動範囲から外れてしまうのである程度狭めている。

ss3

最後は当たり判定。
ただ単純に籠と果物の座標を取得しただけでは各々の中心点が完全に一致しないとキャッチしたことにならないので、
各々の座標の絶対差で判定している。
果物別の得点はシステムDBに登録してあって、そこからピクチャのパターン番号の得点を取得して加算している。
余裕があればどの果物をいくつキャッチしたのかという処理も実装したい。

画像見てもほとんどコメントがなくてわかりにくいと思う。
作った本人も今だから見ればわかるけど、しばらく経つと何のことやらわからなくなるだろう。
でもコメントめんどい。

ウディタでゲーム制作

この前の焼肉会合のときに自作ゲームの話になった。
昔、友人Kが作ったゲームを俺がプレイしたときに、そのゲームをこっぴどくこき下ろしたらしく、最終的にKが怒ってプレイは中断し、ゲームも未完となってしまうという悲しい事件があったという話になった。
確かに俺はKの作ったゲームのプレイヤーに任命され、プレイ中に多少批判めいた事を言った記憶はある。それでKが怒って帰って雰囲気最悪になった記憶まである。
でも言うほど滅茶苦茶にこき下ろしたような記憶はない。
しかし改めて当時の事などを振り返ると確かに怒るのも無理は無いという感じがする。
というのも、Kはそれまでにも何度かゲームを作っていたんだが、どれも内輪ネタオンリーのバカゲーしか作っていなかった。しかし俺がプレイしたゲームはKとしては珍しく、というか初めて真面目に作ったらしいゲームだった。それを批判されたら怒っても仕方ないなあと。
今は反省しているのでちゃんと謝った。というか当時から何回か謝ってると思うんだけど…。
今ではKも許してくれて居ると思うので笑い話みたいにはなっている。
そして笑い話になったからこそ、あの時のゲームをちゃんとやりたいので、Kにまた作って欲しいと頼んだら、作ってくれることになった。

で、やっと本題に入る。
Kが真面目なゲームを作ってくれることになって、俺にも制作意欲がふつふつと湧いてきた。
それで、この前からウディタを使ってゲームを作っている。
ウディタはだいぶ前にダウンロードして少し弄ったけど難易度が高くてほとんど何も作らず放置していた。
今回、久々にウディタを起動して、基礎から勉強した。(前回はわからないことを検索すらしなかった)
基本的に「ウディタ (したいこと)」で検索すれば出てくる。人気ツールはこれがあるから良いよね。
今までまともなゲームはRPGツクールシリーズ(3,4,2000,VX)でしか作ったことがない。逆に言えばツクールはスクリプト以外なら熟知していると言っても過言ではない。
つまりスイッチや変数なんかはわかるけど其れ以上のこととなるとお手上げの状態。
正直これだけの知識じゃウディタに立ちはだかる壁は遥か高みに霞んでることになる。(抽象的)
ウディタはとにかく変数を弄りまくる。セルフ、通常、ユーザ、可変、システムなど。ツクールみたいなスイッチ(Boolean型)はない。
変数の値を操作するだけじゃなく、変数を使って(呼び出して)いろいろなところに代入できる。
例えば通常イベントのセルフ変数n番は「110000n」という数値で呼び出せることを知っておくと非常に便利。ちなみにコモンイベントのセルフ変数n番は「160000n」。コモンイベント自体のIDは「50000n」。(半分備忘)
ウディタといえばコモンイベントらしいので、試しに作った。

ScreenShot_2015_0915_02_17_13

マップ上でメニューを開き、メニューから「図鑑」(特殊項目として設定)を選択すると上記のようなピクチャを表示させる。矢印キーでページ移動ができる。
ウディタはピクチャとして文字列をそのまま表示できるから便利。
この画像も文字部分はピクチャとして表示させている。ひとつ気をつけたいのは、文字列ピクチャを拡大率で小さくすると文字が潰れてしまうのでエスケープ文字(\f[n])を使ったほうがいい。

udhita

これが作ったコモンイベント。メニューから図鑑を選択した時に呼び出される。(初めはマップ上から直接ショートカットキーで呼び出したかったがいろいろ出来ず断念)
花と文章を表示するイベントは別のコモンイベントに入れた。(位置とか微調整するため)

ScreenShot_2015_0915_02_29_19

こっちは花を調べるとキー入力を促し、成否で分岐するだけの処理。

udhita2

あんまり長くないが呼び出し元イベントから引数と受け取り処理結果を戻すことをやっている。ちゃんとしたコモン。

こんな感じで簡単な自作システムめいたものは作れるようになった。しかし今現在もわからないことがたくさんあるのでウディタはまだまだこんなもんじゃないと思う。
あと思ったのは、ウディタは本当に細かいところまで気が利いている。ゲームを表現する機能のことではなく、制作しているときのちょっとした付加機能が充実している。
例えば参照先のDBの内容を表示させるテキストボックスがあったり、使用中のセルフ変数の一覧と名前付けができたり、各ウインドウが独立(親子関係でない)してたり。
慣れるまでが大変なのは間違いない。多少プログラミングの知識がある俺でも慣れるまで丸一日とか平気で使う。オブジェクト指向とか変数を知らない人がウディタでゲームを完成させるのは、相当今期が必要だと思う。
というか最近ウディタばっかいじってて勉強してない…。やばいかも。

一昨日の金曜日、朝9時過ぎくらいに友人Tから電話掛かってきて午前中暇なら付き合わないかと言われた。
予定のない日はだらだら勉強するだけなので出掛けることに。
10分後に迎えにきてもらったTの車にはTのベイビーたちが。2歳と5か月の男の子2人がいた。
さては子供の面倒が大変だから暇であろう俺を誘ったんだなと察する。
車中では5か月の赤ちゃんの涎を拭いたり、目的地のイオンで上の子を肩車したり大変だった。
下の子はまだ小さいからそうでもなかったが上の子はもう2歳なので人見知りするらしい。
初めはパパであるTから離れなかったがだんだん打ち解けてくれるようになって嬉しかった。
基本的に子どもは残酷な生き物だとは思ってるけどやっぱりかわいいもんだなと思った。人の子どもでこれだから自分の子どもだとひとしおだろう。
マックのドライブスルーで昼ご飯を買って帰ることに。本当は俺はこれで帰るつもりだった。だってTの家には奥さんがいるだろうから、挨拶とか面倒だしそんなところへ行きたくなかった。
しかし聞くところによると奥さんは出掛けていていないらしい。それならということで、お昼ご飯だけ食べていくことにした。
Tの家は新築で中も奇麗だった。二十代で一国一城の主なんだから大したもんだ。
しばらくしてTの弟がやってきた。弟君とは前に一度会っている。
その前に会ったのは彼が小学校へ上がる前とかの本当に小さい頃だったのでその変貌ぶりには驚いた。全然面影がないんだもん。
大人3人と子ども2人でテレビを見ながらだらだらしていた。
眠くなってきたのでそろそろ帰ろうとしたところでTが「あ、帰ってきた」。
結局Tの奥さんと会ってしまった。友達の奥さんなんて初めての人種だからどう接すればいいかわからない。だから嫌だった。Tには「(奥さんと会った時の俺の)反応が見たかった」と笑いながら言われた。はめられた。
こうなってしまった以上すぐ帰るのもあれなのでもうしばらくいることに。
そのあとはなんだかんだで夕方までいてしまった。
会うまでは嫌だけど不可抗力でも会ってしまえばどうとでもなる。

今日は友人KとMに誘われていつもの焼肉会合へ。今日はDという友達もいた。
正直Dとは昔からそんなに接点もなかった(友達の友達くらい)。
でも向こうも俺のことを覚えていてくれたみたいで安心した。
焼肉会合はいつものように昔話に花が咲いた。会うたびに同じような話をしてるのになんで毎回あんなに笑えるんだろう。
次は27日に今日のメンバー+Sという旧友で集まることになった。
Sは最近連絡が取れた旧友でライフスタイルが未知数なので来れるかどうかは微妙なところ。

ネスペの勉強はぼちぼちやってる。
IPAのサイトから落とした過去問印刷したんだが2年分印刷するだけで結構お金かかってしまった。
これなら普通に参考書買っておけばよかった。
過去問は4年分を2巡くらい解いたところで、ようやく少しずつわかってきたかもしれない。
学生時代にソフ開の勉強してた頃も今と同じような感覚(少しずつわかってくる)があった。
あと1か月ちょっとがんばろう。