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

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

來源維護者: ShinyStarSam · 版本: df26f6597ae2 · 整理日期: 2026-10-12

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

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


Gmod x Skyrim

以 Garry’s Mod 玩家的身分遊玩 Skyrim:在真正的 Skyrim 世界裡使用 Garry’s Mod 的移動、武器、生命值和 HUD。兩款遊戲同時執行,並透過共享記憶體溝通,做法與
SkyCraft 相同。請見 docs/DESIGN.md。

狀態:早期。 階段 0 完成:Skyrim 的玩家會跟隨 Garry’s Mod。階段 1 進行中:從 Skyrim 視窗遊玩已可運作。
僅限單人與離線。Garry’s Mod 一律以 -insecure 啟動(關閉 VAC)。

已可運作的部分

  • Garry’s Mod → 共享記憶體(2026-10-04 於遊戲中測試):在主控台輸入 lua_run require("gmsky")
    後,Garry’s Mod 的玩家位置、瞄準、速度以及在地面/蹲下/存活狀態會以每秒 66 次送達
    共享記憶體,並由一支測試程式(fake_skyrim)讀取。關閉 Garry’s
    Mod 會在半秒內被偵測到。

  • Skyrim 外掛,唯讀(2026-10-04 於遊戲中測試):在 1.7.104 上透過 SKSE 載入,掛接
    玩家的逐幀更新,並透過共享記憶體讀取 Garry’s Mod 的即時狀態。它會將
    兩名玩家並排記錄到 logs/skyrim.log。它目前還不會改變 Skyrim 中的任何東西。

  • Skyrim 的玩家會跟隨 Garry’s Mod(2026-10-04 於遊戲中測試,階段 0 完成):在 Garry’s Mod 中走動和
    環顧會讓 Skyrim 中的玩家移動和轉身,每秒約 60 次更新,
    並站在 Skyrim 自己的地面和丘陵上。關閉 Garry’s Mod 後,Skyrim 會在 2 秒內取回其正常
    控制。你從 Garry’s Mod 視窗進行控制,而 Skyrim 需要在它的 Skyrim.ini 中設定
    bAlwaysActive=1,以便在背景繼續執行。

  • 從 Skyrim 視窗遊玩(2026-10-04 於遊戲中測試,階段 1 步驟 1):W/A/S/D、Shift
    (衝刺)和滑鼠會以 Garry’s Mod 的移動方式移動和轉動玩家;E 會開門、
    開容器並與 Skyrim 中的人交談;Esc、~、J、M、F9、T、Tab、I、P 和 F5(測試 68)會開啟
    Skyrim 的選單,而當選單開啟或 Skyrim 視窗不在最前面時,輸入會
    交還給 Skyrim。Garry’s Mod 在背景以全速執行(以 tools/launch_gmod.ps1 啟動它)。視角在選單
    之後不會突然跳動。滑鼠視角:Skyrim 會在 Garry’s Mod 套用之前先顯示滑鼠移動,
    並直接轉動其攝影機(Skyrim 自己的第一人稱攝影機在快速轉動時
    最多落後 45 度);使用者回報只剩非常小的延遲。Garry’s Mod 主控台中的
    設定:gmsky_sensitivity(預設 3)、gmsky_predict、gmsky_camera(1 = 開啟)。

  • 平滑行走(2026-10-04 於遊戲中測試,階段 1 步驟 2):Skyrim 會在 Garry’s
    Mod 每秒 66 次更新之間進行混合,而不是每幀取用最新的一次;在穩定速度下,
    每幀的步進變化為 1–6%,而不是 27–44%。僅對位置增加約 15 毫秒(不影響視角)。
    gmsky_smooth 0 會將其關閉。

  • gmsky 會自行載入(2026-10-04 於遊戲中測試):一個小檔案,
    garrysmod/lua/autorun/server/gmsky_autoload.lua,以
    tools/install_gmod_autoload.ps1 安裝一次後,一旦你進入地圖,就會在單人遊戲中載入 gmsky。

  • Garry’s Mod 在 Skyrim 的地面上行走(2026-10-04 於遊戲中測試,測試 20–21):Skyrim
    會以射線測量玩家周圍的地面,而 Garry’s Mod 自己的移動會在其上行走、跳躍
    和沿桿滑行。地面是由 Lua 回應的三角形(沒有 Garry’s Mod 物理物件,
    那在測試 12–17 中讓 Garry’s Mod 當掉)。測試 21:164 次地面更新,沒有當掉、沒有停頓;
    Skyrim 會預先測量快速玩家的前方,因此 noclip 發射從未超出地面。

  • 跳躍與 noclip(2026-10-04 於遊戲中測試,測試 17 和 21):Skyrim 的玩家會跟隨
    Garry’s Mod 的高度;V 可從 Skyrim 視窗切換 Garry’s Mod 的 noclip;你會飛越
    Skyrim 的丘陵,而 Skyrim 自己的物理不會把你推回去(接觸和 Skyrim 的
    「落地救援」對我們的玩家已關閉,正如 SkyCraft 所做的那樣)。

  • 隨處旅行:沒有地圖邊界(2026-10-04 於遊戲中測試,測試 22):當你遠離
    Garry’s Mod 地圖的中心時,Garry’s Mod 會將你以及它與 Skyrim 世界的連結一起移回,
    因此 Skyrim 的位置不會改變。測試 22:42 次重新置中(37 次以
    gmsky_recentre_at 500 行走時,5 次在長時間 noclip 飛行中),單一方向距起點 58,000 Garry’s Mod 單位 ≈ 109,000 Skyrim
    單位;每次前後相對於連結的位置都完全相同;
    速度保持;沒有停頓;使用者表示:「完美運作」。

  • Skyrim 的真實碰撞(2026-10-04 於遊戲中測試,測試 23):Garry’s Mod 的移動
    會與 Skyrim 的精確碰撞形狀碰撞:建築物、牆壁、樓梯、拱門、室內、
    樹木、柵欄、岩石。當你移動時,會從 Skyrim 串流你周圍的資料(改編自 SkyCraft);
    gmsky_ground grid 會切換回較舊的射線網格地面。

  • 來自 Garry’s Mod 眼睛的攝影機(2026-10-04 於遊戲中測試,測試 24):蹲下會平滑降低
    視角,重落地會使其震動(視角衝擊),Skyrim 使用 Garry’s Mod 的 FOV。

  • 蹲下 = Skyrim 的潛行(測試 24):潛行眼睛、NPC 偵測和潛行攻擊會跟隨
    Garry’s Mod 的蹲下。

  • tools/launch_gmod.ps1 會直接載入 gm_flatmap(測試 24),並在
    garrysmod/maps 中設定 gm_flatmap.bsp。

  • Garry’s Mod 的手、武器和 HUD 在 Skyrim 視窗內(階段 2,於遊戲中測試
    2026-10-05,測試 42-50;自測試 68 起自行開啟):每次啟動時都開啟(在 Garry’s Mod 主控台中使用 gmsky_overlay 0 可將其關閉)。

    • Garry’s Mod 的手、武器、HUD(修補過的 HOLOHUD 2,請見 tools/build_holohud.py)、選單
      和主控台會每幀繪製在 Skyrim 的世界之上,延遲 7-9 毫秒,並具有正確的透明度
      (以線性光混合;透過快照檢查,gmsky_overlay_shot)。
    • 當 Skyrim 選單開啟時會隱藏。物理槍的抓取輪廓(光暈)可運作(測試 45)。
    • HOLOHUD 的板面是霧面的:Skyrim 在其後方被模糊(gmsky_overlay_blur 0/1)。
    • Skyrim 自己的第一人稱手臂和武器、準星、生命值 / 法力 / 耐力條、
      羅盤、充能計和箭矢數量會在覆蓋層開啟時隱藏;關閉時會回來。
    • Garry’s Mod 的視窗會在覆蓋層開啟時移到螢幕外,之後再回來
      (gmsky_overlay_hidewindow 0 會讓它留在原位)。Alt+Tab 切換到它仍可用於其主控台。
  • 從 Skyrim 視窗使用武器和生成選單(階段 3 步驟 3a,於遊戲中測試
    2026-10-05,測試 53-54):滑鼠滾輪和 1-6 會開啟 Garry’s Mod 自己的武器選單(HOLOHUD 的)
    並以點擊選取;Q 會保持 Sandbox 的生成選單開啟,並有由滑鼠移動的游標(繪製在
    覆蓋層中),且當它出現時不會移動攝影機(gmsky_cursor_speed)。物理槍的
    滾輪會推 / 拉持有的道具。尚未完成:在生成選單的搜尋框中輸入、C 選單。

  • 射擊 Skyrim 的 NPC(階段 3,於遊戲中測試 2026-10-05,測試 56-60):每一把發射子彈的 Garry’s Mod
    武器、鐵撬和 RPG 都會透過以 Skyrim 自身逐骨骼命中框為形的隱形替身擊中 Skyrim 的 NPC(該複本在 99.3-100% 的測試
    射線上與 Skyrim 相符,gmsky_hitbox_test),而命中會經過 Skyrim 自己的命中系統:NPC 會流血、反應、
    反擊並死亡。傷害 × 3,爆頭再 × 2(gmsky_damage_scale、
    gmsky_headshot_scale)。你會像撞到 Garry’s Mod 自己的 NPC 一樣撞到 NPC;他們會把你推到一旁。

  • Skyrim 的 NPC 會傷害你(階段 3,於遊戲中測試 2026-10-05,測試 61):他們的命中會扣除
    Garry’s Mod 的生命值(HOLOHUD 的條),1:1(gmsky_hurt_scale);Skyrim 自己的生命值保持全滿,且
    Skyrim 無法殺死你。墜落會造成一次傷害(Garry’s Mod 自己的墜落傷害)。

  • 死亡與重生(階段 3,於遊戲中測試 2026-10-05,測試 62):你在 Garry’s Mod 中死亡
    並點擊重生,全部從 Skyrim 的視窗進行;你會以全滿生命值在最後一個沒有人與你戰鬥的地點回來。不需要重新載入 Skyrim 存檔。

  • 射擊屍體(階段 3,測試 64):Skyrim 的布娃娃物理會以 Garry’s Mod 自己的
    傷害力道 × 3 被推動(gmsky_ragdoll_force),作用於擊中的位置;爆炸會把四肢炸開;
    致命射擊和爆炸會在身體倒下時將其拋飛。

  • 游泳(階段 4,測試 67-68;W + Space 會同時向前和向上游):Skyrim 的河流和湖泊在 Garry’s Mod 中也是水:從
    及腰深處開始,你會以 Source 自己的水中移動方式游泳(朝你看的方向游,Space 向上,緩慢下沉,在岸邊爬出);Skyrim 會顯示你在水下,而溺水會傷害你。

  • F1 會開啟 Garry’s Mod 的主控台(測試 64),在 Garry’s Mod 自己的視窗中、覆蓋於 Skyrim 之上;以 ~ 或 Esc 關閉它(或點回 Skyrim)。

  • Garry’s Mod 的物件在 Skyrim 的世界內(幾何路線,測試 75-80):道具、火箭、
    手榴彈、碎片、帶有動畫和武器的 Garry’s Mod NPC 會由 Skyrim
    本身在其自己的幀中繪製,並帶有它們的材質;它們會留在世界中並隱藏在牆後。
    由 Skyrim 自己的太陽、環境光和光源以 Skyrim 的亮度照亮,並具有法線貼圖、Source 的
    phong 光澤和發光(自發光)部分;在戶外它們會獲得 Skyrim 的太陽陰影並將自己的陰影投射到 Skyrim 上(測試 81-89)。在室內,Skyrim 會投射陰影的火把和火焰也會對它們投射陰影,
    使用 Skyrim 自己的陰影貼圖,而它們會將來自那些光源的陰影投射到 Skyrim 和彼此
    身上(測試 94-95)。

  • 玩家和 Skyrim 的玩家一樣寬(S2j,測試 137-140):Garry’s Mod 的碰撞箱會依
    Skyrim 的玩家碰撞調整大小(半寬 10.9 而非 16),因此它能穿過相同的
    地方;攝影機在近距離不再切入牆壁,遠處陰影也穩定
    (gmsky_size_from_skyrim 0 會回到 Garry’s Mod 自己的大小)。載入後,
    玩家會被橫向推出牆壁(測試 136)。

  • Skyrim 的鬆散物件是實體的(S2k-K1,測試 142):玩家附近的盤子、食物、籃子、掉落的武器
    和懸掛物件(1,500 Skyrim 單位內最多 2,000 個)會在 Garry’s Mod 的物理中獲得具有真實形狀的隱形複本。你會撞到它們,也可以站在它們上面。
    走進其中一個會推動它,但那個推力是 Skyrim 自己的:Skyrim 的玩家身體推動真實
    物件,而複本會跟隨。子彈、爆炸和道具還無法移動它們(步驟 K2)。

