2014年06月

        

ゲームを作ろう-14

category - ゲーム製作記
2014/ 06/ 29
                 
「アニメパターン描画、巨漢誕生 の巻」


3D表示されたダンジョンの中を自由に動き回る敵。
グラフィックはまだテスト用のもので動きがありません。
なので最初にテスト用の画像のモンスターを
倒れさせてみることになりました。

モンスターが何らかの攻撃を受けて倒れる。
それはきっとのけぞるようなしぐさだろうと、思いました。
手に持っているハンマーを取り落とし倒れる。
ひざカックンみたいな動きに違いない。

自作のアニメツールで動きのアタリをとってみました。
最初は5枚くらいの動きだったと思います。
それが動きをチェックしてるうちに
7枚のほうが滑らかで良いということになりました。
そして塗りの作業の始まりです。
kaihatu14wa1.jpg
自作のアニメツールには当時
320x240のサイズを各機能が無く、
2倍の640x480で描いていました。
それを半分のサイズに縮小して使います。

ツールはドット打ち用とグラフィックツールの
中間形みたいな感じでした。
ドット打ちツールとしては中堅ぐらい
グラフィックツールとしては下の中くらいです。
癖が強いがアニメに強い
そんなツールに仕上がっています。

で、塗りです。
まず最初の一枚を力の限り塗ります。
細かく丁寧に。
それから部分的にページめくりをしながら塗っていきます。
それが塗り終わったら次の部分、
と、アニメをループさせてぐるぐる回しながら塗っていきます。
すべてのパーツにおいてこれが済んだら粗塗りの完成です。
最後に一枚ずつドット修正をして仕上げです。

グラフィックは用意できました。
仕上がったものをゲーム中に表示して確認します。
敵は画面中央付近に来たときにボタンを押せば
倒れるアニメを再生する仕組みになっています。

スタート。
中央にやってくる敵。
ボタンを押すと・・・・。
フニャン!

なんと言うかフニャンと倒れました。
アニメの速度はちょっと早めです。
フルアニメに近い動きをしました。
本来ならここでもうちょっと遅く再生されるように
手を加えるのですが、
思いのほか滑らかな動きにやられました。

「いい!これでほかのアニメも作ろう!!」

思えばこの瞬間が運命の分かれ道でした。
想像の中のアニメはもっとカクカク動いていたんですが、
「もっと良い物がみたい」という欲求に負けました。
そして作画作業が始まりました。

歩きモーション。下描きでざっと描いたら15枚ありました。
2本の足で歩くには中途半端な数です。
それでも歩いて見えるんだからと採用になりました。
この15枚という数字がモンスターのメモリエリアの基本となりました。

これから描く紫色のモンスターはよく見れば結構複雑です。
作画作業はすこし厄介でした。
この話をすると「ゲームを作ろう」の1話分がつぶれてしまいそうなので
いつかまたの機会に。
作画は15日ほどをかけて完成しました。
この作画作業では後に役に立つ技術がたくさん生まれたりもしました。
作業は近接攻撃も含めれば1ヵ月半ほどかかっています。
kaihatu14wa2.jpg
モンスターを動かしてチェックします。

なかなかの見栄え!

ここで動きに関していろいろ書いてしまってもいいんですが、
出来れば実物を見て判断してもらいたいと思います。
そのくらい初見はいいと思ってます。
動きは多分ゲームを宣伝してもいい時期になったら
ムービーか何かを公開すると思います。
2014/6/29現在の段階では完成までにまだ時間がかかるのでまだ内緒です。(関係ないけど作者の誕生日です。)


・・・こうしてFRというゲームにアニメする敵が現れました。
この調子で敵キャラを増やし、何種類も出せるようになると
このゲームはどんな姿を見せてくれるのだろうか?
期待は膨らむばかりでした。

                            (つづく)



            
スポンサーサイト
            
                                  
        

ゲームを作ろう-13

category - ゲーム製作記
2014/ 06/ 26
                 
