最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

《自由與榮耀》錄像回放錯誤問題探究

2023-03-26 16:01 作者:幽靈掠食軍  | 我要投稿

綜述

最近在做《自由與榮耀》的任務關(guān)打法演示錄像,發(fā)現(xiàn)錄像回放錯誤的問題確實很嚴重。

所謂錄像回放錯誤,就是指游戲錄像回放時未能正確還原此前你打的這局游戲的過程。例如本來一局你贏的游戲,錄像回放時卻變成是你輸了。

《自由與榮耀》的錄像文件記錄了兩部分信息。第一部分是隨機數(shù)種子,它是一個整數(shù)。由隨機數(shù)種子可以產(chǎn)生一系列的隨機數(shù),在游戲中用于幾率的判定。例如在某局游戲中,電腦 AI 的兵工廠在 1 級技術(shù)時有 70% 幾率造火龍?zhí)箍?、?30% 幾率造密集雨,這種隨機性都是由隨機數(shù)決定。在回放錄像時,通過隨機數(shù)種子就能準確還原此前游戲中用過的隨機數(shù),保證電腦兵工廠每次隨機造的東西都與當時游戲中一致。

第二部分記錄了玩家的所有控制命令,例如選中單位、建造、移動、攻擊等命令。這些命令在錄像回放時都會被準確地還原。

按照預想,如果錄像回放時能夠正確加載戰(zhàn)役的初始信息,并能夠準確還原所有控制命令的話,那么就能夠正確還原此前這局游戲的全部過程。但我們發(fā)現(xiàn),《自由與榮耀》的錄像回放功能不像《自由與榮耀Ⅱ》那樣穩(wěn)定,在任務關(guān)的錄像回放中經(jīng)常會出錯,尤其是機器人方第 3、6、7、8 關(guān)和人類方第 10 關(guān)。

而且同一個錄像文件,也不是一定就會回放報錯的。你多試幾次,它也可能會有一次就突然能正確回放了。

這個 BUG 目前應該是最復雜的,目前作者通過逆向分析游戲代碼,也不能完全準確地判斷 BUG 出現(xiàn)的原因、以至進行修復。目前只能說:錄像報錯問題,可能是任務關(guān) AI 的 BUG 引起的。

Verify Failed 報錯

在洪恩紅字原版 V1.2 中,當執(zhí)行一條控制命令時,游戲當前場景下的校驗值與錄像文件中記錄的值不相等時,會出現(xiàn)如圖所示的報錯:

在洪恩版 V1.6.2 中,仍然會進行校驗,但檢測到錯誤時不會輸出錯誤信息。

那么校驗值是怎么計算的呢?

在每次玩家進行控制操作時,游戲會根據(jù)當前所有單位的位置,來計算一個校驗和。這里的所有單位,不僅包括每個玩家的全部單位,也包括所有的晶礦和野外的樹木、建筑等?!蹲杂膳c榮耀》中每個單位都有三維坐標 (x, y, h)。游戲會分別計算所有單位的 x 坐標之和、y 坐標之和、h 坐標之和,再計算這三者的平方和,再開根號。即:

在一局游戲結(jié)束時,上述校驗和會與對應的控制命令一起,記錄在游戲錄像文件 Juliet.pcs 中?;胤配浵駮r,每次執(zhí)行游戲控制命令時,游戲會計算當前游戲場景下的校驗和,與錄像中記錄的數(shù)值對比。例如上圖中當前游戲場景下的校驗和是 207864.250000,錄像文件中記錄的校驗和是 207861.203125,出現(xiàn)了不一致,因此會報 Verify Failed 錯誤。

通過校驗和的計算公式可以看出,一旦游戲中出現(xiàn) Verify Failed 錯誤,就表示當前錄像回放的游戲場景下至少有 1 個單位的位置坐標與此前游戲中的數(shù)值不同,或者當前游戲場景下的單位無法與此前游戲中的單位一一對應。

揪出罪魁禍首

機器人第 3 關(guān)時錄像回放報錯最頻繁的一關(guān),而且當游戲開始的 1.3 秒以內(nèi)就會報錯。

為了揪出罪魁禍首,作者把游戲放慢 125 倍,這樣游戲基本時間單位 tick 就會拉長到 5 秒。然后進入機器人第 3 關(guān),保證每 5 秒內(nèi)都雙擊一次探測器,這樣生成的錄像文件中每 tick 都會有游戲控制命令。

