link 未来から過去へ表示(*)
link 過去から未来へ表示

link もっと前
   2021年 10月 16日 ---> 2021年 10月 7日
link もっと後

2021年 10月 14日

Might and Magic TAS は移動が全て

目次: Might and Magic ファミコン版 - まとめリンク

Might and Magic の TAS 動画を作るときは戦闘を全く行わない(全部逃げる)ので、いかに最速で移動するか?の勝負になります。もはや RPG とは何だったのか……?という感じですが、TAS ならこんなもんでしょう。キー入力の基本ルールとして、

  • キー入力可能区間と、禁止区間がある
  • キー入力後、入力禁止区間が始まる(長さは後述)。
  • キー入力可能区間なら、キーを 1フレーム押してすぐ離せば認識される(複数フレームに渡って押し続ける必要がない)
  • 同じキーをもう一度入力するには、キー入力を認識する区間が始まった後「最低 1フレーム以上空ける」必要がある

最後のルールがわかりにくいと思うんで、画像で紹介します。


1フレーム空けて(6523 フレーム目)同じキー入力をすると認識する


1フレーム空けずに同じキー入力をすると認識しない


1フレーム空けなくても、違うキー入力ならば認識する

一番わかりやすい例を挙げると、開けたマスへ前向きに移動する場合です。↑キーでも B キーでも前に進めますが、ルールを勘案すると↑を連打、もしくは、B を連打(1フレーム空けなければならない)より、↑と B を「交互に連打」した方が速いです。面白いですね。

前向き 1マスの移動につき 1フレームずつ差が出ます。微々たる差ですが、歩くシーンは多いため意外と効きます。

入力禁止期間

キー入力を受け付けた後に、何フレーム入力禁止になるか?をまとめておきます。先ほどの画像で言うと赤くなっているフレームの数です。

Might and Magic はキー入力チェックと画面描画が全く同期していないせいなのか、入力禁止期間が ±1フレーム変化します。しかも頻繁に変化します。通常プレイなら気に留める必要すらないことです。が、TAS は 1フレームしかキーを押さないので、1フレームズレるだけで入力が認識されなくなり、めっちゃウザいです……。

基本的な移動

まずは前後左右などの移動方法を紹介します。左右旋回は前後直進の倍時間が掛かります。特に入口、出口、イベントなどは特定の方向しか発生しない場合が多いので、なるべく旋回せずに済むルートを構築しましょう。

前へ移動(↑ or B キー)
基本的な移動方法です。Might and Magic の歩きは意外に速くて、テレポートする時間で 40マスくらい進めてしまいます。迷路、強制エンカウントなどのない場所なら、歩きが最速の移動方法です。
  • 障害物なし: 8 〜 9フレーム
  • 障害物あり: 3 〜 4フレーム(乱数振り直しが発生しない)
後ろへ移動(↓キー)
前向きと同じ速度ですが、↑と B を交互に押して速く移動する技は後ろ向きだと使えません。加えてドアや通り抜けられる壁を通過できませんので、基本的には使わないでしょう。テレポート後など、旋回せず交差点に行ける場合に使うことがあるくらい。
  • 障害物なし: 8 〜 9フレーム
  • 障害物あり: 3 〜 4フレーム(乱数振り直しが発生する)
左、右旋回(←、→キー)
どちらも同じ速度で、18〜19フレームです。遅いとは言いませんが、速くもないです。戦闘の前後、マップ移動の前後でパーティーの向きが変わらないことをうまく活用し、旋回する回数をなるべく減らしましょう。迷路のマップはどうしようもないですが……。
メッセージ(スキップなし)
スキップしない場合は GO AHEAD! のメッセージウインドウが閉じる、新たなメッセージウインドウが開く、というエフェクトを待つので 88フレームほどかかります。意外と長いです。
  • 入力禁止: 5〜6フレーム
  • 閉じる: 24フレーム(スキップ可能区間)
  • 入力禁止: 24フレーム
  • 開く: 24フレーム(スキップ可能区間)
  • 入力禁止: 10フレームくらい、メッセージの長さに依存
メッセージ(スキップあり)
スキップ成功した場合は GO AHEAD! のメッセージが消え、新たなメッセージが上書きされる、という過程を経ます。GO AHEAD! が閉じようとするときにメッセージスキップできた場合が一番速いです。55フレームくらい(30フレーム高速化)です。
  • 入力禁止: 5〜6フレーム
  • スキップまで: 24フレーム以下(スキップ可能区間)
  • 入力禁止: 25フレームくらい、メッセージの長さに依存
マップ移動
メッセージ 2回+エフェクトなので時間が掛かります。できるだけマップ移動は避けた方が早くなりますが、Lv.1 は移動方法に制約が多く、どうしてもマップ移動が増えます。悩ましいです。

