《2XKO》如何打造線上對戰

這篇文章中,我們會介紹我們在打造連線玩法時所運用到的技術,確保玩家在線上對戰時,能享有和離線一樣公平、即時且有趣的遊戲體驗。

大家好!我是《2XKO》的資深軟體工程師Tony Cannon。在這篇文章中,我們將跟各位分享,《2XKO》團隊為了打造出近乎完美的線上對戰體驗,下了哪些功夫。

由於待會提到的技術非常多,需要的話,各位也可以閱讀以下懶人包,快速瞭解狀況:

  • 我們最在乎的是盡可能確保連線穩定並降低延遲。為了實現流暢穩定的目標,我們採用了各種不同的系統,包括主從式架構(client-sever architecture)、回滾網路碼,以及我們稱之為「公平對戰模式」(Fair Play mode)的功能。
  • 我們非常注重反作弊措施。也就是說,我們採用Riot Vanguard系統,以利我們確保你的對手是真人玩家,而不是靠腳本操控的外掛。
  • 我們使用多種全新工具,打造對戰外的系統環境。
    • 我們使用所謂的「遊戲驗證伺服器」(Game Validation Server),在雲端同步執行每一場對戰,以支援反作弊、技術評級與觀戰功能
    • 如今能夠橫跨各個房間搜尋配對,就算玩家本身所在房間的人數不多,也能迅速幫玩家找到對手。

就這樣。接下來開始深入介紹吧。

以線上體驗為核心的開發方式

在《2XKO》開發之初,我們就針對線上對戰辦法下了很大的功夫。打造核心技術架構的第一要務就是整合GGPO,並將所有的遊戲測試都搬到線上進行。儘管當初遊戲仍採用對等式(peer-to-peer)架構,我們仍在Riot拉斯維加斯的資料中心架設並執行封包代理伺服器(packet proxy),讓我們每天都能在真實的網際網路環境中測試遊戲。而在遊戲設計時期就採用這種方法正是非常關鍵的一步,每個角色的動作、連招變化、動畫與特效,從設計到測試都以線上對戰體驗為首要考量,確保線上遊玩同樣流暢、爽快,與離線模式別無二致。

主從式架構

隨著遊戲逐步開發,為了因應四名玩家的配對需求,以及更穩定的遊戲效能並擴大規模,我們從對等式架構轉而採用主從式架構。在四人遊戲中,相較於對等式架構的環境,每位玩家在用戶端伺服器收發的資料量能減少到三分之一,進而降低頻寬的需求、減少丟包的機率,並確保即使在較不穩定的連線環境下,也能享有流暢的遊戲效能。不過還有許多其他原因,促使我們改用主從式架構。

隱私與IP保護

最重要的第一個原因就是藉由主從式架構,我們能避免玩家的IP位址洩漏給遊戲內的其他玩家。而這點也正是對等式架構最大的問題之一,只要跟其他玩家連線對戰,你就會大開空門,對方能藉此傳送大量垃圾封包,癱瘓你的網路,強迫你中斷連線並吞下敗仗。更糟糕的是,玩家IP位址洩漏之後,就很容易遭受阻斷服務攻擊。我們非常重視玩家的網路安全,而改用主從式架構則是我們保護玩家IP位址最有效的辦法。 

時間與輸入驗證

伺服器在遊戲系統中還發揮另一項很重要的功能,那就是統籌遊戲的資料輸入、狀態和時間。在開發過程中,若系統能順利執行回滾機制,那影響網路對戰品質的最大關鍵,就是演算法能否有效平衡「時差」。簡單來說,就是要確保玩家彼此的回滾負載相同。如果我這邊回滾了三個影格,那對方也應該同樣看到影格回滾三個。但若我回滾了五個影格,而對方只回滾一個,那通常就是「時差」並未妥善平衡的結果。 

具體細節暫且不提,簡單來說,平衡時差就是同步對戰中所有玩家的遊戲時間。在採用對等式架構的雙人對戰中,要達成這件事本就相當棘手。要怎麼確保雙方玩家能在相同的資訊基礎上操作呢?(技術宅碎碎念:這個實際上牽涉到兩軍問題,而且很可能無解,我離題了……)在四人對戰中,這個問題又更加令人頭痛! 

所以這就是以伺服器統一時間的意義所在。有了中央伺服器負責對戰中所有玩家的對時,我們就能更準確地平衡所有玩家的時差。

公平對戰模式

