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

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

來源維護者: kuba001-pl · 版本: 55f16714753c · 整理日期: 2026-10-12

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

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


README 圖片:subnautica-rs

subnautica-rs

一個非官方、從零開始的 Rust 重實作,將 Subnautica 引擎帶到桌上型電腦。它在執行階段讀取你自己安裝的 Subnautica 副本中的資料。這個儲存庫不包含任何遊戲檔案,也永遠不會包含。

非官方粉絲專案,與 Unknown Worlds 或 Krafton 無隸屬關係,亦未獲其背書。你需要合法擁有的 Subnautica 副本。開發過程大量使用 AI 編碼代理;它們遵循的規則請見 AGENTS.md。

狀態:早期(積極開發中)。桌上型用戶端(sn-client)會串流地形、材質、世界物件、光照與玩家移動;遊戲玩法系統與多人模式正在進行中。架構與路線圖在
docs/DESIGN.md,檔案格式發現則在
docs/formats/。

目前可用的功能

已在 Windows 11、遊戲組建 10(Steam)上測試:

  • 解碼全部 5,416 個地形八元樹批次檔(.optoctrees,約 1.1 GB):
    669,150 個八元樹,每一個都通過結構驗證,耗時不到一秒。
  • 八元樹資料的空間配置(子節點順序、八元樹順序、+Y 向上),
    已從接縫連續性確認。
  • 讀取世界索引(index.txt):世界、八元樹與批次尺寸。
  • 將地形轉為網格(surface nets)並匯出為 OBJ 供
    Blender 使用。相鄰批次的網格接合後沒有破洞。
  • 讀取 Unity 的容器:全部 5,467 個資源包與玩家的
    .assets 檔案(423,677 個物件),與 UnityPy 的清單完全一致。
  • 解碼遊戲的貼圖(在 506 張貼圖的樣本上與 UnityPy 逐像素一致)
    並找出所有地形材質(233 種類型、211 張貼圖)。
  • 讀取每個世界物件的放置位置(sn-inspect entities):全部
    4,581 個放置檔案、419,846 個物件,每個都解析到其預製物名稱
    (prefabs.db),耗時約一秒。
  • 透過 Addressables 目錄載入預製物並解碼其網格
    (sn-inspect prefab,匯出為 OBJ 到 out/prefabs/):全部 1,369 個已放置
    預製物及其 3,263 個網格,在每個頂點與三角形數量上都與 UnityPy 一致。
  • 讀取生物群系地圖與全部 145 個生物群系的水體設定
    (sn-inspect biomes、sn-inspect biomes --at X Y Z)。
  • 讀取遊戲玩法資料(無頭模式,用戶端尚未使用):Balance/TechData 的全部 463
    個配方/物品項目、預製物 → 科技類型對應表、
    玩家的數值(氧氣、生命值、游泳與步行速度),以及
    主場景(sn-inspect techdata、sn-inspect player)中的起始藍圖與解鎖項目
    (PDAData),還有已放置預製物的每個碰撞體
    (sn-inspect prefab --colliders)。
  • 玩家的身體:遊戲在新遊戲中顯示的套裝模型,
    由遊戲的控制器以其空手規則驅動動畫(行走、
    游泳、水面、墜落、死亡),並如遊戲般隨視角轉向與上下擺動;
    頭部會投射陰影,但在第一人稱中不會被繪製;相機位於遊戲的眼位
    (sn-inspect player --body;在 sn-client 中往下看就能看到它,--third-person 可在玩家身後
    取得除錯相機)。其動作尚未與遊戲並排比較過。
  • 讀取遊戲僅保留在其程式碼中的內容,來源是玩家自己的
    Assembly-CSharp.dll,使用我們自己的 .NET 讀取器(sn-inspect code):全部
    793 個科技類型名稱、7 個製作選單(159 個節點;--trees 會列印
    它們)以及 TechData 的預設值;DLL 的每個方法主體都能解碼。
  • 碰撞(sn-sim):玩家的膠囊體對全解析度地形
    與已放置物件的碰撞體進行掃掠,單向判定,與遊戲相同。sn-inspect swim 會從救生艙
    沿著海床游到最近的 Kelp Forest;在種子 1–5 中,它以 0
    穿透抵達,每步約 13–19 µs。
  • 玩家,使用遊戲的數值:在救生艙與陸地上以重力、階梯與
    斜坡行走;以遊戲的速度、阻力與水面規則游泳。救生艙的艙門播放遊戲的
    過場動畫:艙門開啟、身體隨艙體的動畫攀爬,
    相機跟隨遊戲的錨點(sn-inspect walk/dive
    在種子 1–5 上檢查持續時間;在 sn-client 中於艙門按 E,或
    --use-hatch SECONDS[,SECONDS…] 讓它自動完成,--hatch-name
    選擇哪一個,--hold-forward SECONDS 之後再行走)。死亡後相機
    跟隨頭部(--kill SECONDS 可看到它)。sn-inspect walk 以無頭模式執行
    救生艙 → 水中 → 救生艙,0 穿透。在 sn-client 中你就是玩家(飛行相機為
    --free-cam)。以鍵盤與滑鼠遊玩尚未由代理測試。
  • 氧氣、窒息、生命值、死亡與在救生艙中重生,使用
    遊戲的數值(45 單位,依深度每秒 1 / 1.5 / 2,在水面每秒回填
    30,8 秒後昏厥)。sn-inspect dive 執行
    一次潛到海床直到玩家死亡並重生的下潛,接著是一次因浮出水面而
    提前結束的下潛;種子 1–5 通過。滑鼠視角使用遊戲的規則、
    預設靈敏度與 ±87° 俯仰限制。sn-client 顯示我們自己的
    HUD:氧氣與生命條、深度、黑幕覆蓋。HUD
    版面與實際遊玩時的外觀尚未由代理測試。
  • sn-client:一個桌上型視窗(Bevy),第一人稱或飛行相機。地形會隨著你移動
    串流進出,具有四級細節層次最遠至 1.2 公里,以遊戲自身的地形材質
    貼圖,並以遊戲的方式在相鄰材質之間混合(每個區塊的圖層、柔和參差的邊界、
    依坡度進行的頂面/側面轉換),世界中的已放置物件(珊瑚、
    植物、岩石、殘骸;救生艙周圍約 15,000 個)隨之串流進來,
    再加上遊戲的生成槽在新世界開始時所填充的內容
    (資源露頭、卵、碎片;以固定種子挑選,
    --slot-seed),以及地形在約 100 公尺內生長的草(海草、
    Grassy Plateaus 的紅色海藻、小型珊瑚;遊戲的放置
    規則與草著色器:色調、高度漸層、擺動),還有遊戲在開始時生成的場景:
    Aurora(如新遊戲中完好無損,依遊戲時鐘與遊戲的倒數規則
    換成殘骸,--aurora-countdown、--time-scale,或以 --aurora intact | exploded 保持),以及其
    場景所包含的先驅者基地與 Lost River 樹木,還有 Lifepod 5 以遊戲的方式繪製的起始點(從其
    有效起始點地圖;可設種子,--lifepod-seed,或 --lifepod X Z),連同
    其製造機、無線電、醫療櫃與動力電池;相機從玩家所在之處開始;
    透過遊戲自身的水體霧效模型觀看(顏色與距離
    依生物群系),在遊戲的太陽與天空光照下跟隨工作階段時鐘
    (--time 設定起始時間;--time-scale 0 凍結它),具有遊戲的水面(模擬或烘焙波浪、泡沫、
    反射、折射、陽光閃爍;從上方與下方觀看),在
    遊戲的天空下(散射、太陽、雲、行星、月亮;日到夜),以
    遊戲照亮表面的方式打光(焦散、水下減弱的陽光、
    遊戲的環境光;SIG 珊瑚/岩石及其高光與發光通道,
    有頂蓋的岩石具有分開的頂面/側面貼圖與法線貼圖;物件具有其高光貼圖、具有日
    夜強度的發光貼圖,以及每個生物群系的環境光設定;位於遊戲相機
    跳過之圖層上的渲染器,例如外星基地的遮擋外殼,會被略過;已放置物件攜帶的點光、聚光與
    方向光,例如發光珊瑚,不帶其陰影;離子晶體基座與先驅者
    燈光下方的假光暈,使用遊戲已解碼的著色器及其透明度合成,
    由它們的燈光上色,如遊戲的腳本所做;先驅者控制台的
    全像投影與快取門的力場,使用遊戲已解碼的效果
    著色器(捲動貼圖、柔和邊緣、變形、折射);
    遊戲從預製物的預留位置生成的物件,例如快取門、
    鑰匙終端與基座晶體;這些都尚未與遊戲在畫面上比較過);物件上遊戲的動畫器(M7f4:其自身的
    控制器、轉場與圖層每幀執行;動畫化的 Transform
    移動,蒙皮網格在 GPU 上彎曲,混合形狀跟隨其動畫化的
    權重;例如 Lifepod 5 的船體、卵、先驅者終端、擺動的
    腦珊瑚與珠寶圓盤;尚未與遊戲在畫面上比較過);物件與場景依
    距離在細節層次之間切換,使用遊戲的 LODGroup、其 High 品質 lodBias 及其
    60° 視野(--no-lod、--fov;Unity 記載的規則,尚未
    與遊戲在畫面上比較過);Lifepod 5 自身的燈光:其天空
    照亮救生艙(而且當你在裡面時,照亮所有沒有自身天空的
    東西),其光照狀態設定天空與紅色警示燈
    (--lifepod-state,預設為損壞,如序章之後;尚未與
    遊戲在畫面上比較過)。從救生艙
    飛到隕石坑邊緣
    可將記憶體保持在 1.6 GiB 以下,在 RTX 3080 上平均約 220 fps
    (在密集的起始區域約 100 fps)。

