︿

【英雄聯盟】官方專題:如何復甦一條龍? 2016世界大賽搶救翱銳龍獸秘密檔案!

法蘭克貓 2017年03月31日 17:01:00
近期的Riot官方專題接露了一段在2016世界大賽時工作團隊搶救翱銳龍獸的故事。

近期的Riot官方專題接露了一段在2016世界大賽時工作團隊搶救翱銳龍獸的故事。

在2016年的9月29日,同時也是2016年世界大賽的首日,我們因為遊戲中bug的關係在比賽中禁用了翱銳龍獸,接著隨著時間的過去,轉眼來到了十月二號,也就是世界大賽的第四天,這位星際漫遊者再度回到了召喚峽谷當中。這次我們要為大家帶來這個在錯誤的時間點出現了Bug,以及一支團隊日以繼夜進行搶修的故事。

 

舊金山 ─ 9月29日 10:30 PM (PT)

 

2016年世界大賽的首日賽程進入到了尾聲,最後一場比賽由來自北美的TSM對上中國的RNG,在比賽開始的兩分鐘後,TSM的Bjergsen選手因為對手Xiaohu的翱銳龍獸在視覺特效上出現了一些問題而要求比賽暫停 ─ 當下翱銳龍獸被動技能的星體特效竟然消失了?

 

Luke Rinard(翱銳龍獸設計師):身為翱銳龍獸的設計師,我真的、真的很高興能夠看到他在這種等級的職業賽事中出場,他之前是有出場過啦,但我們現在說的可是世界大賽呢!然後當下遊戲就陷入了暫停,我當時心裡想著:「喔不,我敢說一定是翱銳龍獸出了問題。」每當遊戲中有巴德和翱銳龍獸存在的時候我總會這樣說,我當時和旁人說到:「我敢打賭一定是他!」通常我的猜測不會成真,只是這次例外。

 

Brian Bosse(引擎建築師):我當時在家看著比賽的實況播送,接著遊戲就陷入暫停了,每次只要遊戲進入暫停我的心臟就會加速跳動,而我總會不斷的祈禱著:「拜託是音效出了問題,拜託是音效...天啊,上帝,可以是音效出問題嗎?」因為通常都是音效出問題(而且修理起來也很快),只是這次不是這樣。

 

Amelia Von Haden(遊戲程式設計師):我們當時看著比賽的進行,然後轉播回放了場上發生了什麼事情,我們當時就像是:「喔~~~不!!!」

 

 

Raven Keene(主裁判):面對Bug在第一時間的處理方式通常是一樣的:盡可能的去蒐集資訊,在這個特殊的案例中,因為Bjergsen表示他看不到翱銳龍獸的星體裁判便介入了比賽,我們從賽場上的錄影回放中發現了選手視角看見的問題,當下我們自己的觀戰客戶端看不出任何端倪,但是一旦我們提取了Bjergsen視角的影片檔,很明顯的他確實看到了這個bug。

 

我們接著重新啟動了客戶端,接著大家認為問題應該解決了,我們說到:「喔,好吧,這可能是物件沒有正確的被讀入,我們不需要去討論是否需要重賽。」但是過了幾分鐘以後這問題又出現了,我們便明白重啟客戶端對目前的情況來說沒有任何幫助,所以我們必須想出另一種解決方案,這時重賽看起來就是個可行的方案了。

 

Nick Troop(電競賽事直播製作人):看到有英雄可能會在剩下的比賽中都遭到禁用,而且還不確定要花多少時間來修復,感覺就像是我們辦得很失敗,即使我們無法事先預測翱銳龍獸會出現這些很特殊的Bug。

 

 

洛杉磯 ─ 9月29日 11:00 PM

 

隨著翱銳龍獸被禁用,我們便開始和時間競賽,目標是要找出bug的成因和找出修正的方法,一支Riot小隊當下立刻前往了位在洛杉磯的辦公室並且著手進行解決。

 