我們還採取另一項稱為「公平對戰」的功能,以增進《2XKO》的線上體驗。我們大概都碰過這種情況:對手使用Wi-Fi連線、用手機熱點上網,或是電腦效能低於最低需求規格。結果會怎樣?遊戲開始卡頓、畫面不斷停頓——更慘的時候,甚至會出現大幅度資料回滾,導致角色在畫面中到處瞬移。在對等式架構下進行對戰,這已經是你能做到的極限了。如果無法即時取得所有玩家的輸入資料,那就算有回滾機制也無濟於事。而且,如果遇到惡意玩家的話,情況會更糟糕。某些惡意玩家可能會在控制器上加裝延遲開關,以人為方式製造封包遺失;或在PC平台上,透過拖曳遊戲視窗標題列的方式暫停遊戲執行。這兩種行為都會導致對手端出現嚴重的延遲峰值,進而在關鍵時刻中斷對手的連擊操作。 

為此,《2XKO》啟用公平對戰模式,遊戲伺服器會為每位玩家的輸入指令預留一段短暫的寬限時間。若指令在期限內未送達,系統便會自動重現該玩家上一次的輸入,讓遊戲流程不中斷。這項機制的效果相當顯著。在啟用這項機制的情況下,無論你的對手對自己的網路連線動什麼手腳,你的遊戲體驗應該都不會受到影響。若對方使用延遲開關,或Wi-Fi連線中斷,你大概也不會察覺。不過這項機制是一把雙刃劍。要是你的網路連線短暫出現幾秒鐘的故障,你可能就會莫名其妙地被對手打一整套連擊。

公平對戰模式目前還在試驗階段,需要更進一步的仔細調整才能帶來最佳效果。我們希望這項機制能夠確實懲罰那些故意造成封包遺失的玩家,但不要影響到意外出問題的其他玩家。全面落實這項機制的時候,我們會再另行通知,收集各位玩家對此的感想與回饋。

全球基礎設施與保護

當然,若沒有強悍的全球網路骨幹來支撐,這些連線品質的改進也都只是空談。換句話說,我們將充分運用Riot強大的網路基礎架構,將整個系統緊密串聯起來。《2XKO》採用Riot Direct架構承載遊戲內的網際網路流量,確保玩家的封包迅速傳送到伺服器,而不會遇到延遲問題。伺服器本身受到通用型DDoS防護服務保護,因此惡意玩家無法透過攻擊手段中斷你在私人房間舉辦的比賽決賽。我們使用Riot的遊戲臨時平台(Game Provisional Platform)在全球架設伺服器,確保在遊戲發售地區進行對戰的所有玩家都能享有低ping值的對戰體驗。我們希望能在全球玩家附近都架設伺服器,不過這還需要再花點時間,也感謝各位耐心等待我們全面架設完畢。

Riot Vanguard反作弊

公平的線上競技環境有賴於玩家秉持誠信,而我們除了架設穩定的網路環境,同時也引進全面的作弊防範措施。為了防範作弊事件,我們使用Vanguard系統,讓玩家更難以使用腳本和機器人作弊。Vanguard系統的成效非常棒,在《英雄聯盟》實施的時候,使用機器人作弊的案例下降了超過99%。這項機制能夠有效確保對手是真人玩家,且杜絕自動招架或落空懲罰腳本的使用。話雖如此,但維護公平競技的環境並非一朝一夕之功,而是需要不間斷的努力。而我們也會持續關注這方面的問題,並視需要調整我們的策略。

固定輸入延遲與影格節奏

我們同時也調整了我們的輸入延遲與影格節奏的子系統,確保玩家無論是在PC或家用主機進行《2XKO》線上或離線對戰,都能享有穩定一致的遊戲體驗。 

固定輸入延遲

我們使用的第一個技巧,就是對所有輸入指令統一增加固定的三個影格延遲。這是格鬥遊戲中一種常見的技術,可用來縮短回滾所需的時間。而在《2XKO》當中,無論是線上還是離線對戰,我們都採用了這個辦法。也就是說,玩家在離線練習中,抓到的連擊時機與養成的肌肉記憶能夠直接運用在線上對戰中。我們早在多年前就打定主意要套用三影格的輸入延遲了。從「落空懲罰」的時機,到最迅速的攻擊動作,遊戲中的所有對戰操作都以「三影格輸入延遲」為基準進行設計與測試。因此,即使存在延遲,整體遊戲體驗依然流暢而出色。 

影格節奏

