UWSCでPS版ドラクエ7の自動戦闘を改良してみた|フィールド判定でより安定した放置稼ぎを実現

Tips

はじめに

以前投稿した「UWSCを使ってPS版ドラクエ7を自動化してみた」では、戦闘終了を 通常 / ドロップ / ぬすむ の3種類の画像で判定していました。

今回、久しぶりにプレイステーション版『ドラゴンクエストVII』を触り直したところ、

戦闘終了は“フィールドに戻ったかどうか”で一括判定するほうが圧倒的に合理的では?

と感じました。

また、フィールド上の特徴的な部分だけを切り出した画像を使うことで、
ChkImgX(あいまい検索)ではなく、通常の ChkImg だけで十分判定可能 なことも確認しました。

そこで今回は、前回よりも安定性が増した 改良版の自動戦闘スクリプト を紹介します。
※UWSCの導入方法や基本操作は前回の記事をご参照ください。

PS版ドラクエ7向け 自動戦闘スクリプト

前提環境

項目内容
エミュレータDuckStation(推奨)
UWSC最新版

DuckStation以外でもドラクエ7が正常動作するなら問題ありません

自動戦闘スクリプトの概要

今回の自動戦闘スクリプトは、以下の流れでループ動作します:

  1. フィールドで「くちぶえ」を使用し強制エンカウント
  2. 戦闘に入ったら「たたかう」を自動選択
  3. 戦闘中は○ボタン(Zキー)を連打
  4. フィールド画面を検出したら戦闘終了と判断
  5. 少し待機し、再度くちぶえへ
  6. 以降ループ

これにより 経験値稼ぎ / 熟練度稼ぎ / 種集め / ドロップ狙い を完全放置で行えるようになります。。

実際のスクリプト

// ▼ パラメータ
DIM sleepTime_KeySend = 0.001
DIM sleepTime_BattleEnd = 0.01

// ▼ 対象ウィンドウ取得
DIM gameTitle = "ドラゴン・クエストⅦ ~エデンの戦士たち~ (DISC 2)"
DIM id = GETID(gameTitle)
DIM x1 = STATUS(id, ST_X)
DIM y1 = STATUS(id, ST_Y)
DIM x2 = x1 + STATUS(id, ST_CLWIDTH)
DIM y2 = y1 + STATUS(id, ST_CLHEIGHT)

// ▼ キー定義
DIM keyCircle = VK_Z
DIM keyRight = VK_RIGHT

// アクティブ化
ACW(id)

WHILE TRUE

    // ---------------------------------
    // ▼ 戦闘前:メニュー → 特技 → キャラ選択 → くちぶえ
    // ---------------------------------
    KBD_Press(keyCircle, sleepTime_KeySend)          // メニュー
    KBD_Press(keyRight,  sleepTime_KeySend)          // 特技へ
    KBD_Press(keyCircle, sleepTime_KeySend)          // 特技を開く
    KBD_Press(keyCircle, sleepTime_KeySend)          // キャラ選択
    KBD_Press(keyCircle, sleepTime_KeySend)          // くちぶえ使用

    // ---------------------------------
    // ▼ 戦闘中:○連打 → 戦闘終了検出
    // ---------------------------------
    REPEAT
        KBD_Press(keyCircle, sleepTime_KeySend)
    UNTIL CHKIMG("field_icon.bmp",0,x1,y1,x2,y2)

    // ---------------------------------
    // ▼ 戦闘終了
    // ---------------------------------
    SLEEP(sleepTime_BattleEnd)

WEND

// ▼ 関数:キー押下(DOWN → SLEEP → UP)
PROCEDURE KBD_Press(key, sleepTime_KeySend)
    KBD(key, DOWN)
    SLEEP(sleepTime_KeySend)
    KBD(key, UP)
FEND

補足

○ボタンは Zキー(VK_Z) に設定

キー入力の間隔は sleepTime_KeySend で調整

戦闘終了後の待機は sleepTime_BattleEnd

さらに今回は…

DuckStation の高速設定を前提に最適化

  • エミュレーション速度:無制限
  • グラフィック:最低
  • ウィンドウサイズ:1x

これにより、非常に短い待機時間(0.001秒レベル)でも安定動作しています。

戦闘終了の画像判定

フィールドの一部分だけを切り取った
field_icon.bmp
が画面内に出現したら “戦闘終了” と判断します。

必要な判定はこれ1つで完結するため、前回より大幅に簡潔になりました。

おわりに

今回の改良版スクリプトは、
前回よりも誤判定が大幅に減り、実用レベルで安定して動作 しています。

たまに一瞬誤動作しても、すぐ再判定して正常なループに戻るため、
長時間の放置でも問題ありません。

私はこれを使って ステータスカンストまでの種集め を進めていますが、
手動のときと比べ物にならないほど快適になりました。

もしあなたもドラクエ7をプレイしていて「熟練度稼ぎ、種集めがつらい…」と感じていたら、
ぜひ本記事のスクリプトを活用してみてください。

コメント