.repファイルでなにかできないかなと思ったんだけどなお話
試しにねのーんがホストとクラの時のリプレイをClaude君に読み込ませてみて入力ログとか見れる?と聞いてみました。解析結果可能です。 .rep ファイルは入力ログそのものです。ファイル構造[0x00 - 0x7F] 128バイト ヘッダー (マッチ情報)[0x80 - EOF] 入力データ (1フレーム = 2バイト)↑ [P1の入力] [P2の入力]項目値総フレーム数20,272 フレーム推定…
試しにねのーんがホストとクラの時のリプレイをClaude君に読み込ませてみて
入力ログとか見れる?と聞いてみました。
解析結果
可能です。 .rep ファイルは入力ログそのものです。
ファイル構造
[0x00 - 0x7F] 128バイト ヘッダー (マッチ情報)
[0x80 - EOF] 入力データ (1フレーム = 2バイト)
↑ [P1の入力] [P2の入力]
項目値
総フレーム数
20,272 フレーム
推定時間
337.9秒 (約5分38秒)
フレームレート
60fps
入力バイトのビット構造
1バイト(8ビット)で1フレームの入力を表現:
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
A C X Z → ← ↓ ↑
例: 0x88 = 10001000 = 右(→) + Aボタン (ダッシュ)
実際のデータサンプル(frame 5030付近、ねのーん/aya)
frame 5030: P2 = 0x10 → Z (弱攻撃)
frame 5031: P2 = 0x04 → ←
frame 5032: P2 = 0x10 → Z (弱攻撃)
frame 5033: P2 = 0x04 → ←
...
← を押しながらZで弱攻撃を連打しているのが読み取れます。
全体の入力分布(P2: ねのーん/aya)
入力値意味フレーム数割合
0x00
ニュートラル
7,829
38.6%
0x08
→
2,608
12.9%
0x04
←
2,554
12.6%
0x88
→ + A
974
4.8%
0x84
← + A
883
4.4%
0x10
Z (弱)
860
4.2%
ヘッダーから読み取れる情報
byte[0x06]=0x06→ 月: 6月 ✓byte[0x07]=0x11→ 日: 17日 ✓(ファイル名の日付と一致)byte[0x0B]=0x01→ P1キャラID: 1byte[0x0E]=0x02→ P2キャラID: 2
一点気になる点として、P1(XXX/sakuya)の入力が98.7%ニュートラル(ほぼゼロ)になっています。これはネットプレイのリプレイでは対戦相手の入力が記録されないか、キャラ選択のロビー時間が大半を占めているためと思われます。
何か特定の情報(特定フレーム範囲の入力、コンボパターンの検出など)をさらに掘り下げたい場合はお知らせください。
c:\th123\replay\26年06月17日\2255_ねのーん(aya) vs XXX(sakuya).rep こっちだとどう?
frame 289: P1=00 [- ] P2=82 [�� A ]
frame 291: P1=00 [- ] P2=82 [�� A ]
frame 293: P1=00 [- ] P2=80 [A ]
frame 295: P1=00 [- ] P2=80 [A ]
frame 317: P1=00 [- ] P2=08 [�� ]
同じパターンが確認できました。2つのファイルを比較します。
2ファイルの比較結果
ファイル総フレーム時間
2139_XXX(sakuya) vs ねのーん(aya)
20,272 フレーム
337.9秒
2255_ねのーん(aya) vs XXX(sakuya)
28,498 フレーム
475.0秒
入力の記録割合
ファイルP1(左の人)P2(右の人)
File 1
sakuya: 1.3% のみ
aya: 61.4% active
File 2
aya: 1.9% のみ
sakuya: 64.1% active
両ファイルともP2側だけ入力が記録されており、P1はほぼ0です。
原因の推測
2つのファイルで明確なパターンがあります:
File 1 を保存したのは ねのーん(aya) → 彼女の入力が P2 バイトに記録
File 2 を保存したのは XXX(sakuya) → 彼の入力が P2 バイトに記録
つまり、th123のネット対戦リプレイは「リプレイを保存した側の入力のみ」がP2バイトに記録される仕様 のようです。相手側(P1)の入力はネット同期の都合でほとんど保存されないか、ゲーム内部で再現に使われない形になっています。
ヘッダーのキャラクターID確認
File 2でオフセット 0x3F = 0x02 = Sakuya (P2)、File 1で 0x3F = 0x0B = Aya (P2) と一致しており、P2キャラのIDがヘッダーに埋め込まれていることも確認できました。
要するに、入力解析はできるが記録されるのは実質P2(保存者)側の入力のみという制約があります。両者の入力を同時に分析したい場合は、それぞれが自分側のリプレイを保存する必要があります
これリプレイを保存したのはどっちもねのーん(私)でクライアントで接続したとき(2P)とホストで接続してもらった時(1P)だね
なるほど!それで謎が解けました。
th123のリプレイは「クライアント側(P2)の入力のみ記録される」仕様です。
ファイルねのーんの立場P1バイトP2バイト
File 1 (XXX vs ねのーん)
P2(クライアント)
XXX=ほぼ0
ねのーんの入力
File 2 (ねのーん vs XXX)
P1(ホスト)
ねのーん=ほぼ0
XXXの入力
どちらのファイルでも「クライアント側(P2)の入力だけが記録」されており、ホスト側(P1)はほぼゼロです。
おそらく内部的には:
ホスト側はクライアントから受け取った入力をリプレイに書き込む
ホスト自身の入力はゲームエンジンがリアルタイムで処理するだけで、リプレイファイルには別途書き込まれない
という仕組みになっているのだと思われます。
なので、自分(ねのーん)の入力を分析したい場合は File 1 のP2バイトを使うのが正解です。逆にXXXさんの入力を分析したい場合は File 2 のP2バイトを見る必要があります。
とのことだそうです、参考までに!

