迷路を作ってもただ上から眺めて左上から右下まで目で追ってなんとなくゴールした気分になっても空しいだけなので…
迷路の中を歩き回ってゴールを目指す感じになる様に、迷路をレトロゲームエンジンpyxelで擬似3D化してみました。
一点透視法を使って壁等の大きさを計算して扱いやすい数値に丸めています。
pyxelの機能でgifを作ってみました。
操作方法:
前進:↑ボタン、左旋回:←ボタン、右旋回:→ボタン、振り返り:↓ボタン
壁色変更:スペースキー、迷路リセット:Qキー
※マウスでの操作も可能です。
前進、振り返り:マウスホイール、左旋回:左クリック、右旋回:右クリック
迷路リセット:左右同時クリック(操作が少しシビアですが…)
※ゲームコントローラーでの操作も可能です。
※PS4のゲームパッドでテストしました
前進:↑、振り返り:↓、左旋回:L1ボタン、右旋回:R1ボタン、
迷路リセット:OPTIONSボタン(STARTボタン?)
ソースはGoogleドキュメントに載せてあります。
迷路自動生成クラスのソースはこちらです。
※「擬似3D」というのは、
・Wizardryシリーズ
・ダンジョンマスター
・真・女神転生シリーズ
等々、のダンジョンをイメージしていただくと理解しやすいかと思います。
今回の擬似3Dを作成するにあたり、上記3シリーズを参考にしました。
擬似ではない本物の3Dを作るには今の自分には技術的に無理そうなので、3Dっぽく見える2Dの画像をそれっぽい位置に表示して3Dを表現しています。
ここでは主に実際に描画される各パーツや一点透視法による3D表現について解説します。
画面
ちなみに当初案はこちらになります。
最初はこちらの比率にしようと思ったんですが、通路上に何かを表示する際に「小さすぎる」ので現行サイズにしました。
リソース(256*256):イメージバンク0
一段目(左から):正面壁遠距離、正面壁中距離、正面壁近距離、謎のゴールポール
二段目:横壁中距離左右、横壁近距離左右、横壁側左右、横壁中距離左右(一列外側)
三段目:コンパス枠、コンパス向き(上、右、下、左)
四段目:移動操作表示(左折、右折、前進、振り返り)
遠近感を出すために遠くのものは小さく、近くのものは大きく見える様にサイズを変えています。
正面に壁がある直線の通路を前進した時の画面表示になります。
一歩進む度(画像の左上→右上→左下→右下の順)に正面の壁が大きく描かれます。
謎のゴールポールはただゴールに座標を合わせるだけだと達成感が薄いので、目標物として立ててみました。
謎のゴールポールも近くなると大きく描かれます。但し、ゴールの位置に立つと見えなくなります。
画面右上に表示されているコンパスは自分が向いている方向を示します。
左から、上向き、右向き、下向き、左向きとなります。
コンパスの外円の中は市松状に透過色を設定して壁と重なった時に少し透過する様にしています。
画面下の移動操作表示は、動いたことが把握しやすい様に移動操作時に0.1秒だけ表示されます。
移動操作後に表示される壁のパターンが全く同じ場合に座標表示またはコンパス以外に違いがなくなるので追加しました。
※ラグで実際は0.1秒より少し長い時間表示されている場合もありますが設定では0.1秒を超えたら表示を消しています。
※FC版Wizardryでは、移動操作時に一瞬だけ暗転することで移動操作を表現している様です。
横壁中距離左右と横壁中距離左右(一列外側)の違いですが、
一点透視法の場合、奥の一点から放射状に引いた線上に物体を描くので外側の方が角度的に開いて見えます。
正面近くの横壁(画像左)よりも正面から一列外側にある横壁(画像右)の方が開いて見える様に描いています。
見栄えの確認用に、壁色を変更出来る様にしてあります。
リソース(48*24):イメージバンク1
壁の位置に先に色を描画して、その上から壁を透過指定で描画して色が表示される様に作ってあります。
階層違いや特殊な場所を表現するのに使えそうな気がします。
左上の座標は上段が自分の現在の座標(x,y)、下段はゴールの座標(x,y)になります。
自分がスタート座標にいる場合は"START!"、ゴール座標にいる場合は"GOAL!"と表示されます。
(1)は以上です。(2)に続きます。