Repo ↗ · 原始 README ↗ · 文件包(Markdown/授權)
封面參考(原作): Sekiro: Shadows Die Twice · 原作宣傳圖,由 IGDB 提供。圖片版權屬原權利人,供辨識原作使用,不代表此重寫/模組專案的實際畫面。
來源維護者: FFwLo · 版本: 9df085fc465f · 整理日期: 2026-10-12
文件授權: MIT · LICENSE.md · 本文形式: README 翻譯
下文為來源 README 的繁中翻譯,由 Kirikirin 使用 AI 輔助整理;功能、完成度與測試結果均為原作者描述,本站未逐項實機驗證。圖片改為來源連結,指令與技術識別保留原文。
Sv1
一個沙盒,重現 Wolf 在《SEKIRO: SHADOWS DIE TWICE》中如何移動與戰鬥,以 Rust 撰寫,使用 Bevy 0.19。
角色是遊戲本身的模型,驅動它們的也是真實的:時序、移動、動畫、敵人 AI 與音效都是從遊戲本身的檔案讀取,而非憑肉眼調整。
[README 圖片:Sv1 gameplay](https://github.com/FFwLo/RustSekiro/releases/download/v0.1.0/sv1-gameplay.mp4)
與葦名武士將軍戰鬥:格擋、危險攻擊與忍殺。點擊觀看完整影片。
這是一個供研究用的粉絲專案。它與 FromSoftware 或 Activision 無隸屬關係,也未獲其背書。本儲存庫中沒有任何來自遊戲的內容,只有程式碼:若要建置並執行它,你需要自己的一份遊戲,此處的工具會從中產生資料。
內容包含什麼
移動
- 行走與奔跑,兩者皆以遊戲的移動起始動畫開始,並過渡到其循環,停止動畫則依你移動的方向播放。
- 衝刺,透過按住踏步按鈕。
- 鎖定:在面對目標的同時,以四個方向繞著目標側移。在對角線上,腿部會轉向 Wolf 行進的方向,而胸部持續面對目標,因此雙腳不會滑動。
- 鎖定時原地轉身,以及快速轉身。
- 收刀與拔刀,收刀狀態下有專屬的行走與奔跑。
踏步與跳躍
- 鎖定時的四方向踏步,身體朝搖桿方向傾斜。
- 從靜止與移動中跳躍。鎖定時,它們會向前、向後、向左或向右,同時你持續面對目標。
- 空中轉向、落地,以及從敵人身上彈開並進入第二段跳躍的踢擊。
- 跳躍途中被殺死時,身體會落下並著地,而非漂浮在空中。
戰鬥
- 輕攻擊連段,按住按壓會轉為其突刺後續。
- 衝刺、踏步、跳躍與空中攻擊,以及直接從格擋接出的攻擊。
- 命中是在刀刃本身觸及目標時判定,而非在揮擊開始時。
- 依強度與方向的受擊反應:畏縮、踉蹌、將 Wolf 擊退的一擊,以及附帶起身的擊倒。
- 死亡,以及在仍有節點時復活。
格擋與架勢
- 以遊戲本身的格擋時機進行防禦與格擋,包括連按按鈕時較短的時機,以及從防禦後座力接出的格擋。
- 被防禦與被格擋的命中會依每種攻擊強度播放對應的反應,在地面與空中皆然。
- 雙方的架勢:來自每次命中、防禦與格擋的傷害、隨你正在做的事而變化的恢復,以及架勢崩解。
- 危險攻擊,以及對突刺的識破。
- 流水技能,可在除錯選單中切換。
忍殺
- 架勢崩解後從正面、從背後、從背後潛行接近,以及從上方落下。
- 兩個角色皆由遊戲用於每次投技的附著點放置,並一起播放其配對動畫。
- docs/deathblow_groups.md 列出遊戲的 70 個敵人中哪些共用 Wolf 的忍殺動畫。
武技、義手與道具
武技及其後續,於 config.toml 中選擇:旋風斬、一文字與一文字:二連、漂浮舟,以及其他武技的第一段斬擊。按住型武技會收刀、等待,並在放開時拔刀斬。裝載手裏劍消耗紙人,而治癒葫蘆會治療。
敵人
遊戲放置的每個敵人與頭目(102 種),於 config.toml 或除錯選單中選擇:從葦名武士將軍與赤鬼,到弦一郎、蝴蝶夫人、破戒僧、獅猿、梟與一心。可用 [enemy] group 同時召喚數個。頭目有其忍殺次數、其階段,以及其地圖事件(弦一郎的巴流型態、破戒僧的幻影、其地圖腳本的子彈、召喚與傳送)。
每個都執行其真實 AI:遊戲本身編譯過的戰鬥腳本,以其出貨時的樣貌在一個小型 Lua 5.0 解譯器中執行,並在一個執行階段上運行,該執行階段會以遊戲的方式回答它們關於距離、角度、計時器與效果的詢問。它們依那些腳本進行走位、攻擊、連段、防禦、格擋與反擊,並有其自身的數值、攻擊與反應。未察覺的敵人執行遊戲的潛行規則:視錐、聽覺、警戒與搜索,以及從背後的潛行忍殺。
競技場
遊戲本身的地圖:將軍所站的葦名城郊大門,其部件、碰撞與光照皆來自遊戲的繪製參數(色彩分級、自動曝光、以 [ 與 ] 表示的時刻)。當擷取建置了它們時,每個頭目都在其自身的競技場中戰鬥。[world] map = "sandbox" 是一個有圍牆的測試競技場,將大門的每種材質放在一塊面板上,並可搭配任何敵人陣容(SHINOBI_SANDBOX_ENEMIES=all:0)。
除錯選單
按 F1。從那裡你可以:
- 設定敵人的 AI:其真實 AI、被動、僅危險攻擊、重複單一攻擊,或閒置;
- 改變敵人的類型或服裝,並治療它;
- 使其架勢崩解,並從正面或從背後對其忍殺;
- 開啟無敵模式或無限架勢、補充道具,並切換流水;
- 改變模擬速度、顯示受擊框,以及重置。
視覺
- Wolf 與敵人的遊戲模型。每個部件使用其材質定義所指定的貼圖,而自訂著色器會讀取 Sekiro 的法線、光澤與金屬貼圖。
- 布料依遊戲本身的布料資料模擬:圍巾、長袍、盔甲裙與繩索,並與身體碰撞。
- 動畫交叉淡入淡出由動畫本身計時。某些動作在上半身播放,同時腿部持續移動,而頭部與軀幹會轉向目標。
- 刀與刀鞘位於遊戲的武器參數所放置之處,並在動畫要求時移動到手或腰際。
音效(選用)
在遊戲的 FMOD 執行階段可用時,沙盒會透過它播放遊戲本身的音效:腳步聲、布料與盔甲、揮擊、命中、防禦與格擋。它們會在動畫要求它們的影格上出現,並由遊戲所用的相同材質表選擇。沒有 FMOD 時,它會退回使用解碼後的樣本,或靜音運行。
它有多忠實
從遊戲檔案讀取:
- 每個動作的長度、命中窗口、取消窗口與輸入窗口。
- 每個動作的根運動,以及行走、奔跑與衝刺速度。
- 格擋與防禦窗口、架勢傷害與恢復、攻擊與傷害參數,以及它們造成的反應。
- 忍殺幾何:距離、附著點與時序。
- Wolf 的行為規則,來自反編譯的角色腳本,以及敵人的 AI,來自其編譯過的戰鬥腳本。
- 攝影機距離、角度與追蹤速率。
- 骨架、動畫、模型、材質與布料。
- 每個動畫播放哪些音效,以及在哪些影格。
以唯讀記錄器對照運行中的遊戲檢查:跳躍弧線、奔跑速度、格擋與輸入窗口、架勢消耗與恢復,以及將軍的忍殺位置,逐格檢查。
仍為估計值(全部在程式碼中標記為 gap,並在 config.toml 中說明):
- 地板音效材質。真實的來自關卡,而沙盒沒有關卡,因此以鵝卵石代替。
- Wolf 用於推擠敵人的身體半徑。
- 崩解後忍殺窗口保持開啟多久。
- 一些攝影機細節。
有些事物是從資料推斷而非直接讀取。三個值得知道的推斷:
- 收刀狀態的行走與奔跑是
a010動畫集,它只出現在正常集旁邊;檔案中沒有任何東西將它命名為「收刀」。 - 角色貼圖的 alpha 被視為剪裁,除了皮膚與眼睛之外,其 alpha 代表其他意義。此規則來自貼圖所含的內容,而非遊戲儲存的旗標。
- 光澤以一減去儲存值的方式轉為粗糙度。Sekiro 自身的光照模型並未被重現。
未包含:關卡、潛行、鉤繩、大多數義手,以及上述兩個之外的任何敵人。雙腳並未被釘在地面上(遊戲使用腳部 IK),因此直線奔跑會有些微滑動,且 Sekiro 的布料細節層與皮膚著色並未被繪製。
音效並非定位音效。在遊戲從地板挑選腳步音效之處,沙盒使用鵝卵石(FLOOR_MATERIAL 於 src/sound.rs)。
操作
| 動作 | 鍵盤 / 滑鼠 |
|---|---|
| 移動 / 視角 | WASD / 滑鼠 |
| 行走 | 左 Alt 或 左 Ctrl |
| 攻擊(按住以突刺) | 左鍵或 J |
| 防禦 / 格擋 | 右鍵或 K |
| 武技 | 左鍵與右鍵同時按 |
| 踏步(按住以衝刺) | Shift |
| 跳躍、空中踢擊 | Space |
| 鎖定 | Q |
| 義手工具 | F |
| 切換義手工具 | Z |
| 治癒葫蘆 | E |
| 蹲下 | C |
| 收刀 / 拔刀 | X |
| 復活(死亡時) | 左鍵 |
沙盒按鍵:F1 開啟除錯選單(敵人、AI 模式、技能、工具、作弊),T 開啟或關閉敵人的 AI,H 顯示受擊框,R 重置,[ / ] 改變時刻,F5 重新載入 config.toml,Esc 釋放滑鼠。點擊視窗以捕捉滑鼠。
設定
從發行版
從 Releases 下載 Sv1-<version>-windows.zip,解壓縮到任何地方,並在該資料夾中:
- 執行
extract.bat,或對非預設安裝執行extract.bat -Sekiro "D:\path\to\Sekiro"。它會從你的遊戲副本建置extracted資料夾。音效與頭目競技場耗時最久(競技場每張地圖會解包並刪除約 2 GB;extract.bat -SkipArenas會讓每個頭目留在城門地圖上)。 - 執行
sv1.exe。它不會開啟主控台;它所記錄的內容位於其旁邊的sv1.log,而若它因錯誤而停止,訊息會以對話方塊顯示(extracted下缺少檔案表示步驟 1 未完成)。
你需要 Windows、來自 Steam 的《SEKIRO: SHADOWS DIE TWICE》(1.06 版)以及 Python 3 位於 PATH 上(它會執行頭目腳本、頭目競技場與義手工具的匯出)。Node.js 為選用:有了它,遊戲本身的特效定義會被匯出;沒有它,特效則為手工製作的替代品。
從原始碼
你需要 Rust 與 Windows、來自 Steam 的《SEKIRO: SHADOWS DIE TWICE》(1.06 版)、Python 3(頭目、競技場與工具匯出),以及選用的 Node.js(特效定義)。
產生的檔案刻意不在儲存庫中,因為它們衍生自遊戲:extracted/ 中的所有內容。專案在你從自己的副本產生它之前不會運行。那是一道指令。
-
告訴工具遊戲在哪裡。 腳本接受一個參數:
參數 指向 預設 -Sekiro遊戲的安裝資料夾 預設 Steam 位置 -
產生資料。 擷取器會自行解密遊戲的封存檔,因此不需要其他解包工具:
powershell -ExecutionPolicy Bypass -File tools\extract.ps1它會將參數、動畫、模型、材質、布料與音效讀入
extracted/。音效步驟會透過遊戲本身的 FMOD 解碼,耗時最久。 -
執行它,從專案資料夾:
cargo run --release
之後玩遊戲便不再需要遊戲,只有在重新產生資料時才需要。在拉取觸及 tools/ 的變更後,再次執行 tools\extract.ps1。它會執行擷取器的步驟,這些步驟也可以單獨執行:
cargo run --release --manifest-path tools/sekiro-extract/Cargo.toml -- unpack "<Sekiro folder>" extracted "<regex>"
cargo run --release --manifest-path tools/sekiro-extract/Cargo.toml -- params extracted/param/gameparam/gameparam.parambnd.d extracted/json/params
cargo run --release --manifest-path tools/sekiro-extract/Cargo.toml -- export extracted
cargo run --release --manifest-path tools/sekiro-extract/Cargo.toml -- model <flver> <tpf> extracted/model_<name>.bin extracted/tex
發行版 zip 以 cargo build --profile dist(全程式最佳化,無符號)建置,接著執行 powershell -File tools\package.ps1。
行為測試以 cargo test --release 執行。遊戲檔案不包含的值位於 config.toml,每個都附有其真實值會來自何處。F5 會在遊玩時重新載入它。
版面配置
| 路徑 | 內容 |
|---|---|
src/player.rs |
Wolf:輸入緩衝區、角色腳本中的狀態機、移動、格擋與識破、跳躍、忍殺。 |
src/enemy.rs |
敵人:其動作、反應、格擋與識破,以及忍殺中敵人的那一側。 |
src/ai.rs、src/ai/lua50.rs |
執行敵人真實戰鬥腳本的 Lua 5.0 解譯器與目標執行階段。 |
src/combat.rs、src/actor.rs |
命中、架勢、傷害、反應、擊退、根運動。 |
src/anim.rs |
動畫播放:交叉淡化、圖層、循環、腿部扭轉、頭部與軀幹轉向。 |
src/model.rs、src/sekiro_material.wgsl |
模型、武器及其位置,以及材質著色器。 |
src/cloth.rs |
來自遊戲布料資料的布料模擬。 |
src/sound.rs、src/fmod.rs |
來自動畫的音效事件,透過遊戲的 FMOD 播放。 |
src/camera.rs、src/hud.rs、src/debug_menu.rs、src/world.rs |
攝影機、HUD、除錯選單與競技場。 |
src/prosthetic.rs |
已上膛的手裏劍。 |
src/sim_tests.rs |
行為測試;以 cargo test 執行。 |
src/trace.rs、src/photo.rs |
一個會記錄每個繪製影格的腳本化執行,以及一個截圖模式,用於檢查動畫。 |
config.toml |
遊戲檔案未保存的值,每個都附有其真實值所在的位置。 |
tools/extract.ps1 |
從你的遊戲副本產生 extracted/。 |
tools/sekiro-extract/ |
擷取器:封存檔、參數、動畫與行為檔案、模型、材質、布料、音效庫。 |
tools/trace_pops.py、tools/trace_slide.py |
在追蹤記錄中找出動畫跳變與腳部滑動。 |
tools/memscope/ |
用於對照執行中遊戲檢查時序的唯讀記錄器。 |
docs/ |
進度日誌與各主題的知識庫:每個機制的內容及其在遊戲資料中的所在位置。 |
關於資料的說明
extracted/ 衍生自遊戲的檔案,因此其中沒有任何部分被提交,
且它位於 .gitignore。請在分支中保持這個做法:分享程式碼,
讓每個人從自己擁有的遊戲副本產生資料。
tools/sekiro-extract/keys/ 中的封存檔金鑰與檔案名稱清單,就是
社群已經隨其解包工具散布的那些。
授權條款
程式碼採用 MIT 授權條款。
此授權僅涵蓋本專案的程式碼。它未授予任何對 SEKIRO:
SHADOWS DIE TWICE 或其檔案所產生之任何內容的權利,這些仍屬於
FromSoftware 與 Activision 所有。
授權與來源聲明
原始 README 與翻譯沿用 MIT 授權;本次修改為繁中翻譯、連結與排版調整。可修改的 Markdown、原始 README、LICENSE 與 NOTICE 收錄於頂部文件包。原作遊戲內容與商標不因此獲得授權。
LICENSE.md
MIT License
Copyright (c) 2026 FFwLo
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.
THIRD_PARTY.md
# Third-party code
## sekiro-rs
`src/ai/lua50.rs` (the Lua 5.0 loader and interpreter) is adapted from
[sekiro-rs](https://github.com/AKJama/sekiro-rs), `crates/sim/src/lua_ai/lua50.rs`,
which is dual-licensed MIT or Apache-2.0. It is used here under the MIT license:
```
MIT License
Copyright (c) 2026 AKJama
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.
```
## Event instruction argument types
`tools/emedf_types.json` lists, per EMEVD instruction class and index, the argument types the
game's event scripts use (byte, short, int, float). It is a table of the binary format's facts,
generated from the Sekiro instruction definitions that ship with
[DarkScript3](https://github.com/AinTunez/DarkScript3) (`sekiro-common.emedf.json`, also at
https://soulsmods.github.io/emedf/sekiro-emedf.html); none of that file's names, descriptions
or text is included. `tools/boss_scripts.py` reads the definitions file itself when a
`reference/DarkScript3` clone is next to the repo.

評論
…