案例
TH08 Web:基于重建源码的 WebAssembly 移植
使用 Emscripten 将日版 Touhou 8 1.00d 的重建 C++ 源码编译为 WebAssembly,并在游戏原有的 D3D8、DirectSound 与 DirectInput 形态接口之后接入 WebGL 2 渲染、Web Audio、浏览器输入和 IndexedDB 存档。玩家在本地选择自备的正版 DAT 文件。网页构建不主张与原二进制逐字节一致,是独立于已收录 TH08 重建的移植。
使用条件与局限
- README 报告游戏可在桌面浏览器中从标题画面玩到结局,推荐使用最新版 Chrome;Firefox 会自动使用专门的免回读构建,Safari 和移动浏览器尚未验证。页面需要 WebAssembly 线程、SharedArrayBuffer、WebGL 2、Web Audio 及跨源隔离的 HTTPS 环境。列出的后续工作包括 Firefox 硬件性能分析、回放耐久测试和内存上限测量。
- 需从自己合法取得的 TH08 安装中选择 th08.dat 和 thbgm.dat。启动器把 th08.dat 复制到会话内存,并按范围读取 thbgm.dat;README 说明两者都不会被上传、打包或持久保存。仓库、部署站点和 v0.1.0 发布均不含零售数据或可执行文件,来源检查脚本会拒绝禁止的内容及九文件白名单之外的任何产物。
- 本地构建需要 Docker、Python 3 和桌面浏览器:scripts/build-web-game.sh 使用以摘要固定的 Emscripten 6.0.8 镜像,scripts/serve-web.py 提供普通静态服务器缺少的 COOP、COEP 和 CORP 响应头。公开站点由 main 分支部署到 Cloudflare Pages,自行托管发布包也需要相同的隔离响应头。
- WEB_ARCHITECTURE.md 记录了作者使用自选零售文件完成的检查:在 Chromium 及较早的 Firefox 桥接方案上完整通关 Lunatic Final-B 路线、一次 Stage 6B 练习、证明 IndexedDB 中不含 DAT 的持久化测试,以及在 SwiftShader 与 llvmpipe 软件渲染器下接近 60 Hz 的回放驱动帧节奏采样。这些是有限范围的正确性观察,不是硬件基准或二进制比较;本合集未运行任何检查。
- MIT 许可覆盖仓库代码与文档,不涵盖原游戏、DAT 文件、音乐或图像;固定版本的 Detours 子模块另有条款。README 称此仓库是 N0zoM1z0/th08 面向网页的分支,并保留其历史。所审网页移植来源未确立 REA 使用归因,也不主张运行复现。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 游戏
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- docs/WEB_ARCHITECTURE.md GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- docs/WEB_PORTING.md GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- scripts/build-web-game.sh GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- scripts/check-web-provenance.py GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- .github/workflows/deploy-web.yml GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- .github/workflows/ci.yml GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- .gitmodules GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- LICENSE GitHub · N0zoM1z0/th08-web · 修订 e3485ab
- https://github.com/N0zoM1z0/th08-web/releases/tag/v0.1.0
- https://th08-web.pages.dev/