尚無法運作的部分

  • 門: 門可能會在原本的位置留下隱形牆(測試 136)。計畫在 S2k 之後處理。

  • Skyrim 的鬆散物件還無法被 Garry’s Mod 移動: 子彈、爆炸、道具、
    物理槍和重力槍都無法移動它們(S2k 步驟 K2,下一步)。

  • Garry’s Mod 的效果在 Skyrim 中不可見(曳光彈、爆炸、物理槍光束、精靈圖);計畫為步驟 G7。

  • 以物理槍拖曳的道具會稍微落後於視角;phong 數值尚未微調(待辦清單)。

  • 手榴彈和 AR2 球會穿過 Skyrim 的世界掉落,且不會傷害 NPC;物理槍無法抓取
    NPC 或屍體(Garry’s Mod 的物理看不到 Skyrim 的世界或 NPC)。

  • Skyrim 的藥水和治療不會治療 Garry’s Mod 的玩家。Skyrim 的布娃娃物理仍然是
    Skyrim 的(比 Garry’s Mod 的更僵硬);Garry’s Mod 自己的布娃娃物理需要其物理先看到
    Skyrim 的世界。

  • 任務標記和地點:Skyrim 的羅盤在覆蓋層開啟時會隱藏,而 HOLOHUD 的
    羅盤和小地圖還不會顯示 Skyrim 的標記(已計畫)。沒有耐力 / 法力顯示。

  • Garry’s Mod 的視窗大小不會自動與 Skyrim 相符:請使用
    tools\launch_gmod.ps1 -Width W -Height H 並搭配 Skyrim 的大小(目前兩者都是 1280×720)。

  • 在 Skyrim 地面下超過約 2,100 Garry’s Mod 單位處結束 noclip 會讓你固定在原地;
    再按一次 V。

  • 地面現在是 Garry’s Mod 物理(gmsky_ground physics,自測試 124 起的預設值):
    道具會落在其上(測試 118-123)。gmsky_ground shapes 會切換回較舊的射線追蹤
    地面(道具會穿過它掉落)。

  • 樓梯:隱形斜坡會鋪在 Skyrim 的樓梯上(由 Skyrim 的樓梯材質找到),
    因此玩家能平滑地上下行走:大型石階、弧形梯段、堆疊箱式
    階梯,以及陡到無法行走的階梯(測試 133-134)。這些斜坡僅供玩家使用:
    子彈、道具和手榴彈會碰到真實的階梯(測試 135)。

  • 其他所有內容請見 docs/DESIGN.md §12。

