Repo ↗ · 原始 README ↗ · 文件包(Markdown/授權)
封面參考(原作): Elden Ring · 原作宣傳圖,由 IGDB 提供。圖片版權屬原權利人,供辨識原作使用,不代表此重寫/模組專案的實際畫面。
來源維護者: Funny-Bones · 版本: 177a3b5ec14a · 整理日期: 2026-10-12
文件授權: MIT · LICENSE.md · 本文形式: README 翻譯
下文為來源 README 的繁中翻譯,由 Kirikirin 使用 AI 輔助整理;功能、完成度與測試結果均為原作者描述,本站未逐項實機驗證。圖片改為來源連結,指令與技術識別保留原文。
Elden Ring 玩家移動與戰鬥,以 Bevy 實作
一個重現玩家角色在 ELDEN RING 中如何移動與戰鬥的沙盒,以 Rust 撰寫,使用 Bevy 0.19。
角色是棍棒與膠囊構成的骨架,但驅動它的是真實資料:時序、移動與動畫皆讀取自遊戲本身的檔案,而非憑肉眼調校。
https://github.com/user-attachments/assets/0b80042e-a40b-4a15-a64e-e75e20966ace
副手武器、成對攻擊與命中停頓,手動操作。
https://github.com/user-attachments/assets/b58dbb0d-a3db-46d5-82ee-d9152503e40c
沙盒自行演示它所能做的一切(較早的版本)。
這是一個供研究用的粉絲專案。它與 FromSoftware 或 Bandai Namco 無隸屬關係,亦未獲其背書。本儲存庫中沒有任何來自遊戲的內容,只有程式碼:若要建置並執行它,你需要自己的遊戲副本,並由此處的工具從中產生資料。
內容包含
移動
- 走路、跑步與衝刺,從跑步停下時有煞車動畫。
- 蹲下,有其專屬的待機、走路、跑步、停止,以及蹲下與站起的動畫。
- 鎖定:在面對目標的同時,以四個方向繞著目標側移。
- 從靜止、走路、跑步與衝刺中跳躍。鎖定時,走路與跑步的跳躍會向前、向後、向左或向右,同時你持續面對目標,落地亦然。
- 落下:從邊緣走落時有獨立的起始動作、輕著地與重著地、落下傷害與落下死亡。
- 樓梯與斜坡,每隻腳都踩在其下方的地面上。
閃避
- 翻滾在按鈕放開時使出;按住則改為衝刺。
- 輕、中、重裝備負重的翻滾、後撤步與蹲下翻滾。
- 鎖定時以四個方向翻滾。
戰鬥
- 輕攻擊連段、重攻擊與蓄力重攻擊。
- 跑步、翻滾、後撤步、蹲下、跳躍與防禦反擊攻擊。
- 具有多段命中的攻擊會讓每一段都命中,每一段都有自己的傷害與耐力消耗。
- 命中是在武器本身觸及目標時發生,而非揮擊開始時:站得太遠,或位於突刺的側邊,就會落空。
- 命中停頓:攻擊者與目標在打擊命中時瞬間凍結。
- 以盾牌防禦,或以任何雙手持有的武器防禦;防禦命中與防禦崩解。
- 左手:盾牌、火把、空手,或第二把武器。除了盾牌以外的任何東西都會在防禦按鈕上攻擊,並使用該武器自身的左手連段。
- 成對武器(「雙持架式」):兩手各持同類武器會將左按鈕變成同時使用兩者的招式組,有其專屬連段,以及專屬的跑步、翻滾、後撤步與跳躍攻擊。24 個類別中有 22 個擁有此招式組。
- 四種強度與四個方向的受擊反應:畏縮、踉蹣、大踉蹣,以及將你向後拋出的擊倒,在你倒地期間保持無敵,並可讓你提早翻滾脫離。
- 變換握法或武器時,上半身播放動作,同時你持續移動。
武器
24 個類別,每個都能單手或雙手使用,且兩種方式各有自己的招式組:
匕首、長劍、大劍、巨劍、刺劍、打刀、棍棒、戰斧、
短矛、戟、重刺劍、彎刀、彎曲大劍、
雙刃劍、大錘、連枷、巨斧、巨矛、死神鐮刀、鞭、拳套、
爪、巨獸武器與火把,外加一面盾牌。其中任何一個都能置於
左手,且置於該處的任何東西也都能雙手使用。
對練假人
它會靜止不動,直到你按下 T。進入敵對狀態後,它會循環四種攻擊,
每種對應一種受擊反應:
| 攻擊 | 預告 | 反應 |
|---|---|---|
| 過頂重砸 | 橘色 | 踉蹣 |
| 低位橫掃(跳過它) | 藍色 | 畏縮 |
| 更重的重砸 | 紅色 | 大踉蹣 |
| 最重的重砸 | 紫色 | 擊倒 |
競技場
堆疊的木箱構成一段攀爬路線,通往一道你可以沿著行走的牆,一道與該牆隔著缺口相對的平台、一段斜坡、一排柱子、一座低矮高台,以及一座 21 公尺高的樓梯,在向上途中會經過每一個落下傷害門檻。
演示
按下 Enter,沙盒會自行演示上述一切,並為它展示的每一項附上字幕:約五分鐘,為錄影而製作。
再按一次 Enter 即停止。它在開始時會重置競技場,並播放與玩家相同的輸入,因此其中沒有任何安排好的內容。
音效(選用)
在遊戲的音效庫解包後,沙盒會播放遊戲本身的腳步聲、布料與盔甲移動聲、揮擊與落地聲,在動畫要求它們的影格上播放,並依 Wwise 音效庫所述的方式選擇與混音。
沒有音效庫時,它會靜音執行。
它有多忠實
讀取自遊戲檔案:
- 每個動作的長度、命中判定窗、無敵影格、取消窗與輸入窗。
- 每個動作的根運動,以及走路/跑步/衝刺/蹲下速度。
- 耐力消耗(攻擊的每一段命中、翻滾、後撤步、跳躍)、運動值與每把武器的基礎攻擊。
- 每個攻擊的命中停頓時間。
- 最大 HP 與耐力:流浪騎士起始職業在其起始等級,透過遊戲的屬性曲線計算。
- 變換握法或武器:其動畫以及變更生效的時機。
- 玩家骨架與動畫本身。
- 每個動畫播放哪些音效以及在哪個影格,每個音效從哪些錄音中挑選、它們的音量,以及每把武器的揮擊音效偏移。
仍為估計值(全部在 src/sim/data.rs 中標記為 ESTIMATE):
- 閃避按鈕必須按住多久才算衝刺。
- 耐力回復與衝刺消耗。
- 跳躍弧線結束後的重力,以及落下傷害門檻。
- 移動加速度與轉向速率。
- 命中形狀。當沿著武器打擊部位的膠囊觸及假人時即命中,且武器跟隨真實動畫,但該部位位於每把武器上的何處以及膠囊有多粗,是依沙盒的替代武器模型,而非遊戲的。
- 假人:其攻擊、傷害與時序是為測試而虛構的。
哪個動畫屬於哪個動作,部分是從資料推斷的,因為遊戲是在本專案未讀取的已編譯腳本中決定此事。有兩項推斷值得知道:
- 哪個大踉蹣動畫回應來自哪一側的命中,是從頭部甩動的方式挑選的。
- 在成對攻擊中,哪一段命中屬於哪隻手,是從遊戲對它們的編號方式讀取的,並對照當時哪把武器在移動來檢查。
- 跟隨跑步、翻滾、後撤步或蹲下攻擊之後的攻擊,會直接進入第二段輕攻擊。遊戲在該處有短過渡片段,但它們本身不帶任何時序。
未包含:武器戰技、招架、屬性加成、雙手持握傷害加成,以及被命中而拋飛到空中。骨架是基本圖形:手是連指手套,在指關節處彎折,帶有拇指,且不繪製布料與臉部,動畫混合也比遊戲的簡單。
音效僅屬於玩家,且不具空間定位。在遊戲會從周遭環境挑選音效之處,沙盒固定烘焙一個選擇:腳下的泥土、皮革盔甲與布鞋(FLOOR_MATERIAL、ARMOUR_MATERIAL 與 SWITCHES 於
tools/bake_sounds.py)。音高與音量每次會有些微變化,如同遊戲所為。少數揮擊音效位於 cs_main 以外音效庫的武器類別會無聲揮擊。
操作
| 動作 | 鍵盤/滑鼠 | 遊戲手把 |
|---|---|---|
| 移動/視角 | WASD/滑鼠 | 左搖桿/右搖桿 |
| 走路 | 左 Alt | 輕推 |
| 翻滾或後撤步 | 輕按 Space | 輕按 B |
| 衝刺 | 按住 Space | 按住 B |
| 跳躍 | F | A |
| 蹲下 | X | L3 |
| 輕攻擊 | 滑鼠左鍵 | RB |
| 重攻擊(按住以蓄力) | Shift + 滑鼠左鍵 | RT |
| 防禦,或左手攻擊 | 滑鼠右鍵 | LB |
| 防禦反擊 | 格擋命中後按 Shift + 滑鼠左鍵 | 格擋命中後按 RT |
| 雙手持右手武器 | E + 滑鼠左鍵 | Y + RB |
| 雙手持左手臂裝備 | E + 滑鼠右鍵 | Y + LB |
| 下一把武器 | 右方向鍵 | 方向鍵右 |
| 下一個副手(盾牌、空手、火把、各把武器) | 左方向鍵 | 方向鍵左 |
| 鎖定 | Q 或滑鼠中鍵 | R3 |
沙盒按鍵:1 / 2 / 3 設定輕/中/重裝備負重,T 使假人進入敵對狀態,F1 切換無敵影格著色,H 切換說明覆蓋層,
Enter 播放演示,
Esc 釋放滑鼠。點擊視窗以捕捉滑鼠。
設定
在 Windows 上
你只需要 Rust,以及 Python 3.10 或更新版本。
在 Linux/MacOS 上
你需要 Rust、Python 3.10 或更新版本,以及 Wine。
Wine 用於與你的遊戲副本所提供的 Windows 專用 dll 介接。
產生的檔案刻意不放在儲存庫中,因為它們衍生自遊戲:動作表(src/sim/extracted.rs)、烘焙動畫(assets/player_anims.bin)與音效
(assets/player_sounds.bin、assets/sounds/)。在你從自己的遊戲檔案產生前兩者之前,本專案將無法編譯
或執行。檔案解包後,這只是一道命令。
-
解包遊戲檔案。 封存檔經過加密,因此此步驟使用社群工具:
- 使用 UXM Selective Unpack,僅從
chr/解包這些:
c0000.anibnd.dcx、c0000_a00_hi、c0000_a00_lo、c0000_a00_md、
c0000_a0x、c0000_a1x、c0000_a2x、c0000_a3x、c0000_a4x與c0000_a5x
(每個.anibnd.dcx)。僅使用 Unpack,絕不使用 Patch。 - 使用 WitchyBND,將
regulation.bin解包到regulation-bin資料夾。 - 選用,用於音效:另解包
sd/cs_smain.bnk與
sd/enus/cs_main.bnk。 - 將結果放入一個資料夾,配置為
chr/...、regulation-bin/...
以及,若你有它們,sd/...。
- 使用 UXM Selective Unpack,僅從
-
告訴工具東西在哪裡。 它們會讀取兩個環境變數:
變數 指向 預設值 ER_FILES步驟 1 的資料夾 專案中的 er-filesER_GAME_DIR遊戲的 Game資料夾你作業系統上的預設 Steam 位置 在 PowerShell(Windows)中:
$env:ER_FILES = "C:\path\to\unpacked" $env:ER_GAME_DIR = "D:\Steam\steamapps\common\ELDEN RING\Game"在 Bash(Linux / macOS)中:
export ER_FILES="/path/to/unpacked" export ER_GAME_DIR="$HOME/.local/share/Steam/steamapps/common/ELDEN RING/Game"[!NOTE]
Linux 與 macOS 使用者: 由於遊戲的 Oodle 解壓縮函式庫
(oo2core_6_win64.dll)是 64 位元 Windows PE 二進位檔,擷取工具
會使用 Wine 與它通訊。請確保已安裝wine。指令碼會
自動在 Wine 下尋找 Windows Python,或者你可以將WINE_PYTHON
直接指向你的python.exe二進位檔。 -
產生資料(約需一分鐘):
python tools/setup.py若音效庫不在,它會如此表示、跳過該步驟,且沙盒會靜音執行。
-
執行它,從專案資料夾:
cargo run
之後執行沙盒便不再需要遊戲檔案,只有重新產生資料時才需要。在拉取觸及
tools/ 的變更後,再次執行 setup.py:新的動作與動畫需要重新產生的資料。它只是執行
三個產生器,這些產生器也可以單獨執行:
python tools/extract.py
python tools/bake_anims.py
python tools/bake_sounds.py
版面配置
| 路徑 | 內容 |
|---|---|
src/sim/ |
整個遊戲以純粹的 60 Hz 狀態機形式呈現,不含任何引擎型別。 |
src/sim/extracted.rs |
產生的動作表。不在儲存庫中;請勿手動編輯。 |
src/sim/data.rs |
動作型別,以及所有仍為估計值的數值。 |
src/sim/player.rs、src/sim/dummy.rs、src/sim/level.rs |
玩家、對練假人與競技場。 |
src/sim/tests.rs |
行為測試;以 cargo test 執行。 |
src/rig.rs、src/anim.rs |
骨架,以及載入與播放烘焙動畫。 |
src/audio.rs |
在動畫經過其影格時播放烘焙音效。 |
src/demo.rs |
腳本化示範,以及一個在無視窗環境下完整播放的測試。 |
src/camera.rs、src/input.rs、src/hud.rs、src/view.rs |
攝影機、按鍵綁定、HUD、競技場與假人視覺。 |
tools/setup.py |
執行下列產生器。 |
tools/extract.py |
讀取計時、根運動與參數;寫入 extracted.rs。 |
tools/bake_anims.py |
解碼骨骼動畫;寫入 assets/player_anims.bin。 |
tools/bake_sounds.py |
在 Wwise 音效庫中解析各動畫的音效事件;寫入 assets/player_sounds.bin 與 assets/sounds/。 |
tools/wwise.py、tools/wem.py |
Wwise 音效庫讀取器,以及 Wwise Vorbis 至 Ogg Vorbis 轉換(ww2ogg 的移植,見 tools/ww2ogg/COPYING)。 |
tools/*.py(其他) |
遊戲的容器、事件、動畫與參數格式的讀取器。 |
關於資料的說明
src/sim/extracted.rs、assets/player_anims.bin、assets/player_sounds.bin
與 assets/sounds/ 衍生自遊戲的檔案,因此皆未提交,
且全部位於 .gitignore。在分支中請保持如此:分享程式碼,
讓每個人從自己擁有的遊戲副本產生資料。
授權條款
程式碼採用 MIT 授權條款。tools/ww2ogg/ 是
ww2ogg 的移植,並保留其自身授權條款(tools/ww2ogg/COPYING)。
本授權條款僅涵蓋本專案的程式碼。它未授予 ELDEN
RING 或其檔案所產生的任何內容之任何權利,這些仍屬 FromSoftware 與
Bandai Namco 所有。
授權與來源聲明
原始 README 與翻譯沿用 MIT 授權;本次修改為繁中翻譯、連結與排版調整。可修改的 Markdown、原始 README、LICENSE 與 NOTICE 收錄於頂部文件包。原作遊戲內容與商標不因此獲得授權。
LICENSE.md
MIT License
Copyright (c) 2026 Funny-Bones and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
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 OR COPYRIGHT HOLDERS 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.

評論
…