2D の Besiege っぽいものを作りたい
※ ゲームの仕様を考えるためのメモになります
Besiege は面白い
『Besiege』がすごく面白くて、車を作って動かしたり投石機を作ったり、気球で爆弾を落として遊んでたんですが、うっかり Besiege の攻略動画を見てしまって、そこで作ってるマシーンのレベルの高さにちょっと醒めてしまったんですね。
子供が砂場で楽しく遊んでたのに、大人がやってきて精巧なお城を作り始めた、みたいな感じで。
3D は難しい
どうして私には精巧なマシーンが作れないのか。
ひとつの理由として、Besiege が 3D の機械を扱ってる、というのがあると思います。
視点をぐりぐり動かして、裏側に回って、羽根を反転させて取り付けて…みたいな作業ができない。できなくはないんだけど、面倒。
これが 2D だったらもう少しお手軽にマシン作りを楽しめるんじゃないか、と思ったんですね。
こんなイメージ
- Box2D をベースにする。
- サイドビューにする。Box2D の場合トップビューにすることも可能だけど、重力があった方が面白いと思うので。投石機なんかはサイドビューじゃないと作れないし。
- 結局は Box2D のオブジェクトエディタを作るような感じになるかもしれない。一回これを作ってしまえば今後のゲーム制作にも活かせると思うので、一石二鳥。
- 当面、五角形以上の多角形は作れないようにしようと思う。三角も作れないようにして、四角だけで良いかもしれない。いろいろできてしまうと遊ぶ方も作る方も難易度が上がってしまうので。
- 四角形を採用するとして、フリーサイズで作れるようにした方がいいのか、グリッドに沿った形しか作れないようにした方がいいのか、このあたりは実際に実装してみて考える。
- 「投石機が作れるような仕様にする」というのを最初の目標にする。
- 投石機を作るには以下のようなオブジェクトが必要
- 石(円)
- 土台(長方形)
- 柱(長方形)
- 石を載せる器(長方形の組み合わせ)
- 器と柱をつなぐ回転ジョイント
- 回転ジョイントを勢いよく回すためのモーターまたはゴムのようなもの
- 投石のターゲットになるブロック(ぶつかると壊れる)
- ちゃんと作ればこれはそのまま 2D プラットフォームゲームのステージエディタとしても使えるかもしれない。
- スマホでも遊べるのが理想だけど、快適さを考えたら PC でのマウス操作が推奨されると思う。ただ、そこをスマホで頑張る、という部分に価値があるのかもしれない。
- マリオメーカーとかぶる部分もある。
- 画面には以下のようなウィンドウを置く
- 設置するオブジェクトを選択するためのパレットウィンドウ
- オブジェクトのプロパティを操作するためのウィンドウ
- ジョイントの設定を行うためのウィンドウ(プロパティウィンドウの中に組み込んだ方がいいかもしれない)
- プレイボタンや一時停止ボタンなど、ワールドの時間(ステップ)を操作するためのボタン群
- 重力設定等、ワールドの設定を行うためのワールドプロパティウィンドウ
- オブジェクトを配置するためのメイン画面
- 色やテクスチャなどは当面は実装しない。完成に近づいてきたところで考える。
- 方向性が変わってしまうけど、マリオメーカーにおけるマリオのようなプレイアブルキャラクターを置いた方が楽しいかもしれない。
- 投石機以外にも、ベルトコンベア、自動車、ニュートンのゆりかご、ピンボールマシンなどを作れるような汎用性がほしい。
- 「使えるオブジェクトの数を絞ってミッションをこなすパズルゲーム」みたいな方向性にはしない。サンドボックスやマイクラのクリエイティブモードのような方向性にする。
- まずは Box2D のジョイントを理解しないと実装できない。
- Box2D の各ジョイントを使った簡単なゲームを、ジョイントごとに一本ずつ作るのも良いかも。
- 動力としては、ピストン、モーター、ゴム、重力などが考えられる。
- 爆弾などは当面は用意しない。実装が複雑になるので。
- プロペラや気球などの反重力装置は用意したい。ただこれもいったんは後回しにした方がいいかも。
- 各ジョイントを活かしたゲームの制作に 1 週間 x 5 ジョイント = 5 週間程度を想定。
- その後、エディタの制作に 2 週間程度を想定。
- 「2D 版 Besiege」ではなく「Box2D オブジェクトエディタ」の方向性で考えた方が良さそう。
- 「ジョイントのアンカーポイントをどこにするか」という部分をフリーにしてしまうと難易度が上がりそうな気がする。グリッド制にして置ける場所を限定した方がいいかもしれない。
- 「戦車を作ってゲームパッドで操作し、ブロックを破壊する」みたいなことができるようにしておく。
- JSON 形式でオブジェクト群(≒ステージ)の書き出しと読み込みができるようにしておく。
- Shape を設置して、それを組み合わせてひとつの Body にする、というのが Box2D を素直に表現したものになるけど、この Shape / Body という概念が伝わる気がしない。Shape という概念は隠して、Body1 + Body2 = Body3 とした方が分かりやすい気がする。
- 取っ掛かりを良くするため、メイン画面には以下のオブジェクトを用意しておく。
- 床
- 破壊できるブロック
- タイヤ2個とシャーシだけの簡単な自動車