致謝

建立在 SkyCraft
由 chasmlol 製作(MIT)的做法與部分 Skyrim 外掛之上。詳細資訊與授權文字:THIRD-PARTY-NOTICES.md。

需求

  • Skyrim Anniversary Edition 1.7.104、適用於 1.7.104 的 SKSE64、適用於 SKSE 外掛的 Address Library
  • Garry’s Mod,64 位元(gmod_win64.exe)
  • 建置需求:Rust 穩定版(MSVC)、Visual Studio 2022 C++ 工具、CMake

資料夾

資料夾
protocol/ 雙方共用的共享記憶體配置
skse/ Skyrim SKSE 外掛(C++)
gmod/ Garry’s Mod 模組、載入器 stub、Lua 指令碼
tools/ 測試輔助工具與啟動指令碼
docs/ 設計
logs/ 執行階段日誌(未追蹤)
build/ 建置輸出(未追蹤)
reference/ 唯讀 SkyCraft 複製(未追蹤)

授權條款

MIT。請參閱 LICENSE。第三方程式碼保留其自身授權:請參閱
THIRD-PARTY-NOTICES.md。


授權與來源聲明

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

LICENSE

MIT License

Copyright (c) 2026 ShinyStarSam

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-NOTICES.md

# Third-party notices

## SkyCraft