長距離移動その 1: テレポート(ダイヤの鍵)

罠や壁を無視、強制エンカウントマスを無視して目的地に飛べます。歩きでは侵入できない場所にも行けるため、必須の魔法です。

  • メニューオープン: 1 + 32フレーム
  • アイテムメニュー選択: 6〜8フレーム(↓→ A を最速で入力)
  • 使用者リストオープン: 15フレーム
  • 使用者選択: 2フレーム(A が連続で押せない、1フレーム待たないとダメ)
  • 装備リストオープン: 39フレーム
  • カーソル移動: 16フレーム(↓を 6回入力、毎回カーソル描画 1フレーム発生)
  • バックパックリストオープン: 33フレーム
  • アイテム選択: 1フレーム(一番上にあると最速)
  • 魔法エフェクト: 53フレーム
  • 方角選択: 3〜12フレーム(↓↓↓A など、A のみで済む「北向き」が最速)
  • 描画待ち: 11フレーム
  • 距離選択: 1〜16フレーム(↑↑↑ or ↓↓↓...A など、A のみで済む「1ブロック」が最速、なぜか↑キーより、↓キーの方が 1フレームずつ速い)
  • 移動エフェクト: 240フレーム

非常に便利な反面 453〜フレームと長い時間を要するのが欠点です。迷路の構造によっては歩いたほうが速い時もあります。

長距離移動その 2: エンカウント+逃げる

なんと Lv.1 で使える長距離移動の手段では最も速い(230〜フレーム)です。マップごとに固有の地点にしか行けないこと、乱数調整があるので必要フレーム数が不安定なことが欠点ですが、下手なテレポート+歩きよりずっと速いので、使える場所では積極的に使いましょう。

Might and Magic はエンカウント率がかなり低めなので、当てずっぽうだと 1度エンカウントするだけで試行回数が数百回を超え、めっちゃしんどいです。正直やってられませんでした。リバースエンジニアリングしてエンカウント予測できるようなってからというもの、気軽にエンカウント+逃げが使えて、TAS 作成時に非常に役立ちました。技術力の勝利。

  • 出会うまでの調整: 10〜フレーム(カウンタ次第で 100フレームほどもありえる)
  • モンスターが近づいてきた: 130〜フレーム(移動方法により速度が違う、最速は後ろ向き移動で壁に激突)
  • 戦闘メニュー: 16フレーム
  • 逃げる選択: 7〜フレーム(カウンタ次第で失敗する、調整必要だが大抵 10フレームあれば収まる)
  • 画面切り替え: 50フレーム

モンスターとの出会い方は 3種類あります。

  • 戦うかどうか選択
  • 通常(逃げられる)
  • 「おそいかかってきた」メッセージ+強制的に戦う(ほぼ逃げられない)

通常エンカウントが最速です。選択肢が出るタイプは時間が掛かり、「おそいかかってきた」は逃げられません、どちらも論外です。3種を振り分けるルールが解析できていませんが、幸いにも通常戦闘の発生率が一番高いみたいで、さほど試行錯誤は必要ありませんでした。

編集者: すずき(更新: 2021年 10月 15日 00:20)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 10月 12日

nostdlib と nostartfiles

コンパイラの -nostdlib と -nostartfiles の効果についてメモしておきます。確認方法は簡単で、gcc に -v オプションを付けるだけです。

結果が大量に出力されるので、collect2 のオプションのみ抜粋して、さらに今回の話題と関係ない余計なオプションは省きます。

gcc -static の場合
/usr/lib/x86_64-linux-gnu/crt1.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o
AAAAA.o
--start-group
  -lgcc
  -lgcc_eh
  -lc
--end-group
/usr/lib/gcc/x86_64-linux-gnu/9/crtend.o
/usr/lib/x86_64-linux-gnu/crtn.o

初期化を行う crt1, crti と、終了時の処理を行う crtend, crtn が暗黙のうちにリンクされています。また -lgcc や -lc といった C ライブラリ系も暗黙のうちにリンクされます。

gcc -static -nostartfiles の場合
AAAAA.o
--start-group
  -lgcc
  -lgcc_eh
  -lc
--end-group

先ほどの結果と比べると crt 何とかが全部消えましたが、-lgcc などは健在です。C ライブラリ関数は使えますが、crt 何とかが呼んでくれていた main が呼ばれなくなります。代わりに _start という関数を定義せよと言われます。

gcc -static -nostdlib の場合
AAAAA.o

暗黙のうちにリンクされるオブジェクトやライブラリが全てなくなりました。printf のような C ライブラリ関数も使えなくなります。