目前還不能用的功能

水體裁剪圖(救生艙與基地內沒有水、
岸邊泡沫);逐像素的水體設定(到處都使用
相機的設定);Lifepod 5 漂浮在波浪上、其
序章,以及其模組依電力狀態的發光;
Aurora 的爆炸效果、音效與警告、火與煙;
玩家儲存的細節層級與視野選項(假設為 High 與 60°);地形草
超過約 100 公尺,以及遊戲中確切位置的草叢(數量與
分布遵循其規則;使用我們自己的隨機數);世界物件方面:生物群系
天空立方貼圖的反射、由大氣體積選擇的洞穴/室內天空、
動畫化的燈光、材質與腳本數值、其餘不支援的物件
著色器(Lost River 鹵水、沙瀑與熔岩瀑及其他尚未解碼的效果
網格是平面的;與原遊戲相符的 SIG 岩石/珊瑚比較尚未測試;
docs/formats/materials.md)、生物(包括生成槽會加入的
約 100,000 個);序章過場動畫、工具、PDA 與 IK、改變
速度的氧氣瓶與蛙鞋、遊戲自身的 HUD 與傷害效果;音訊、
多人模式(目前有無頭的 sn-server 與機器人玩家,也使用
玩家自身的規則與碰撞,在單一機器上透過 UDP;遊戲
用戶端即使在單人遊玩時也會執行自己的行程內伺服器,並且可以主持
(--host)或加入(--join)遊戲:其他玩家的身體、動畫、
艙門過場動畫、死亡與重生都會同步;已在單一機器上以兩個
用戶端測試,尚未透過網際網路;沒有加密,供
互相信任的朋友使用)。
Linux/macOS:尚未測試。