Gmod x Skyrim copies SkyCraft's architecture (two games running at once, linked through shared
memory) and adapts parts of its Skyrim plugin. Thank you to chasmlol.

- Source: https://github.com/chasmlol/SkyCraft
- License: MIT (full text below)
- Adapted in this project (each file says what it took):
  - `skse/src/Input.cpp`: input bridge hooks (PlayerControls / MenuControls, E activates).
  - `skse/src/Camera.cpp`: turning Skyrim's camera directly after its camera update.
  - `skse/src/Smooth.cpp`: blending between the other game's ticks.
  - `skse/src/Puppet.cpp`, `skse/src/Probe.cpp`: the player puppet and its character
    controller handling (no momentum or fall damage, on-ground / in-air state, gravity kept on).
  - `skse/src/Terrain.cpp`: ground rays around the player ("stage A").
  - `skse/src/Body.cpp`: dropping the puppet body's contacts above its feet, skipping Skyrim's
    land rescue (from SkyCraft's `DigPhysics.cpp`).
  - `skse/src/Collision.cpp`: streaming Skyrim's Havok collision around the player region by
    region (layer list, shape decoding and the offsets SkyCraft found, guarded reads, triangles
    from boxes / capsules / convex hulls, refresh near the player, per-frame limits); and each
    triangle's Skyrim material at its key (SkyCraft's `Dig.cpp` `ShapeMaterial` /
    `GuardedMaterial` and `Collision.cpp` `FlagsFor`), used here to mark stair triangles (S2i-1).
  - `skse/src/Link.cpp` `RingWrite`, `protocol/src/shm.rs` `ring_write` / `ring_read`,
    `protocol/gmsky_protocol.h` "Collision ring": the byte ring with pad messages.
  - `gmod/module/src/shapes.rs`, `gmod/lua/gmsky/field.lua`: the idea of feeding Skyrim's exact
    triangles to the other game's collision query (SkyCraft's `TriCollider.java`); the swept test
    itself is our own.
  - `docs/DESIGN.md`: architecture.