編集者: すずき(更新: 2021年 10月 12日 02:58)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 10月 11日

freestanding と nostdlib

コンパイラオプションで -ffreestanding -nostdlib を指定したときと、-nostdlib だけを指定したときの挙動の違いをメモしておきます。

テストプログラム
int printf(const char *a, ...);

void _start(void)
{
        printf("\n");
}

おそらくこの例がわかりやすいと思います。-ffreestanding -nostdlib の場合は「freestanding 環境」をしてします。C 言語の規格では hosted と freestanding の 2つが定められていて、hosted は全ての標準ライブラリ関数が使える環境、freestanding は標準 C ライブラリが存在しない環境(※)を意味します。OS のない環境などを想定しています。

このとき printf() は素直に printf() 関数の呼び出しとしてコンパイルされます。したがって、

freestanding 環境、nostdlib でのコンパイル、リンク結果
$ gcc -g -Wall -ffreestanding -nostdlib a.c

/usr/bin/ld: /tmp/ccclc296.o: in function `_start':
a.c:4: undefined reference to `printf'

リンクエラーも「printf がないよ」となります。これは nostdlib を指定しているので、暗黙のうちにリンクされる標準 C ライブラリ(-lc)すらもリンクされないからです。

一方、ffreestanding を指定しない場合は、標準 C ライブラリが存在するものとして最適化が働きます。この例で言えば、printf("\n"); は putchar('\n') に置き換えた方が良いね!という最適化が働きます。したがって、

hosted 環境、nostdlib でのコンパイル、リンク結果
$ gcc -g -Wall -nostdlib a.c

/usr/bin/ld: /tmp/ccZ5E2Qq.o: in function `_start':
a.c:4: undefined reference to `putchar'

リンクエラーは「putchar がないよ」となります。

(※)標準ヘッダのうち float.h, iso646.h, limits.h, stdarg.h, stdbool.h, stddef.h のみ使えます。
正確な意味が知りたければ、C99 draft TC3 (N1256) 4.Conformance の 6. を参照ください。

どちらを使うか

どちらが良いとかではなくて、作りたいシステム次第です。

標準 C ライブラリを使わず、C ライブラリの API を前提とした最適化をされると困るなら、-ffreestanding を指定しなければなりません。コンパイラが抱えている C ライブラリの代わりに、あえて別の標準 C ライブラリ準拠のライブラリを使う(つまり freestanding ではない)ときは、-ffreestanding は使わず -nostdlib だけの方が実行速度などで有利だと思われます。

編集者: すずき(更新: 2021年 10月 12日 02:46)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 10月 10日

Might and Magic - book one TAS タイム短縮の記録

目次: Might and Magic ファミコン版 - まとめリンク

いくつか改善を盛り込んで 19m30s になり、さらにもう一工夫で 1分半以上早くなって 18m43s にできました。YouTube にも載せておきました([TAS] NES Might and Magic Book One (J) 18:43 - YouTube)。

基本的なルートは当初から変えていません。最初のバージョンからの変遷 23m30s → 20m28s → 19m30s → 18m43s を見ると、5分くらい無駄を削ったことになりますね。

最初のバージョンを作ったときは、3〜4分は削れそうだけど 19分切るのは無理かな〜?と思ってましたが、意外と早くなってびっくりです。でも、そろそろ限界を感じるのでここらで打ち止めにします。

改善点の解説

前のバージョン(19m30s 版)では、持ち物が溢れるので 2人パーティーでクリアしましたが、実は 1人旅でも問題ありません。Might and Magic は必須アイテムでも容赦なく捨てられるからです。

例えば、ゴロスの目玉を手に入れるとき、フック付きロープはもちろん、その時点で用済みとなった必須アイテム(金のカギ、ルビーの笛)も捨てて構いません。

改善点の一覧は YouTube の説明と同じになりますが 19m30s 版では、

  • 無駄にエルキューンに寄っていた箇所を削った
  • 2人パーティーにした(オーラ関連のクエストが短くなる)
  • メッセージスキップする個所を増やした

次の 18m43s 版では、

  • 1人パーティーにした
  • コリンブルッフ洞穴 → ソーピガルの町の地下に直接飛ぶようにした(町を経由する必要がない)
  • A4 エリアのテレポートをやめた(歩きの方が早い)
  • 魔法の砦のテレポートを 2回減らした(歩きの方が早い)

これ以上を目指すなら、劇的にルート改善するか、メインクエストを飛ばすようなバグがないと厳しそうです。

失敗の記録

Might and Magic の TAS に挑みたいという奇特な方が居るとはあんまり思えないんですけど、将来の参考のために「やったけどダメだったこと」も残しておきます。