試用

你需要 Rust(stable),以及在 Windows 上需要具有 C++ 工具與
Windows SDK 的 Visual Studio。

# Point at the folder that contains Subnautica.exe
export SUBNAUTICA_DIR="D:/SteamLibrary/steamapps/common/Subnautica"   # PowerShell: $env:SUBNAUTICA_DIR = "..."

cargo run -p sn-inspect -- index            # world dimensions
cargo run -p sn-inspect -- octree 12 18 12  # statistics for one terrain batch
cargo run -p sn-inspect -- octree --all     # decode and validate every batch
cargo run -p sn-inspect -- orient 7 17 10   # show how octree data maps onto space
cargo run -p sn-inspect -- mesh 12 18 12 --radius 1   # Safe Shallows → out/*.obj
cargo run -p sn-inspect -- mesh 12 18 12 --radius 1 --lod 2   # coarser level of detail
cargo run -p sn-inspect -- voxel 0 -10 0    # what's at a world position, surfaces below
cargo run -p sn-inspect -- unity --types resources.assets   # what's inside a Unity file
cargo run -p sn-inspect -- unity --all      # parse every Unity file of the game
cargo run -p sn-inspect -- textures --census          # texture formats in the game
cargo run -p sn-inspect -- terrain-materials          # terrain type → material → textures

