Repo ↗ · 原始 README ↗ · 文件包(Markdown/授權)

封面參考(原作): Battlefield 1 · 原作宣傳圖,由 IGDB 提供。圖片版權屬原權利人,供辨識原作使用,不代表此重寫/模組專案的實際畫面。

來源維護者: AaronSparks · 版本: 63bc34bea4a1 · 整理日期: 2026-10-12

文件授權: Unlicense · LICENSE · 本文形式: README 翻譯

下文為來源 README 的繁中翻譯,由 Kirikirin 使用 AI 輔助整理;功能、完成度與測試結果均為原作者描述,本站未逐項實機驗證。圖片改為來源連結,指令與技術識別保留原文。


Battlefield 1 Rust 重寫 | 🚨 AI 垃圾警報 🚨

這是一個淨室重實作的 Rust 程式,會讀取你自己的 Battlefield 1 安裝,讓你離線在 Verdun Heights 地圖上飛行或行走。此儲存庫不包含任何遊戲檔案,也不包含任何反編譯程式碼。請參閱 CREDITS.md。

狀態:全部 6 個步驟都可運作(封存檔、資源檔案、物件位置、網格與紋理、地形高度、行走)。目前的工作重點是外觀與細節:請參閱「目前還不能運作的部分」。計畫請參閱 docs/DESIGN.md。

你需要什麼

  • 一台 Windows 10 或 11 PC。任何桌上型顯示卡都可以(它必須支援 BC 紋理壓縮,而所有顯示卡都支援)。
  • 你自己的一份 PC 版 Battlefield 1,已安裝。已使用 Steam 版本、組建 5142699 測試(組建編號位於安裝目錄中的 version.json)。其他組建,例如 EA app 版本,尚未測試。
  • 如果你複製遊戲檔案(步驟 3,方式 A),需要約 82 GB 的可用磁碟空間。方式 B 和 C 不需要額外空間。
  • Rust,程式設計工具組(步驟 1)。

你不需要啟動 Battlefield 1,而且此程式不會變更它。

步驟 1:安裝 Rust

  1. 從 https://rustup.rs. 下載並執行 rustup-init.exe
  2. 如果它要求 Visual Studio C++ 建置工具,讓它安裝(選擇「Quick install」選項)。Rust 在 Windows 上建置程式時需要它們。
  3. 保留預設選項。完成後,關閉並重新開啟任何終端機視窗。

已使用 Rust 1.99 測試。

步驟 2:取得此專案

在此 GitHub 頁面上,點擊 Code,然後點擊 Download ZIP,並將其解壓縮,例如解壓縮到 C:\BF1-Rewrite。或者,使用 git:

git clone https://github.com/AaronSparks/Battlefield-1-Rust-Rewrite.git

專案資料夾中有一個名為 Battlefield 1 Files 的空資料夾(裡面只有一個說明檔案)。遊戲檔案會在步驟 3 放入其中。

步驟 3:提供遊戲檔案

此程式只會讀取你安裝目錄中的 Data 和 Patch 資料夾。它永遠不會開啟其他檔案(bf1.exe、.dll 檔案、Core、Support、EAAntiCheat、__Installer、__overlay),而且永遠不會寫入遊戲檔案。

若要在 Steam 中找到你的安裝目錄:右鍵點擊 Battlefield 1,然後點擊 Manage,再點擊 Browse local files。開啟的資料夾中會有 Data、Patch 和 bf1.exe。Data 和 Patch 兩者都需要:Verdun 的資料分散在兩者中的許多資料夾裡(一次測試執行讀取了 78 個封存資料夾中的 51 個封存檔)。

方式 A(最簡單):複製。 將你安裝目錄中的 Data 和 Patch 資料夾複製到 Battlefield 1 Files,使其看起來像這樣:

your project folder
├── Battlefield 1 Files
│   ├── Data                         (copied from your install, about 65 GB)
│   ├── Patch                        (copied from your install, about 16 GB)
│   └── PUT_DATA_AND_PATCH_HERE.md
├── crates
├── README.md
└── ...

當遊戲更新變更你的安裝時,複本仍可繼續運作。

方式 B:連結(不需要額外空間)。 在專案資料夾中開啟 PowerShell(請參閱步驟 4),然後執行以下兩行。如果你的安裝不是 Steam 預設路徑,請將路徑改成你自己的安裝目錄:

New-Item -ItemType Junction -Path "Battlefield 1 Files\Data" -Target "C:\Program Files (x86)\Steam\steamapps\common\Battlefield 1\Data"
New-Item -ItemType Junction -Path "Battlefield 1 Files\Patch" -Target "C:\Program Files (x86)\Steam\steamapps\common\Battlefield 1\Patch"