「擬似3Dマップを移動する敵 の巻」


16エンジンは16改になり
横方向なら自由な方向を向けるようになりました。
次はモンスターです。

通常、マス目で区切られた空間を移動する場合
一コマ移動するのは簡単です。
コンピューターゲームで言うなら
シミュレーションゲームのコマ移動がそれです。

しかし今作ってるゲームでは
一瞬にして隣のコマに移動してもらうと困ります。
もうちょっと滑らかに移動して欲しいのです。

2DマップのRPGなら簡単にその処理が出来るかもしれません。
しかし今作ってるのは擬似3Dのゲームです。
同じ処理をするにも少々複雑な手続きがあります。
kaihatu13wa1.jpg
まず敵キャラは2つの座標を要求します。
今いる場所とこれから行く場所です。
48x48ブロックのマップ上でその場所を指定。
そして48x48マップから抽出された11x11マップを
3D変換する時に
一緒に2つの座標を3D変換してもらいます。
後はその2点の間のどのへんにいるかを
示す変数でモンスターの位置が決まります。
次に行く場所に到達したら
もう一度さっきの処理を最初から繰り返します。
これがモンスターの自由移動(行動)です。

文章にするとさらっとしたもんですが、
まだ何も入力していない状態から
これを実現させるのは
なかなか困難なものがありました。

まずプログラムが複雑であること。
ただでさえ複雑な16改に追加でスクリプトを書かなければなりません。
しかもエンジンの3D処理と一緒に3D処理しないといけない。
そんな感じなのでプログラムは
手探りで
一歩ずつ進みました。

真っ暗なバックに白い文字が浮かぶプログラム空間。
大量の文字を掻き分けて
新たな命令を書き込みます。
命令を書いて「出来た!」と思っては
エラー。その繰り返し。
いい加減、嫌になり始めたころに
最後に命令を打ち込むと
「よし!」
と頭の中で声がしました。

なんだろう?
良く分からないままプログラムを走らせると
敵キャラが自由移動しています。
kaihatu13wa2.jpg
うれしかったのにはうれしかったんですが
なんとも奇妙な体験でした。

モニターを眺めます。
自由行動(ランダム移動)する敵キャラ。
その動きはあたかも意志を持っているかのように見えました。
もっとこのキャラを動かしてみたい。
たとえばやられモーションなんかどうだろうと考えてみました。
それがあれば、たとえば攻撃ボタンなんかで
敵の倒れるという演出が出来ます。

枚数は4・5枚くらいで。
アニメーションする仕組みも作らないといけない。

とりあえず次の仕事はアニメを作る作業にしよう
と、そう思ったのでありました。

                    (つづく)
                         
                                  
        

ゲームを作ろう-12

category - ゲーム製作記
2014/ 06/ 21
                 
「ひずまない(?)エンジン 16改 の巻」ver1.01


FRはもう少しでエンカウントバトルのRPGになるところでした。
しかし偶然のいたずらで
リアルタイムFPS+RPGへの道を歩み始めたのでした。

マップを表示するためのプログラム「16エンジン」
このエンジンには弱点がありました。
通常は90度ごとの回転でマップを表示するのですが
これを0.1度(ラジアン角)ずつ回転させると・・・・・
kaihatu12wa1.jpg
まっすぐ伸びているはずの通路が
曲がって表示されます。

これは基の計算がでたらめなのが原因です。
16エンジンは出来るだけ処理速度を上げるために
複雑な計算をはしょっています。

またこうすることで数学が苦手な自分にも
理解できるという利点もありました。

しかしこれからすることを実現させるためには
90度ごとではなく
もっと細かい度数で
回転させなくてはなりません。
次のゲーム性にはそれが必要でした。

なので16エンジンを改良することになりました。
テーマは「回転させても通路がひずまないエンジン」です。

それを実現するにあたりある概念を導入しました。