我們的第二招則是著重開發影格節奏。影格節奏指的是系統在模擬、渲染與顯示每一張影格時的速度與穩定性。若影格節奏不穩定,畫面可能會出現明顯的卡頓;又或者,即使時機掌握精準,也依然無法順利觸發「單影格連段」。在影格節奏這方面,我們除了盡力減少輸入延遲,也花了很大的功夫在消除家用主機和PC之間的差異。目前而言,在PC、PS5和Xbox這三個平台上,從按下按鍵到畫面顯示對應結果所需的時間幾乎相同。所以同樣的,這代表玩家無論是進行《2XKO》離線對戰、線上對戰、在自家的PC上遊玩,還是在現場活動使用家用主機遊玩,應該都會有一樣的遊戲體驗。

遊戲驗證伺服器(GVS)

上文提到遊戲伺服器負責統一遊戲狀態,不過當時還沒詳細說明這代表什麼。這項設計最大的好處在於防作弊與防分身帳號濫用。《2XKO》的每一場競技對戰都會在伺服器上同步執行一份完整的遊戲副本。因此,在一場2對2的比賽中,雲端其實同時執行著第五個即時同步的遊戲副本。我們將其稱為遊戲驗證伺服器或簡稱GVS。 

而這項設計的好處真的非常多。首先,由於伺服器本身的架構原理,我們可以很清楚的知道哪個玩家惱羞成怒中離對戰或拔掉網路線,並給予相應的處罰。而GVS讓我們能更進一步瞭解對戰狀況:若某位玩家因為竄改導致他的本地遊戲副本與其他人不同,我們可以比對該玩家的遊戲狀態檢查碼與GVS的檢查碼,藉此找出異常玩家,進而防止透過人為修改遊戲狀態來強制造成平局的手段。 

GVS也會將對戰結果傳送到我們下游的資料管線。舉例來說,我們會將每一場對戰的詳細數據回傳至Riot的中央排名服務(Ranking Service)。該服務會將這些賽後統計資料輸入Microsoft的TrueSkill 2演算法,僅需少數幾場對戰,就能精準推算出玩家的實際技術等級。這樣一來,系統能有效減少實力懸殊的對局,並希望大幅降低「分身帳號」的濫用情形。

房間與觀戰

除了核心玩法,我們也在對戰外的系統環境下了很大的功夫,其中最重要的就是我們的房間系統。格鬥遊戲的精髓,就是和朋友們在家裡同樂對戰,或在本地舉辦的賽事與每週聚會中切磋較勁。《2XKO》房間系統的設計目的,就是要把這樣的社交氛圍完整重現在線上環境中。

進行中的對戰

其中我最喜歡的功能就是,玩家能夠旁觀任何正在進行的對戰。而圍觀其他玩家的對戰其實也正是離線遊戲的精髓之一。玩家可以藉此學習角色的新技巧、觀察其他玩家使用的戰術工具,或是為朋友加油打氣,甚至是幫那個在比賽中淘汰你的對手「加油」。這些都是格鬥遊戲中特有、令人熱血沸騰的體驗,而我們希望能在線上同樣重現這份感覺。

在《2XKO》房間中的玩家只要靠近正在對戰的機台,對戰中玩家的頭上就會跳出畫面,幾秒鐘內就能即時看到比賽現況。無論他們正在選角、剛開場,或是戰鬥進入最後關頭,雙方拼命搶下致勝一擊——旁觀的玩家都能幾乎即時地看到與參戰者相同的畫面。而且全程無需漫長的同步或重播延遲,你可以立刻投入戰況,彷彿從一開始就站在場邊觀看一樣。

伺服器方如何支援觀戰系統

為了讓觀戰系統成功運作,我們進行了大量的試驗。像《2XKO》這種使用回滾技術的格鬥遊戲非常一板一眼,只要掌握所有輸入指令,就能完整重現對戰過程。因此,若玩家靠近機台、從第一回合開始觀戰,我們只要依序將指令傳送給他,畫面就能完美重現對戰狀況。但要是已經打到一半了,那該怎麼辦呢?你還是可以將所有指令傳送給觀戰者,並幫他們快轉到當下的即時戰況,可是如此一來就會非常花時間。實際上,《2XKO》在Alpha Lab 1前、非常早期的房間系統就是採用這種方式。有用,但體驗不佳。觀戰者需要等5到20秒,畫面才能呈現即時戰況,導致大家根本不想使用這個功能。

