コグノスケ


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

link もっと前
   2021年 10月 11日 ---> 2021年 10月 2日
link もっと後

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年 11月 8日 23:42)

コメント一覧

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



2021年 10月 9日

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

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

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

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

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

他にも細かい点を更新して 3分くらいタイムを更新し、20分28秒になりました。

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

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

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

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

改善点の解説

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

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

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

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

編集者: すずき(更新: 2021年 11月 8日 23:41)

コメント一覧

  • コメントはありません。
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フレーム後、178フレーム後も移動すると必ずエンカウントします。

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

予想以上の難解な動き

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

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

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

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

コメント一覧

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



2021年 10月 7日

MiMight and Magic Book One のメインクエスト紹介

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

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


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

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

メインクエスト紹介(手紙、兄弟、真のアラマー王)

クエストの位置など詳しい情報は攻略情報さんを見ていただくとして、下記では 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 の世界に起こった事件と、その謎に迫るメインクエストを超スピード解決する手順となります。初めてプレイする方がこの手順でクリアすると、たぶん訳が分からないと思います。

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

メインクエスト紹介(オーラ、アストラル世界)

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

オーラのクエスト(さんごの鍵)
ソーピガル → ポートスミス → 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年 11月 8日 23:41)

コメント一覧

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



2021年 10月 6日

Might and Magic Book One で初めての TAS に挑戦

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

子ども時代のトラウマ難易度ゲーム Might and Magic Book One に、大人になってから挑みましたが、変わらず撃沈しました。やっぱり難しいです。でもエミュレータなら、Lv.1 で最速クリアする動画を作れるんです。いわゆる TAS(Tool Assisted Speed-run)動画です。

TAS するにあたっては、定番の BizHawk というエミュレータを使います。ROM をロードして Tool - TAStudio を選ぶと、フレーム単位でキー入力を選べる画面が出現します。


BizHawk TAStudio

操作に自信があるなら Recording mode を使って自分の操作を記録し、あとでファインチューンすると良いでしょう。私は操作にあまり自信がなかったので、1フレームずつチマチマとマウスで入力しました。

TAS 第一弾

とりあえずエンディングまで辿り着いたので、YouTube にもアップロード([TAS] NES Might and Magic Book One (J) 23:30 - YouTube)しました。YouTube のアップロード側機能は初めて使いましたが、とても使いやすいですね。

TAS としてのクオリティはあまり良くないです。攻略ルートがかなり適当で、これより早くクリアできる動画は簡単に作れると思います。容易に改善できそうなところは、

  • メッセージスキップしてない(スキップ条件が良くわからなかった)
  • 「ようせい」との戦闘に 2ターン掛けてる
  • 「ガラドリエルのめぐみ」取りに行くのが無駄(Gem は「ようせい」が落とした 7つで足りてた)
  • ダスクの町の店で物を売る必要がない(金は足りてる)
  • 地上エリア A2(火山地帯)からの脱出が遅い
  • 「さんごのかぎ」の受け渡しが無駄(先頭の人が持てるルートに変えた方が良い)
  • 5人もパーティーに入れている

5人パーティーだとオーラのクエストが長いし、戦闘で行動できない人が出やすく無駄が多いので避けたいですが、4人パーティーだと「ようせい x 3」が出ないので、妥協しました。

あと Might and Magic の大きな特徴として、敵から逃げると MAP の特定の位置に必ず戻される仕様があります。わざとエンカウントし逃げれば、歩くよりも早く移動ができる可能性があります。TAS ではぜひとも活用すべき事項ですが、エンカウントのルールがわからず、エンカウント確率もかなり低いため、総当たりだと全然エンカウントしません。これは厳しい。ギブアップ。

とまあ、色々諦めたしょぼい TAS 動画を作っただけで非常に疲れました……。世の中のハイレベル TAS 動画の作者さんは凄いですわ〜。

補足

Might and Magic ファミコン版は日本語版と英語版があります。このうち英語版の TAS は既に存在していて、クリアタイムがたったの 8分[TAS] NES Might and Magic by Dammit in 08:07.72 - YouTube)です!超早ですね。

英語版はアイテムを別のアイテムに化けさせるバグがあって、そのバグを突くとゴミから終盤のクエストでもらえるはずのアイテムを錬成でき、ほぼ全てのクエストを無視してラストダンジョンに挑めます。

