{
  "added_at": "2026-10-19",
  "additional_evidence_urls": [
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/docs/WEB_ARCHITECTURE.md",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/docs/WEB_PORTING.md",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/scripts/build-web-game.sh",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/scripts/check-web-provenance.py",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/.github/workflows/deploy-web.yml",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/.github/workflows/ci.yml",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/.gitmodules",
    "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/LICENSE",
    "https://github.com/N0zoM1z0/th08-web/releases/tag/v0.1.0",
    "https://th08-web.pages.dev/"
  ],
  "category": "reconstruction-cases",
  "description_en": "Compiles the reconstructed C++ source of the Japanese Touhou 8 1.00d release to WebAssembly with Emscripten, adding WebGL 2 rendering, Web Audio, browser input and IndexedDB saves behind the game’s D3D8-, DirectSound- and DirectInput-shaped interfaces. Players select their own retail DAT files locally. The web build makes no binary-exact claim and is a separate port from the curated TH08 reconstruction.",
  "description_zh": "使用 Emscripten 将日版 Touhou 8 1.00d 的重建 C++ 源码编译为 WebAssembly，并在游戏原有的 D3D8、DirectSound 与 DirectInput 形态接口之后接入 WebGL 2 渲染、Web Audio、浏览器输入和 IndexedDB 存档。玩家在本地选择自备的正版 DAT 文件。网页构建不主张与原二进制逐字节一致，是独立于已收录 TH08 重建的移植。",
  "entry_url": "https://awesomerea.org/resources/th08-web-wasm-port-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/th08-web-wasm-port-case/",
  "evidence_url": "https://github.com/N0zoM1z0/th08-web/blob/e3485ab9a9af3b5a90ce51841667bbdf5a867e5c/README.md",
  "group": "cases",
  "id": "th08-web-wasm-port-case",
  "json_url": "https://awesomerea.org/resources/th08-web-wasm-port-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/th08-web-wasm-port-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/th08-web-wasm-port-case/index.md",
  "name": "TH08 Web: a WebAssembly port built from reconstructed source",
  "name_zh": "TH08 Web：基于重建源码的 WebAssembly 移植",
  "reconstruction_method": "port",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "prerequisites",
    "prerequisites",
    "prerequisites",
    "testing",
    "license"
  ],
  "requirements": [
    "README reports the game playable from title to ending in desktop browsers and recommends current Chrome; Firefox automatically uses a dedicated no-readback build, while Safari and mobile browsers are not verified. The page needs WebAssembly threads, SharedArrayBuffer, WebGL 2, Web Audio and cross-origin-isolated HTTPS. Listed remaining work includes Firefox hardware profiling, replay endurance and memory-ceiling measurement.",
    "Select th08.dat and thbgm.dat from your own legally obtained TH08 installation. The launcher copies th08.dat into session memory and range-reads thbgm.dat; README says neither is uploaded, bundled or persisted. The repository, deployment and release v0.1.0 contain no retail data or executable, and a provenance script rejects forbidden payloads and any artifact outside the nine-file allowlist.",
    "Local builds need Docker, Python 3 and a desktop browser: scripts/build-web-game.sh uses a digest-pinned Emscripten 6.0.8 image, and scripts/serve-web.py supplies the COOP, COEP and CORP headers a generic static server lacks. The public site is a Cloudflare Pages deployment from main, and self-hosting the release archive needs the same isolation headers.",
    "WEB_ARCHITECTURE.md records author-run checks with user-selected retail files: a complete Lunatic Final-B route in Chromium and on an earlier Firefox bridge, a Stage 6B practice run, persistence tests showing no DAT in IndexedDB, and replay-driven pacing samples near 60 Hz under the SwiftShader and llvmpipe software renderers.",
    "MIT covers repository code and documentation, not the original game, DAT files, music or graphics; the pinned Detours submodule keeps its own terms. README describes this repository as the web-focused fork of N0zoM1z0/th08 with its history retained."
  ],
  "requirements_zh": [
    "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 面向网页的分支，并保留其历史。"
  ],
  "targets": [
    "game"
  ],
  "url": "https://github.com/N0zoM1z0/th08-web",
  "verification": "source-reviewed",
  "verified_at": "2026-10-18"
}