失敗その 1、コリンブルッフ洞穴ではなく、エルキューンの町で GEM を取るルート。

エルキューンは宝物を「ぬすむ」と GEM が取れます。GEM を得るまでは早いんですが、エルキューンからソーピガルに帰る時間が掛かるので、総合では遅いです。Might and Magic は町同士が絶妙に離れた嫌らしい場所にありますね。良くできてるじゃん……。

失敗その 2、コリンブルッフ洞穴 → デューム城のポータルでエリア A1 を無視するルート。

エリア A1 はテレポート使用不可の MAP で、迷路が非常に長くて時間が掛かります。コリンブルッフ洞穴からデューム城に行けば、大きく時間削減できるのでは?と期待しましたが、エリア A1 の巧妙な仕掛けに阻まれて実現不可能でした。

デューム城はざっくりいうと外部と内部に分かれていて、クエストで用事があるのは内部です。コリンブルッフ洞穴のポータルから行くと外部に着きます。外部から内部には「つうか」の魔法があれば行けます。しかしながら Lv.1 のキャラクターで「つうか」の魔法を使う容易な方法はないです(少なくとも私は知らない)。

エリア A1 に一度出て、デューム城内部に入ろうとしてもダメで、エリア A1 の迷路開始点 [15, 7] を踏まないと、デューム城内部へ行く入り口(石垣の隙間 [7, 14])が出現しない仕掛けになっていました。コリンブルッフから来ても、エリア A1 の迷路を歩かないと、デューム城内部には入れません。そうか、ズルは許さんってことね。良くできてるじゃん……。

編集者: すずき(更新: 2021年 10月 14日 01:48)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 10月 9日

Might and Magic のエンカウント処理が半々でわかった

目次: Might and Magic ファミコン版 - まとめリンク

引き続き Might and Magic TAS 動画に挑んでいます。前回書いた通り、町以外の MAP ではエンカウント判定用のカウンタ変化量が予測できません。しかしコントローラ入力後だけは、カウンタの変化量が必ず 0 もしくは 1 になることに気づきました。これを利用し、町以外の MAP のエンカウントが 50%の確率で予想できるようになりました。

残念ながら今の知識ではエンカウント予想を 100%にはできなさそうです。Might and Magic はキー入力チェックと画面更新が全く同期しないので、フレーム単位(=画面更新)しか動くタイミングがない TAS のツールだと、うまく挙動が推定できません。技術的にはモヤっとしますが、動画を作る分にはこれでも十分です。

地上エリア A1 や A2 のように、歩きだと脱出に時間が掛かる MAP で「わざとエンカウント+逃げる」手段を使えるようになったので、格段に早く脱出できるようになりました。

他にも細かい点を更新して 3分くらいタイムを更新し、また YouTube にアップロード([TAS] [TAS] NES Might and Magic Book One (J) 20:28 - YouTube)しました。

謎のメッセージスキップ判定

メッセージスキップも、未だに仕組みは良くわからないものの、

  • A, B ボタンを 1フレームごとに交互に連打
  • 24フレーム(=メッセージが開ききる時間)スキップできないなら、巻き戻す
  • 連打開始タイミングを 1フレームずつ遅れさせてスキップできるか試す

とすると、比較的メッセージスキップが実現しやすいことが判明しました。

改善点の解説

もはや興味のある人はいないと思うので、自分向けのメモです。改善点は下記のとおりです。

  • 地上エリア A1, A2 で「わざとエンカウント+逃げる」を使い高速に脱出
  • GEM を「ようせい」ではなく、コリンブルッフ洞穴で調達
  • テレポート回数を減らした(ダイヤのかぎ 1つで済ませるため)
  • できるだけメッセージスキップした

TAS なら戦闘結果も制御してなんぼだろ!?というご指摘はごもっともですけど、どうも良い乱数が引けず、極端に時間が掛かったり、ドロップアイテムの GEM が足りなくて詰んでしまったり、うまく行かないことが多いです。TAS ですら戦闘が鬼門なの?このゲーム……??

再現性が不安定すぎるので戦闘をルートから外し、GEM はコリンブルッフ洞穴で拾うことにしました。これでだいぶ安定します。動画をアップロードしてから気づきましたが、5人パーティになっていますが、戦闘しないならメンバーは 2人でも良かったかな。うーん、まあいいか。

編集者: すずき(更新: 2021年 10月 13日 01:16)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 10月 8日

初めての 6502 アセンブラに挑戦

目次: Might and Magic ファミコン版 - まとめリンク

引き続き Might and Magic TAS 動画に挑んでいます。クリアタイムを縮めるには「わざとエンカウントして逃げる」「メッセージスキップ」の 2点がほしいですが、メモリダンプを見ていても全く発生条件がわかりません。仕方ないのでファミコンの CPU 6502 のアセンブラを読んでいます。もはやリバースエンジニアリングです。