cargo run -p sn-client                      # fly around, starting in the lifepod
cargo run -p sn-client -- --view 2000       # see further
cargo run -p sn-client -- --flythrough 1700 -80 0   # automated test flight to the crater edge

# Multiplayer (experimental, M10): play together, see "Play together" below.
cargo run --release -p sn-client -- --host                   # host on UDP 27420
cargo run --release -p sn-client -- --join 192.168.1.20 --name Ann   # join it
cargo run --release -p sn-server -- --port 27420             # or a headless server
cargo run --release -p sn-inspect -- bots 127.0.0.1:27420 --count 8 --seconds 60
cargo run --release -p sn-inspect -- coop 127.0.0.1:27420   # bots with the player's rules, lan/internet/bad

cargo test --workspace                      # tests that don't need the game
cargo test -p sn-octree -- --ignored        # full-world test (needs SUBNAUTICA_DIR)

sn-inspect 只會讀取遊戲資料夾;它永遠不會寫入其中。匯出檔會放到
out/,該處已列入 gitignore。它們衍生自你的遊戲檔案:請勿
分享它們。

視覺效能基準

若要使用已儲存的設定與數值化場景計數進行固定相機基準測試,
請使用新的基準名稱與明確的來源修訂/組建標籤:

# SUBNAUTICA_DIR must point to your install. Choose a new name for each run.
cargo run --release -p sn-client -- --benchmark 300 --baseline shallows-review-1 --baseline-revision working-tree --warmup 120 --resolution 1600 900 --start 0 -10 0 --look 60 -40 60 --fov 60 --view 1200 --lifepod-seed 1 --slot-seed 1 --time 9.6 --time-scale 0 --aurora intact --water-quality high --color-grading off --gpu-timings

這會將 report.txt、frames.csv 與 capture.png 儲存在
out/baselines/run-shallows-review-1/ 下。既有的名稱會被拒絕。將
working-tree 替換為你的修訂,並變更標籤以識別組建。
名稱/標籤接受字母、數字、- 與 _。具名基準需要
單人基準測試;它們預設為 120 個連續的穩定暖機幀。
--resolution 指定實體像素。幀計時使用真實、未箝制的
時間;報告包含中位數/p95/p99、場景計數、相機、霧、天空、水體
時間與近期 GPU 診斷平均值。

