RTM-Lua

View the Project on GitHub Nobu19800/RTM-Lua

BizHawk上で動作するRTCの作成方法

概要

このページではゲームエミュレータBizHawk上で動作するRTCを作成して、以下のようにPython版サンプルコンポーネントのジョイスティックコンポーネントと接続してゲームを操作するシステムの作成を行います。

BizHawkの入手

以下からBizHawk 1.12.2をダウンロードして適当な場所に展開してください。

※1.13.0以降のバージョンでは何故か動作できていません。

BizHawkにOpenRTM Lua版をインストール

BizHawkを展開したフォルダにOpenRTM Lua版の各ファイルをコピーします。

以下から32bit用のOpenRTM Lua版ファイル一式(OpenRTM Lua x.y.z Lua5.1 32bit)をダウンロードしてください。

OpenRTM Lua版からBizHawkにファイルをコピーします。

openrtm-lua-x.y.z-x86-lua5.1\lua\以下のファイルを全てBizHawk-1.12.2\Lua\以下にコピーしてください。

openrtmlua220

次にopenrtm-lua-x.y.z-x86-lua5.1\clibs\以下のファイルを全てBizHawk-1.12.2\以下にコピーしてください。

openrtmlua230

RTC作成

RTC BuilderによるRTCの基本的な作成手順は以下のページを参考にしてください。

上のページの作成手順に従って、以下の仕様のRTCを作成してください。

基本プロファイル

   
モジュール名 BizHawkSample

アクティビティ

onExecuteを有効にしてください。

インポート

   
ポート名 in
データ型 RTC::TimedFloatSeq

BizHawkSample.luaの編集

BizHawkSample.luaonExecute関数を以下のように編集してください。

	function obj:onExecute(ec_id)
		if self._inIn:isNew() then
			local data = self._inIn:read()
			local buttons = {["Left"]=false, ["Right"]=false, ["A"]=false}
			if data.data[1] > 20 then
				buttons["Right"] = true
			elseif data.data[1] < -20 then
				buttons["Left"] = true
			end
			if data.data[2] > 70 then
				buttons["A"] = true
			end
			joypad.set(buttons, 1)
		end
		emu.frameadvance()
		return self._ReturnCode_t.RTC_OK
	end

InPortの入力データを、コントローラーの入力に設定しています。 emu.frameadvance()でフレームを更新しています。

編集したBizHawkSample.luaBizHawk-1.12.2\Luaにコピーしてください。

openrtmlua240

BizHawkの関数については、以下のページに説明があります。

ROMの入手

BizHawkで動作可能なROMイメージを入手してください。 市販のゲームソフトのROMイメージのダウンロードは違法のため、以下のようなフリーのROMイメージを入手してください。

動作確認

ネームサーバー起動

事前にネームサーバーの起動が必要です。

※OpenRTM-aist 1.2以降ではRT System Editorにネームサーバー起動ボタンがあるため、手順が簡単になっています。

TkJoyStickコンポーネントの起動

TkJoyStickコンポーネントを入手して、TkJoyStickComp.exeを実行してください。

BizHawkの起動

EmuHawk.exeをダブルクリックして実行してください。

openrtmlua70

Emulation->Pauseをクリックしてゲームを一時停止してください。

openrtmlua90

RTC起動

Tools->Lua ConsoleをクリックしてLua Consoleウインドウを表示してください。

openrtmlua80

Open ScriptボタンをクリックしてBizHawkSample.luaを開いてください。

openrtmlua100

RTSystem作成

まずRTCの起動に成功している場合は、以下のようにネームサービスビューにRTCが表示されます。

openrtmlua500

Open New System Editorボタンを押してシステムダイアグラムを表示してください。

openrtmlua510

ネームサービスビューからシステムダイアグラムにRTCをドラックアンドドロップしてください。

openrtmlua520

TkJoyStick0posのOutPortを、BizHawkSample0inのInPortにドラックアンドドロップしてください。

openrtmlua530

これで通信ができるようになります。

All Activateボタンを押すとTkJoyStick0からデータが送信されるため操作ができるようになります。

openrtmlua540

Emulation->Pauseをクリックするとゲームを再開します。

openrtmlua90

コネクタ接続、RTCのアクティブ化の自動化

BizHawkSample.luamanager:init関数の引数を以下のように変更してください。

manager:init({"-o", "manager.components.preconnect:BizHawkSample0.in?port=rtcname://localhost/TkJoyStick0.pos", "-o", "manager.components.preactivation:BizHawkSample0,rtcname://localhost/TkJoyStick0"})

-oオプションでパラメータの設定ができます。

起動時に接続するポートを指定します。 この場合はBizHawkSample0というRTCのinというデータポートを、TkJoyStick0というRTCのposというポートに接続します。

ただし、TkJoyStick0は別プロセスで起動しているため、rtcname形式による指定が必要になります。 rtcname形式はネームサーバーからRTCを取得する方法です。rtcname://アドレス/RTC名.ポート名で指定します。

起動時にアクティブ化するRTCを指定します。