目次: Might and Magic ファミコン版 - まとめリンク
Might and Magic の TAS はもうやらんと言いましたが、少しだけやってます。
会社に向かって歩いているときに「もしかしてあの部分は飛ばせるんじゃね?」と思いついたアイデアを試したところ、合計で 298フレーム(4.8秒くらい)速い、14分 06秒になりました。ニコニコ動画にも載せておきました(【TAS】FC版 Might and Magic Book One 14分06秒 マップ付き)。
更新箇所は下記のとおりです。
ダスクの交差点にいる幽霊を無視すると、敵と強制エンカウントすると思いこんでいたのですが、実はそんなことはありませんでした。直進ならエンカウントしません(旋回するとエンカウントします)。確認は大事ですね。
正直に言って 2番目と 3番目以外は期待していませんでしたが、どれも 0.8〜1.5秒程度の短縮と、良い方向に予想を裏切ってくれました。特にエルキューンでアガールをすっ飛ばすのは予想外の効き目でした。
もう短縮できそうなところは思いつきません。このルートで 14分切るのは無理かなあ。
目次: Might and Magic ファミコン版 - まとめリンク
Might and Magic のメッセージスキップについて動作を軽く調べたところ、変な実装になっており超厳しいタイミングを要求されることがわかりました。
メッセージ表示をしているコードは 0x9AAE〜0x9B09 です(たぶん。表示処理は詳しく見てない)。この処理を実行しているときは ROM 0x16000 が 0x8000 にマップされているので、ROM のアドレスでいうと 0x16000 + 0x1AAE = 0x17AAE〜 に該当します。このコードの中でスキップ判定をしているのは 0x9AF7 です。
9AAE : 20 B4 E3 JSR $E3B4 ;
9AB1 : A9 00 LDA #$00 ;
9AB3 : 8D 73 03 STA $0373 ;
9AB6 : A2 00 LDX #$00 ;
9AB8 : 8A TXA ;
9AB9 : 48 PHA ;
9ABA : 20 49 9B JSR $9B49 ;
9ABD : 20 48 9A JSR $9A48 ;
9AC0 : 68 PLA ;
9AC1 : AA TAX ;
9AC2 : BD 20 9B LDA $9B20,X ;
9AC5 : 85 7B STA $7B ;
9AC7 : 8A TXA ;
9AC8 : 48 PHA ;
9AC9 : 0A ASL A ;
9ACA : AA TAX ;
9ACB : BD 0A 9B LDA $9B0A,X ;
9ACE : 85 00 STA $00 ;
9AD0 : BD 0B 9B LDA $9B0B,X ;
9AD3 : 85 01 STA $01 ;
9AD5 : A5 00 LDA $00 ;
9AD7 : 48 PHA ;
9AD8 : A5 01 LDA $01 ;
9ADA : 48 PHA ;
9ADB : 20 5F 9A JSR $9A5F ;
9ADE : 68 PLA ;
9ADF : 85 01 STA $01 ;
9AE1 : 68 PLA ;
9AE2 : 85 00 STA $00 ;
9AE4 : 20 7F 9A JSR $9A7F ;
9AE7 : 20 48 9A JSR $9A48 ;
9AEA : 68 PLA ;
9AEB : 48 PHA ;
9AEC : 85 7B STA $7B ;
9AEE : A9 0B LDA #$0B ;
9AF0 : 38 SEC ;
9AF1 : E5 7B SBC $7B ;
9AF3 : AA TAX ;
9AF4 : 20 C2 9C JSR $9CC2 ; コントローラの状態確認
9AF7 : AD 73 03 LDA $0373 ; メッセージスキップの条件判定
9AFA : C9 01 CMP #$01 ;
9AFC : D0 04 BNE $9B02 ;
9AFE : 68 PLA ; メッセージスキップ発動
9AFF : 4C 09 9B JMP $9B09 ;
9B02 : 68 PLA ; メッセージスキップ発動せず
9B03 : AA TAX ;
9B04 : E8 INX ;
9B05 : E0 0B CPX #$0B ;
9B07 : D0 AF BNE $9AB8 ;
9B09 : 60 RTS ;
最後の方で関数 0x9CC2 → 0x9D14 → 0x9B2B と call し、変数 0x0373(コントローラ状態変更フラグ)が 0 以外ならメッセージスキップします。後ろから見ていきましょうか。
9B2B : A9 00 LDA #$00 ;
9B2D : 8D 73 03 STA $0373 ;
9B30 : 20 C5 E7 JSR $E7C5 ; コントローラの状態チェック関数、結果は $0200 に格納される
9B33 : AD 00 02 LDA $0200 ;
9B36 : CD 01 02 CMP $0201 ;
9B39 : F0 0D BEQ $9B48 ; 前回と状態が変わっているか?
9B3B : 8D 01 02 STA $0201 ; 変わっているなら、変数 $0201 に状態を保存
9B3E : AD 00 02 LDA $0200 ;
9B41 : F0 05 BEQ $9B48 ; 状態が 0 以外(=何か 1つでもキーが押されている)か?
9B43 : A9 01 LDA #$01 ; 押されているなら、変数 $0373 に 1 を設定
9B45 : 8D 73 03 STA $0373 ;
9B48 : 60 RTS ;
関数 0x9B2B は現在のコントローラの状態と、保存していた前回のコントローラの状態を比較し、変化していたら変数 0x0373 に非 0 の値をセットする関数です。推測するに、プレイヤーがボタンを押したら変数 0x0373 がセットされ、メッセージスキップが発動する……はずだったのでしょう。
ところが関数 0x9D14 の実装が完全におかしくて、画面描画が 1回終わる(※)まで、関数 0x9B2B を「何度もビジーループで呼ぶ」のです。
9D14 : 8D 64 02 STA $0264 ;
9D17 : A9 C0 LDA #$C0 ;
9D19 : 8D 51 61 STA $6151 ;
9D1C : 20 2B 9B JSR $9B2B ; ↓このループが全力で回りまくる
9D1F : AD 51 61 LDA $6151 ;
9D22 : D0 F8 BNE $9D1C ; ↑
9D24 : 60 RTS ;
短期間に関数 0x9B2B を繰り返し呼ぶとどうなるかというとですね。プレイヤーがコントローラのキーを押して変数 0x0373 がセットされても、次の呼び出しですぐに「前の状態と変化ナシ!」と判定し、変数 0x0373 がクリアされてしまい、キーは押されていなかった扱いになるわけです。ええー……なにこの実装。
(※)VBlank NMI を契機に画面描画され、変数 0x6151 に 0 がセットされます。
最速でメッセージスキップを発動させようとすると、プレイヤーは下記の条件を満たす刹那の間にキーを押す必要があります。
トレースログで測ったところ入力の猶予は 1,055 クロック、ファミコンの 6502 は 1.79MHz 駆動らしいので、わずか 0.589ms です。短すぎだよ!!
TAS の経験から 1フレーム(16.667ms)未満だろうとは思いましたけども、まさかのサブミリ秒でした……。道理で、フレーム単位入力の TAS では最速のメッセージスキップができないわけです。人間ならなおさら無理ですね。このタイミングを毎回狙って押せるやつは 100%人間辞めてます。
以上は最速のタイミングを狙って発動させようとした場合の話であり、メッセージスキップを拝むこと自体は割と簡単です。なぜならキーを「押す」タイミングは非常に厳しいものの、他の条件は厳しくないからです。救いの手は 2つ、
ですから適当にキーをガチャガチャ連打していれば、たまに条件に該当してメッセージスキップが発動します。
以前予約していた、呼び込み君ミニが届きました。発売は青島(青島文化教材社、公式サイトへのリンク)です。模型をやっている人なら馴染みの名前かと思います。
これは何かというと、スーパーで良く聞く「ポポーポ、ポポポ……」という曲を流してる「呼び込み君」の模型です。「呼び込み君」は群馬電機(公式サイトへのリンク)の販売している、音声 POP と呼ばれる広告用の機械の名前です。
パッケージはこんな感じでした。
本物の呼び込み君は 20cm くらいあって割とデカいですが「呼び込み君ミニ」は 5cm くらいでかなりコンパクトです。本物同様、付属品で顔の部分を POP に交換できるようになっています。さすがに光りはしませんが……。
音もちゃんと鳴ります。早速鳴らしてみると、思っていたより 3倍くらい音がでかくて驚きました。夜中に鳴らすと近所迷惑かも?というレベルです……。
目次: Might and Magic ファミコン版 - まとめリンク
Might and Magic の TAS をちょっとだけ更新しました。記録更新に挑んだと言うより実験に近いかも。一応 2秒くらい短くなっています。ニコニコ動画にも載せておきました(【TAS】FC版 Might and Magic Book One 14分04秒 マップ付き)。
更新内容は端的に言うと「右に回れ」です。このゲームは、なぜか「左に回る」より「右に回る」方が 1フレームくらい速いことが多いです。TAS に取り込んでみたところ、確かに速くなりました。ただ、残念ながら速くなる理由は良くわかっていません。普通、左だろうが右だろうが、処理変えませんよね?どういう実装したらこうなるのかね?
Might and Magic に限りませんが、ファミコンのゲームは描画とゲーム処理が非同期だったり、描画と無関係に入力を見続けたり、変な作りのゲームが珍しくないみたいです。そのせいか、入力に対してカオス的というか……、失礼な言い方をすればかなり「挙動不審」なんですよね……。
懐かしい画面キャプチャが出てきたので供養しておきます。
だいぶ昔になりますが、イーモバイルの WiFi ルーター Huawei GL10P を買いました。イーモバイルの契約は 5年前(2016年 11月 27日の日記参照)に解約してしまったので、GL10P だけが寂しく残っている状態でした。
といってもモバイル WiFi ルーターはほとんど使わないので、イーモバイル(今はワイモバイルでしたっけ?)を再契約するほどでもありません。
とりあえず何か通信さえできれば良いので、今は b-mobile の格安 SIM(ドコモ回線)を入れています。ただしこの時代のイーモバイルの WiFi ルーターは SIM ロックが掛かっているので、SIM ロックを解除する必要があります。SIM ロック解除には解除コードが必要(コードを知る方法はググると出てきます)です。以降、コードは既にわかっているものとします。
GL10P に WiFi で接続して、パスワード admin でログインします。おそらく下記のような画面が出ているはずです。
このページには SIM ロック解除コードが隠れているので、DOM インスペクタなどで入力欄を表示させます。
追加のツール等は不要な親切設計となっていて、ありがたい限りです。Huawei が意図して提供した機能か、デバッグ用の機能が紛れ込んだのか、どちらなのか知りませんけども……。
飛行機の位置をリアルタイムに表示する Flightradar24 というサービス(サイトへのリンク)があります。飛行機やヘリコプターが発する ADS-B という信号を、世界中の有志が受信して、Flightradar24 のサーバーに送ることで実現しているそうです。へえ〜。
仕組みはさておいて、このサービスではクリスマス・イブの日にはサンタが出現する毎年恒例のお約束演出があります。夜にサンタの飛んでいる様をボーっと眺めていました。
マレーシア上空をインド方面に飛んでいましたが、どうも移動速度が速いような気がしてなりません。表示上は 40ノット(時速 74.8km/h)となっています。しかしマレーシアをあっさりと横断して、インド洋に抜けており、そんなゆっくり飛んでいるように見えません。
サイトの速度表示は無視して、2地点間の距離で速度を測ってみました。
20:27:14 時点の位置(緯度 9.99903度、経度 93.3008度)
20:27:41 時点の位置(緯度 10.1382度、経度 93.2107度)
緯度、経度から距離を出すときは、地球の形状(赤道方向がやや長い、楕円形)を考慮したりで割と面倒らしいんですが、国土地理院のページを使うと一発で計算してくれて超便利です(サイトへのリンク)。
2地点間の距離は約 19.1km で、時間差は 27秒なので、対地速度は約 2,546km/h です。地上で言うところのマッハ 2くらい(ただし、上空 34,000fts だとマッハ数はもっと高く出る)です。旅客ジェット機は対地速度 800km/h くらい(マッハ 〜0.8 程度)なので、ジェット機の 2〜3倍速です。
戦闘機の巡航速度がマッハ 1くらいで、アフターバーナーでマッハ 2超えるくらいらしいので、サンタさんめっちゃ速いやん……。戦闘機とやりあう気かよ??
目次: DUNGEON ENCOUNTERS - まとめリンク
ダンジョンエンカウンターズ、やっと最後まで行きました。謎解きはまじめにやらず、攻略サイトを見てしまいました。難しいというか……正解を見ても「無茶言うなよ」って感じの問題です。攻略サイト作っている人たちはどうやって解いたんでしょうね……?
地下 90階にいるラスボスを倒して 1回目のスタッフロールを拝むのはそんなに難しくありません。とはいえ、強いのは確かです。特に 2回目の戦闘(パノプティコア A, B, C, D)は、何も考えずに突っ込むとパーティーが蒸発します。ラスボスを無視して、地下 99階までの謎解きアイテムとアビリティを全部拾ってから改めて挑むと比較的楽だと思います。アビリティ「テレポ」と「ノーエンカウント」を拾うと回収が捗ります。
謎解きを済ませると、この辺の超強力な武器が全て揃うはずです。地下 90階以降の敵はアホみたいに攻撃力が高く、一撃で防御値がなくなることが多いため、防具を 1〜2段階強化してもほぼ意味がありません。スピードの落ちる重装備(ヘルム、鎧)より、スピード重視で軽装備(服、帽子)+ブーツにして、相手より早く殴って倒すようにすると良いでしょう。
パノプティコアは 1体だけ残すと「全ての力」という超強烈な攻撃をしてきて、メンバーが一瞬で蒸発するので、
こうすると比較的楽なはずです。
最下層の地下 99階にいるバトル FF「無限」というクッソ強い敵を倒すと 2回目のエンディングが拝めます。拾える武器だけでもうまくやれば倒せる気がするんですけど、私はやり方がうまくないのか、火力不足で勝てませんでした。
地下 98階辺りの、バトル F7 を集中的に選んで、ティアマット Lv.99 が落とすアドレスブレイドを 2本を拾うまで頑張ります。出てくる敵としては、
バトル F8 の方がティアマットが確実に出ますが、一気に 5体出てきて強力な全体物理攻撃を連発され、パーティーが一瞬で全滅する可能性が高く、面倒な相手です。バトル F7 を数こなす方が安定すると思います。
アドレスブレイドを揃えたら、地下 99階のなるべく南東のマスに「無限」を出現させます。装備は HP満タン攻撃力倍+スピード重視装備+アドレスブレイドで。アドレスブレイド持ちのキャラはとにかく殴り、防御が完全に剥がれたキャラやアドレスブレイドを持っていないキャラは防御回復を連打、これでたぶん倒せるはずです。
目次: DUNGEON ENCOUNTERS - まとめリンク
ダンジョンエンカウンターズ、全フロアを踏破しました。基本的には強敵を避けてウロウロ歩けば踏破できますし、アビリティ「ノーエンカウント」取得後は、落とし穴以外に恐れるものは存在せず、ほぼ塗り絵ゲームになります。ただし、地下 92階だけはかなり辛いです……。
おそらく全員が「最も踏破に苦労する階は?」という質問に対して「地下 92階」と答えるでしょう。それくらい面倒くさい作りです。地下 92階は全て飛び地になっていて、一部は地下 93階から 02(上り階段)で行けますが、残りはほとんど目印がありません。マップの背景(宇宙みたいな赤と青のモヤモヤ)から、飛び地の座標に当たりを付け、アビリティ「仮想階段上り」で上る必要があります。
地下 92階から「仮想階段下り」で地下 93階に戻ると、いきなり落とし穴に落ちることがありますが、地下 94階で必ず受け止めてくれるので心配いりません。
しかし落ちた先の地下 94階や、地下 92階の小島でミスって落とし穴を踏むと「奈落の底に落ちてパーティーが全員行方不明」になることがあります。被害を最小限にするためにも、地下 92階は 1人パーティーで攻略した方が良いと思います。入り口となる地下 93階は常に一本道です。落とし穴回避のためアビリティ「ムーブ」「ナイトムーブ」、エンカウントマスも回避できないため「ノーエンカウント」もほぼ必須でしょう。
全部巡るのは非常に大変でしたが、下記の表で座標を全部メモできているはずです。
島の種類 | 南 | 東 | 島の広さ |
---|---|---|---|
02 階段上り | 2 | 41 | 16 |
02 階段上り | 14 | 72 | 20 |
02 階段上り | 15 | 13 | 4 |
02 階段上り | 21 | 34 | 16 |
02 階段上り | 33 | 87 | 16 |
02 階段上り | 36 | 20 | 12 |
02 階段上り | 47 | 34 | 16 |
02 階段上り | 49 | 83 | 16 |
02 階段上り | 61 | 10 | 20 |
02 階段上り | 72 | 43 | 16 |
02 階段上り | 73 | 83 | 16 |
02 階段上り | 74 | 15 | 20 |
02 階段上り | 92 | 41 | 16 |
02 階段上り | 94 | 88 | 9 |
Event 3F の島 | 49 | 60 | 25 |
Event FD の島 | 87 | 14 | 9 |
仮想階段上り | 5 | 54 | 20 |
仮想階段上り | 9 | 73 | 4 |
仮想階段上り | 10 | 83 | 12 |
仮想階段上り | 10 | 19 | 16 |
仮想階段上り | 14 | 54 | 16 |
仮想階段上り | 16 | 30 | 12 |
仮想階段上り | 17 | 81 | 20 |
仮想階段上り | 18 | 26 | 12 |
仮想階段上り | 19 | 39 | 12 |
仮想階段上り | 19 | 63 | 12 |
仮想階段上り | 24 | 45 | 16 |
仮想階段上り | 25 | 20 | 20 |
仮想階段上り | 27 | 58 | 12 |
仮想階段上り | 27 | 75 | 20 |
仮想階段上り | 29 | 6 | 15 |
仮想階段上り | 30 | 29 | 16 |
仮想階段上り | 37 | 65 | 12 |
仮想階段上り | 39 | 42 | 9 |
仮想階段上り | 40 | 50 | 20 |
仮想階段上り | 41 | 99 | 15 |
仮想階段上り | 41 | 79 | 20 |
仮想階段上り | 52 | 37 | 4 |
仮想階段上り | 55 | 20 | 20 |
仮想階段上り | 58 | 48 | 16 |
仮想階段上り | 61 | 94 | 16 |
仮想階段上り | 63 | 0 | 12 |
仮想階段上り | 67 | 19 | 20 |
仮想階段上り | 68 | 32 | 6 |
仮想階段上り | 68 | 77 | 16 |
仮想階段上り | 70 | 92 | 9 |
仮想階段上り | 71 | 65 | 16 |
仮想階段上り | 77 | 50 | 9 |
仮想階段上り | 79 | 80 | 16 |
仮想階段上り | 80 | 27 | 20 |
仮想階段上り | 83 | 39 | 6 |
仮想階段上り | 87 | 59 | 20 |
仮想階段上り | 89 | 68 | 16 |
仮想階段上り | 95 | 25 | 20 |
サイトだと見づらいと思うので、Google スプレッドシートにも置きました(Google スプレッドシートへのリンク)。基本的には地下 93階の「曲がり角」で仮想階段を使う座標にしたはずです。間違ってたらゴメンなさい&コメントなどで教えてくれると嬉しいです。
攻略の途中で「この地下 92階は山勘でやってもクリア不可能じゃね?」と感じてメモを始めたため、踏破済みと未踏破が中途半端に混ざった状態からメモを始めることになりました。おかげで島の座標を全部列挙したかどうかの検証がめちゃくちゃ面倒くさかったです……。最初からメモすれば良かったよー。
「無限」より強いと思われるのが、バトル FD の「モルモット教授」という敵です。出会える確率が非常に低い、防御と HP が 9,999,999 の最強タフネス、驚異のスピード 130、数ターン耐えるのが限界の超強力な攻撃、と嫌な点の塊のような敵です。
幸い?なことにアイテムを何もドロップしませんから、倒す必要がありません。無視して OK です。ただただやり込みプレイを阻むためだけに用意された、嫌がらせのような敵です。
私もアドレスブレイド 3本とスピード重視装備で挑んでみましたけど、防御すら削りきれないうちに瞬殺されて心が折れました……。勝てる気がしません。もういいわ。
目次: DUNGEON ENCOUNTERS - まとめリンク
日記が増えすぎて、一覧が欲しくなってきたので作りました。とは言ったものの、もう増える気がしない。
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2021.
Powered by PHP 5.2.17.
using GD bundled (2.0.34 compatible)(png support.)