SAM - 星空动画合并器

SAM - 星空动画合并器

小型 SFSE 插件,在游戏启动时合并动画索引,因此动画模组不再互相覆盖。无需插件文件:每个模组附带一个小片段。示例参见 Far Away Movesets。

描述

Starfield 只有在动画索引包含某个动画文件(.af)时才会播放它。该索引位于 Meshes\AnimTextData。

添加动画的模组必须修改此索引。如果两个模组各自提供一个完整索引,第二个索引会替换第一个。因此,只有一个模组能生效。

借助 SAM,每个模组只提供自己的动画列表(一个“片段”)。游戏启动时,SAM 会基于游戏索引和所有片段构建一个索引。因此,所有动画模组可以协同工作。

安装说明

使用 Mod Organizer 2

  1. 将该压缩包作为模组安装。
  2. 启用该模组。
  3. 通过 Mod Organizer 2 使用 sfse_loader.exe 启动游戏。

SAM 会将合并后的索引写入 Overwrite 文件夹。请将这些文件保留在 Overwrite 中。当你的模组列表发生变化时,SAM 会更新它们。

使用 Vortex

  1. 安装该压缩包。
  2. 启用该模组。
  3. 部署模组。
  4. 使用 sfse_loader.exe 启动游戏。

SAM 会将合并后的索引写入游戏的 Data\Meshes\AnimTextData 文件夹。Vortex 不管理这些文件。

主要功能

  • SAM 在每次游戏启动时、游戏加载索引之前运行。
  • 如果自上次启动以来没有任何变化,SAM 不会写入文件。此检查耗时不到 10 毫秒。
  • SAM 会应用 Data\Meshes\AnimTextData\Fragments 中的所有片段。它不读取 Plugins.txt。你的模组管理器只会部署已启用模组的片段。
  • SAM 不需要 .esm、.esp 或 .esl 文件。
  • SAM 还会合并片段的偏移表和事件表(animationoffsets、animeventinfo)。
  • 新动画标签:游戏只从其自身的归档中读取标签表(anim_actions.xtbl、anim_states.xtbl)。它从不读取散放的 .xtbl 文件。因此,模组无法通过文件添加标签。当游戏加载第一个动画图时,SAM 会在内存中将片段的新标签添加到游戏中,就像游戏处理自己的表一样。SAM 不会写入 .xtbl 文件。
  • 如果另一个模组以散放文件形式提供完整索引,SAM 会将那个索引作为基础。然后 SAM 将片段添加到其中。
  • 如果发生错误,SAM 会将其写入日志。SAM 从不会停止游戏。

前置需求

  • Starfield,Steam 版本。
  • SFSE(Starfield Script Extender)。使用 sfse_loader.exe 启动游戏。
  • Address Library for SFSE Plugins。SAM 使用它来将你模组的新标签提供给游戏。

日志

SAM 将其日志写入 SFSE\Plugins\SfAnimIndexLoader.log。上一次启动的日志为 SfAnimIndexLoader.log.1。

  • Mod Organizer 2:日志位于 SAM 模组文件夹或 Overwrite 中。
  • Vortex:日志位于 Data\SFSE\Plugins。

卸载

  1. 禁用所有提供片段的模组。
  2. 仅 Vortex:部署模组。
  3. 启动游戏一次。SAM 会删除它写入的文件。
  4. 移除 SAM。
  5. 仅 Mod Organizer 2:删除 Overwrite 中残留的 Meshes\AnimTextData 文件。

注意: 如果你先移除 SAM,合并后的索引会留在游戏中。请先执行第 3 步,再执行第 4 步。

致模组作者

将以下文件放入你的模组中:

  • Meshes\AnimTextData\Fragments<YourName>_animations.txt:每行一个动画文件(.af、.afx、.rig),并带有其从 Data 开始的完整路径。
  • 可选:Fragments<YourName>\animationoffsets<hash>.txt 和 Fragments<YourName>\animeventinfo<hash>.txt,仅包含你添加的条目。
  • 可选:Fragments<YourName>\tables\anim_actions.xtbl 和 anim_states.xtbl,仅包含你的新标签。如果某个标签未声明,该状态不会播放任何动画。

不要提供 animationfiles.txt 或 animationfiledata。SAM 会生成它们。将 SAM 设为你的模组的必需项。压缩包中的 README 给出了所有细节。完整示例请参见 Far Away Movesets。

致谢

如果没有这些项目,这一切都不可能实现。感谢:

AI 免责声明

AI 协助用于代码编写和文本审阅(语法 / 拼写)