■ [ゲーム][デザイン]スーパーマリオ・コンプレックス
大昔に自分も同じように考えて、習作としてスーパーマリオの動きの完全再現を目指してGBAの実機で動くプログラムを組んでいたことがある。Javaで書かれたブラウザ上で実行できるエミュレータでそのときに作ったものが動くので、サーバに上げてみた。
- スーパーマリオの挙動再現の習作(要Javaランタイム)
- http://www.nao.mydns.jp/GBA/SpriteTest.html (注:リンク先消失)
なにかとマズそうなのでキャラは適当なものに差し替えてあるが、一応オリジナルの挙動をコマ送りで解析しながらドット単位でほぼ同じように動くように作ったつもり。(一部完全でない部分も残ってるけど)
自作のステージでスーパーマリオを遊ぶのが子供の頃からの夢だったのだけど、ジャンプの挙動を作ったところまでで満足して、中途半端なまま放置してしまっていた。
スーパーマリオの内部処理はジャンプの挙動に限らず、加速・急制動時の挙動や、ジャンプ中に頭の一部をブロックに引っ掛けたときの補正・キノコを取って大きくなったときに頭がブロックにめり込んでいるときの処理なども面白い。
また、Bボタンで発射するファイアーボールのバウンドの高さが、ノコノコにはほぼ確実に当たるのにクリボーは背の高さの都合でタイミング次第で飛び越えてしまってすり抜けることがあるように調整されていたりするのも興味深い。これだけで、平地をファイアーボールを撃ちながら走り抜ける時にも単調な展開になりにくい。
最近のゲームから見れば少ない要素の組み合わせだけで作られているにもかかわらず、難度をさほど上げないようにしながらも予測を超える多彩な展開が起こりやすいようにいろいろと計算されているのが素晴らしい。
個人的には、普通に遊んでも十分面白いのだけど、何より「最高速でステージを駆け抜けるときに最も気持ちよく感じられるように」デザインされている点が、このゲームが奥が深くて飽きが来にくい一番の理由だと思っている。
■ 『スーパーマリオブラザーズ』のジャンプについてのメモ
上記のデモのソース内の計算式を見てみると、
- ジャンプの初速は-4[dot/frm]
- ジャンプ開始の瞬間に横方向の移動速度の絶対値が約2[dot/frm]を超えているときには、さらに約-0.5[dot/frm]の上昇加速度が足される
- 重力加速度は約0.3[dot/frm]
- 上昇中のみ、Aボタンが押され続けていると約-0.2[dot/frm]の加速度が得られる
- 落下速度は5[dot/frm]を超えると、それ以上は加速しない。
と、おおむねこんな感じのパラメータで動いている。元が固定小数なので値は概算。あの気持ちよさを出すためにもっと特殊な処理が行われているのかと思っていたのだけど、思っていたよりは普通の計算式で再現できた。マリオ以降のゲームで育ってきているので、マリオを基準に「普通」と感じてしまっているだけかもしれないけど。とはいえ、仕組みは単純ながらもパラメータ調整は絶妙。
あと、何も考えず再現しようとすると気付きにくそうな要素として「Bダッシュ最高速からはジャンプ頂点が高くなる」ようになっていたり、「ジャンプ時の後方加速は前方加速より速い」(ブロックに乗りやすくするため?)調整になっていたりなど、地味に細かい部分で特殊処理がはいっているあたりも、遊びやすさと奥深さに貢献してるのではないかと思う。
それにしても、「ボタンを押している時間によって後付でジャンプの高さが変わる」のと、「空中でも加速度を考慮した左右移動制御が可能」の2点を発明したのは、このゲームが最初なんだろうか?あと原型になりそうなものといえば『バルーンファイト』くらいしか思いつかない。他に何かあるかな?