在這些設定下進行三次 300 幀的執行,與靜態場景計數及
1600 × 900 擷取尺寸相符。在 RTX 3080 上,中位數幀時間為 17.69–17.86 ms
(高於 16.7 ms 的目標)。動畫、波浪與泡沫歷史仍會持續運作:
--time-scale 0 凍結遊戲時鐘,不是那些效果。這些報告
是效能基準,不是像素完全相同擷取或與原遊戲相符的證明。原遊戲視覺比較:尚未測試。

一起遊玩(實驗性)

每位玩家都需要自己安裝的 Subnautica 副本、相同的遊戲組建,以及從相同版本建置的此專案(否則會拒絕加入,並附上原因)。遊戲中的任何內容都不會透過網路傳送:只有位置、動畫值、事件和檢查。

  • 主機: sn-client --host(或 --host PORT;預設 UDP 27420)。
    主機的旗標決定世界(--lifepod-seed、--slot-seed、
    --time、--aurora…)。無介面的 sn-server 也可以運作。
  • 加入: sn-client --join ADDRESS[:PORT] --name NAME。主機的
    世界會取代你的世界旗標。
  • 透過網際網路: 主機在其
    路由器上將 UDP 連接埠 27420 轉送到其 PC(或兩者位於同一個區域網路或 VPN)。沒有
    中繼或 NAT 打洞:那會需要第三方服務。
  • 已同步: 每位玩家的位置、視角、游泳和行走
    動畫、救生艙艙門過場動畫(門和攀爬:已記錄,尚未以肉眼檢查)、死亡
    和重生、遊戲時鐘和極光號。尚未: 物品、
    物品欄、製作、存檔、生物、聊天、玩家碰撞。
  • 信任: 用戶端尚無加密和密碼:適用於
    朋友,不適用於公開伺服器。
  • 已測試: 同一台機器上的兩個用戶端(也包含模擬延遲
    和封包遺失)。未測試: 透過網際網路的兩台機器。

配置

路徑 內容
crates/sn-octree 地形八叉樹的讀取器/寫入器(純粹,無相依性)
crates/sn-world 世界配置:index.txt、批次定址
crates/sn-mesh 表面網路網格化器和網格拓撲檢查(純粹,無相依性)
crates/sn-terrain 地形批次 → 網格化欄位 → 網格(純粹)
crates/sn-unity Unity 容器:UnityFS 套件組合、序列化檔案(純粹)
crates/sn-assets 跨套件組合尋找 Unity 物件;地形材質
crates/sn-install 尋找遊戲資料夾並讀取其檔案(唯讀)
crates/sn-protocol 多人遊戲訊息及其二進位編解碼器(純粹,無相依性)
crates/sn-net 透過 UDP 的多人遊戲傳輸:連線、可靠和僅最新通道;用於測試的模擬網路
crates/sn-session 無通訊端的多人遊戲邏輯:伺服器(加入、時鐘、事件順序、檢查)、用戶端(時鐘同步、繪製其他玩家)和共享世界狀態
apps/sn-inspect 命令列檢查器和驗證器
apps/sn-client 桌面用戶端(Bevy)
apps/sn-server 無介面多人遊戲伺服器(實驗性):讀取主機的安裝、在 UDP 上監聽
docs/ 設計、路線圖、檔案格式筆記

用戶端控制

按住滑鼠右鍵(或按 M)來環顧四周。WASD 移動,Q/E 向
下/向上,Shift 為快速,滑鼠滾輪變更速度。

授權條款

我們的程式碼採用雙重授權,可依你的選擇使用 MIT 或
Apache-2.0。Subnautica 及其資產
屬於其擁有者,不屬於此專案的一部分。

致謝

我們學習的專案(閱讀,而非複製):Nitrox、
Subnautica-TerrainPatcher、UnityPy、AssetStudio、OpenMW、hl2-rs、benilla、
gang-beasts-rust,以及 AI Game Modding Guides。


授權與來源聲明

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

LICENSE-APACHE

Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

LICENSE-MIT

MIT License

Copyright (c) 2026 The subnautica-rs 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.