Brian Bosse:我當時在公司內部的聊天室,瞬間在對話頻道爆出了大量的「我們翱銳龍獸的星體出了問題!」恰巧我也有參與到系統的部分設計,我當時想著:「好吧,該是我出馬的時候了,該上陣了!」,接著在比賽陷入第二次暫停的時候確定了這問題依舊存在著,於是我便披上了蝙蝠披風,接著走進了辦公室開始埋頭尋找解決的方法。

 

Amelia Von Haden:我當時立刻加入聊天室想要知道究竟出現了怎樣的bug,畢竟我是位遊戲程式設計師,我對遊戲中的編碼自然是再熟悉不過了,所以只要是跟遊戲相關的問題,我想我都能提供一些幫助,我在翱銳龍獸的開發期間也在英雄開發團隊中待過一段時間,所以我對他被動技能的星體自然是有所理解,當我意識到我能夠提供幫助,我便在心中想著:「管他的,我現在就要去工作室。」

 

Brian Bosse:我當時在前往工作的路上想著:「電競的整體環節究竟在哪裡出了問題?所有東西都有好好的組織起來嗎?」當時已經是我們的下班時間了,我們也沒有應付這種狀況的正常回報管道,只能靠著那些當下有空的人立刻的投入解決問題的作業,而我當時剛好也有空,所以我便參與了進去。

 

 

舊金山 ─ 9月30日 12:00 AM

 

隨著第一天賽事的落幕,舊金山當地的電競團隊立刻就針對bug進行了回報,這是在確認與修復問題流程中很重要的一環,這時候有三支分散在北美大陸上的團隊正在嘗試解決這個bug,分別是:舊金山當地的電競團隊、洛杉磯的開發團隊以及一支位於蒙特婁的外部品質控管團隊。

 

Raven Keene:我們當時花上數個鐘頭試著在複製出來的場景中排除所有的可能性,我們盡全力的模擬出比賽中發生問題的場景,然後將每項變數挑出來看,我已經不記得最終我們進行了多少項測試,不過大概類似的重啟模擬超過了20次,我們不斷的重複找尋引發這次問題的原因。

 

Nick Troop:最早的重製場景工作是一位工程師是利用我們的單人模式建構出來的,他當時試著在這個模式中複製出九隻翱銳龍獸,但這很明顯是不太可能的,不過透過工程師的立場我們卻得以利用這種方式在賽場進行一些測試。在之後的賽事中禁用某位英雄直到找出問題的癥結是一回事,但是讓Raven陷入做出這項決定的困境就是另一回事了,我們不希望陷入這種情境當中 ─ 這對觀眾來說感覺很差,對職業選手也是。

 

Raven Keene:這件案例中最有趣的事情就是一切猶如霧裡看花,那時我們開始使用一些職業選手的帳號來進行實驗,因為我們的測試用帳號無法模擬出我們需要的資訊。這也讓我們開始思考這問題的產生可能和帳號有所關連,因為我們創造的所有東西和變數都是一致的,唯一不同的是帳號本身。

 

 

洛杉磯 ─ 9月30日 2:00 AM

 

一支在南加州當地的團隊成功的作出了第一個複製場景,並且開始透過逆向工程嘗試找出造成問題的起因。

 

Brian Bosse:面對這種案例的最優先事項就是要理解當下的情況 ─ 你知道那些資訊以及你不知道那些資訊?當時我們所擁有的東西就只有一部Bjergsen視角的影片,我們試著用當地的主機讀取客戶端來重建場景,然後盡可能的讓翱銳龍獸走在原本比賽中所行走的路徑上,但最終還是沒能成功模擬出賽場上的情況,幹,這還真的不是那麼簡單。

 

Amelia Von Haden:我們持續的坐上了數個鍾頭只為分析了那些程式碼,接著我望向我們的單人模式工具,我便開始駭進這個程式,然後讓它得以出現20個無延遲的觀查者模式而不是僅僅一個,我當時一次使用了大量的觀查者模式來測試比賽中究竟發生了什麼事,當然一次弄出20個觀查者模式讓我的電腦開始發出哀號,當時其他人還在嘗試重製場景的階段呢。

 

