本文章不會出現中國用語,請安心服用,文長
一、前言
這款遊戲本魯蛇在最一開始的遊戲展示影片放出時就十分的期待,而成品撇開漏洞與外掛不談也算是上乘之作,對於不常玩線上遊戲的我來說,在此遊戲上獲得了不少樂趣(以前只玩過天堂2私服、PSO私服與PSO2日服,PSO可說是3D ARPG線上遊戲始祖,對於當年SEGA的技術力十分敬佩)。
想起以前不玩線上遊戲,是不喜歡單純滑鼠點點點,對於廠商強迫玩家刷寶的做法也看得滿透徹,正因如此,當全境封鎖上線後就不太打寶,樂趣多來自與朋友的PVE與偶爾的暗區PVP(TPS技術廢人,所以PVE的難度對我跟我的朋友來說,都是很有挑戰),不過當獵隼上線後推出的新套裝,運用漏洞造成的裝備階級差,卻也讓我感到大打折扣的遊戲體驗。
除了一開始的槍王之王之外,穿牆、天梯以及快速打王的漏洞為何遲遲不修正,而是用其他的方式去制約玩家不再使用這些漏洞的做法,引起了本魯蛇一些些的興趣,由於對遊戲開發略懂略懂(真的是略懂略懂),以下就技術層面進行一些為何漏洞無法修補的推測。
二、遊戲引擎與遊戲製作
要說漏洞之前就一定要提一下基本的遊戲製作方式,在現代市面上有著許多優秀強大的遊戲引擎,各位資深遊戲人都有聽過的如:Unreal、Unity、CryEngine、Fox Engine(FKY KONAMI)等等,而UBI是使用自家所開發的Snowdrop Engine,這些引擎有哪些差異就不再此主題討論範圍,但這些引擎最基本都會提供:
人性化的GUI介面:從Snowdrop Engine的展示畫面,可以看到製作遊戲時的場景編排、人物動作設定、改變材質貼圖、分子系統呈現方式(如火焰、大雪)、即時演算劇情動畫等等,都可以很方便的透過滑鼠去調整與控制不須寫任何程式,基本上當3D建模師製作好模型匯入遊戲引擎後,再經過一些設定,就能很快地建構出栩栩如生的遊戲世界。
優異的即時圖像渲染系統:在現代的遊戲引擎的3D繪圖方式都是來自於同樣的架構,最底層的繪圖資源由耳熟能想的D3D與OpenGL提供,這兩個技術扮演遊戲引擎與繪圖卡溝通的腳色,不過在AMD與NVIDIA的競爭之下,兩家廠商也額外提供無須透過D3D及OpenGL就能直接存取顯示卡資源的方式。而不同遊戲引擎所能掌握的,就是要如何最有效率來運用D3D與OpenGL(或合作的顯示卡廠商)提供的資源,來達到最佳的畫面呈現(如生動的反射光與紋理貼圖)。
(最重要的部分part1)賦予物體物理特性:何謂賦予物體物理特性呢?當3D建模師做了一顆籃球,遊戲製作師放入遊戲引擎後執行遊戲會發生什麼事?什麼也不會發生,因為這個3D籃球模型任何物理屬性都沒有;所以再匯入遊戲引擎後,製作者可以運用遊戲引擎的介面直接給這顆球物理屬性(就是拿滑鼠點一點就好,某種程度上完全不用寫程式),如籃球我會賦予這些物理屬性:
給予鋼體,這樣球才不會穿牆,遊戲引擎認識到這是一顆有物理屬性的物體,當撞到其他物體時才會有相對應的物理效果。
給予重力,這是顆球,理所當然會掉在地上XD。
給予物理材質,這是顆籃球,就要跟遊戲引擎說這物體是橡膠,掉到地上時才不會像石頭碰到地就不動,而是會彈個幾下。
給予摩擦係數,這會影響球彈幾下後才會停下來。
(最重要的部分part2)給予物體額外的腳本控制(不同的物體會綁不同的程式碼進行控制):這部分是遊戲製作工程師花最多時間的部分,也是所有漏洞產生的來源。舉例來說,除了上述3提到給予球的物理特性之外,這顆球其實還有很多物體定義沒有設定,此時只能靠工程師寫程式進行控制。例如:
籃球需要被球員拿著,而被拿著時為了確保球不會因重力等等屬性亂飛,會設定當球被球員拿著時"關閉物理碰撞",讓球黏在球員的手上就好。
當球飛出界外時該怎麼處理,不可能讓球一路滾的世界的盡頭,所以要設定當球滾超過一定範圍後,自動回到球場。
當球飛入籃框後"球"要通知遊戲得分了(這不是廢話嗎?XD)。
![]()
經由上述簡略的說明,其實只是想表達一件事,遊戲的漏洞跟遊戲引擎基本上是"沒有關係",而是跟"給予物體額外的腳本控制"的遊戲工程師有"極大的關係",這款遊戲的漏洞就像是犯了"球滾出界後就給他滾到世界的盡頭"一樣的愚蠢錯誤(強調一下此為推測),為何這麼說,在接下來的部分會進行說明。
三、全境封鎖漏洞推測
最一開始的穿門漏洞是利用機動掩體卡在門上後靠著掩體爬進去,而此漏洞在獵隼更新後才終於修復,為何需要如此久的時間才處理"感覺很好解決"的漏洞呢?
我們來複習一下剛剛提到的一點,遊戲引擎的物體需要賦予"鋼體"才會進行碰撞,有了碰撞後才能控制"碰撞後要做什麼事"。觀察一下在丟機動掩體時會先出現什麼?是的,會有一個虛擬的掩體顯示是否可以將掩體擺在指定的地點,此時的虛擬掩體就已具有鋼體去做地形碰撞,如果要丟的位置有其他具有鋼體的物件存在時,就判斷不能放,反之就可以投放。
從圖片來看,一開始警察學校的門根本沒有給予鋼體,所以機動掩體可以自由穿過,唯一有鋼體的部分是地面上的門檻,因此機動掩體的底座碰到門檻時就會顯示無法擺放。到此解釋了穿門漏洞的第一段,而為何能穿過大門於解說翻牆一併解釋。
那既然知道是鋼體沒有賦予的問題,為何不一開始就所有物件都給予鋼體就好了呢?原因很簡單,為了減少遊戲吃的硬體資源,賦予鋼體也就是告訴遊戲引擎這個物體具有物理法則,CPU需要每個frame去額外關心這個物體有沒有被撞到,所以在設計如此龐大的遊戲場景時,每個鋼體物件都必須要放的非常巧妙,不然你有32核或是10張泰坦都不構算(看看那精美的仙劍)。
話說回來,如果知道是門沒有付予鋼體,那更新時給他加上去就好啦?本魯蛇推測此大門要賦予鋼體是要"整間警察學校的建築模型"都要換掉才能解決(這牽涉到3D模型物件的製作原理,文會太長就不解釋了XD),如果只是要修一個小小漏洞讓玩家更新個1.X G修補檔,可能UBI認為這臉要往哪擺,於是就趁獵隼更新時偷偷夾帶一個改過的警察學校模型,反正也不會有人發現(?,雖然以結果來說是個本末倒置、掩耳盜鈴的做法就是。
說到機動掩體的翻牆方式,除了對鋼體要有認識之外,還需要補充個小知識,相信有寫輪眼的各位資深玩家對FPS一定不陌生,何謂FPS,中文就是每秒更新率,在電影的底片上每一個畫面就是一個Frame,電影固定一秒換23張讓眼睛產生視覺殘留,產生錯覺以為畫面動了起來。延伸到遊戲運作也是如此,雖然是老生常談還是不免俗地再提一下。
那FPS跟翻牆又有什麼關係呢?我們先假設一個直徑0.4公尺的物體花一秒從0公尺走到10公尺,遊戲更新率只有10 FPS,在這情況下我們一張一張看Frame會發生什麼事呢?第1個Frame物體在1公尺的距離,第2個Frame在2公尺的距離...第10個Frame在10公尺的距離。所以對於遊戲引擎來說,就是每個Frame給予這物體1公尺 、2公尺...10公尺的座標,有沒有發現這跟現實有什麼不同?我們正常人在現實的1秒移動時是"連續的",但遊戲中的人物在1秒移動時是每個Frame"瞬移"的。
此時我們擺另一個直徑0.4公尺的圓球在5.2公尺的地方時會如何呢?物體到了第5公尺的位置,也就是第5個Frame時會偵測到與圓球碰撞,於是這個物體就會停下來,這就是所謂的碰撞偵測。那假設我把圓球放在5.5公尺的地方會如何呢?答案是物體不會"碰撞",於是物體就看起來穿過圓球移動到6公尺處,一路移動到10公尺的地方。
基於上面所描述的情況,不免就能發現,機動掩體之所以能夠丟到牆外,就是靠衝刺時會有較大的移動間隙,以及正確的拋物線視角,使得機動掩體在丟出去時的虛擬掩體"瞬間"不會與牆上的鋼體產生碰撞,因而能夠順利丟出。
那丟出掩體後為何角色還能穿牆呢?平常角色身上應該也是有鋼體,碰到牆也會彈回來啊?這是因為此遊戲在躲掩體時會"解除角色身上的鋼體",並自動吸附至掩體上,為何會這樣推測呢?相信玩家們可能遇過沉到地底的經驗,基本上都是發生從吸附掩體或是離開時發生,這就是角色解除鋼體卻又沒有吸附在掩體時,角色與地面無法產生"碰撞",所以就沉下去了。
也正因為吸上掩體後角色鋼體會消失,最一開始警察學校穿門的方式,角色自然就能無視物理法則,靠著掩體慢慢走進去囉。
那為何UBI不修掩體漏洞呢?本魯蛇推測有兩個原因,一個是技能"無法"以更新做修正,打從一開始的遊戲邏輯設計就是技能綁死無法修改。另一個是一旦修了可能會造成更大的漏洞,畢竟修改技能使用方式比起修改遊戲場景的影響範圍相差甚遠。但不論哪一個原因都是遊戲工程師考慮不周或經驗不足所致。
在一個副本當中理應經過每一個檢查點之後才能觸發劇情,但不知哪個天才設計成觸發echo也能作為檢查點,不用去檢查其他檢查點是否已經通過,只能說這種最基本的邏輯問題都無法設計完善,這該如何吐槽?只好警察學校跟大會廳爽爽刷了是吧?這個漏洞本魯蛇也覺得無法修正,一旦要修,整個地圖上的echo全部要修,或許哪天會收到2X G的更新包?
接續剛剛翻牆漏洞的推測,此遊戲除了靠在掩體上會解除鋼體之外,爬樓梯也是會解除鋼體。推測從A掩體移動到B掩體這段過程,是解除角色身上鋼體,並且用即時運算"奔跑路徑"的"動畫"去移動(如果是動畫的話,自然也會有"撥放時間",我們看到按著於掩體間移動見的外圍有圈圈倒數)。如果掩體平面移動是這樣的作法,那需爬樓梯的掩體間移動也會以類似的方式處理。
而爬樓梯的起始與解除,推測是角色按"O"(PS4的操作按鍵)黏上樓梯時,或是"不按L3"移動時才設定樓梯的起點與終點的座標並開始"撥放爬樓梯動畫",當角色到達樓梯兩端時恢復成行走狀態並賦予鋼體,基於上述的推測,有趣的漏洞就會從此產生。
當角色掩體間移動到爬樓梯時停下來時,由於爬樓梯時沒有按"O"以及"正常移動",角色不知道樓梯的起點與終點,當掩體之間移動時間倒數完後,此時角色狀態會屬於"空白",而這時按L3往上爬時,由於沒有設定終點座標,即使已經到了樓梯盡頭還是會繼續往上移動並撥放爬樓梯的動畫,看起來就像是在爬天梯,也因為此時角色沒有鋼體,自然就繼續一直爬,爬到地面上才判斷到根本沒有在爬樓梯,才解除狀態。如果推論正確,本魯蛇也覺得這漏洞大概也無法修正,因為過程太複雜,修正會影響到整體遊戲運作邏輯。
老實說黏彈可以造成傷害但子彈傷害卻可以快速修正這點,可以推測此遊戲工程師十分沒有開發經驗,我們都知道正常打裝甲車是要靠黏C4去炸才會有傷害,那為何黏彈無法快速修正能給予裝甲車傷害這點來看,八九不離十是"C4跟黏彈"的"傷害屬性"是設定成一樣的,因為都是炸彈嘛,所以一旦改成黏彈也無法造成傷害時,C4也會炸不動,獵隼就無法殞落囉...WTF,哪個工程師這麼天才,把劇情觸發的物品屬性跟一般遊戲技能屬性設定成一樣,這已經不能用沒經驗去解釋了,這是基本常識啊啊啊!
最後談一下為何能隔空丟黏彈,我們都知道遊戲角色帶有鋼體,才不會穿牆或穿過物體,但是鋼體演算如果在複雜的表面做物理運算,吃的硬體效能可是非常可觀,所以通常的做法是會在角色中心放一個隱形膠囊物體並附上鋼體,當膠囊鋼體碰撞後去控制角色無法過牆就好,不過這樣的作法會造成"看起來角色身體會有一部分埋在牆裡",那其實這是無傷大雅的事情,可是此遊戲犯蠢的是,在角色撞到牆壁後還能使用技能這一點,既然可以使用,只要丟出去的技能不會有碰撞的問題,自然能夠隔牆黏彈丟爽爽。
四、結語
回頭看看上面這些漏洞,基本上都是工程師考慮不周所造成的結果,又因為UBI沒有經營線上遊戲的經驗,在遊戲製作架構上完全沒有緊急更換發生漏洞的程式的更新方式,從基本上在遊戲設計時的邏輯就發生問題,一般單機遊戲或是沒有階級制的線上遊戲都不算大問題,但此遊戲是可以利用這些漏洞使得階級差距拉大,導致遊戲無法給予良好遊玩體驗時,就是非常致命的錯誤。
以個人來說我是滿喜歡這款遊戲,也因為我不是重度玩家,這些漏洞對我的遊戲體驗影響不大,但對其他玩家來說可說是FKY UBI的程度,也希望這間公司能夠盡早想出解決方案,重點是DLC能不能有誠意一點,除了漏洞之外,這次更新的獵隼副本才是WTF,這個難度的副本是逼不是重度玩家去刷漏洞撿高級裝就是了膩?還有這副本能不能有誠意一點,我猜獵隼這副本大概一天就做完了啦。以上心得與各位分享至此囉。