私はFF14をフルスクリーンモードでプレイしており、必ずACTも起動しています。
ですが、ACTのDPS値をゲームプレイ中にリアルタイムに表示するためにはオーバーレイプラグイン等を使わなければなりません。
ここで問題は、この手のプラグインはFF14がウィンドウモードか仮想フルスクリーンモードで無いと使えません。
ただしLogicool G13アドバンスドゲームパッドという左手デバイスには液晶ディスプレイ(LCD)が付いており、ACTのFF14プラグインは標準でこのLCDにencdps値を表示する機能を備えています。
なので私はFF14プレイ中は自分のencdps値をこのLCDで確認しています。
ところがこのLogicool G13は2年前に既に生産終了しており、残念ながらLogicoolは後継機の開発も復刻もするつもりも無いようです。
なにしろ自身もG13のユーザーである吉Pが、アーケードスティックで有名なHORIとコラボしてこのG13に代わる左手デバイスを開発したぐらいです。
しかし、この吉P監修の「タクティカルアサルトコマンダー F14」写真を見て分かるようにLCDが付いてません。
つまりLogicool G13から「タクティカルアサルトコマンダー F14」に乗り換えた場合、フルスクリーン表示のFF14ではACTのDPS値が見れなくなってしまいます。
仕方ないのでArduinoに表示してみた
Arduinoというのは、いわゆるマイコンです。
私は電子工作の趣味は一切無いのですが、職業柄Arduinoの存在は知ってました。
電子工作と言うと小難しく薄汚い、面倒臭いというイメージがありますが、ことArduinoに関してはだいぶお手軽になってますね。
コントローラーボードと液晶シールドをAmazonで購入して合体し、PCとUSBケーブルで繋いで終了です。
半田付け作業とか一切不要で、PCとUSBケーブルで接続するだけで、LCDにPCから送信したデータを表示する事ができるようになります。
もちろんそれ用のプログラムを書く必要がありますが。
これはコントローラーボードと液晶シールドを合体した後の写真で、下段がArduino UNO R3(\3,300ぐらい)、上段が2.8インチのタッチセンサー付きTFT液晶シールド(\1,200ぐらい)です。
電源コネクタとUSBコネクタが見えますが、今回は電源コネクタは使いません。
電源はセルフパワータイプのUSBハブから供給すれば充分動作します。
何ができるようになるの?
Logicool G13やG19が無くても、ACTのMini Parseウィンドウに表示されるDPS値を外部液晶モニタで見れるようになります。
こんな感じです。
これはアラルレのクリタワ?に行った時の画面ですね。
2.8インチのLCDはG13付属のものよりも画面が広いので、15人までのencdpsを表示できます。
また、カラー液晶なのでこのように自分の名前だけ赤色で表示するという事も可能です。
大まかな手順
手順をざっくり説明するとこんな感じ
- Arduino UNO R3と液晶シールドをAmazon等で購入。
- Arduino UNOに液晶シールドを合体する。
- Arduino UNOとPCをUSB(Type B)で接続。
- フリーの開発ツール Arduino IDEをインストールする。
- 拙作のArduino用プログラムを、Arduino IDEを使ってArduino UNOに転送する。
- 拙作のACTプラグインをACTに組み込み、有効化する。
以上。簡単ですね。
Arduino用プログラム+ACTプラグインのダウンロード
こちらになります。バージョンは0.1.0です。
zipを展開すると以下のフォルダ、ファイルになります。
readme.txt(注意書き)
DpsSender.dll(ACTプラグイン)
\act_monitor\act_monitor.ino(Arduino用プログラム)
動作環境
DpsSender.dll
PCに.NET Framework 4.7.1以上がインストールされている事。
Arduino IDE
Javaの実行環境がインストールされている必要があります。
Arduino IDEの公式ページにはバージョンも何も書いてないのですが、私のPCにインストールされていたJRE1.8.0_171で問題なく動作しているので、それ以降のJREが入っていれば大丈夫でしょう。
JREのインストール方法についてはネットに沢山記事が上がっているので、ここでは説明しません。
具体的な手順
パーツの準備
Arduino UNO R3と液晶シールドを購入します。
Arduino UNO R3はこちら。
液晶シールドはこちら
Arduino UNO R3は同じ商品名なら別の会社が販売しているものでも構いませんが、液晶シールドは何種類も規格があるようなので、上で紹介したものと少なくとも規格は同じものにした方が良いでしょう。
Arduino UNO R3とPCはUSBケーブルで接続しますが、Arduino側のコネクタはType Bになります。
電源はUSB供給だけでも充分動作していますが、LCDを表示させるのでそれなりに電力を食うと思います。
USBの差し込み口はバスパワーではなくセルフパワーのハブを使った方が良いでしょう。
コントロールボードと液晶シールドを合体
Arduino UNOと液晶シールドを友情ドッキングします。
Arduino UNOのソケットに液晶シールドのピンをぶっ挿します。
上の写真を見てもらえれば分かるように、液晶シールド側、コントローラー側の各々ピン、ソケットに5V・RESET・GNDだのと書かれているので、それらの表記を合わせれば大丈夫です。
上の写真は既に合体済みなんですが、一度合体すると引っこ抜くのはちょっとためらわれます。
結構ガッチリと嵌るので、抜くにはかなりの力を入れなければならない感じなんですよね。
まぁ接続が正しければ敢えて外す必要はありませんので。
ハードの準備はこれで終了です。
次はUSBケーブルでPCとArduinoを接続するのですが、先に開発環境とドライバを入れておきましょう。
Arduino IDEをインストール
公式サイトから開発ツールをダウンロードしてインストールします。
このツールはプログラムをArduino UNOに転送するために必要です。
Windows用インストーラーなら赤枠で囲んだリンクをクリックしてダウンロード。
インストーラーで入れる方法とzipを展開する方法があり、ググるとどちらの手順についても説明が見つかりますが、インストーラーで入れてしまって構いません。
また、インストール中に聞かれる設定は全ていじらず、デフォルトのままで構いません。
IDEのインストールが終了したら、先ほど液晶シールドを合体させておいたArduino UNOをUSBケーブルでPCと接続します。
Arduino IDEのインストール過程でドライバもインストールされるため、Arduino IDEは接続したArduino UNOを認識するはずです。
液晶シールドに付属するCDから、描画ライブラリをコピー
IDEをインストールしただけでは、LCDに文字やグラフィックを描画するライブラリはインストールされていません。
上で紹介したKumanの液晶シールドには、8cmCDが付属しています。
この中には描画ライブラリとサンプルプログラムが含まれています。
また、\library\User Manualというフォルダにユーザーマニュアルの.pdfが存在します。
これを見ると、
このように書かれています。
CDには\Aruino Demo_UNO&Mega2560\Install libraries というフォルダがあります。
マニュアルによると、このフォルダの中身をIDEをインストールしたフォルダにコピーせよと書かれていますね。
マニュアルに従ってCDからライブラリをコピーしましょう。
Arduino IDEをインストールする際にインストーラーを使った場合は、C:\Program Files(x86)\Arduinoフォルダにインストールされます。
この中に\librariesというサブフォルダが存在しますが、ここにCDのlibrary\Arduino Demo_UNO&Mega2560\Install librariesの中身をまるごとコピーします。
液晶シールドはいろんな会社が製品を出していますが、製品に付属していたライブラリを使うのが一番確実でしょう。
スケッチ(プログラム)をArduinoに転送する
dpssender_pack.zipを解凍すると、\act_monitor\act_monitor.ino というファイルがあります。
この.inoファイルがArduinoに書き込むプログラムです。
このact_monitor.inoファイルをダブルクリックすると、関連付けられているためArduino IDEが起動します。
開発ボードを選択する
恐らくデフォルトで既にArduino UNOが選択されていると思います。
このようになっていればOK。
違っていれば、ツール>ボードからArduino/Genuino Unoを選択します。
シリアルポートを選択
上のように、COM1~nのいずれかにArduino UNOが存在するはずですので、それを選択して下さい。
プログラムの転送
転送ボタンを押します。
ソースコードがコンパイルされ、エラーが出ずに成功すればそのままArduinoのフラッシュメモリに書き込まれます。
プログラムがArduino UNOに正しく書き込まれると、LCD画面が書き換わり、タイトル文字が表示されます。
Arduino側の準備はこれで終了です。
ここまでの作業で、プログラムは無事Arduino UNOに書き込まれました。
Arduino IDEはもう必要ありません。
何ならアンインストールしても構いませんが、別のプログラムを書き込んだり、アップデートする際にはまた同じ手順を踏む必要がありますので、残しておいた方がいいでしょう。
ACTプラグイン DpsSender.dllの組み込み
dpssender_pack.zipを展開すると、直下にDpsSender.dllと言うファイルがあります。
これがACTプラグインです。
他のACTプラグインと同様に組み込んで有効化して下さい。
一応簡単に手順を説明しておきますと、
- ACTの実行ファイルがあるフォルダ、あるいはその下に作ったプラグイン用のフォルダにDpsSender.dllをコピーする
- ACTを起動する。
- Plugin Listingタブを選択。
- Browseボタンを押し、DpsSender.dllを選択。
- Add/Enableボタンを押す。
- DpsSender.dllがリストに追加されるので、Enabledにチェックを入れる。
こんな感じです。簡単ですね。
dllの中身をちょっと説明しておきますと、ACTのFF14 Parsing PluginからMini Parse Windowへの表示に使われているencdps値を取得し、イイ感じの文字列に加工してUSBシリアル通信でArduinoに送信しているだけの単純なものです。
なので、FF14 Parsing Pluginが正しく動作している限りはちゃんとデータが送られます。
DpsSender.dllのオプション説明
プラグインを組み込んだら、オプション設定タブが追加されます。
COMポート番号を設定する
COM Portのドロップダウンリストには、現在PCに接続されているシリアルポートの一覧が表示されます。
Arduino IDEの設定と同様に、Arduinoが接続されているCOMポートを選択して下さい。
値はセーブされますが、例えばArduinoや他のデバイスを抜き差ししたり、USBの差し込み口を変えたりするとアサインされているポート番号が変わってしまう事があります。
この場合は再度、Arduinoがアサインされているポート番号にDpsSenderプラグインの設定を合わせて下さい。
名前の表示形式
Name Displayドロップダウンリストでは、LCDに表示するプレイヤー名をフルネームにするかイニシャル表記にするかを選択できます。
この設定はArduinoのLCD表示のみに影響します。
ACTのFF14プラグインの動作は変わりません。
つまり、ACT上ではフルネームでも、LCDの表示のみをイニシャルにしたり、その逆も可能と言う事です。
以上で、ACTを起動した状態でFF14をプレイすると、encdps値がArduinoに接続した液晶ディスプレイ上に表示されるようになります。
液晶ディスプレイ表示に関する注意
カタカナ、ひらがなは表示されません
使用しているライブラリの都合だと思いますが、カタカナ、ひらがなを表示できません。
なのでフェイスでIDに行った時は、ACT上では「サンクレッド」「ヤ シュトラ」と表示されますが、LCD上では「??? ???」と表示するようにしています。
名前欄に ??? ???と表示されていたら「表示不可能文字なのね」と思って下さい。
LCDに表示されるのは最大15人まで
液晶画面の解像度が320 x 240ピクセルなので、視認性を考慮して文字サイズは縦16ピクセルです。
つまり15行しか表示できませんので、16人目以降は無視されます。
描画性能が低いため、画面の描き替えが視認できる
Arduino UNO自体の性能がそもそも低いのと、使用しているライブラリが最適化もされていないので画面描き替えが視認できてしまいます。
画面描き替えというのは具体的には「古い値、名前の部分を黒く塗り潰し、その後に新しい値、名前を描画する」という処理で、こうする事でencdpsの順位や値が変わった際に最新の値で更新しています。
この処理が遅いと画面が描き替わる際に一瞬、変化する場所が黒くなり、直後に新しい文字が表示されるというのが視認できます。
要するに「表示が変わる部分が一瞬ちらつく」という現象が発生します。
今時のPCで例えるなら「垂直同期Offでテアリングが発生する状態」と近いですかね。
最初見た時は「マジか?は~つっかえ・・・」と思ったのですが、実際試してみるとそもそも戦闘中はずっとLCDを凝視しているわけでは無く、戦闘の合間に画面を確認するぐらいなので、実用上は全く問題ありません。
有志が最適化してかなり高速に描画できる、という噂のライブラリも試したのですが、残念ながら私の環境では動作せず、ググってみるとそもそも不安定なライブラリで更新も止まっているようでした。
どうしても画面がチラつくのが嫌だという人は、頑張って描画ライブラリをチューニングして下さい。
ESP32という段違いに高性能なマイコンと専用の描画ライブラリを使うという手もあるのですが、こちらはこちらで「配線する必要があって面倒くさい」というハードルがあるんですよねえ。
操作上の注意など
DpsSender.dllは「起動時にのみ」USBポートを検索します
ACTプラグインのDpsSender.dllは、ACT起動時にUSBポートを検索してArduino UNOの接続状態をチェックします。
従って、ACT起動前に装置をUSBに接続しておかないと、転送先ポートが見つからない状態になりますのでencdps値が転送されません。
私はよく装置が接続されているUSBハブのスイッチをOFFにした状態でACTを起動してしまい、FF14でバトルコンテンツに入っても液晶に何も表示されずに(´・ω・`)となります。
しかもDpsSender.dllは最後に選択されたCOMポートをACT終了時にセーブしますので、装置が非アクティブな状態でACTを起動してしまうと最初に見つかったCOMポートをセーブしてしまいます。
そうなると次にACTを起動しても間違ったCOMポートが選択された状態でDpsSender.dllが起動してしまいますので、プラグインのOption画面から正しいCOMポートを選択し直す必要があります。
液晶の表示がおかしい場合は電源を入れ直してください
偶に装置の表示が文字化けしてencdps値がまともに表示されなくなったり、[ ACT encdps monitor ] という起動時の表示のままバトルに入っても反応が無かったりする事があります。
コントロールチップの調子が悪いのか、私の書いたACTプラグインあるいはArduino用プログラムにバグがあるのか不明なのですが、USBポートの電源を入れ直すと正常に戻ります。
Arduinoはソースコードデバッグもできないし、言語仕様もよく調べてないんですよね。
まずこれで直ります。
これでもencdps値が表示されない場合は、ACTプラグイン(DpsSender.dll)のポート設定が間違っていると思われますので、そちらを確認して下さい。
まとめ
Logicool G13が使えなくても、費用\5,000弱でACTのencdps値がフルスクリーンのFF14でも見ることができるようになります。
Logicool G13は今や通販サイトでは高騰し、3万円以下で買える事はありません。
ヤフオク、メルカリ等で中古を買うにも状態の良いものは2万以上しますね。
もうこのデバイスは入手し難くなる一方ですし、故障率も高いため、いずれ別のデバイスに泣く泣く乗り換えざるを得ない未来がやってきます。
乗り換えるとしたら吉P監修の「タクティカルアサルトコマンダー F14」なんですが、正直に言って「他の候補が無い」からに過ぎません。
この手のデバイスはハード面だけではなく、制御ソフトの出来がとても重要なのですが、その点ではHORIの「タクティカルアサルトコマンダー F14」には不安しか感じないですし、スクリプト再生機能もどうせ無いんでしょ?
Razorとかが出しているパチものは、スティックがアナログスティックですら無く、WASDのボタンを中でクリックしているだけです。これは論外ですね。
いずれにせよ、G13が使えなくなったとしてもACTの値を見る手段は確保できましたので良しとしましょう。