```
MIT License

Copyright (c) 2026 chasmlol

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.
```

## CommonLibSSE-NG

`skse/extern/CommonLibSSE-NG` (git submodule, not copied in): GPL-3.0-or-later with a modding
exception. See its own `LICENSE` and `docs/DESIGN.md` §14 question 4.

## Community Shaders (shader reconstructions)

Gmod x Skyrim reads Skyrim's indoor (parabolic) and sun shadow maps the way Skyrim's own shaders do,
as reconstructed by Community Shaders. Thank you to its authors.

- Source: https://github.com/doodlum/skyrim-community-shaders (read at commit `dd2677fc`),
  `package/Shaders/Utility.hlsl` (`RENDER_SHADOWMAP_PB` and `RENDER_SHADOWMASKDPB`)
- License of the shader files used: MIT (`package/Shaders/LICENSE`, full text below). The rest of
  that repository is under other terms; nothing else from it is used.
- Adapted in this project: `skse/src/World.cpp`: `ParabolicLookup` / `ParaboloidLight` (the
  dual-paraboloid lookup: light-local position, hemisphere choice, uv, depth = length / radius, and
  its soft 8-sample filter), `IndoorShadowVS` (drawing a dual-paraboloid map), the 8 spiral
  sample offsets from `package/Shaders/Common/Random.hlsli` (Jimenez's, as Community Shaders lists them),
  and for the sun `SkyrimCascade` / `SkyrimSunShadow` / `SunShadow` (`SampleShadowPCF`, the same
  filter on the sun's cascades, and the blend from cascade 0 to 1 in `RENDER_SHADOWMASK`).

```
MIT License

Copyright (c) 2022 Ilya Perapechka

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.
```