大きな方眼紙が目の前にあると思ってください。
一番左上が座標(0,0)です。
そこからたとえば(500,300)に伸びる直線があると思ってください。
横の長さをX 縦をYとします。
x(500*0.6)y(300*0.6)の座標に点を打ってみてください。
それはきっとライン上にあるはずです。
つまり
ラインの長さをXでとらえようがYでとらえようが
60%という位置はライン上の1点をしめすのです。

このパーセントが11個ならんでいたとしたら。
やはりそれはラインを描くでしょう。

さらにそのラインが11列あったとしたら・・・。

・・・つまりこれが16改というエンジンです。
kaihatu12wa2.jpg
(図ではポイントが11個無いですけどそこは概念図ということで。)

本当は遠近感を持った奥のポイントのパーセンテージと
手前のポイントのパーセンテージは
同じじゃないのかもしれませんが、
「同じである」と仮定したものが
16改の基本概念です。
同じにすることで格子模様のラインがまっすぐになります。
間違っていても動けばいいということで。
ただ、回転の中心にあるべき点が
回転とともにローリングしたりするので
概念が間違ってるんだろうとも思います。


改造は12日で終わりました。

実際に動かして確認します。
結果としてはまずまず。
通路はひずまなくなりました。
しかし回転が45度の地点で座標がはなれます。
それこそが次の改修ポイントなんですが、
それを改修していたらまたもっと開発期間がかかってしまいます。
いまのところゲーム性には支障が無いので
FRは16改を正式に採用することとなりました。

そんなわけで
横回転なら自由にどの角度でも向けるようになりました。
次はそこにモンスターを放つ段階です。

                       (つづく)
                         
                                  
        

ゲームを作ろう-11

category - ゲーム製作記
2014/ 06/ 19
                 
「頭の中に罵詈雑言 の巻」ver1.01


ゲーム作りはいよいよ本格化しました。
イベントを更新しながら最初のダンジョンを作りこむ作業です。
とにかくこれを作ってしまえば弾みがつく。
そう考えていた矢先でした。

当時の自分が何を考えていたのか
詳しいことは思い出せません。
しかし
作りかけのゲームを放置して
アニメ作りをしなければならないと思い込んだのは事実です。

そして作業を始めてしまいました。

作業は建物の並ぶ大通りを描く事です。
そのために自作のアニメーションツールで下描きをやっていました。
そんなある日。
突如として頭の中に大量の言葉で話しかける声がしました。
自分の思惟ではありません。
別人のものでした。
その声は休むまもなく話しかけてきます。
耐え難いと思える頻度です。
いったい何が自分の身に起きたのか・・・。
kaihatu11wa1.jpg
声に向けて話しかけてはみるけどその声はうそつきです。
どんなに交渉が上手く行ったと思っても
結局は嘘でしたということはざらです。
ぬか喜びと落胆の繰り返しでした。

アニメの動画を作る作業も続けました。
罵詈雑言と休み無く再生される音楽の中で、です。
声の主はちょっとのミスも許さない。
ミスしたまま続けようとすると嫌がらせをする。
ジャパネットたかたの音楽をかける。
作画作業にスーパーマリオの効果音をつける。
と、まぁやりたい放題です。

疲れは日々蓄積していきました。
それでも声の主もまるっきり悪人ではないらしく、
正しいことはかなりきちんと言うし
突き詰めた理論にも正確さがあるようです。

・・・毎日へとへとにくたびれながらも
一応休み時間がもらえるので
何とか体は持ちました。

この騒々しい期間は13年の3月3日に一区切り付きます。
くしくも某アニメ番組の7話か8話のころです。
自分にとっては忘れられない話だったと記憶しています。

それを機にアニメ作りも中断しました。
すると頭の声もゆるくなりました。
そうか
アニメを作り始めたのが原因だったのか・・・・
と、なんとなく合点がいきました。




声とはそのときからの付き合いになりました。
文章にするときは「悪魔」と表記することも。
仲がいいような悪いような・・・。

