Skip to content

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

BPChoiceMod

《空之轨迹 the 2nd》剧情选项最佳 BP 选择插件。

已实现

  • SeamlessLoader ABI v6 插件入口和 bpchoice_status 控制台状态命令。
  • 支持现有 XMODS 纯 DLL 加载方式:若加载器不提供 ABI,插件会延迟创建本地 API 并从 XMODS/config 读取配置与规则,无需替换 XInput 代理。
  • 对 Steam sora_2nd.exe 1.3.2.0 做 PE 时间戳、映像大小和函数字节签名校验。版本或代码布局不匹配时不安装 hook。
  • 观察 CommandMenu 的选项创建调用,保存当前菜单的完整选项文本,并读取正在执行的脚本函数编号/名称。
  • 原版追加菜单项后,以及菜单打开时,优先按剧情函数名/编号和完整选项文本匹配规则;若运行时函数身份与静态提取不同,则回退到整组选项原文匹配。只有该选项组在全规则库中对应唯一 BP 评分时才提示;同组文本对应冲突评分时不作提示。提示为黄色文字和黑色描边/阴影,不会修改菜单当前索引、默认光标或确认逻辑。
  • 运行时规则按顺序从 XMODS/config、SeamlessLoader/config 或 ED9Loader/config 读取。基础规则含 27 组 BP 菜单及 17 组会影响任务能否完成的对话/卡牌菜单;从 7 种语言脚本生成的去重运行时规则数量以提取审计报告为准。战斗胜负、收集数量、限时完成等非菜单条件不属于文字高亮范围。

规则表里的 BP 分值与正确选项来自已核对的基础规则 config/choices.tsv。非 BP 任务规则使用相对优先级分数决定提示项,不代表 BP。tools/extract_multilingual_bp_choices.py 会直接读取安装目录中的所有 script_*.pac,依据函数名称和编号定位对应菜单,再提取各语言的完整选项文本。生成的规则同时要求函数身份、选项数量和整组文本相符;这避免依赖英语文本,也不会因翻译文字重合而误匹配。Sunday Scholar 的 1 表示该题答对计入最终全对奖励,不代表单题单独发放 1 BP。赢家通吃规则覆盖雪拉/阿加特搭档路线的成功扑克选项。逐条比对脚本菜单时发现并修正了“Human intervention”一题:游戏实际显示三个选项,第二项才是正确分支;旧规则漏掉第一项并把最佳序号错配到第一项。

tools/decode_scp_bp.py 可读取英文 script_en.pac,解出 #scp 函数索引、脚本调用、菜单文本和原始分支指令,生成 build/decoded_bp_control_flow.json。tools/extract_multilingual_bp_choices.py 会读取所有 script_*.pac,按同一脚本函数身份提取各语言菜单文字,检查选项数量后生成运行时 config/choices_multilingual.tsv 和审计报告 build/multilingual_bp_choices.json。分支谓词目前还未完整反汇编,BP 分值仍取自已核对的基础规则 config/choices.tsv。若游戏安装目录不同,可用 --game-root 指定。重新生成规则后运行 tools/package.ps1 可制作包含 DLL、配置和多语言规则的安装包。

运行 python tools/audit_bp_menu_matches.py 可核对基础菜单组。随后运行 python tools/extract_multilingual_bp_choices.py 生成当前安装所有语言包的运行规则。当前安装包含英语、德语、西班牙语、法语、韩语、简体中文和繁体中文 7 个语言包;最新提取审计了 259 份菜单文本并生成 278 条去重运行规则,其中包含 21 条经脚本函数表核验的运行时别名。部分相同菜单会在多个脚本中出现。

赢家通吃的“Play your hand / Fold”(简中“一决胜负 / 放弃”)在不同牌局阶段显示相同文本。IDA 确认 menu_wait 等待时也会返回,插件只在菜单完成且未取消后记录实际选择。选择“只留下一对其他全部交换”后,第一次出牌菜单提示“一决胜负”;确认该项并在下一轮选择“留下对子,剩下的交换”后,第二次出牌菜单提示“放弃”。运行时脚本函数名可能比静态规则前进一项,因此前置策略按完整菜单文本识别。缺少已确认的前置选择时不提示。

py -3 tools/extract_bp_script_evidence.py

三种兼容发布包

运行 tools/package.ps1 会生成三个当前版压缩包。

  • ED9版-v0.1.0.zip:适用于支持《空之轨迹 the 2nd》的 ED9Loader 2ND 插件加载环境;配置和规则放在 ED9Loader/config。
  • sora2looseload版-v0.1.0.zip:适用于已安装 sora2looseload 的环境。包含同级 CostumeUnlockerMod 的兼容代理文件和 BPChoiceMod 的 XMODS 文件。按兼容工具说明,退出游戏后运行 CostumeUnlockerSora2Compat.exe。
  • XMOD版-v0.1.0.zip:适用于没有其他加载器、且游戏根目录不存在 xinput1_4.dll 的环境,包含 XInput 代理与 XMODS 文件。若该文件已存在,不要覆盖;选择与现有加载器兼容的版本。

三种包携带同一份当前插件、配置和多语言规则,只针对不同加载环境;不要同时安装多个包。

安装与启用

  1. 用 Visual Studio x64 环境构建 DLL。
  2. 从以上三个兼容包中选一个,以游戏根目录为目标解压;规则表命名为 BPChoiceMod_choices.tsv。
  3. 配置 Enabled=1 并重启游戏。当前游戏目录的 XMODS 配置已启用。
  4. ABI 加载器可用控制台命令 bpchoice_status 查看状态;XMODS 独立加载会将状态写入 XMODS/plugins/BPChoiceMod.log。

默认 Enabled=0。提示使用黄色字面与黑色描边/阴影;请在可回退存档确认实机显示,并移动光标确认提示不会替玩家选择。

构建

cmake -S . -B build -A x64
cmake --build build --config Release
./tools/package.ps1 # 生成 ED9Loader、sora2looseload 和无加载器三种兼容包

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages