Tips : Steam -3- (番外編)
2016/07/13

番外編:Steam コンテンツを起動してみる(3)


エミュレータではないけれど CatShanty2 v0.6xxxx 以降の機能を利用して Steam のコンテンツ(ゲーム)を起動してみます。

コンテンツ独自のランチャが起動するケースに対応する

番外編:Steam 起動 その2 の続き。

Steam コンテンツの中には、独自のランチャを通してゲームを起動するものがあります。
たぶん直接ゲームを起動する方法がありそうな気もしますが、今回もまた泥臭い方法で対応してみたいと思います。

例として DARIUS BURST Chronicle Saviours で考えてみます。
コンテンツ側ランチャ

DARIUS BURST Chronicle Saviours を起動すると上のような独自ランチャが起動します。

独自ランチャを検知対象から除外する

前回の「タイムアウトをしないで待機」で同様の説明をしましたが、この独自ランチャのウィンドウタイトルによって CatShatny2 はコンテンツが起動したと判断し、終了検知を開始してしまいます。
そこで、エミュレータ設定の 但し以下を含まない エディットボックスへLauncherを追加して検知対象から外すことで対処してみます。

- Steam;Launcher

これで希望の動作にはなりますが、このようにキーワードを追加していくと煩雑になるうえ、正しく検知されなくなる可能性が増します。

そこでまた$iniloadを使用してコンテンツ毎に最小限のキーワードが指定されるようにします。

具体的にはショートカット.urlを置いたフォルダへ、同名の.iniファイルを作成するなどして定義すると良いでしょう。

例えばE:\Steam_ShortCut\DARIUSBURST Chronicle Saviours.urlと同じフォルダへDARIUSBURST Chronicle Saviours.iniを作成し、次のように記述して保存します。

[Except]
txt=Launcher

そして 但し以下を含まない エディットボックスを次のように修正します。

- Steam;$iniload("$path$body_noext.ini","Except","txt")

エミュレータの設定ダイアログはこのようになります。
高度な設定タブ

これにより、DARIUS BURST Chronicle Saviours を起動すると$iniloadLauncherに置換され、結果次のような希望通りの動作が与えられます。

- Steam;Launcher

また、.iniファイルを用意しないコンテンツではヌルに置換されるので、無指定と同じ動作が得られることになります。

- Steam;

独自ランチャを操作する

さて、これで独自ランチャの検知は除外できました。
プレイ毎に設定を変更するならこれで良いのですが、毎回同じなら独自ランチャも操作してゲームを起動させたくなります。

キー入力コマンドを発動する

というわけで独自ランチャに向けてENTERキーを発行してゲームを起動させることにします。
エミュレータ設定の エミュレータ起動後のキー入力エミュレーション エディットボックスへコマンドを記述します。

CatShanty2 はエミュレータの終了検知方法が「シグナル状態で検知 Type1」以外ではエミュレータの起動に関わらずキー入力エミュレーションが発行されるため、独自ランチャが起動中か否かはキー入力コマンド内で判定する必要があります。
<IF_APP><GOTO>で簡単なループを作り、独自ランチャの起動を確認してからキーを発行するようにします。

<:A>
    Wait2000
    <IF_APP=DARIUSBURST CS Launcher>
        <GOTO:B>
    </IF_APP>
<GOTO:A>

<:B>
Wait1000;ENTER;

上のコマンドでは、<:A><GOTO:A>内でループし、2秒毎に"DARIUSBURST CS Launcher"と一致するウィンドウの存在を調べています。 存在が確認されたら<:B>へ飛びますので、その後は1秒待ったのちENTERキーが発行されます。

DARIUS BURST Chronicle Saviours のみに適用する

このコマンド群は DARIUS BURST Chronicle Saviours のみ発動させたいので、またまた$iniloadを使用します。

上記「独自ランチャを検知対象から除外する」で作成済みのDARIUSBURST Chronicle Saviours.iniファイルへ、以下のようにコマンド群を定義します。

[KeyCmd]
launcher=<:A>;Wait2000;<IF_APP=DARIUSBURST CS Launcher>;<GOTO:B>;</IF_APP>;<GOTO:A>;<:B>;Wait1000;ENTER;

実際には折り返さず1行で入力します。

そして エミュレータ起動後のキー入力エミュレーション エディットボックスは次のように修正して、iniファイル内のコマンドがインクルードされるようにします。

<iniload:"$path$body_noext.ini","KeyCmd","launcher">

ペーストする置換定数$iniloadではなく、インクルードする<iniload>コマンドですので注意して下さい。

これで DARIUS BURST Chronicle Saviours のみ希望するコマンドが発動され、.iniファイルのないコンテンツでは何も発動されません。 また他のコンテンツでもiniファイルを用意することで個別のコマンドを発動できるようになりました。


ゲーム起動後にも処理をしたい

完全に"おま環"の気がしますが、筆者の場合 DARIUS BURST Chronicle Saviours をフルスクリーン起動すると、必ずと言っていいほどWindowsタスクバーが前に出て来てしまいます。

そこで起動したらMOUSEコマンドでゲーム画面をアクティブにしたいと思います。

先ほどの DARIUSBURST Chronicle Saviours.ini[KeyCmd]セクションに以下のコマンドを追加します。

gamescreen=<C:>Wait2000;<IF_APP:Darius Burst Chronicle Saviours for Steam>;<GOTO:D>;</IF_APP>;<GOTO:C>;<:D>;Wait500;MOUSE_L,50%,50%

実際には折り返さず1行で入力します。

DARIUS BURST Chronicle Saviours のウィンドウタイトルはリビジョン番号も表示されているため、今度は<IF_APP:でキーワードを「含む」にして検索しています。 肝心のマウス操作はMOUSE_L,50%,50%として、画面中心を左クリックする感じにしてみました。

エミュレータ起動後のキー入力エミュレーション エディットボックスへ以下を追加します。

<iniload:"$path$body_noext.ini","KeyCmd","gamescreen">

これで、ゲーム起動後にプライマリモニタの中心が左クリックされゲーム画面がアクティブになります。
うーん泥臭い。

エミュレータ設定の補助設定タブは次のようになります。
補助設定タブ

まとめ

今回の流れ図は次のようになります

独自ランチャを操作するフロー

今回の編集内容をまとめます

DARIUSBURST Chronicle Saviours.ini ファイル

[Except]
txt=Launcher;
[KeyCmd]
launcher=<:A>;Wait2000;<IF_APP=DARIUSBURST CS Launcher>;<GOTO:B>;</IF_APP>;<GOTO:A>;<:B>;Wait1000;ENTER;
gamescreen=<C:>Wait2000;<IF_APP:Darius Burst Chronicle Saviours for Steam>;<GOTO:D>;</IF_APP>;<GOTO:C>;<:D>;Wait500;MOUSE_L,50%,50%

実際には折り返さず1行で入力します。

エミュレータ設定の 但し以下を含まない エディットボックス

- Steam;$iniload("$path$body_noext.ini","Except","txt")

エミュレータ設定の エミュレータ起動後のキー入力エミュレーション エディットボックス

<iniload:"$path$body_noext.ini","KeyCmd","launcher">
<iniload:"$path$body_noext.ini","KeyCmd","gamescreen">

 

番外編:Steam 起動 その4 へ続く。