{
  "added_at": "2026-10-17",
  "additional_evidence_urls": [
    "https://github.com/tuunanet/rea-ski-or-die-reconstruction/blob/0eac0671c90e21a16e663da7772b60710101ef7f/Cargo.toml",
    "https://github.com/tuunanet/rea-ski-or-die-reconstruction/blob/0eac0671c90e21a16e663da7772b60710101ef7f/LICENSE.md",
    "https://github.com/tuunanet/rea-ski-or-die-reconstruction/blob/0eac0671c90e21a16e663da7772b60710101ef7f/docs/reverse-engineering-notes.md",
    "https://github.com/tuunanet/rea-ski-or-die-reconstruction/blob/0eac0671c90e21a16e663da7772b60710101ef7f/tests/gameplay.rs"
  ],
  "category": "community-case-studies",
  "description_en": "The author uses REA’s Ghidra workflow to investigate the DOS Ski or Die binary, document Snowball War rules and rebuild that one minigame in Rust with SDL2. The public notes distinguish recovered tables and mechanics from approximations and deliberate presentation changes.",
  "description_zh": "作者通过 REA 的 Ghidra 工作流调查 DOS 版 Ski or Die 二进制，记录 Snowball War 的规则，再用 Rust 与 SDL2 重建这一小游戏。公开笔记区分恢复的数据表和机制、近似实现以及有意调整的表现效果。",
  "entry_url": "https://awesomerea.org/resources/snowball-war-rea-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/snowball-war-rea-case/",
  "evidence_url": "https://github.com/tuunanet/rea-ski-or-die-reconstruction/blob/0eac0671c90e21a16e663da7772b60710101ef7f/README.md",
  "group": "rea",
  "id": "snowball-war-rea-case",
  "json_url": "https://awesomerea.org/resources/snowball-war-rea-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/snowball-war-rea-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/snowball-war-rea-case/index.md",
  "name": "Snowball War: a bounded REA-assisted minigame reconstruction",
  "name_zh": "Snowball War：范围明确的 REA 辅助小游戏重建",
  "reconstruction_method": "engine-reimplementation",
  "record_type": "resource",
  "relationship": "community-reported-mixed-workflow",
  "requirement_facets": [
    "prerequisites",
    "attribution",
    "scope",
    "limits",
    "license"
  ],
  "requirements": [
    "Requires the user’s matching DOS/EGA game files and Python 3 for asset extraction. The Linux build uses Rust stable (author-tested with 1.93), Cargo and SDL2 development libraries; Cargo.toml specifies the SDL2 binding 0.37.",
    "The reported analysis used Ghidra 12.1.4 and JDK 21 through the REA CLI after unpacking EXEPACK. Caller-supplied function/code seeds are assertions.",
    "Only Snowball War is reconstructed. Other events and the original engine are excluded; menus are new, and the close-up animation is deliberately restricted to the fort zone rather than reproducing every original placement.",
    "The frame rate is approximated at 35 Hz, the original PRNG was not recovered, pause/exit keys are approximations, and audio playback is missing.",
    "The pinned LICENSE.md and Cargo.toml offer MIT OR Apache-2.0, while the README’s license sentence mentions MIT only. Original art/audio must be extracted separately."
  ],
  "requirements_zh": [
    "需要用户自备匹配的 DOS/EGA 游戏文件，并用 Python 3 提取素材。Linux 构建使用 Rust stable（作者测试版本为 1.93）、Cargo 和 SDL2 开发库；Cargo.toml 指定 SDL2 绑定版本 0.37。",
    "报告中的分析在解开 EXEPACK 后，通过 REA CLI 使用 Ghidra 12.1.4 和 JDK 21。调用者提供的函数与代码种子属于调用者断言。",
    "只重建 Snowball War，不涵盖其他比赛项目或原引擎；菜单为新写，特写动画也被有意限制在雪堡区域，没有复现原版全部出现位置。",
    "帧率近似为 35 Hz，原伪随机算法未恢复，暂停与退出按键属于近似实现，声音播放尚未实现。",
    "固定版本 LICENSE.md 与 Cargo.toml 提供 MIT OR Apache-2.0 双许可，README 的许可句仅提到 MIT。原美术与音频须另行提取。"
  ],
  "targets": [
    "game"
  ],
  "url": "https://github.com/tuunanet/rea-ski-or-die-reconstruction",
  "verification": "source-reviewed",
  "verified_at": "2026-10-17"
}
