|
|
发表于 2026-10-20 17:20:56
|
显示全部楼层
直接替换 Pluto 2.0 的三个文件后无法运行,根本原因在于:桥接方案(Pluto-AI-Starcraft-Remaster)是专门为 Pluto 1.x (md07x02_cog2026_2578600) 深度定制的。它并非一个通用的 BWAPI 加载器,而是一套通过挂钩(Hook)和内存映射来“欺骗”旧版 Pluto DLL,使其能在重制版上运行的兼容层。Pluto 2.0 更换了模型、重写了 DLL 和推理引擎,必然打破了桥接方案所依赖的若干底层假设。
因此,要完成适配,你需要修改桥接方案的源代码,以弥合 Pluto 2.0 带来的差异。主要涉及以下几个层面:
🎯 第一道关卡:移除版本哈希校验
这是最直接、最先会遇到的障碍。桥接方案的启动器会校验 Pluto 核心文件的 SHA-256 哈希值,并明确拒绝非指定版本的运行。其 README 中写明了支持的 Pluto 版本为 md07x02_cog2026_2578600_int8mv,并且“실행기는 게임, DLL, 추론기, 가중치의 SHA-256을 확인하고 다른 버전은 실행을 거부합니다”(启动器会校验游戏、DLL、推理器、权重的 SHA-256,并拒绝其他版本)。
Pluto 2.0 的发布说明给出了新的哈希值。你需要找到桥接方案中实现此校验的代码(很可能在启动脚本 scripts/start-pluto.ps1 或 src/bridge.cpp 的初始化部分),更新为 2.0 版本的哈希值,或者直接注释掉这段校验逻辑以进行测试。
🧠 核心挑战:适配 BWAPI 内存映射的变更
这是适配工作的核心。桥接方案的原理是在内存中“伪造”一个 Brood War 1.16.1 的环境,让 Pluto DLL 通过 BWAPI 4.4.0 接口读取的游戏状态,实际上来源于重制版进程。
关键实现在 src/legacy_view.cpp 和 src/scr_profile_13515_x86.h 中:
src/legacy_view.cpp:负责将重制版的游戏、玩家、单位等状态,转换成 Pluto 所期望的旧版内存格式。
src/scr_profile_13515_x86.h:定义了重制版可执行文件中,桥接方案所依赖的内存地址和结构体偏移。
Pluto 2.0 的新 DLL 是“a new model generation”,它对 BWAPI 接口的调用模式、所依赖的旧版内存结构细节,可能与 1.x 版本存在差异。虽然都标称 BWAPI 4.4.0,但 DLL 内部实现可能已改变。
你需要做的:对比 Pluto 1.x 和 2.0 的 pluto.dll,找出 2.0 在读取游戏状态时可能新增或变化的旧版内存偏移。然后相应修改 src/legacy_view.cpp 中的转换逻辑,并在 src/scr_profile_13515_x86.h 中更新相关地址定义。这项工作需要对 BWAPI 和汇编有一定了解。
⚙️ 潜在问题:推理引擎的通信协议
Pluto 2.0 包含了全新的 pluto_infer.exe(64位推理引擎)。pluto.dll(32位)与 pluto_infer.exe(64位)之间需要通过某种进程间通信(IPC)来传递观测数据和动作指令。
桥接方案的 src/bridge.cpp 负责管理 Pluto 的启动和生命周期。如果 2.0 版本改变了 pluto.dll 启动或与 pluto_infer.exe 通信的方式(例如,共享内存的名称、握手协议、命令行参数),src/bridge.cpp 中的相关代码也需要调整。
🔍 首要排查步骤:查看 bridge.log
在修改代码之前,最有效的做法是先查看桥接方案生成的 bridge.log 文件。日志中会记录启动失败的具体原因,例如是哈希校验失败、DLL 加载错误、还是内存验证未通过。这能为你指明第一个需要修改的准确位置。
💎 总结与建议
直接替换文件注定失败,因为桥接方案并非通用容器。适配 Pluto 2.0 是一项涉及版本校验、内存映射和进程通信三个层面的代码修改工作。
建议你:
先读日志:从 bridge.log 中获取明确的错误信息。
再改校验:首先更新或绕过版本哈希校验,让程序能尝试加载 2.0 的文件。
后调映射:如果加载后仍无法运行,问题就大概率出在内存映射层,需要对照 2.0 的 DLL 行为来调整 legacy_view.cpp 和 scr_profile_13515_x86.h。
关注上游:你也可以留意桥接方案作者的 GitHub 仓库,看是否已有人提交了支持 2.0 的 Pull Request 或 Issue。 |
|