UWSCを使ってPS版ドラクエ7を自動化してみた

IT

はじめに

プレイステーション版『ドラゴンクエスト7』は、シリーズの中でも特に長大なシナリオとボリュームを誇る作品です。
その一方で、やり込みを極めようとすると「熟練度稼ぎ」や「種集め」といった単純作業に多くの時間を取られてしまいます。

そこで今回は、Windows上で動作する自動化ツール UWSC を活用し、エミュレーター上で戦闘を自動化するスクリプトを作ってみました。
UWSC自体の導入や基本的な使い方については、前回の記事をご参照ください。

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

前提環境

今回のスクリプトを動かすための環境は以下の通りです。

  • エミュレーター:DuckStation
  • UWSC:最新版(フリー版でOK)

また、UWSCで ChkImgX関数 を利用する必要があります。
導入手順については以下のページを参照してください。
👉 ChkImgX関数 – UWSC辞典

なお、エミュレーターはDuckStation以外でも、PS版ドラクエ7が正常に動作するものであれば問題ありません。

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

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

  1. フィールドで「くちぶえ」を使用して強制的に戦闘へ突入
  2. 戦闘画面で「たたかう」を自動選択
  3. 戦闘中は〇ボタンを連打
  4. 戦闘終了を判定し、フィールド画面に戻ったら一時待機
  5. 上記を繰り返し実行

これにより、経験値稼ぎや熟練度上げ、アイテムドロップ狙いなどを放置で進められるようになります。

実際のスクリプト

//ChkImgX関数をインクルード
CALL ChkImgX.uws

DIM sleepTime_KeySend = 0.005
DIM sleepTime_BattleEnd = 0.15
DIM id = GETID("Dragon Quest VII - Eden no Senshi-tachi (Japan) (Disc 2)","Qt690QWindowIcon")
DIM x1 = STATUS(id, ST_X) // 始点X座標を返す
DIM y1 = STATUS(id, ST_Y) // 始点Y座標を返す
DIM x2 = x1 + STATUS(id, ST_CLWIDTH) //終点X座標を返す
DIM y2 = y1 + STATUS(id, ST_CLHEIGHT)//終点Y座標を返す
DIM similarity = 10
DIM color = "$000000"
DIM circleBottom = "VK_Z"

ACW(id) //ウィンドウアクティブ
WHILE TRUE
	//戦闘前
	KBD(circleBottom, DOWN) //メニュー表示
	SLEEP(sleepTime_KeySend)
	KBD(circleBottom, UP)
	KBD(VK_RIGHT, DOWN) //特技へ移動
	SLEEP(sleepTime_KeySend)
	KBD(VK_RIGHT, UP)
	KBD(circleBottom, DOWN)
	SLEEP(sleepTime_KeySend) //特技を開く
	KBD(circleBottom, UP)
	KBD(circleBottom, DOWN)
	SLEEP(sleepTime_KeySend) //キャラクター選択
	KBD(circleBottom, UP)
	KBD(circleBottom, DOWN)
	SLEEP(sleepTime_KeySend) //くちぶえ使用
	KBD(circleBottom, UP)

	//戦闘開始
	STARTUP_CHKIMGX() //CHKIMGX関数開始
	REPEAT
		KBD(circleBottom, DOWN)
		SLEEP(sleepTime_KeySend) 
		KBD(circleBottom, UP)
	UNTIL CHKIMGX("dq7_nomal.png",0,x1,y1,x2,y2,0,similarity,color) OR     CHKIMGX("dq7_steal.png",0,x1,y1,x2,y2,0,similarity,color) OR CHKIMGX("dq7_drop.png",0,x1,y1,x2,y2,0,similarity,color)

	SHUTDOWN_CHKIMGX() //CHKIMGX関数停止

	//戦闘終了
	SLEEP(sleepTime_BattleEnd)
WEND

〇ボタンはキーボードの「Z(VK_Z)」に設定しております。
キーを押している間隔は「sleepTime_KeySend」で制御しています。
また戦闘終了時は「sleepTime_BattleEnd」分のスリープ時間を入れております。

戦闘終了判定は、エミュレーター画面に表示される以下の画像を曖昧検索で検出することで行っています。
<dq7_nomal.png>

<dq7_drop.png>

<dq7_steal.png>

おわりに

実際にスクリプトを動かしてみたところ、しっかりと戦闘を自動でこなしてくれました。
特に熟練度稼ぎや種集めの効率が大幅に向上し、単純作業から解放されるのは非常に快適です。

UWSCはシンプルながら強力な自動化ツールで、ゲームの効率化にも十分活用できます。
今回紹介したのはあくまで一例ですが、判定条件や入力パターンを工夫すれば、より高度な自動化も可能です。

チートを使わず、「自動化で楽をする」スタイルに共感できる方は、ぜひ試してみてください。

IT
スポンサーリンク

コメント