然而隨著遊戲開發出GVS,我們就能以更巧妙的方式實現觀戰功能。各位應該還記得,GVS系統會在伺服器上即時驗證遊戲狀態。若玩家在對戰中途開始觀戰,我們不需要把過去所有的輸入資料都傳給他。相反地,我們會向GVS請求當下的遊戲狀態快照,並從那個時間點開始傳送後續的輸入指令。快照是一種記憶體使用效率高的儲存方式,僅保留系統中決定性的部分資料。它的大小僅有50 KB左右,因此很快就能傳送給玩家。我們不再需要快轉三分多鐘的輸入資料,取而代之的是,只要載入50 KB的檔案,玩家就能馬上看到即時戰況。簡直跟魔法一樣,至少對我來說是這樣。

要是沒有伺服器戰況模擬,我們絕對無法開發出這項功能。在觀戰系統的初期原型中,我們會截取對戰中第一位玩家的快照,再傳給觀戰者,結果卻引發各種問題。首先,截取並壓縮快照的成本相當高。在低規格平台上,只要有人開始觀戰,玩家就會掉幀。這種狀況完全不能接受。你能想像嗎?就因為有人在關鍵時刻加入觀戰,你可能就錯過了命中判定!而且不只如此,這樣也很不安全。我們不希望向惡意玩家大開空門,讓他們有機會假造快照,偷渡緩衝區溢位攻擊或其他有損玩家平台的方法。只要把觀戰資料的來源完全轉到伺服器上的可信端,就能避免上述所有問題。

跨房間配對

最後我想聊的是我們的跨房間配對機制。《2XKO》房間有多種展開對戰的方式:你可以直接向個別玩家發起挑戰、坐在機台等別人靠過來坐在你旁邊,像過去在遊樂場的美好時光一樣投幣排「下一場」,或者直接請配對系統幫你找個對手。 

通常房間人數滿員的時候,都會找得蠻順利的,但也還是會出現極端情況。要是房間裡的其他人都在忙各自的事,只有你一位玩家在找對戰怎麼辦? 

在Alpha Lab 1中,房間裡有很多有趣的玩法可以探索,例如排行榜、連勝紀錄,以及靠近就能觀戰的機制,但在某些特殊情況下,這些功能有時會拖慢你配對的速度。實際上,對於只想盡快找到線上對戰的玩家來說,利用主選單的「尋找對戰」可能還會比較方便,因為該機制會搜尋所有玩家,而非只有當下所處房間中的玩家。 

在封測的時候,我們調整了配對系統,讓系統在尋找對戰時,搜尋所有房間,而非只有自己所在的房間。若系統在自己所在房間找到對戰,我們就會在房內的機台預約戰局,並將玩家傳送過去開打。要是找到其他房間的玩家跟自己對戰,流程大致上一樣。各個玩家會在自己的房間裡預約到機台進行對戰,我們會渲染出對手的投影,坐在機台的另一側。對戰結束後,雙方玩家會各自回到自己的房間。別擔心,玩家的連勝紀錄不會因此中斷。 

由於跨房間配對系統會將所有房間內的玩家納入相同配對佇列,在房間中尋找對戰的速度,應該和透過非房間系統的主選單尋找對戰差不多。配對系統會在一定時間內,盡可能為玩家找到最適合的對手。若是多人在線的尖峰時段,玩家應該只需要稍等數秒,就會配對到適合的對手。但若是凌晨3:00這種沒多少人在線上的時段,我們還是會盡快幫玩家找到對戰,不過配對到的對手等級落差,可能就會比尖峰時段大。這種離峰時段配對較慢的現象並不是只有《2XKO》遇到,任何需要進行配對的線上遊戲,在玩家上線人數較少的時候,都會碰到這個現象。對於配對時間與玩家等級差距之間的權衡,我們都還能再調整,也很希望收到你們對這項機制的回饋。我們希望能在搶先體驗階段,將系統調整到最符合玩家期望的狀態。

未來展望

在這篇文章中,我們提到了不少內容,堅持看到這裡的各位真是太棒了。我們堅信,線上對戰絕不是格鬥遊戲的次等玩法。從伺服器驗證與回滾調整,到即時觀戰與跨房間配對系統,我們打造的每項功能,都是為了讓線上對戰能夠和離線對戰一樣公平、即時且有趣。話雖如此,隨著搶先體驗的到來,我們仍會持續調整、測試,並仔細傾聽大家的回饋,而未來也會秉持相同理念。請跟我們分享你的看法,踴躍回報各類錯誤並提供建議。

感謝閱讀!

Tony Cannon