命令が非常にシンプルで、レジスタ幅は 8bit、レジスタ数は A, X, Y の 3つしかありません。読んでいる分には面白いですが、これでソフト書くことを想像すると辛いです。昔の人はこんなん書いてたのかあ……。ま、それはさておいて、プログラムの解析を行った結果、エンカウントのルールが「半分だけ」分かりました。

基本
  • コントローラの状態を得るごとにカウンタが増減(アドレス 0x523 はデクリメント、0x524 はインクリメントされる)
  • キー入力でもカウンタの初期値が大きく変更される
  • 移動用のキー入力(上下左右 と B)した「次のフレーム」でエンカウント判定
町の場合
256フレームでカウンタが 1周(逆に言えば 256フレーム以内にエンカウントチャンスがないなら、初期値変更の操作を入れる必要あり)

カウントの条件判定関数(アドレス 0xE85D とそのサブ関数)を Lua で書き直しました。BizHawk の Lua も初めて使ったので書き方がわからず、1回 Python で書いてから移植するという無駄な行為をしました……。中心となる条件判定関数はこんな感じです。

カウント変数の値から敵とのエンカウント判定をする関数

function rol(v)
	local ncarry = (bit.band(v, 0x80) ~= 0)
	v = bit.lshift(v, 1)
	v = bit.band(v, 0xff)
	if (carry) then
		v = bit.bor(v, 0x1)
	end
	carry = ncarry
	return v
end

function ror(v)
	local ncarry = (bit.band(v, 1) ~= 0)
	v = bit.rshift(v, 1)
	v = bit.band(v, 0xff)
	if (carry) then
		v = bit.bor(v, 0x80)
	end
	carry = ncarry
	return v
end

function adc(v1, v2)
	v1 = v1 + v2
	if (carry) then
		v1 = v1 + 1
	end
	carry = (v1 > 0xff)
	return bit.band(v1, 0xff)
end

function sbc(v1, v2)
	v1 = v1 - v2
	if (not carry) then
		v1 = v1 - 1
	end
	carry = not (v1 < 0)
	return bit.band(v1, 0xff)
end

function judge(v0, v1, v2)
	local v24e = v0
	v523 = v1
	v524 = v2

	-- Addr: E8A1
	local v248 = 0x73
	local v249 = 0xc

	-- Addr: E8AB
	local v24a = v523
	local v24b = v524
	local v24c = v523
	local v24d = v524

	-- Addr: E8BF...E8D2
	for x = 7, 1, -1 do
		v24c = rol(v24c)
		v248 = ror(v248)
		if (carry) then
			carry = false
			ra = adc(v24a, v24c)
			v24a = ra
		end
	end

	-- Addr: E8D4
	carry = true
	v24a = sbc(ra, v24b)

	-- Addr: E8DD...E8F0
	for x = 4, 1, -1 do
		v24d = rol(v24d)
		v249 = ror(v249)
		if (carry) then
			carry = false
			ra = adc(v24b, v24d)
			v24b = ra
		end
	end

	-- Addr: E8F2
	carry = true
	v24b = sbc(ra, v24a)
	v524 = v24b

	-- Addr: E8FC
	carry = true
	v24a = sbc(v24a, v24b)
	v523 = v24a

	----------------------------------------------

	-- Addr: E871
	v24f = v24a
	ra = 0

	-- Addr: E87B ... E88F
	for x = 8, 1, -1 do
		v24f = rol(v24f)
		ra = rol(ra)
		carry = true
		ra = sbc(ra, v24e)
		if (not carry) then
			ra = adc(ra, v24e)
		end
	end

	-- Addr: E891
	v24e = ra
	v24e = v24e + 1

	return v24e
end

引数の v0 には現在いるマップから決まる一定の値(アドレス 0x6191 の値)を渡し、引数 v1, v2 にはカウンタ 0x523, 0x524 の値を渡します。エンカウント判定の結果が 1 であれば敵とのエンカウントという意味になります。あと judge() を呼ぶ前に、グローバル変数の carry = false にしておかないと結果が狂います。

内部でキャリークリアしとけ、って思われるかもしれませんが carry = true で呼ぶケース(今回は追っかけていませんが)もあるので、勝手にキャリークリアしてはいかんのです……。

話を元に戻すと、カウンタを 255フレーム分、変化させながらこの判定関数を呼ぶと、今から何フレーム後にエンカウントするか予測できるわけです。


町マップのエンカウント予想