Brian Bosse:大約到了凌晨兩點,我們的其中一組複製場景模擬出了相同的問題,但是發生的情況卻和賽場上有些不同,我們其中的一位遊戲開發者在同一台電腦上使用了十組客戶端和伺服器,最終產生這個bug的機率大概是五十分之一到一百分之一,當時我們能做的就只是坐在那邊等待bug發生,而且這情況只會出現在其中一個星體上。

 

Amelia Von Haden:我們那時終於做出了一個複製場景,當時我們就像是:「喔,媽的,我們終於搞定了。我們能夠利用這東西做些什麼事嗎?」當時那個場景還無法連結到我們除錯的工具上,所以大家立刻開始在能夠進行編碼的主機上使用同樣的手法來複製這個場景,大概嘗試了將近20幾次吧,我成功的複製出了當下的場景,雖然這次只有兩個星體消失,不過至少我們獲得了一些東西,這過程就像是拆彈一樣,就在我連上除錯系統的當下,我們就立刻打給Brian了:因為這個程式碼是他寫的,他很理解這玩意兒,要說有誰能夠抽絲剝繭搞定這問題,一定就是Brian了。

 

Brian Bosse:這和在賽場上發生的bug並不相同,但是我們能透過這個樣本來找出星體發生了什麼事,以及導致星體消失的原因為何,我們在接下來的五個鐘頭裡嘗試利用觀察者系統來追溯問題的起因,最終包含在過程中小憩一下的時間,我們大約花費了12個小時,一直到大約凌晨4點半吧,最後一名成員才離開了辦公室,然後早上9點大家又開始陸續回來。

 

 

洛杉磯 ─ 9月30日 9:30 AM

 

問題的根源已經被確認了,隔天Riot的員工們也開始湧入辦公室開始進行工作。

 

Luke Rinard:隔天我到了辦公室的時候發現翱銳龍獸已經禁用了快一、兩天,但是我們已經有修復的檔案了,我很驚訝,這究竟是怎麼做到的?Brian當時熬了一整夜,他的桌子上有著滿滿的汽水罐,看起來有些憔悴,但是他依舊醒著繼續工作,他對於能夠解決這問題感到很興奮。

 

Amelia Von Haden:Brian桌上堆滿大量的汽水罐看起來很好笑。

 

Luke Rinard:那張桌上堆滿汽水罐的照片馬上就在辦公室傳了開來,老天啊,那可是超過了一打的汽水罐阿。

 

Brian Bosse:因為電競賽事的作業環境和現行遊戲中的不同,所以我們一直在猜測是觀察者模式出了問題,電競賽事使用的是另外一種觀察者模式,當這件事情發生後,他們之後在舞檯上利用比爾森的帳號開始進行場景模擬,隨著真實的場景出現後,他們便開始找尋當中的癥結點:「哪些時候會出現這問題,哪些時候不會?」隨著我們收集到的這些資訊和針對各式各樣問題偵錯後所得到的資訊,我們最後終於可以畫出一個整起事件從頭到尾的因果軸了。

 

 

舊金山 ─ 9月30日 10:00 AM

 

當問題被發現並確定了修復的方式後,電競團隊在世界大賽進行到第四天的時候宣布翱銳龍獸重返賽場。

 

Raven Keene:當時我們的第一個念頭就是:「感謝上帝」,接著第二個念頭就是讚美如同上帝化身的Brian完成了如此傑出的工作,接下來的問題便是檢視這個修正檔,這種修復方式很容易嗎?以這個案例來看是的,因為我們可以根據情況來對帳號進行調整,接著便是要和所有在Riot工作的相關人員溝通這件事,因為這起案例中的bug和帳號、遊戲中的觀察者模式以及內部的觀察者模式息息相關,所以我們必須花很大的功夫和所有的線上營運團隊溝通這件事,我們必須確定當這問題解決後每支隊伍獲得了相關的資訊,不過這也包含我們需要去看看那些曾經一度中斷的練習賽,我們必須在這些練習賽因此中斷前搶先解決這問題。

 

