TGM2のデータを取るやつ

Page content



テトリス ジ・アブソリュート ザ・グランドマスター2 (TETRiS THE ABSOLUTE THE GRAND MASTER2) のデータを取るソフトを作りました。

  • 到達LEVEL
  • 各テトリミノの出現回数
  • 各テトリミノの操作時間
  • 硬直時間(ライン消去時間)

を記録します。

現時点(V1.00)での問題点(改善される見込みは…)

  • 初期設定が面倒
  • 数字認識の精度がどこまであるのか?
     SVMを使用、パラメーター:
  svm.Type = SVM.Types.CSvc;
  svm.KernelType = SVM.KernelTypes.Linear;
  svm.TermCriteria = new TermCriteria(CriteriaTypes.Eps, 1000, 1e-8);
  svm.Gamma = 0.2;
  svm.C = 10;


ダウンロード

64bit版Windows専用です。
(https://www.dropbox.com/scl/fi/8if8s0yqjqg7pmw6rmxj0/TGM2_-_V1.00.zip?rlkey=q19u5ip81hi46nalqdrag9olt&dl=1)

使い方

OBS Studioの使用を前提に説明します。

セーブデータについて

ソフト内の設定などはdata\main内のデータが使用されます。
data内に基盤、Nintendo Switchの映像を基に作成したプロファイルがありますので、データを参考にしたい場合は適宜リネームして使用してください。


OBS Studioの設定

  1. OBS StudioにTGM2の画面を取り込みます。

  2. フィルタ設定を開き、クロップ/パッドを追加、黒帯部分を削除します。LEVEL200~299の画面が境界を判別しやすいと思います。
    クロップ後のアスペクト比は4:3に近しくなると思います。ならない場合、キャプチャソフトのスキャンモードにオーバースキャンを指定している場合はアンダースキャンに変更してください。そもそもキャプチャ時点でアスペクト比が異なっている場合は、そのまま次に進んでください。

プレビュー画面上でのトリミング(枠線が緑色になる)は使用しないでください。この後行う仮想カメラ出力に反映されません。

  1. 仮想カメラ開始の右にある⚙を押し、以下のように設定します。
    ・出力の種類:ソース
    ・出力の選択:(TGM2を表示しているソース)


記録tgm2dataloggerソフトの設定

アプリを開いたらまずは設定を開き、初期設定を行います。


映像デバイスの設定

以下のように設定してください。

  • 映像デバイス:OBS Virtual Camera
  • 解像度:1280 x 720(OBS Studio自身の解像度のアスペクト比に合わせる)
  • フレームレート:OBS Studioのフレームレートに合わせる(60を推奨)

キャプチャ領域の設定

各領域の設定を行います。

  • ゲーム画面:ゲーム画面のみが映るように
    OBS Studio自身のアスペクト比が16:9の時、アスペクト比16:9以外の映像を仮想カメラ出力すると左右に黒帯ができるので、その分を補正する必要があります。
    OBS Studioから受け取った映像がこの領域を基にクロップされた後、強制的に 960 x 720 にリサイズされます。以下の各領域はそれを踏まえて設定してください。
    デフォルト:(160, 0), 960 x 720

  • シーン:「GO」「GAMEOVER」両方が映る領域
    計測開始、計測終了の検出に使用します。
    デフォルト:(70, 320), 210 x 110

  • NEXT:NEXTミノの、どのテトリミノでも描画されるミノの領域(例:Oミノの左上)
    デフォルト:(155, 50), 4 x 4

  • LEVEL:現在のLEVELの1の位の領域
    デフォルト:(373, 549), 22 x 28

  • SCORE:SCORE領域(6桁分、左から6、5,…)
    LEVELの領域から推定を押した後に、LEVELと同じように映るように調整

LEVEL領域の参考:


テトリミノの色の設定

各テトリミノの色をRGBで設定してください。
検出したミノの色をログに出力にチェックを入れると、分析したミノの色がメイン画面に出力されるので、その値を参考に入力してください。


LiveSplitと連携する

LiveSplitと連携するにチェックを入れると、「GO」を認識した時にLiveSplitをスタートし、LEVELが100上がる毎にスプリットします。
「GO」が表示されてから実際のスタートまで約0.65秒かかるので、LiveSplitのSplits Editorを開き、Start Timer atに-0.65と入力してください。
リセットも自動で行います。LiveSplitの記録更新ダイアログを消したい場合は、右クリック → Settings → Warn On Reset If Better Times のチェックを外してください。


※基盤を使用している場合、実時間とタイムにズレが生じます。以下のスクリプトを使用することでタイムを補正できます。
https://www.dropbox.com/scl/fi/2m3hv3q6vlzf4ks9a5fn3/TGM2.asl?rlkey=fmjrdkaaidpyxhp474r3e63fu&dl=1

使用方法
  1. LiveSplitを右クリック → Compare Against → Game timeを指定
    aslはGame timeのみ操作できます。LayoutのSplitsやSubSplitsを利用している場合は、Layoutの設定を開き、Timing MethodをGame timeに変更すると良いでしょう。
  2. LiveSplitを右クリック→Edit Layoutを選択、Layout Editorを開く。
  3. + → Control → Scriptable Auto Splitterを追加する。
  4. Script PathにTGM2.aslを指定する。

※記録ソフトの方は実時間で管理したほうが良いと判断したため補正を行っておりません。

数字認識モデルを作成(必要に応じて)

このソフトはLEVEL、SCOREの値の検出にSVMを使用しています(SCOREの値はライン消去が発生したかの判別に使用しています)。
同梱している数字認識モデルでは誤認識が発生する場合、モデルを新たに作成する必要があります。

  1. 学習に必要な画像を収集(収集方法:こちら
  2. 数字認識モデル作成を押してウィンドウを開く。
  3. 指示に従いながらボタンを上から順番に押す。
  4. 生成されたモデルをデフォルトのモデルと置き換える。
    data\main\model.xmlファイルが実際の認識に使用されます。

設定の確認、必要な画像を収集

設定を開いたままメイン画面の開始を押してください。
分析中に画面下のラジオボタンを切り替えると、各領域のプレビューが表示されます。誤った領域が表示される場合はパラメーターを調整してください。
画像保存を押すとプレビューに表示されている画像を保存します。保存先はsavedimageです。ゲーム画面が適切にトリミングされているかの確認や各種画像の収集に使用します。

確認事項

  • ゲーム画面:ゲーム画面のみが映っているか?
  • シーン:GO、GAMEOVERが映っているか?
  • NEXT:どのテトリミノでも色が映っているか?
        ミノの色の設定は行ったか?
  • LEVEL(1の位):LEVELの1の位が映っているか?
  • SCORE:各桁の数字がLEVELと同じように映っているか?

GO、GAMEOVER画像の収集

GO、GAMEOVERの検出に必要な画像を収集します。 シーンを選択し、GO、GAMEOVERが表示されたときに画像保存を押してください。 画像をそれぞれgo.pnggameover.pngにリネームし、data\main内にある画像と置き換えてください。

数字認識用の画像の収集

数字認識に必要な画像を収集します。
LEVEL、SCORE領域の調整を済ませた後、LEVELのラジオボタンを選択し、一定間隔でにチェックを入れてください。チェックを入れている間、設定した間隔で画像が保存されるので、しばらくゲームをプレイしてください。
LEVELが100上がる毎に背景が変わるので、各背景の数字の画像を収集できると認識精度が上がるかもしれません。
画像の収集を終えたら、こちらに従って認識モデルを作成してください。

稼働

すべての設定を終えたら、OBS Studioの仮想カメラを開始し、記録ソフトの開始を押してゲームをプレイすれば自動的にデータが取れると思います。
正常に動作すればログは以下のように出力されます。

【 01:07:07 GO 】
LV100 00:49.10
LV200 01:32.43
【 01:08:44 GAMEOVER 】
計測時間:01:49.16
到達レベル:207
1ライン消去回数:23
2ライン消去回数:12
3ライン消去回数:1
4ライン消去回数:0
累計硬直時間:14.155
Iミノ出現回数:22
Oミノ出現回数:22
Tミノ出現回数:25
Sミノ出現回数:23
Zミノ出現回数:22
Jミノ出現回数:22
Lミノ出現回数:22
Iミノ平均操作時間:0.466
Oミノ平均操作時間:0.467
Tミノ平均操作時間:0.520
Sミノ平均操作時間:0.488
Zミノ平均操作時間:0.587
Jミノ平均操作時間:0.556
Lミノ平均操作時間:0.541
 ミノ平均操作時間:0.512

※LEVEL x99、998に到達してからラインを消去するまでの時間は硬直時間として扱っています。

情報を細かく見たい場合は、exportフォルダ内にプレイ毎のデータが保存されています。
overall.xlsxにはログに出力されている情報が集積されます。



記事内で使用しているTGM2 Plus アーケード版のゲーム画像は、つぶなめ氏に許可をいただき、プレイ映像をキャプチャーした物です。
#tgm_series