例えば、上記の画像だと(43, 157, 179)と出ています。これは 43フレーム目にエンカウント処理が真と判定されるという意味です。ややこしいことに、Might and Magic のエンカウント判定は移動するボタン(前後左右、B ボタンのどれか)を押した「次のフレーム」に行われるため、42フレーム後に移動すると必ずエンカウントします。同様の理屈で 156フレーム後、179フレーム後も移動すると必ずエンカウントします。

エンカウントを理解できたぞ、これならエンカウント楽勝だろ!と意気込んで地上 MAP に行ってみたら、町以外(地上、ダンジョンなど)はカウンタの増減ルールが全く違っていて予測は微塵も機能しませんでした。ええ……そんな……。

予想以上の難解な動き

町だと 1フレームに 1回しかコントローラの状態を見ないため、カウンタも 1しか変化しません。そのため予測が楽でした。ところが町以外の MAP はアイドル時間に全力でコントローラの状態を見るため、70〜80くらいカウントが一気に変わり、さらに嫌なことに毎フレーム変化量が違うので予測ができません。こりゃ無理ですね。

エンカウントと並ぶもう一方の難問「メッセージスキップ」のルールは全く分かりません。基本的にはボタンを押すとメッセージがスキップされるはずなのに、そうじゃない時間がかなりあります。プログラムを解析していると8フレームほど入力を全く見ていない瞬間が何カ所かあって、スキップと関連していそうでしたが、仕組みの解明には至りませんでした。

メッセージスキップを諦めるとかなり時間を食ってしまう(最速スキップで11〜16フレーム、スキップしないと160〜170フレーム)ので、困りましたね。

編集者: すずき(更新: 2021年 10月 13日 22:27)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 10月 7日

Might and Magic - book one のメインクエスト紹介

目次: Might and Magic ファミコン版 - まとめリンク

ファミコン版 Might and Magic - Book One にはたくさんのクエストがありますが、クリアに必要なクエストはさほど多くありません。図示するとこんな感じです。


クエスト、アイテムの依存関係

なお、ファミコン版 Might and Magic Book One の情報は、マイトアンドマジック 1 攻略情報 さんが非常に参考になります。地図がめっちゃ見やすいです。

Might and Magic - book one のメインクエスト紹介(手紙、兄弟、真のアラマー王)

クエストの位置など詳しい情報は攻略情報さんを見ていただくとして、下記では TAS で使った攻略ルートを簡単に説明します。

盗賊への転職
ソーピガルの町の [X: 2, Y: 13] にあるギルドに行って盗賊に転職します。Lv.1 クリアには盗賊が必須です。盗賊以外を選ぶと扉の鍵が解除できなくて進めなくなります。Might and Magic はさ、どうぞどうぞ、と投げ出されたイベントアイテムにすら罠が仕掛けてある鬼畜仕様のため、アイテム拾うだけで盗賊が必須です。
ソーピガルからの脱出
ソーピガル → ソーピガル地下 [14, 0] → ノーザンバリアー洞穴 → 地上エリア C2 の経路で移動し、町の外に出ます。ソーピガルの町の出口から出たいところですが、Lv.1 で出口に行くと衛兵に「未熟者」と言われて追い返され、ソーピガルの町から出してくれません。
アイスプリンセスのクエスト(ダイヤの鍵)
C2 → C1 → B1 → B2 の経路で移動し、[4, 4] にいるアイスプリンセスの問いに答えると、革袋がもらえて、中にダイヤの鍵が入っています。このクエストだけ、なぜか「さがす」必要はありません。ダイヤの鍵はテレポート 20回分の魔法が込められていて、とても便利な移動手段です。C2 → B2 は近道に見えますが、残念ながらアイスプリンセスに辿り着く道がありません。
GEM の入手
B2 → B3 → コリンブルッフ洞穴にいき、ダイヤの鍵を使ったテレポートで宝箱([1, 1] [0, 3] [1, 5] のどれでも OK)の真上に飛びます。アイテムはクリアに不要ですが、一緒に手に入る GEM は後で使います。GEM もクリア時間短縮に欠かせない存在です。
手紙のクエスト(手紙 その 1)
コリンブルッフ洞穴 → ソーピガル地下 [1, 2] へ行きコーラックからクエストを受けます。エルキューンのアガールに手紙を渡してくれと言われます。
手紙のクエスト(手紙 その 2)
ソーピガル地下 → ソーピガル →(転送)→ エルキューンの経路で移動します。転送というのは、ソーピガル [11, 3] にいるおじさんのこと(GEM 1個でどの町でも送ってくれる)です。宿屋の奥 [4, 3] にいるアガールに手紙を渡すと、別の手紙を渡されてダスクのテルゴランに渡してくれと言われます。
オーラのクエスト
エルキューン → B1 → C1 → C2 → ソーピガルの経路で移動します。道すがら別のクエストを進めます。
  • C2 [8, 8]: 占いオババと会いオーラの色を調べます。後のクエストで聞かれる(さんごの鍵)のでメモをお忘れなきよう。
