MSX2 版ドラゴンクエストII スムーズスクロール パッチ
====================================================

MSX2 版ドラゴンクエストII の ROM イメージに当てると、フィールドや町を
1 ドットずつ滑らかにスクロールするようになるパッチです。あわせて、
歩き出しの反応、NPC の多い町での処理の重さ、V9968 への対応などを改善します。

ゲームの ROM イメージは含まれていません。各自で用意してください。
非公式のパッチです。使用は自己責任でお願いします。


■ 使い方

  python dq2patch.py 元のROM [-o 出力] [--r800] [--names 王子,王女] [--debugpw ファイル]

  例: python dq2patch.py DQ2.rom
      → 同じフォルダに DQ2_smooth.rom (512KB) ができる

  - Python 3.8 以上が必要です (標準ライブラリだけで動きます)
  - 元の ROM は MSX2 版 (256KB) です。知られている 3 種類の吸い出しの
    どれでも使えます (当てる前に、最後の修正版と同じ中身にそろえます)
  - できる ROM は 512KB の ASCII8 メガ ROM です。エミュレータでは ROM の
    種類に ASCII8 を指定してください。実機では、512KB の ASCII8 に対応した
    フラッシュカートリッジなどが必要です

  オプション
  --r800      turbo R では、最初の一歩から R800 で動く版にします
              ・turbo R: 起動時に「1」を押していれば Z80 のまま
                (押していなければ、起動した時点で高速モードのランプが点きます)
              ・turbo R 以外: 起動時に「2」を押していれば、最初の一歩から
                Panasonic FS-A1WX / FS-A1WSX / FS-A1FX の高速モードにします
              ・キーを押さなければ、turbo R 以外では通常版と同じ動きです
  --names     仲間 2 人の名前を固定します (かな 4 文字まで。濁点・半濁点も
              1 文字。例: --names アーサー,ナナ)
  --debugpw   デバッグ起動用の復活の呪文を入れます (下の「デバッグ起動」)


■ 主な変更点

  スクロール
  - V9958 (MSX2+、turbo R) では、フィールド・町・城の中を 1 フレームに
    1 ドットずつ滑らかにスクロールします。1 歩 16 フレームで、歩き続けると
    途切れずに進みます (元の MSX2 版は 8 ドットずつ切り替わり、1 歩 25〜28
    フレーム)
  - NPC は背景と一緒に 1 ドットずつスクロールします
    (NPC 自身の歩きは、元のゲームと同じ半マス単位です)
  - 1 ラインに 5 人以上並んだときは、表示する人を毎フレーム入れ替えて
    点滅で見せます (V9958 は 1 ラインに 8 枚までしかスプライトを出せないため)

  速さと操作の反応
  - 6502 の命令をまねる補助ルーチンの呼び出し (約 3,100 か所) を、同じ働きの
    Z80 命令に直接置き換え、NPC の移動処理も Z80 で書き直しました。
    人の多い町でも、一歩ごとに引っかかることがほとんどなくなります
  - 方向キーを短く押しても一歩進みます
  - 止まっている状態から歩き出すまでの待ちを短くしました
    (平均 13 フレーム → 7 フレーム)
  - 窓の表示・消去を速くしました

  メッセージの速さ
  - ゲーム中いつでも F1 / F2 / F3 で、戦闘のメッセージの速さを
    おそい / ふつう / はやい に切り替えられます

  VDP の自動判定
  - 起動時に VDP を調べて、使い分けます。ROM は 1 本で全部に対応します
    ・V9938 (MSX2): 元のゲームと同じ動き (スクロールは元のまま)
    ・V9958 (MSX2+ / turbo R): 滑らかなスクロール
    ・V9968 カートリッジ (I/O 88h): V9968 に表示します。1 ラインに 16 枚まで
      スプライトを出せるので、1 ラインに 8 人まで点滅せずに出せます。本体の画面には案内
      (メッセージの速さの選択中の位置つき) を出します
    ・V9968 内蔵の機種: 本体の VDP として使います
    ・MSX1 で V9968 カートリッジがない場合は、必要な機器の案内を出して止まります

  そのほか
  - タイトル画面の盾の上に出ることがあったごみを消しました
    (V9968 で見えていました)
  - 効果音を鳴らし始めるときの処理の誤りを直しました
    (最後の修正版の吸い出しと同じ直し)


■ デバッグ起動

  --debugpw でファイルを指定すると、タイトル画面で F1 を押しながら 1〜4 の
  数字キーを押したとき、その番号の復活の呪文を自動で入力して再開します。
  タイトル画面とは、ドラゴンクエストII のロゴと、START・CONTINUE などの
  選択肢が表示されている画面のことです。
  ファイルは UTF-8 のテキストで、呪文は 4 つまで、各 52 文字までです。
  1 つの呪文を何行かに分けて書けます。空行か、コメント (# から行末まで)
  だけの行で次の呪文に移ります。空白は無視します。

  例 (よく知られた呪文):
    # 1
    ゆうて　いみや　おうきむ
    こうほ　りいゆ　うじとり
    やまあ　きらぺ　ぺぺぺぺ
    ぺぺぺ　ぺぺぺ　ぺぺぺぺ
    ぺぺぺ　ぺぺぺ　ぺぺぺぺ　ぺぺ

  呪文を指定しなければ、デバッグ起動は何もしません。

  ゲームを進めて呪文を集めるほかに、好きな状態 (レベル・持ち物・
  いる場所など) の復活の呪文を作ってくれるサイトもあるので、
  それを利用してみるのもよいと思います。


■ 動作確認

  - エミュレータ openMSX: Panasonic FS-A1ST (turbo R)、FS-A1WX、
    C-BIOS MSX2 / MSX2+ / MSX1 + V9968 拡張
  - 実機: Panasonic FS-A1ST (turbo R) の Z80 / R800、
    V9968 カートリッジ (I/O 88h)、Panasonic MSX2+ の高速モード (3 倍速改造機)