とにかくブランクが開きました。
何か作業を始めるとまた罵詈雑言を浴びせられるんじゃないかと
びくびくしながらゲーム作りに戻りました。
kaihatu11wa2.jpg
・・・・。
今度は大丈夫なようです。
ゲームのほうはこのままの仕様で作ろうかと
思っていたあたりで止まっています。

なんと言うか一難さって命拾いしたような気分です。
せっかく作るのなら気に入らない部分を直そうと思いました。
気に入らない部分・・・それは戦闘です。
地味で退屈な戦闘を直そうと思いました。
ターン制の殴り合いではなく、もっと銃を銃らしく・・・。
そのためにはマップのプログラムの作り変えが必要でした。

                            (つづく)
                         
                                  
        

ゲームを作ろう-10

category - ゲーム製作記
2014/ 06/ 17
                 
「やっぱり台詞が出てこない の巻」


ゲーム作りは敵との戦闘のテンプレが出来てからかなり進みました。
武器屋と道具屋、病院に酒場にラーメン屋。
これらもゲーム中に行けるようになりました。

次は何だろうと考えるに、
今度はもうちょっとゲームらしいことをやってみようと
いうことになりました。

ゲームらしいと言えばそう、
会話イベントです。

もともとAVGエディターであったZAPPAにとって
テキスト表示は得意な仕事です。
ダンジョンの中でイベントを発生させれば
当たり前のようにテキストにつなぐことが出来ます。

さて、
ダンジョン内で出会う人とはどんな人だろうか?
通行人・・・は居なさそう。
モンスターとか・・・・。
そうだ、つかまっちゃた人だ。

町が襲われるか何かして人がさらわれる。
それは少女で
ダンジョン内で拘束されている。
そして助けを待っているのだ。

そうだ、それがいい!
kaihatu10wa1.jpg
民間人の救出なら人道的だし
児童虐待でもない。
昔のゲームにもそういったシチュエーションは山ほどあるので
台詞づくりの参考にも出来る。・・・はず。

なによりPCエンジンの美少女ゲーム路線みたいで良い。
あの、なんと言うか無邪気で
健康的なお色気がある程度のイノセントワールド。
今と違ってあんまり悩んでなかったあの頃。
あの時代の空気が欲しい。

そんなわけで、人質救出ミッションのある
ダンジョンを作り始めたのでありました。


ダンジョンの構造は複雑でありながら特長的。
48x48ブロックのマップを吟味してそんなバランスを目指しました。

エディター上でマップを組んだら実際に歩いて確認。
この場所でイベントを起こそうとか、ここはちょっと簡単に、など。
そうこうしているうちに納得のいく配置が出来ました。

そうしたら人質のマップチップを描きます。
320x240のサイズで、ちょうどダンジョン1ブロック分。
1枚の大きな壁のサイズと考えて、その中央の半分から下ぐらい。
適当なサイズで囚われの少女を描きます。
このサイズはゲームでの見栄えを優先しています。
リアルにあんまり小さく描いてもテキストウインドウに隠れてしまうからです。
それに人物を大きく描くとなんとなく満足感があります。

キャラが出来たら実際に配置します。
マップチップなのでブロック扱いです。
この人物ブロックに触れるとイベントが発生する仕組みになっています。

次は台詞です。
画面上には赤い服の女の子が鎖につながれています。
さぁ、なんて書こう・・・・?

「助けて!」
・・・うん、そう言うだろう。
「捕まってしまったの!」
・・・おお、そうか、

確かこんな感じです。
昔のパソコンゲームならこれでOKだったでしょう。
でも今作っているゲームは仮にも現代のもの。
もうちょっと台詞が凝っていても良いような・・・。


・・・しかしここで問題発生です。
遠い昔、ZAPPAを作った頃の
「ストーリーを考えようとしたら何も思い浮かばない病」 が発生。
台詞がまったく出てこなくなりました。
kaihatu10wa2.jpg
・・・。
どうにかこうにかして台詞をつけては見たけれど
それもどこか変です。
子供なのか大人なのか良く分からない言葉遣いだったり、
やたらと説明的な台詞だったり。