Brian Bosse:當時真的鬆了一口氣,從事件發生到慢慢減緩最終得以漸漸變好,這幾乎是個不可置信的最好結局了。

 

Luke Rinard:我向有參與到這次事件的大家說了些好話,並且告訴他們這對我來說非常重要,所有提供幫助的人真的都是太棒了,我和他們說到:「感謝你做了這些事情...」的時候他們的反應就像是:「沒什麼啦。」大部分的人會和我說到:「幹嘛謝我?不然星期四的半夜不睡覺要幹嘛?當然是去辦公室度過幾個鐘頭阿。」

 

Brian Bosse:我想要強調的是這次事件中沒有人是被迫召集的,有很多的工程師、負責QA的傢伙們以及一些產品團隊的人員自願花費他們的時間來做這些事情,沒有人是被強迫的,看到這些人花費可觀的時間來修復這個bug真的是很令人驚奇。

 

Amelia Von Haden:我覺得提供幫助是我的職責所在,當時很晚了,很多人已經回家了,隔天還有新的比賽要進行,我了解這個問題,我也能幫助他們,我當時就覺得...去幫忙是一件正確的事,我知道很多隊伍都在練翱銳龍獸,每個人都希望看到這位英雄出現在賽場上,一想到世界大賽可能會看不到翱銳龍獸,那感覺就像是...靠...我才不會讓這件事情發生。

 

 

舊金山 ─ 10月2日 8:30 PM

 

翱銳龍獸在第四天的時候再度可以使用,並且在CLG對上ROX Tigers的比賽中被Huhi所選下,Huhi在那場比賽中使用他最愛的翱銳龍獸擊潰了韓國例行賽冠軍ROX Tigers。

 

Amelia Von Haden:我們覺得那些負責創造英雄的人都會有些類似的感受,當他們看見自己創造的英雄在場上被使用時,胃裡都會上下翻騰,他們會在心中想著這或許會是場很差的遊戲,這英雄可能會出問題...隨著這次翱銳龍獸的事件發生後,只要我們看到翱銳龍獸在場上,就會不約而同的產生同一種感覺 ─ 希望這次別再壞掉了。

 

Raven Keene:當他(Huhi)再度選擇了翱銳龍獸的當下,就有一種「坐穩嘍」的感覺開始浮現,我們一開始的時候都快緊張到停止呼吸了,直到遊戲正常進行然後進行了幾個play之後,整個氛圍都變了,無論是內部的、外部的、選手的、粉絲的,通通都改變了,這也改變了翱銳龍獸的整個故事,他從一名被禁用的角色轉化為一名真正的毀滅者。

 

Luke Rinard:在Huhi選了敖瑞龍獸以後,CLG靠著這位英雄擊潰了對手,我當時看到這情況想著:「這角色可能太猛了,他真的有點過強。」但是在世界大賽中看到他如此的強大且成功,對我來說真的是一種巨大的喜悅,在那場比賽過後,我在星期一上班時再度的向每一位參與這次搶修的人員致謝,我告訴大家能看見翱銳龍獸在星期天賽場上的表現真的足夠讓我高興上一個月,而他在決賽中關鍵第三場的現身更是會讓我高興上一整年。

 

***

 

世界大賽是英雄聯盟中的頂尖賽事,失去一位像翱銳龍獸如此重要的英雄絕對會讓選手和觀眾們感到失望,Riot的工作人員們在時間的壓力下一同完成了搶修作業,以確保這些世界上最好的選手都能使用他們所喜愛的英雄來爭奪召喚師獎盃,如果你對這個bug背後的技術細節有興趣,你可以透過Brian Bosse's breakdown of the cause behind it這篇文章來了解更多來龍去脈。

 

作者:Riot Costy ─ Riot Costy目前在歐洲的辦公室工作,如果你Ban了他的菲歐拉,你們兩個人可能就有些話要聊聊了。

聯合作者:Phillip Costigan

來源:北美官網

譯者:法蘭克貓






回頂端