このページではゲームエミュレータBizHawk上で動作するRTCを作成して、以下のようにPython版サンプルコンポーネントのジョイスティックコンポーネントと接続してゲームを操作するシステムの作成を行います。
以下からBizHawk 1.12.2をダウンロードして適当な場所に展開してください。
※1.13.0以降のバージョンでは何故か動作できていません。
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\
以下にコピーしてください。
次にopenrtm-lua-x.y.z-x86-lua5.1\clibs\
以下のファイルを全てBizHawk-1.12.2\
以下にコピーしてください。
RTC BuilderによるRTCの基本的な作成手順は以下のページを参考にしてください。
上のページの作成手順に従って、以下の仕様のRTCを作成してください。
モジュール名 | BizHawkSample |
onExecute
を有効にしてください。
ポート名 | in |
データ型 | RTC::TimedFloatSeq |
BizHawkSample.lua
のonExecute
関数を以下のように編集してください。
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.lua
をBizHawk-1.12.2\Lua
にコピーしてください。
BizHawkの関数については、以下のページに説明があります。
BizHawkで動作可能なROMイメージを入手してください。 市販のゲームソフトのROMイメージのダウンロードは違法のため、以下のようなフリーのROMイメージを入手してください。
事前にネームサーバーの起動が必要です。
※OpenRTM-aist 1.2以降ではRT System Editorにネームサーバー起動ボタンがあるため、手順が簡単になっています。
TkJoyStickコンポーネントを入手して、TkJoyStickComp.exe
を実行してください。
EmuHawk.exe
をダブルクリックして実行してください。
Emulation
->Pause
をクリックしてゲームを一時停止してください。
Tools
->Lua Console
をクリックしてLua Consoleウインドウを表示してください。
Open Script
ボタンをクリックしてBizHawkSample.lua
を開いてください。
まずRTCの起動に成功している場合は、以下のようにネームサービスビューにRTCが表示されます。
Open New System Editor
ボタンを押してシステムダイアグラムを表示してください。
ネームサービスビューからシステムダイアグラムにRTCをドラックアンドドロップしてください。
TkJoyStick0
のpos
のOutPortを、BizHawkSample0
のin
のInPortにドラックアンドドロップしてください。
これで通信ができるようになります。
All Activate
ボタンを押すとTkJoyStick0
からデータが送信されるため操作ができるようになります。
Emulation
->Pause
をクリックするとゲームを再開します。
BizHawkSample.lua
のmanager:init
関数の引数を以下のように変更してください。
manager:init({"-o", "manager.components.preconnect:BizHawkSample0.in?port=rtcname://localhost/TkJoyStick0.pos", "-o", "manager.components.preactivation:BizHawkSample0,rtcname://localhost/TkJoyStick0"})
-o
オプションでパラメータの設定ができます。
"-o", "manager.components.preconnect:BizHawkSample0.in?port=rtcname://localhost/TkJoyStick0.pos"
起動時に接続するポートを指定します。 この場合はBizHawkSample0というRTCのinというデータポートを、TkJoyStick0というRTCのposというポートに接続します。
ただし、TkJoyStick0
は別プロセスで起動しているため、rtcname形式
による指定が必要になります。 rtcname形式
はネームサーバーからRTCを取得する方法です。rtcname://アドレス/RTC名.ポート名
で指定します。
"-o","manager.components.preactivation:BizHawkSample0,rtcname://localhost/TkJoyStick0"
起動時にアクティブ化するRTCを指定します。