日本語版ではバグが修正されているほか、クエストの仕様も違うため、少なくとも同じ攻略法ではクリアできません。

編集者: すずき(更新: 2021年 11月 8日 23:40)

コメント一覧

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



2021年 10月 5日

久しぶりにファミコンの Might and Magic Book One をやってみたい

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

Nintendo Switch Online に加入すると、ファミコンやスーパーファミコンのソフトでも遊べるので、子供の時に挫折したゲーム(最近だとファミコンウォーズ、スーパーピクロス)をやっています。グラフィクスは近年のゲームと比べるまでもなくショボいですけど、今も名作は名作です。面白いですね。

子どもの時に挫折したゲームはいくつもありますが、ナンバーワンが Might and Magic Book One : the Secret of the Inner Sanctum です。この時代に流行ってた Wizardry みたいな 3D 風の迷路を歩いていく海外製 RPG です。難易度が異常に高くて有名で、小学生の私は Lv.2 すら拝むことなく諦めました。

この手の Switch には収録されていないソフトも遊びたいなあ?と思って、ニューファミコンを物色していたのですが、結構でかくて邪魔そうだし、中古の割に高いです。今でも人気なのか……侮ってましたね。

ですが、我々には PC とエミュレータがあるじゃないですか。幸いなことに、ファミコンソフトそのものはそんなに高くないので、ROM ダンパーで ROM を吸い出して、PC で遊ぶことにしました。


レトロダンパー

私はレトロダンパー(メーカーのサイト)を使っています。クライアントを起動して、認識ボタンを押し、吸い出すだけで OK なので便利です。

Might and Magic Book One 購入

早速、中古のカセットを購入しました。外観は割とズタボロというか、年季入った姿です。ま、動けば良いのさ。


ファミコン版 Might and Magic Book One のカセット

GAKKEN のロゴの通り、なぜか日本語ローカライズは学習研究社(学研)が行っています。今見ると不思議です。教科書作ってる学研が、なぜゲームの移植を……。


レトロダンパーにカセットを挿した状態

レトロダンパーさんで吸い出すときはこんな感じになります。吸い出した ROM をエミュレータに放り込んでみたところ、正常に動作しているようです。良きかな良きかな。

ゲームの感想

まずは普通に遊んでみました。今なら意外とクリアできるのでは?と思ったのも束の間、あっ、無理でした。調子乗ってすみませんでした。在りし日の絶望が蘇りました。

  • 攻撃がほぼ当たらない
  • 敵から逃げられない
  • Lv2 が果てしなく遠い
  • 罠解除役(盗賊)が宝箱の罠に掛かる
  • パーティーがすぐ全滅、タイトルに戻される

最初から難しすぎます。基本的には 1バトルごとに休憩+セーブって感じです。攻撃が当たらないのも辛く、一方的にボコられて死んでしまいます。死んだら復活させるお金がないのでリセットです。

さらに Wikipedia を見てびっくりしたのは、次の一文です。
「ファミコン版は(中略)やや簡単に調整された部分が多い」
えっ?これで?嘘だろ……??オリジナル版はどれだけ鬼畜難易度なの?

息抜きに YouTube で攻略動画を見ていると、ラストダンジョン(イドの迷宮、アストラル世界)の音楽がとてもカッコ良いですね。何とか辿り着きたいですが、最初の町(ソーピガルの町)から脱出できていない身からすると、果てしなく遠いです。

編集者: すずき(更新: 2021年 11月 8日 23:39)

コメント一覧

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



2021年 10月 4日

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

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

日記が増えすぎて、一覧が欲しくなってきたので作りました。

リンク集

Might and Magic の攻略、解析の参考になるサイトです。

編集者: すずき(更新: 2021年 11月 24日 01:18)

コメント一覧

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



link もっと前
   2021年 10月 11日 ---> 2021年 10月 2日
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

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

最終更新: 11/26 11:42

カレンダー

<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 19年07月21日
    すずき 「[RISC-V の命令] 目次: RISC-V - まとめリンク最...」
    (更新:11/26 11:42)
  • link 21年06月18日
    すずき 「[RISC-V まとめリンク] 目次: RISC-V - まとめリ...」
    (更新:11/24 15:26)
  • link 21年10月04日
    すずき 「[Might and Magic ファミコン版 - まとめリン] ...」
    (更新:11/24 01:18)

こんてんつ

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 サイトの情報