给永夜抄 TH08 硬塞联机
TH08-Platform 给《东方永夜抄》(Touhou 8)加联机。本体是 ZUN 二十多年前用 VS2002 + DX8 编的 32 位老程序 官方没这功能。这项目不动本体 靠 DLL 注入往内存里硬塞两人对战。
真正的难点不是网络 是先搞清楚游戏内部长啥样:帧循环在哪、玩家状态结构体怎么排、每帧输入从哪读。原版二进制没符号 全靠自己挖。所以仓库是两条线拧一起的 monorepo。
一条是 game/ th08 的反编译工程 fork 自 GensokyoClub/th08(AGPL-3.0) 不是原创 在别人基础上继续推。就当一本“原版内存布局和函数地址字典”用。现在 722 个追踪函数对上 399 个以上 覆盖 55%。逐函数比对用 reccmp:
reccmp-reccmp --target th08 --json
另一条 dll/ 才是正题:联机 DLL 加一个 loader。th08.exe 一个字节不动 进程启动时把 DLL 注进去 用 MinHook 挂钩子。磁盘上的本体永远是干净原版 改动全发生在内存里。
进度还很早期。Phase 0 是个能挂进去的 hello world 钩住 GameManager::OnUpdate(0x43aa03) 每帧往 log 写帧计数器。Phase 1-5 写在 docs/DLL_PLAN.md:状态捕获与回滚地基、输入 hook、UDP lockstep、rollback netcode、第二自机加共享 HUD。大厅匹配那套一行还没写。
rollback 主要参考 Giuroll 反编译做联机这条路 th06_multi_net 已经证明可行。跑起来有门槛:th08.exe v1.00d 得自己提供 仓库里绝不会有 那是 ZUN 版权物;还得 VS2022、IDA Pro 9.x 配 ida-pro-mcp、reccmp。整个项目 AGPL-3.0 私有仓 不分发任何改过的本体。