通常マルチプレイヤーの共有 relay とスコア同期を安定にする #3

Closed
Superories wants to merge 0 commits from superories/normal-multiplayer-score-sync into main AGit
Collaborator

この PR は、先に閉じた通常 multiplayer の multi-node と local relay 変更を含めた、まとめた version です。ranked match は入れていません。

今回の main point は score sync です。network delay や jitter がある時、古い judgement packet が次の circle に入って、二人の score、combo、result が少し違うことがありました。通常 note、Miss、大音符、drumroll と balloon packet に circleIndex と現在の score state を入れて、受信側は relay sequence と circleIndex で古い packet を捨て、対応する note だけに適用します。score state は remote player の表示と result にも使います。

relay には syncping/syncpong、millisecond server_time、peer ごとの monotonic seq、duplicate gamestart の idempotent handling を追加しました。既存の five-character invite、/p2、普通の invite protocol と古い note payload はそのまま使えます。taikoapp.uk は shared relay を複数選べて、local multiplayer server も normal node として登録できます。

LAN では二つの browser client で、node invite、normal note、Miss、大音符、drumroll、balloon、branch、result、disconnect 後の次 round、second node と legacy five-character invite を確認しました。遅延を 80–1200 ms の間で変えても、双方が見る相手の points/good/ok/bad/maxCombo/drumroll/gauge/combo と result は一致しました。Node test 14/14、Python relay/node test 11/11、JavaScript syntax、Python compile、diff check も通っています。

この PR は、先に閉じた通常 multiplayer の multi-node と local relay 変更を含めた、まとめた version です。ranked match は入れていません。 今回の main point は score sync です。network delay や jitter がある時、古い judgement packet が次の circle に入って、二人の score、combo、result が少し違うことがありました。通常 note、Miss、大音符、drumroll と balloon packet に circleIndex と現在の score state を入れて、受信側は relay sequence と circleIndex で古い packet を捨て、対応する note だけに適用します。score state は remote player の表示と result にも使います。 relay には syncping/syncpong、millisecond server_time、peer ごとの monotonic seq、duplicate gamestart の idempotent handling を追加しました。既存の five-character invite、/p2、普通の invite protocol と古い note payload はそのまま使えます。taikoapp.uk は shared relay を複数選べて、local multiplayer server も normal node として登録できます。 LAN では二つの browser client で、node invite、normal note、Miss、大音符、drumroll、balloon、branch、result、disconnect 後の次 round、second node と legacy five-character invite を確認しました。遅延を 80–1200 ms の間で変えても、双方が見る相手の points/good/ok/bad/maxCombo/drumroll/gauge/combo と result は一致しました。Node test 14/14、Python relay/node test 11/11、JavaScript syntax、Python compile、diff check も通っています。
Superories closed this pull request 2026-08-17 06:41:09 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
yuuki/taiko-web!3
No description provided.