しょうがないです。今つけてある台詞は仮のものです。
・・・ということにして放置しました。
原因がどこにあるのかは分からないけど、
多分、ゲームを遊ぶつもりで台詞は書けないのかもしれません。
作るつもりで無いと。

当たり前といえば当たり前なんですが、
当時も今も、そのあたりがイマイチ分かっていないのでありました。


                         (つづく)

                         
                                  
        

ゲームを作ろう-9

category - ゲーム製作記
2014/ 06/ 15
                 
「戦闘を作って店も作る の巻」

いったんは作った女の子モンスターは
児童虐待に通ずるので没になり、
かわりに普通のモンスターを作らないといけなくなりました。

今度は普通のモンスターです。
遠慮は要りません。
銃でぶっ飛ばします。
(主人公は銃を持っているという設定も、すでにあったのです。)

モンスターで最初に作ったのは「かかし」です。
案山子なら生物ですらないのでテスト用には最適だろうと考えたのです。
今回は銃での攻撃になるので、
そのために今使っているのが何の銃か判断するスクリプトが必要でした。

スクリプトはその分、複雑になりました。
ライン数で1000オーバー。
そのときのZAPPAのスクリプト上限は999しかなかったので、
新たに1000容量を足して0を含めた1999ラインに増設しました。

スクリプトを作りこみます。
スクリプトを何度もチェック。
見落としが無いようにしました。
ここでしっかり作っておけば、他のモンスターを作るとき楽になるからです。
kaihatu9wa1.jpg
かくして普通のモンスター、案山子こと「スケアクロウ」が誕生しました。

戦闘は銃で戦っている設定とは言え
結局はターン制の殴り合いです。
ガードもせずに殴りあうのは不自然だということで
盾も追加しました。

半リアルタイムバトルで戦闘は進行します。
プレイヤーは弾のリロードや残弾、ヒットポイントやシールドエネルギーに
注意しないといけません。

逆に言えばそこにさえ気をつけていれば問題の無い
非常に地味な戦いが繰り広げられていました。
(このゲームはなぜか戦闘が地味になる呪いが・・・・。)

戦闘がある程度出来るようになると
今度はゲーム内の店に行って買い物がしたくなります。
ドラクエなんかでも武器や道具は買い物でまかなうのが普通。
買い物が出来ればちょっとは楽しくなるかもしれない、と思いました。

店もZAPPA上のスクリプトで構成します。
この頃の店は商品をキーボードの左右で選択して選ぶ形式です。
マウスで方向を選択しても良いようになっています。

店内は基本的にグラフィックの塊です。
なんとすべての商品が店内の背景も含めた1枚絵で出来ていて、
ZAPPA上でそれを切り替える方式でした。
無茶です。
でもそんな無茶を通してもいいのがZAPPAのいいところです。
容量もJPEGで何とかなるだろうということでそのままスクリプトを組みました。

そしてとうとう武器屋と道具屋が開店。
買い物が出来るようになりました。
kaihatu9wa2.jpg

買い物が出来るようになってゲームらしくなったかといえば
それはちょっと疑問でした。

テストプレイだけでは良く分からないというのが正直なところです。

戦闘中に弾がなくなってダンジョンの深部から
戦闘を避けながら帰るのが果たして楽しいかどうか。
銃を使う利点も無いのに戦闘が銃ってどうなんだ、とか。


結論。
全体的にあんまり爽快感が無いバランスです。
しかしそれも作り進めればいつかは直ると信じて、その時は作り進めたのでした。

                               (つづく)

                         
                                  
        

ゲームを作ろう-8

category - ゲーム製作記
2014/ 06/ 12
                 
「女の子モンスターが居たころがあったの巻」



FRのフィールドは3Dダンジョンになりました。

3DダンジョンのルーチンはZAPPAにも移植されます。
そして変数のすり合わせが終わり、新たな命令を追加。
ZAPPAは晴れてバージョン1.00になりました。

