与太話です。

リプレイ収集の自動化をしてて、「リプレイIDってハッシュじゃなくて通し番号なのか」と気づいた。
ということは、どこかに原初のリプレイがあり、下っていけば見つけることが可能だ。
しかし肌感、こんな桁数(最初の数桁は何らかの意味を持たせて固定だったりするだろうし)で足りるのか?どっかで折り返しちゃわないの?

リプレイID(以下RID)は9桁でできているので、牧歌的に000000000と打って検索、まあでない。
最近の自分のRIDが4EAExxxxxとなっている。
じゃあ1xxxxxxxx、3xxxxxxxx、2xxxxxxxxとさがしていく、ない。
4開始でいいっぽい。
んで検索していくうちに「4a8380000」から「4a8310000」の間の何処かである、までわかる。
バカバカしいがこの作業は手動。

手動二分探索の模様。バカだ。

そしてとうとう見つけた。こんなこと思いつかなきゃよかった。
近辺のリプレイ見てて、どうも最古のリプレイは2016年5月5日のものになりそうだな、と当たりはついていた。
スト5は発売が2016年2月16日(日本は2016年2月18日)となっているので、発売直後のリプレイは記録されてないか、マスクされてる(バージョンが古くて再生できないとか)のかも。
何にせよ我々は2016年当時のリプレイ鑑賞すらできる環境にあると。
けっこうすごいことよ。

最古はラウンジのこの対戦。左の人は現役で、グラマスなってました

じゃあリプレイは何件保存されているでしょうか

私の直近(昨晩)のリプレイIDが4EB111874。みっともない試合だから検索する必要はない。
んで原初のリプレイが4A83053B3。この間の個数をとれば分かると。

>>> r1 = "4A83053B3"
>>> r2 = "4EB111874"
>>> int(f"0x{r1}", 16)
20001608627
>>> int(f"0x{r2}", 16)
21123635316
>>> int(f"0x{r2}", 16) - int(f"0x{r1}", 16)
1122026689

というわけで1,122,026,689件のリプレイをCFNが持っている、とわかった。
ナン件?1億1千万件。
カルアルマッチ、ランクマ、ラウンジ全部込みでこの件数。
感想としては「あ、そんなもん?」。もう一桁多いだろうと思っていた。このくらいの件数なら、RIDがあの桁数でも、件数が一桁増えても十分に余裕があるから問題ないな。
設計した人えらいなあ。。。

余談

ちょうどこの頃ってFRPとかリアクティブプログラミングとかの言葉が出てきて、なにかの一連の操作をタイムラインとして保持することで、軽量・巻き戻しや再実行可能なデータの作りができるよねーみたいな話が活発だった。「活発」というのはそのへんのエンジニアの話題に乗るって意味だから、先端の人たちはとっくに触ったりしてたはず。

私は浮足立ったものの、Web界隈においてオープンリールみたいなアプリを書く未来が1ミリも思いつかなかった(データは一方向で流れりゃいいし再生可能である必要がない)のでリアルな議論として読み取ることができず、理解を後回しにしたため詳しくはない。
スト5のリプレイを見たときにタイムラインで記録していることはわかったから、このへんだと役に立つ概念なのかと感心していた。

対戦開始からフレーム単位で位置と操作を記録していくことで、これだけの件数のデータをさほどの苦労もなく取り出すことができるようになってたよと。
1ラウンド99秒かかった場合のフレーム数は5940F、フレームごとに2キャラの縦横の位置情報、立ちしゃがみジャンプなどの姿勢、移動状態とボタン打鍵の情報を最大5ラウンド分くっつけてMIDIの楽譜みたいになっているはず。
それにメタデータとして日時やFID、選択中のキャラクターなんかをくっつけたらリプレイデータの一丁上がりという具合、たぶんね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です