這些連結會如實顯示你的安裝。遊戲更新後,檔案可能會與已測試的組建不同。

方式 C:指向你的安裝。 將 BF1_GAME_DIR 設為你的安裝資料夾(內含 Data 的那個資料夾)。接著程式會使用它,而不是 Battlefield 1 Files。僅限目前的 PowerShell 視窗:

$env:BF1_GAME_DIR = "C:\Program Files (x86)\Steam\steamapps\common\Battlefield 1"

對所有新視窗生效(執行一次,然後開啟新視窗):

setx BF1_GAME_DIR "C:\Program Files (x86)\Steam\steamapps\common\Battlefield 1"

Git 永遠不會上傳 Battlefield 1 Files 中的任何內容,除了說明檔案(請參閱 .gitignore),所以你的遊戲檔案會留在你的 PC 上。

步驟 4:執行它

在專案資料夾中開啟 PowerShell:在檔案總管中,開啟專案資料夾,點擊網址列,輸入 powershell 並按下 Enter。然後執行:

cargo run --release -p bf1_game

第一次執行時,這會下載並建置程式所需的函式庫。這需要數分鐘。之後啟動時建置只需幾秒。接著地圖會載入,約需 15 到 20 秒,然後視窗會顯示 Verdun Heights。

如果它顯示「game files not found」,請檢查檔案 Battlefield 1 Files\Data\layout.toc 是否存在(或 BF1_GAME_DIR 是否指向內含 Data 的資料夾)。每次執行都會將日誌寫入 logs 資料夾;其第一行會顯示程式使用了哪個遊戲資料夾。

控制

按住滑鼠右鍵來環顧四周;W/A/S/D 移動,Space 向上,Left Ctrl 向下,Left Shift 加速。按 F 行走(Space 跳躍,Left Shift 衝刺),再按 F 飛行。G 切換天氣(晴天、陰天、濃霧、霧事件、火雨)。

左上角的文字會顯示你的位置、視角方向、影格率和天氣,以及一行 BF1_CAMERA=...:設定該變數,下次就能從相同位置和視角開始。F1 隱藏或顯示文字。按 I 檢視畫面中央的物件:網格名稱、部件和紋理(或者,對於地面,其地形圖層)會寫入日誌並顯示在文字中 15 秒。這是你回報缺少或外觀錯誤物件時最有用要包含的資訊。

工具(供開發者使用)

bf1_probe 工具會檢查並匯出資料,例如:

cargo run --release -p bf1_probe -- read-sb Win32/xpack1/levels/mp_verdun/mp_verdun

可運作的部分

已於組建 5142699(Steam)、2026-10-03 測試:

  • 讀取 layout.toc、.toc 和 .sb 檔案(簽章標頭 + DbObject)。

  • 索引全部 78 個 cas.cat 檔案(348,802 個唯一檔案,486 個 .cas 封存檔)。

  • 讀取全部 22 個 Verdun 套件組合並解壓縮其中的每個檔案:
    14,570 個 EBX、3,710 個 RES 和 5,320 個區塊(約 4.1 GB),0 次失敗。

  • 從基礎 + 差異重建修補過的檔案(Verdun 上有 752 個檔案)。

  • 解碼全部 14,570 個 Verdun EBX 資源檔案(0 次失敗),並使用 dump-ebx --write 將其寫成文字。

  • 走訪 Verdun 關卡並列出每個放置的網格及其位置:
    Conquest 配置中有 523 個網格的 8,530 個放置(level 指令)。
    靜態模型群組位置來自其 Havok 物理資料。

  • 解碼放置在 Verdun 上的網格(523 個中的 520 個,約 160 萬個三角形),並讀取其全部 532 個紋理(meshes 指令)。

  • 將一個網格匯出為 OBJ + PNG 以供檢視(export-mesh 指令)。

  • 讀取整個 4 公里地圖的地形高度(地面),戰鬥區域中每樣本 0.5 公尺,並匯出高度圖和地形 OBJ(terrain 指令)。

  • 在視窗中顯示 Verdun Heights(Bevy),並有自由飛行攝影機:地形及其色彩圖(在已解碼處)和地堡入口處的孔洞、建築物、樹木和道具及其色彩紋理;關卡的天空、帶陰影的太陽、霧、泛光和環境光遮蔽;在 RTX 3080 上約每秒 150 個影格。