これで本格的にゲームを作れるはず。
ダンジョンを歩いて敵と遭遇。
戦闘終了後にイベント発生。
一般の3DダンジョンRPGに出来ることは大体出来るようになりました。

さて、敵を出現させ、戦闘してみよう。
どんな敵がいいか・・・・・。

同人3DダンジョンRPGで敵キャラといえば
女の子モンスターです。
昔から大人気。
ダンジョンの中で女の子と遭遇して剣と魔法の戦いとか
とても楽しそうじゃありませんか。

なのでFRでもそうしてみようかな、と思いました。
kaihatu8wa1.jpg
モンスターのグラフィックを置くエリアとしては
ZAPPAの自由合成面が最適でした。
ここに必要な絵を置いていきます。

待機中のアニメが4枚。
攻撃が3枚。
ガードが1枚。
ダメージが1枚。
やられパターンが4枚。

これだけのグラフィックを置くと、自由合成面はほぼ一杯になります。
これをアルファブレンド合成してメイン画面に表示します。

ダンジョンのほうにはエンカウントする仕組みが付いています。
マップエディターであらかじめ作っておいた敵遭遇マップ、
これに沿って特定のエリアで特定の敵と遭遇するようになっていました。
なお、遭遇後6歩までは次の敵が現れません。

そして実際にゲーム上で確認。

最初に作った女の子モンスター「リトルドワーフ」と遭遇。
敵は少ない枚数ながら、アニメーションしています。
そして、ほぼ殴りあうだけの戦闘。
勝利。

つたないながらもゲームらしくなったので満足でした。
この調子で1体ずつ女の子モンスターを増やしていけば
より完成に近づくはずだと思いました。


敵キャラをさらに追加。
魔法で攻撃してくる「アリスメイジ」
かぼちゃで攻撃してくる「ジャック・オ・ランタン」

そして何度もテストプレイを重ねました。
そうしてるうちに新たな敵のアイデアが出てくるだろうと。
しかし、なにか釈然としません。

敗北時、女の子モンスターは4枚ほどのアニメで崩れ落ちるのですが
これが問題です。
何体もモンスターを撃破すると、そのたびこれを見るのです。

何度も戦闘。
崩れ落ちる女の子モンスター。
何体も何体も。

気分は児童虐待です。
kaihatu8wa2.jpg
描いたキャラも描いたキャラで
なぜか子供っぽいキャラばかりだったので
精神的なダメージも倍増です。

・・・やっぱり女の子モンスターはやめよう。
ジャンルだって別に18禁じゃないんだし・・・・。

18禁なら逆に丸く収まった話かもしれません。(イベント的に)
しかしFRは一般向け。
そこだけは曲げられないことでした。

結局、作った女の子モンスターはすべて没になります。
そして今度は倒しても平気な敵、
なんてことのない普通のモンスターになるのでした。

                           (つづく)
                         
                                  
        

ゲームを作ろう-7

category - ゲーム製作記
2014/ 06/ 10
                 
「誕生、16エンジン     (後編)」

体感ゲームのような画面を実現するため
11x11ポイントのグリッドを動かせるようになりました。
グリッドはその中心を軸に回転可能です。

次はこれにグラフィックをつけます。

グリッドは台形で、たとえるなら地面です。
地面の上に遠近感を持った11x11のポイントが並んでいると考えてください。
そこにグラフィックを表示します。

表示するものが柱なら中央の一番下。
ここがポイントとなります。
柱の大きさはy(高さ)に応じて拡大縮小します。

プログラムをマップエディターに搭載。
そして表示。

・・・・グリッドの調整が甘いのか、ごちゃっと表示されています。
十字路のようなものをエディターで作ったんですが、
どの柱も手近に表示され、どこが交差点か分かりません。
奥行きがぐっと詰まってる感じです。

パラメーターやプログラムを何度か調整してみても直りません。
kaihatu7wa1.jpg
これが限界だ。

そのときはそう思いました。