接著我們回放錄像,因為每 tick 都有控制命令,所以每 tick 也都會計算校驗和,我們也就能夠找出第一個存在校驗和不一致的 tick 了。實測是游戲中的第 32 個 tick(即正常游戲的第 1.24 秒 ~ 1.28 秒)就會報 Verify Failed,也就是說在這時候就出現(xiàn)了第一個位置坐標與此前游戲中不一致的單位。

為了找出這個單位,作者至少要有一次錯誤回放和一次正確回放,然后到 tick = 32 的時間點,去記錄游戲中全部 190 個單位的 x、y、h 坐標,然后進行對比。這個過程非??菰铮矣龅搅艘恍┞闊?,那就是 OllyDbg 下運行的游戲,錄像全部正確回放,這可能與 OllyDbg 下游戲性能較低有關(guān)。后來在 Cheat Engine 下運行游戲,錄像是有時正確回放,有時出錯的,這才能夠記錄到錯誤回放中的單位坐標。

最終確定,是一個 VDragon (火龍突擊坦克)的坐標發(fā)生了不一致:

然后我們回到游戲中,找到這輛火龍突擊坦克,它就是藍色電腦右下角基地中,最南邊的那輛火龍?zhí)箍恕?/p>

正確回放錄像時,tick = 32 時這輛火龍?zhí)箍说奈恢茫?/p>

錯誤回放錄像時,tick = 32 時這輛火龍?zhí)箍说奈恢???匆幌碌厣喜莸奈恢镁湍芸闯?,比起正確回放時,坦克位置更靠左邊一些,而且坦克炮口指向的位置也不同:

別看只是一輛坦克的位置出現(xiàn)差別。由于蝴蝶效應,由最初的小的差異,不斷影響更多事件,產(chǎn)生更多差異(例如火龍?zhí)箍宋恢貌煌?,導致附近工程車擺下采礦器的位置不同),最后差異越來越多,最終可能導致整個錄像的劇情被完全改變。

深入追蹤

雖然 Verify Failed 報錯最初是在 tick = 32 的時間點,但實際最早產(chǎn)生不一致的時間點要比這還早得多。

早在 tick = 9 時,電腦 AI 就會命令這輛火龍?zhí)箍诉M行移動,但是前進的目的地就已經(jīng)出現(xiàn)了不一致,因此你能看到坦克炮口朝向不同。

在 Verify Failed 之前,這個坦克就已經(jīng)開始朝著不同的目的地前進了。但最開始的那一段路徑還是一致的,后面路徑出現(xiàn)分支的時候,才會導致坦克的位置坐標出現(xiàn)不一致,導致 Verify Failed。

深入追蹤,電腦給火龍?zhí)箍讼乱苿用睿婕霸创a是在 AIComputer2.cpp,也就是任務關(guān)的 AI。所以這個 BUG 是存在于任務關(guān),不一定會影響多人游戲。

那更進一步,我還要問:為什么電腦會給火龍?zhí)箍说拿顭o法保證一致呢?

我追蹤到最后,是涉及戰(zhàn)場的黑霧問題。所謂黑霧,就是小地圖上全黑的地方。例如蜘蛛是不能往全黑地方跳躍,雷達站和核彈基地也是不能往全黑地方進行轟炸和投放核彈。

在機器人第 3 關(guān),錄像正?;胤藕湾e誤回放時,電腦 AI 對于某個坐標是否存在黑霧這件事情判斷存在差別,導致了 AI 命令這輛火龍?zhí)箍饲斑M的目的地位置出現(xiàn)不同。

這個 BUG 目前也只能追蹤到這里了,很難修復。



《自由與榮耀》錄像回放錯誤問題探究的評論 (共 條)

分享到微博請遵守國家法律
富阳市| 新蔡县| 嘉黎县| 攀枝花市| 安乡县| 龙口市| 当涂县| 罗平县| 封开县| 南平市| 宁陵县| 霍城县| 金沙县| 朝阳县| 布尔津县| 洪雅县| 浠水县| 延安市| 休宁县| 鄂州市| 津南区| 南江县| 中山市| 泸溪县| 莆田市| 朝阳市| 简阳市| 武鸣县| 博客| 海阳市| 得荣县| 昂仁县| 鄂托克旗| 五华县| 阿勒泰市| 邻水| 景宁| 那曲县| 连山| 彭州市| 潞西市|