手紙のクエスト
ソーピガル →(転送)→ ダスクの経路で移動します。テルゴランは迷路の先 [8, 0] にいます。この町はテレポート無効なので、地道に歩きましょう。テルゴランに手紙を渡すとアルガリーのゾム、ポートスミスのザムの兄弟に会ってくれと言われます。
兄弟のクエスト
ダスク → ダスクの地下 → ソーピガル →(転送)→ アルガリー → ポートスミスの経路で移動し、兄弟に会います。歩いて会おうとすると大量の強制エンカウントで時間が掛かるので、テレポートで全部飛ばします。ゾムザム兄弟はどちらが先でも良いですが、ポートスミス → アルガリーだとポータルもなく移動も辛いので、アルガリー → ポートスミスがおススメです。
  • アルガリー [1, 1]: ゾム
  • ポートスミス [12, 2]: ザム
市民のパスポート、兄弟のクエスト(ルビーの笛)
ポートスミス → B3 → B2 → B1 → C1 の経路で移動します。C1 [7, 7] でゴールデンバウムという金ぴかの木を見て、ゾムザム兄弟の伝言通りに歩き [15, 15] へ行くと、ルビーの笛が沸いてきます。基本的に「さがす」しないとモノが手に入らないゲームですが、このクエストだけ「さがす」をする必要がありません。変なクエスト……。
  • C1 [5, 7]: 市民のパスポート(城に入るために必要)を取る、馬車を調べるか?に「はい」、その後「さがす」です。
  • C1 [7, 7], [15, 15]: ゴールデンバウムとルビーの笛です。
フック付きロープ
C1 → C2 → ソーピガルの経路で移動し、店で「フック付きロープ」を 10G で買います。ソーピガル以外にも売っていますので、ソーピガル以外でも構いません。デューム城で使うので、その前に買っておいてください。
真のアラマー王のクエスト(金の鍵)
ソーピガル →(転送)→ ポートスミス → B3 → 魔法の砦の経路で移動し、魔法の砦 B2 の [3, 4] にいる犬の像まで行きます。テレポート活用が吉です。犬の像と話した後に「さがす」と金の鍵が拾えます。デューム城で使います。
真のアラマー王のクエスト(貴族のパスポート)
B3 → B2 → A2 の経路で移動し、迷路の奥 [0, 15] にいるドルイドのパルセラの問いに「はい」と答えた後に「さがす」と貴族のパスポートが拾えます。アラマー城で使います。エリア A2 はテレポートが使えないので地道に歩きましょう。
真のアラマー王のクエスト(ゴロスのめだま)
A2 → B2 → B1 → A1 → デューム城の石垣 → デューム城内部の経路で移動します。エリア A1 もテレポートが使えないので、地道に歩きますが、迷路がクッソ長くて辛いです。
  • A1 [7, 14]: デューム城の石垣、内部への入り口です。
  • デューム城 [8, 5] [6, 6] [7, 10]: 壁の外に押し戻される罠(三カ所)、フック付きロープで飛び越えましょう。
  • デューム城 [7, 7]: 金の鍵を持たずに行くと扉に吹き飛ばされます。
  • デューム城 [7, 8]: 真のアラマー王と話した後「さがす」と「ゴロスのめだま」を拾えます。
ニセのアラマー王の正体クエスト
デューム城 → A1 → B1 → C1 → C2 → ソーピガル →(転送)→ ダスク → E1 → E2 → E3 → アラマー城の経路で移動します。アラマー城に入るにはハレーショにパスワードを聞いて、ライオンのレリーフに答える必要がありますが、テレポートで全て無視して入り口 [14, 7] に直行できます。必要なアイテムを所持していればニセのアラマー王に「正体を見破ったな」と言われ、イドの迷宮に飛ばされます。
  • 市民のパスポート: 持たずに入り口に行くと、衛兵に追い返されます。
  • 貴族のパスポート: 持たずに王の部屋の前に行くと、衛兵に追い返されます。
  • ゴロスのめだま: 持たずにニセのアラマー王に会うと、クリア不能クエストを押し付けられます(僧侶の「ちゅうし」でキャンセルするしかない)
イドの迷宮
英語版だと Soul Maze ですが、日本語版は「イドの迷宮」という全然違う名前で、ニセのアラマー王のセリフ「ソウルメイズの地に監禁」が意味不明に見えます。訳を間違ったのかなあ……?本来はマッピングしてパスワードを知ります。「いちをしる」魔法が使えないため、マッピングの難易度は高いです。しかしパスワードは固定なので正解を知っていれば瞬殺です。クリア後はソーピガルに戻されます。