目前還不能運作的部分

  • 行走使用可見網格進行碰撞,而不是遊戲本身的碰撞網格。樓梯和建築物內部可運作(由使用者測試);透過孔洞進入地堡尚未測試。
  • 地形材質接近但不精確。地面會顯示關卡的 12 個地面紋理及其法線貼圖和平滑度,位置由遊戲本身的圖層遮罩決定,但混合規則是我們的假設,紋理重複大小是猜測的,而且每個圖層的其他紋理(變化、距離)並未使用。地形著色器也使用了我們沒用的紋理:變化遮罩、「側面流動」法線貼圖(可能用於斜坡)、懸崖細節圖和 6 個距離法線貼圖。輪胎痕:關卡中沒有靜態的;遊戲會在載具行駛時產生它們(尚未完成)。遠處(超過約 450 公尺)地面使用其色彩圖,在約一半的戰鬥區域中是單純的灰褐色。10 個小型網格部件仍然是灰色(一頂頭盔、一個火爐、一架飛機殘骸)。電線使用猜測的深色。
  • 木製道具上的損傷卡被隱藏(我們認為它們只在被擊中後顯示;尚未確認)。
  • 貼花(污垢、泥巴、污漬、裂縫、人孔蓋、牆壁滲漏)會以其關卡變體繪製,並混合在表面上。它們的混合種類(_Add、_RedTint、_LerpBaseColor)全都以相同方式繪製;19 個水窪和 67 個沒有 alpha 紋理的貼花部件被排除。其他物件的變體(土丘、沙袋、燒焦的樹木、2,068 個放置)預設為關閉:BF1_VARIATIONS=all 會開啟它們(尚未以肉眼檢查)。
  • 效果(火、煙、塵、落下的餘燼)和暗角尚未繪製。太陽強度是根據使用者的螢幕截圖校準(太陽 / pi),並非直接取自資料。室內由我們自己的光照探針網格變暗(載入時計算,約 12 秒);燈具尚未放置。
  • 建築細節紋理(覆蓋在重複基礎上的第二組紋理)已為兩個主要建築著色器系列繪製;哪一組搭配哪個紋理是我們對資料的解讀。約 4.5% 的有紋理表面仍然沒有可用的紋理座標(例如穀倉牆和觀測砲塔)。
  • 散佈的草、常春藤、枝葉和碎片來自關卡本身的散佈資料,但沒有風,沒有在其繪製距離邊緣淡出,而且草葉顏色是我們自己選的(其下方的地面顏色)。遊戲使用 4 個儲存距離中的哪一個是我們的解讀。背景樹(遠方山丘上的平面卡片,約 6,000 個)繪製在整張地圖上並轉向面對攝影機:兩者都是我們的規則,因為它們儲存的距離(500 和 30 公尺)無法到達 0.7 到 2 公里外的山丘。卡片樹木圖片中只使用了一張。
  • 白蠟樹上的常春藤(47 棵樹)已放置,但繪製得幾乎和樹皮一樣暗。較低的裁切閾值沒有幫助,所以葉子沒有被裁掉;我們認為葉子需要透光(尚未完成),但這尚未確認。
  • 材質色調:只套用了槍枝塗裝(及其塗裝遮罩)和布料覆蓋物(根據使用者的螢幕截圖調整)。裸金屬尚未繪製成金屬。約 30 種其他色調種類(樹木、房屋、牆壁)未套用,所以有些物件看起來太灰。
  • 色彩分級:關卡的天氣表以 PQ 編碼套用至場景光線,這是對使用者螢幕截圖的擬合(尚未從遊戲確認)。深色陰影仍然有點太暗和太藍;從地面反射的光是簡單的擬合項,不是計算出來的。
  • 當葉片卡片(樹籬)正好在攝影機前方時,影格率會降得非常低。
  • 3 個帶有內嵌資料的布料旗幟網格(佔領點旗幟,21 個放置),以及來自其他 superbundles 的 13 個紋理。
  • 遊戲只在回合進行時建立的物件不會被繪製:Conquest 配置中 11 個載具生成點的武器(例如 3 個固定機槍陣地和 2 門固定火砲)、士兵,以及一些武器拾取物。它們的模型是在執行階段選擇的,所以關卡資料不會命名它。效果、燈光和鏡頭光暈也不會被繪製。
  • 以範圍儲存的區塊(rangeStart/rangeEnd,2,896 個項目):它們會解壓縮,但其大小尚未檢查。除了「沒有錯誤」之外尚未測試。

授權

此儲存庫中的程式碼依 Unlicense 釋出至公共領域。這僅涵蓋我們自己的原始碼。它不涵蓋 Battlefield 1 或其資料,那些屬於 Electronic Arts。我們依賴的 Rust 函式庫保留其各自的授權。


授權與來源聲明

原始 README 與翻譯沿用 Unlicense 授權;本次修改為繁中翻譯、連結與排版調整。可修改的 Markdown、原始 README、LICENSE 與 NOTICE 收錄於頂部文件包。原作遊戲內容與商標不因此獲得授權。

LICENSE

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <https://unlicense.org>