とにかく今はこれをフィールドとして使おう。
移動方法も決めないといけない。
・・・納得いかないまま作業を続けました。

次は移動です。
出来ればどの方向にも自由に歩けたほうがいい。
そのためにどうすればいいか。

ご存知のとおり11x11グリッドは中心に軸を持っています。
次に移動するためには11x11のマップ要素を上下左右に書き換える必要があります。
書き換えた11x11を1ブロックずらして表示すれば移動したことになります。

・・・自由移動はさせたいけどちょっと難しい。
なぜなら移動している自分を中心とした軸と11x11の中心の軸
2軸を巧みに操らないといけない。

当時の自分はあれこれパズルみたいな問題に悩まされ、
頭がまいっていました。
なので無難に、
十字移動にしようと思いました。
昔からある3Dダンジョンの移動法です。
この方式は自由移動に比べて、ずっと簡単でした。
なんだか分からないパズルで悩むより、
とにかく動かしてしまおうと思ったのです。

エンジンを搭載したマップエディターに十字移動のプログラムを組んでいきます。
そんなに時間はかかりませんでした。


・・・3D描画エンジン開発開始から16日。

プログラムは開発期間になぞらえて「16エンジン」と名づけられることになりました。
奥行きの狭さは相変わらずです。
それでも実用化に向けて調整に調整を重ねていました。

そんなある日。
なんとなくあるパラメーターが気になったので、
可変値にするべくマウスの座標を割り当ててみました。
そして何気なく横に動かすと・・・・。
kaihatu7wa2.jpg
いままでごちゃっとしていた奥行きが
すっきりと前に伸び、申し分の無いものになったのです。
これにはさすがに驚きでした。
予想外のことだしサプライズです。

歩いてみると遠近感がイマイチなのか、
若干奥のほうが早く、手前が遅く移動します。
でもそんなことは気になりませんでした。
アンバランスな遠近感が描き出す禍々しさに心躍りました。

これでいい!これで作ろう!

・・・かくしてFRのフィールドは、ちょっと強引な
3D描画のダンジョンになったのでありました。

                       (つづく)
                         
                                  
        

ゲームを作ろう-6

category - ゲーム製作記
2014/ 06/ 07
                 
「誕生、16エンジン    (前編)」

FRはRPGみたいなAVG。
移動手段はマウスクリック。
・・・・しかしそれではつまらない。

キーボードの十字キーで操作したい。
こちらの考えがダイレクトに伝わるキー操作。
そんな一体感が欲しい。

それを実現するにはZAPPAの改造が必要でした。
フィールドを表現する機能。
RPGのようなMAP見下ろし方ではなく
スプライトが大量に描画され3D空間を成す
SEGAの体感ゲームのようなフィールド。

どうせやるんならそこまでやろう、
やって出来るかどうか確かめてみよう。

そんな感じでフィールドを作り始めました。

SEGAの体感ゲーム。
大量のスプライトが立体的に並んでいます。
その位置、立体に見える位置を算出しないといけません。
しかもそれは迫ってくるだけでなく、
自分のいる位置を中心に回らないといけない。

なので基本となるのは円を描く三角関数です。
円の上に4点のポイントを取り点と点の間を11分割する。
それを向かいの点と結んで11分割すれば
11x11ポイントのグリッドが現れるわけです。
kaihatu6wa1.jpg
まずこれをZAPPAとは別のプログラムとして組み始めました。
さっきのようにグリッドを描写。
4つの点の位置を円周に沿わせて回す。

すると11x11のグリッドが回転を始めます。
昔アフターバーナーで見た球の回転するデモ。
あれにそっくりです。

今度はこれを
遠くは横幅が狭く
近くは横幅が大きく
変形させればいいわけです。

つまり円周上の4点にその変更を加えます。

そしてマウスの座標を増減する奥行きの値としてテストしてみました。

・・・・表示。
確かに奥行きが付いて見える。
でも不十分です。
グリッドの縦の間隔に遠近感がありません。

