メインコンテンツまでスキップ

戦闘の権限

オンラインのワールドでは、ターンを解決するのはサーバーで、クライアントはそれを描くだけです。

この一文は書くのは簡単で、守るのは難しい。「権威的」と称する戦闘システムの多くは、結果については権威的でも、そこへ至る途中のすべてについては曖昧です——そしてプレイヤーが実際に見ているのは、その途中です。ダメージはサーバーが決めるのに、効果抜群だったかはクライアントが決めるなら、同じ戦闘を見ている二人のプレイヤーが別の戦いを見ることになります。

ですからサーバーは結果を送りません。何が起きたかを事実ごとに送り、クライアントの仕事はそれをそのままアニメートすることです。

サーバーに対して進行している野生戦闘

このスクリーンショットに写っているものは、どれもローカルな判断から描かれていません。野生のキャタピーはサーバーが選び、そのレベルも一緒に届き、右側の四つの行動はクライアントが提示を許されている唯一のものです——それぞれが結果ではなく要求になります。下部のバッジ(32ms · Server: US-East)と上部のチャンネル帯は同じセッションのものです。これは一本の接続であり、ロビーに後付けした戦闘ではありません。

一ターンから返ってくるもの​

送信した行動はどれも、一つのターン記録として返ってきます。興味深いのは、その中身が数値よりも語りである割合です。

フィールドクライアントがそれで何をするか
PlayerMoveName, EnemyMoveName実際に解決した技の名前
PlayerDamageDealt, EnemyDamageDealt通ったダメージ
PlayerHpRemaining, EnemyHpRemainingサーバーが残っていると述べる HP
PlayerFainted, EnemyFainted倒れたのは誰か
BattleEnded終端:勝ち、負け、捕獲、逃走
FleeAttempted, FleeSucceeded, FleeChance, RunAwayAttempts逃走の経緯すべて
EnemySubstituteMonsterId, EnemySubstituteSpeciesIdトレーナーのモンスターが倒れたとき、誰が出てきたか
TurnNumberクライアントではなくサーバーのターン計数

HP のフィールドに注目してください。クライアントは自分が持っていたと思う HP からダメージを引き算しません。サーバーが述べた数値を受け取ります。この二つは同じものではなく、食い違ったときに生き残るのは一方だけです。

交代のフィールドにも注目してください。トレーナーのモンスターが倒れたとき、サーバーはどのモンスターが出てきたかを id と種族で述べます。以前の版は交代が起きたことだけを述べていて、「誰かが出てきた」では描くのに足りません。

拒否は一級の答えである​

最も重要な場合のために、三つのフィールドがあります。

フィールド意味
Refusedサーバーはこのターンの解決を拒んだ
RefusalReasonその理由を言葉で
RefusalFactorモデル化できなかった具体的な要素

モデル化していない要素——ある効果、道具の相互作用、知らないビルドのルール——に出会ったサーバーは、そのターンを拒否し、何が止めたのかを名指しします。中立に解決することはしません。

それが設計のすべてで、代案は見た目より悪い。未知の要素を黙って「効果なし」として解決するサーバーは、最後まで走りきり、しかも誰にも見えない形で誤っている戦闘を生みます。プレイヤーは技が何も起こさないのを見て、その技が弱いと結論づけます。拒否はうるさく、推測は静かで、高くつく失敗はその静けさのほうです。

ローカルな戦闘に退避してはならない

拒否はプレイヤーに示されます。それが「ではこの戦闘をクライアント側で解決しよう」に翻訳されることは決してありません。一ターンでもローカルに解決した瞬間、サーバーの記録とプレイヤーのゲームは分岐し、その後のどの処理も、どちらが本物かを言えなくなります。

これが買ってくれるもの​

ターンがサーバー側で解決されるため、一群の不正には足場がそもそも存在しません。

  • 野生の遭遇はサーバーが生成します——種族、レベル、個体値、色違い。クライアントは好みの結果が出るまで振り直すことができません。
  • 捕獲はサーバー側で検証されます。 捕獲判定はクライアントのものではありません。
  • ダメージの乱数、急所、能力ランクはサーバーの判定です。
  • PP、わるあがき、道具の使用はサーバーが計上するので、クライアントは持っていないものを使えません。

正直な限界​

サーバーの権限はオンラインモードに限られます。Core のオフライン戦闘経路は手つかずで、同じエンジンが以前とまったく同じようにシングルプレイヤーのゲームを動かします。サーバーはどこにもありません。その境界は意図的なものです。オンライン層は任意で有効化するモジュールであり、一度も有効にしない購入者はこのどれにも支払いません。

参照:PvP 戦闘(マッチメイキング、観戦、レイド)と、ワールド設定(サーバーがトレーナーのレベルに適用するルール)。