はじめに
以前投稿した「UWSCを使ってPS版ドラクエ7を自動化してみた」では、戦闘終了を 通常 / ドロップ / ぬすむ の3種類の画像で判定していました。
今回、久しぶりにプレイステーション版『ドラゴンクエストVII』を触り直したところ、
戦闘終了は“フィールドに戻ったかどうか”で一括判定するほうが圧倒的に合理的では?
と感じました。
また、フィールド上の特徴的な部分だけを切り出した画像を使うことで、
ChkImgX(あいまい検索)ではなく、通常の ChkImg だけで十分判定可能 なことも確認しました。
そこで今回は、前回よりも安定性が増した 改良版の自動戦闘スクリプト を紹介します。
※UWSCの導入方法や基本操作は前回の記事をご参照ください。
PS版ドラクエ7向け 自動戦闘スクリプト
前提環境
| 項目 | 内容 |
|---|---|
| エミュレータ | DuckStation(推奨) |
| UWSC | 最新版 |
DuckStation以外でもドラクエ7が正常動作するなら問題ありません
自動戦闘スクリプトの概要
今回の自動戦闘スクリプトは、以下の流れでループ動作します:
- フィールドで「くちぶえ」を使用し強制エンカウント
- 戦闘に入ったら「たたかう」を自動選択
- 戦闘中は○ボタン(Zキー)を連打
- フィールド画面を検出したら戦闘終了と判断
- 少し待機し、再度くちぶえへ
- 以降ループ
これにより 経験値稼ぎ / 熟練度稼ぎ / 種集め / ドロップ狙い を完全放置で行えるようになります。。
実際のスクリプト
// ▼ パラメータ
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をプレイしていて「熟練度稼ぎ、種集めがつらい…」と感じていたら、
ぜひ本記事のスクリプトを活用してみてください。

コメント