なので今度はねずみ算見たいな数値で遠近感を全ポイントに加えます。
今度は3Dの平面に見えるようです。
・・・よかった。

パースが極端だったり変なところの数値を直して調整してみる。
回転させると中央の1点が止まって見えます。
ここが自分の立つ場所。
ここから見渡せる向こうの5ポイントほどが描画されるフィールドです。

ただ、このプログラム、弱点がありました。
まっとうな3D計算ではないため、遠景を遠くに押しやるとグリッドが変形するのです。
kaihatu6wa2.jpg
結局これはこの当時から現在に至るまで
消えることの無いエンジンの癖として残ります。

そして、とにかく今は手の内にあるもの
この11x11のグリッドでフィールドを表示してみることにしたのでした。

                              (つづく)
                         
                                  
        

ゲームを作ろう-5

category - ゲーム製作記
2014/ 06/ 05
                 
AVGなのに戦闘や町での買い物がある。
FRというゲームはそういったゲームです。

画面にはMAP画面が表示されています。
建物をクリックすれば、建物が拡大表示されます。
そして建物の中へ・・・。

頭の中でこういった移動の流れを考えたときは
たぶん違和感なくそうできるだろうと思っていました。

しかし実際にクリックでの移動をやってみると違和感が。

・・・なんか早くない?(汗)

マップに場所から場所への距離が描かれているのに
そこにいくまでの移動した感じがまるでありません。
そりゃあそうです。
インターネットのブラウザでクリッカブルマップをクリックするのと同じで
情報へすばやいアクセス。それに特化した方法だからです。

当時のZAPPAの仕様で
表現方法はクリッカブルマップか文字選択しか使えません。
なのでそれは仕方の無いことでした。
kaihatu5wa1.jpg
今にして思えばカードワースみたいに
移動までブランクを置いて足音でも鳴らせば解消できたのかもしれません。

しかしキーボードで遊ぶ場合、
今度は建物を左右でセレクトする方式に替わります。
これだと今度はすばやくセレクトできないと変という。

こうなると移動に時間があったほうが良いのか無いほうが良いのか分からなくなります。
ケースバイケースといえばそうなのかもしれません。

・・・町はまだいい。問題はフィールドだ・・・。

このころはまだフィールドをどうするか考えてもいないのでした。



ここで話はモンスターとの戦闘に変わります。
RPGみたいにモンスターとのターン制バトルを実現するにはどうすればいいか?

まず流れをすごく単純にします。

・あらかじめ双方のヒットポイントとヒットポイント上限の数字を用意。
・双方の攻撃力を設定。
・さいころを振って先制攻撃はどちらかを決める。
・順番に殴り合いヒットポイントから攻撃力を引く
・双方のヒットポイントをターン前にチェックしてヒットポイントが1より低ければ勝敗決定。
・各種終了処理>フィールドへ。

大体こんな感じになります。
これに防御力や耐性なんかも付加して計算すると戦闘は複雑になります。
あと、大事なのは数値のやり取りで起こったことを
ビジュアルやメッセージで表現することです。

次はこれをZAPPAで組んでいくことにしました。

クリックしたら攻撃。それが終わったら相手の反撃。
ヒットポイント上限の変化や攻撃力の変化は
戦闘のあとに計算すればいい。

そうして何度かテストを繰り返し、
ZAPPA上で動く戦闘ルーチンの雛形が完成しました。
kaihatu5wa2.jpg

マウスでクリック。
バシン!
こうもりがダメージ。
こうもりの攻撃。
画面が揺れる。
・・・。
そうこうして勝敗が決定。

まぁいいんです。まぁ良いんですが
ぜんっぜん面白くありません。

でもまぁこういったプログラムが最初です。
ここからイロイロつけて進化させればいいんです。

クリックでの移動やセレクト方式での移動、
そして単調ながらも戦闘が出来るようになったFR。
・・・・次はそろそろフィールドに着手するときがやってきました。

                             (つづく)