以上が Might and Magic の世界に起こった事件と、その謎に迫るメインクエストを超スピード解決する手順となります。初めてプレイする方がこの手順でクリアすると、たぶん訳が分からないと思います。

お時間がある方は、攻略サイトを見ながらでも構わないので、金の板や町のヒント、囚人たちなどに出会い話すと、しっかり作られた世界感が味わえると思います。

Might and Magic のメインクエスト(オーラ、アストラル世界)

もう一つのメインクエストの流れです。オーラのクエストは、ストーリーにはあまり関係ないです。ラストダンジョンの歯ごたえを増すためのクエストという感じです。アストラル世界は全てのストーリーの終着点で、ああ、そういうことだったんだ!と思うはずです。

オーラのクエスト(さんごの鍵)
ソーピガル → ポートスミス → B3 → B4 → A4 の経路で移動します。[4, 6] にいる老人に、各キャラクターのオーラの色を答えます。オーラはエリア C2 の占いオババに教えてもらった色です。正解すると [4, 2] に飛ばされるので、その場で旋回(移動しちゃダメ)、「さがす」で「さんごの鍵」を拾えます。
オーラのクエスト(金色のオーラ)
A4 → B4 → C4 の経路で移動します。先頭のキャラクターにさんごの鍵を持たせて [7, 2] で南を向くと、ボルカノ神殿に入れます。ボルカノ神殿 [7, 11] の火山の神に「なぞ」を出してもらって、答えると「金色のオーラ」にしてもらえます。ボルカノ神殿の入り口のある島は、テレポートで入れますが、テレポートで出ることはできません。注意。
オーラのクエスト(キーカード)
C4 → B4 → A4 の経路で移動します。[4, 6] にいる老人に会うと、また [4, 2] に飛ばされるので、その場で旋回、「さがす」で「キーカード」を拾えます。
アストラル世界
ゴロスのめだまを使ってアストラル世界に飛びます。壁がほぼすべて透明のバリアで構成されている鬼畜が考えたダンジョンです。迷ってしまったら敵から逃げれば、かならずスタート地点の [7, 0] に戻れるので、敵を倒すばかりでなくうまく使いましょう。
  • 5カ所の封印: [4, 6] [4, 10] [7, 14] [10, 10] [10, 6] にある封印を解除します。解除するたびに敵が出ます。
  • [7, 10]: ドア、キーカードで開きます。
  • [7, 8]: 「やすむ」と次に進みます。イドの迷宮をクリアしている必要があります。
  • [6, 7]: コーラックがいて、世界の果てに行けと言われ、ソーピガルに戻されます。
世界の果て
ソーピガル →(転送)→ エルキューン → B1 の経路で移動します。[4, 15] にある世界の果てに行くとゲームクリアです。最後に Book Two に続く!と出ますが、Book Two はファミコンでは発売されませんでした。悲しい。スーパーファミコン版が発売されているようです。

この他にも諸侯のクエスト、全く関係ないクエストなど、たくさんありますので、ぜひ遊んでみてください。全体的に良くできたゲームシステムだと思うんですけど、難易度の高さ(敵が強すぎる……)に、挫けそうになるのがイケてないポイントではあります。

編集者: すずき(更新: 2021年 10月 15日 11:35)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2021年 10月 16日 ---> 2021年 10月 7日
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 10/15 11:35

カレンダー

<2021>
<<<10>>>
-----12
3456789
10111213141516
17181920212223
24252627282930
31------

最近のコメント 5件

  • link 20年06月19日
    すずき 「お役に立てて何よりです。これ、わかりにく...」
    (更新:09/27 17:05)
  • link 20年06月19日
    ちまき 「初めまして、こんばんは!\n音源は異なり...」
    (更新:09/27 03:16)
  • link 21年03月03日
    すずき 「お役に立てたようで幸いです。」
    (更新:06/17 17:24)
  • link 21年03月03日
    Shige 「とても参考になりました。\nGood!!...」
    (更新:06/17 13:28)
  • link 20年12月19日
    すずき 「なるほど、地元愛 No.1 は福岡なんで...」
    (更新:05/02 00:08)

最近の記事 3件

link もっとみる
  • link 21年10月07日
    すずき 「[Might and Magic - book one のメイ] ...」
    (更新:10/15 11:35)
  • link 21年10月14日
    すずき 「[Might and Magic TAS は移動が全て] 目次: ...」
    (更新:10/15 00:20)
  • link 21年10月04日
    すずき 「[Might and Magic ファミコン版 - まとめリン] ...」
    (更新:10/15 00:20)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報