縦スクロールシューティング


実際のゲーム作製とその記録

MSX の「魔城伝説」のプレイ動画を見てて面白そうだったので、これを資料として MMF2 でゲームを作ってみることにしました。ブログ上では仮素材で土台と骨組み作りに専念してサクサク作ります。しかし普通に MMF2 を使って作った場合エクステンションの選択などいろんなアプローチが生まれてしまうので、そこで考えた結果一旦 TGF2 (あるいはそれ以下)程度の機能で作るという制限を課すことにしました。しかしビルドの種類は TGF2 や MMF2 通常版では選択不可能なスタンドアロン Java モバイルを選択。これだともともとエクステンションの選択肢がほとんど無く、その他製作上の制限が一番きついけれども豊富なビルド種類に後々対応も可能(なはず)です。MMF2 を持ってない人でも Java ビルドを利用すれば途中経過をブラウザでも動作確認してもらえるのがブログ的にはメリットでした。

魔城伝説とは?

1986 年にコナミ(現・コナミデジタルエンタテインメント)から発売された MSX という 8 ビット PC 用の縦スクロールシューティングゲームです。魔城伝説は当時多くのユーザーに好評を博し、その後シリーズとして MSX というプラットフォームで続編が二つ作られました。この続編は別プラットフォームへの移植もされ日本以外でも人気を博したそうです。しかしシリーズの元祖となった魔城伝説は現在でこそいくつかのプラットフォームでオリジナルのリバイバル版が発売されていますが、もともと MSX 以外の他プラットフォームには長い間移植された形跡がありませんでした。タイトル名は日本だと「魔城伝説」ですが海外では「 KnightMare 」となっています。レトロゲームのデータベースを漁っていたら評判が良い割りに知名度が無い、処理能力が低い 8 ビット PC 用に発売されたものなのでシンプルな操作とルール(グラフィックス)など現代なら個人でも作りやすいはずです。

参考外部資料

どんな機能が必要になりそうか

このゲームをプレイしたことが無いので動画やら Wikipedia など資料見ながら適当に再現するわけですが、どんな機能を実現したら「魔城伝説」になるのか考えた結果・・・

  • 縦スクロール
  • 何種類かのアイテム
  • 何種類かのショット
  • シューティングの敵配置
  • 配置した敵の行動パターン
  • 8 方向移動と障害物と衝突判定
  • スコア加算とハイスコアの保存

ざっと羅列するとこんな感じ
これだけの機能を付ければ MMF2 で「魔城伝説もどき」が再現できるはずです。ちなみに記事はディレイで書かれているのでゲーム自体はすでに作り始めています。どんな風になるかまだ分かりませんがよろしくお付き合いください。

動作見本:Web アプレット版今回始めてビルドしたんだけど Java 出力はかなり問題が多く、ちゃんと動くように作るには思った以上に実際のビルド経験で得たバッドノウハウが要るようです。現在ゲームに必要な一通りの機能実装が完了したので Java ビルド特有の問題はだいぶ把握できてきました。アプレット版は基本的に配列等を使った設定ファイルを内包できないかもしれないのでこの点は注意した方が良いかもしれません。StringPaser2 は Java でまったく機能しなかったので早々に諦めました。背景とのコリジョンも動作がおかしいので全てスプライトを使って検出しています。その他、PC 用ビルドでは見たことのない描画のゴミがでるので、スプライトを破壊する場合その場ですぐ破壊せずに画面外に一旦追い出してからそれから破壊して、描画のゴミが出ないように少し工夫してあります。

問題点1:設定ファイルの内包と読み込みに失敗してる > やや諦め気味 > ini は試してない

問題点2:スライムが設定値を無視して配置される(想定外) String Parser2 が原因と判明>まったく機能してないから他の方法を採用

問題点3:背景を障害物として設置してあるのにコリジョンを無視する(想定外)>クイック背景を使わないで全部アクティブにした(苦肉)

問題点 4:Java ビルドだけで異常現象。フレーム指定してフレーム間を移動する際、フレーム 1 とフレーム 2 には自由に行き来できるが、フレーム3がダメでフリーズしてる。仕様なのかバグなのか分からない。そろそろ Java しんどい。 PC 用の実行ファイルでは問題ない。Javaだけの現象と確認済。Randomizer Object もフレーム 3 で機能してなかったし MMF2 標準のランダムも機能しなかったからフレーム 3 がなにかトラブルで壊れてる可能性もあるけど、Javaはフレーム数に制限があるのかもしれないしそもそもこれだとこれ以上ステージ増やせないしそろそろ SWF エクスポーターを本家で買いたい気分。 Java だけが問題なので本家で診てもらおうかと思ったが、日本語版で作っちゃったので英語版で読めるように作り直さないとならない?そんなん無理ス。ちなみに Windows でも Linux でも同じくフリーズしちゃうので Java 困った。とりあえず問題があるコード部分は分かったのでそこを除外して Java ビルドしてみた。PC 用ビルドとはそのあたりの挙動が違っています。

PC 用実行ファイル版は普通に動きます > PC 用ビルド済み

Java 用にエンジンを作り直した Java アプリ版 > 現在調整中

Mac 用 Java ビルド > Mac 持ってないので動くか分かりませんが Ubuntu では動くので Mac でも多分動きます。

SWF 用ビルド>多少問題がある程度だったので Java 用から修正して簡単にビルド(フレームプロパティのランタイム設定だけはすぐにはどうにもならかった)

デバッグ用キーボードショートカット

・1 > 移動スピード遅い
・2 > 移動スピード普通
・3 > 移動スピード速い
・4 > ノーマルショット:普通
・5 > ノーマルショット:ダブル
・6 > ノーマルショット:3方向
・7 > ダメージ強化(貫通)ショット:

未実装部分:個別の武器とパワーアップのみ未実装。ブログ用はこの一部未実装はそのままにして公開とする予定。

その他現在の仕様:実装済みの武器は 2 種類のみ、武器選択用のボールみたいなのが前方から来るのでそれ撃つと武器の選択ができるのですが、現在 二種類しかないので未実装のその他武器(画像が出ない)を選択すると、発射できる武器が何も無くなっちゃうです。パワーアップも「武器パワーアップ( 3 段階)」「スピードアップ( 3 段階)」「得点加算」これいがいは未実装です「無敵(透明化?)」を追加。あと未実装は「盾」と「タイムストップ」くらいだと思うけど、この二つはもう未実装で公開。

あいかわらず設定ファイルを内包する手段が見つからないので、以前作った手法から別手段に置き換えるのが面倒でまだ手を付けていません★直しました、やり方は少々めんどくさいけど少ない数なら管理しやすいです。結局「配列」を利用する方法も没に。Java モバイルビルドは自分で言い出したわけだが制限がキツい。制限で Atan2 も使えないから Advanced Direction 必須とか苦行?です。ずっと読み込みに失敗していたアイテムの設定値が今は有効になっているので、破壊可能なオブジェクトを破壊すると設定値に沿ったアイテム(あるいは障害物)に変わります。これも実装済みなのは「障害物」「敵全滅」「得点」の 3 つだけです。

使用する予定のオブジェクト

  • アクティブ
  • 背景
  • クィック背景
  • カウンター
  • 文字列
  • 配列
  • Advanced Direction
  • Randomizer Object( SWF ビルドと互換性を取るために削除:Javaではちゃんと機能してます)
  • String Paser 2
  • Ini(未使用)


カテゴリ:KnightMare
>>次のページへ