PCSX2-rr

PCSX2 0.9.6に対してTAS製作に必要な機能を追加したエミュレータです。
ムービーの記録/再生/追記、pause機能、Frame Advance機能などが追加されています。
ムービーファイルはp2mという形式で保存されます。

2P入力の対応

PCSX2-rrは1P入力だけを保存する仕様になっています。
そのため、2P入力をできるようにするにはソースコードを修正してビルドしなおす必要があります。
2P入力に対応するためには以下の修正が必要です。

[ルートディレクトリ]\pcsx2\TAS.cpp

修正前 修正後
68 u32 MovieSize = g_Movie.FrameNum*6; 68 u32 MovieSize = g_Movie.FrameNum*6*2;

[ルートディレクトリ]\pcsx2\GUI\WinSysExec.cpp

修正前 修正後
222
223
if(g_Movie.File && g_Movie.Replay)
  fread(g_PadData[0]+2, 6, 1, g_Movie.File);
222
223
224
225
if(g_Movie.File && g_Movie.Replay) {
  fread(g_PadData[0]+2, 6, 1, g_Movie.File);
  fread(g_PadData[1]+2, 6, 1, g_Movie.File);
}
230
231
if(g_Movie.File && !g_Movie.Replay)
  fwrite(g_PadData[0]+2, 6, 1, g_Movie.File);
232
233
234
235
if(g_Movie.File && !g_Movie.Replay) {
  fwrite(g_PadData[0]+2, 6, 1, g_Movie.File);
  fwrite(g_PadData[1]+2, 6, 1, g_Movie.File);
}

ムービーファイル(p2m)の仕様

p2mファイル全体構造

  • 1P入力だけ(修正前PCSX2-rr)の場合
項目 Size 備考
Frames: 4Byte 総フレーム数(LittleEndian)
Re-records: 4Byte 追記回数(LittleEndian)
Frame[1] 6Byte 1フレーム目の入力
Frame[2] 6Byte 2フレーム目の入力
: : :
Frame[n] 6Byte nフレーム目の入力
: : :

  • 2P入力対応(修正後PCSX2-rr)の場合
項目 Size 備考
Frames: 4Byte 総フレーム数(LittleEndian)
Re-records: 4Byte 追記回数(LittleEndian)
Frame[1] 12Byte 1フレーム目の入力
Frame[2] 12Byte 2フレーム目の入力
: : :
Frame[n] 12Byte nフレーム目の入力
: : :

入力(Frame[n])について

1プレイヤーの1フレームあたりの入力は6Byteで管理されます。
この際、入力がない状態は「FFFF00000000」として定義されています。
ボタンを入力した場合、先頭2Byteの「FFFF」からビット減算して記録されます。
各ボタン入力に対応する先頭2Byteの状態は以下のとおりです。
入力 Byte表記
(BigEndian)
bit表記
(BigEndian)
(なし) FFFF 1111111111111111
7FFF 0111111111111111
BFFF 1011111111111111
EFFF? 1101111111111111?
EFFF 1110111111111111
START F7FF 1111011111111111
SELECT
FF7F 1111111101111111
× FFBF 1111111110111111
FFDF 1111111111011111
FFEF? 1111111111101111?
R1 FFF7 1111111111110111
L1 FFFB 1111111111111011
R2 FFFD? 1111111111111101?
L2 FFFE 1111111111111110
R3
L3

各ビットごとの状態に着目すると以下のとおりです。
先頭からのオフセットで示します。
Offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
入力 →? START × △? R1 L1 R2? L2

製作時の注意

pause状態の自動解除

Frame Advance(スペースキー)と同時にキーボードから別の入力をした際に、pause状態が自動で解除される場合があります。
原因はまだわかっていません。

ステートファイルの破損

ステートロードした際に、以下のメッセージがコンソールに出力される場合があります。
Loading state from: sstates\XXXXXXXX.00X
Bios Version X.X
Unknown IPU command: 2
        Loading GS
        Loading SPU2
        Loading DEV9
        Loading USB
このメッセージの出力後に再度ステートロードすると、PCSX2-rrが強制終了します。
詳しい原因はわかっていませんが、以下のことをすると発生しやすいようです。
  • キー入力直後のフレームでステートセーブ
  • ステートセーブが完全に終わっていない状態でFrame Advance
最終更新:2013年04月15日 00:26