返回首页

cURL Doom:通过 HTTP 在终端中玩 Doom 游戏

cURL Doom 项目允许通过 HTTP 和 cURL 在终端中使用 ANSI 半块玩 Doom。描述了两种启动模式,原始输入的技术细节。与 cssDoom 和 Doom Over DNS 比较。

通过 cURL 运行 Doom:服务器和终端
Advertisement 728x90

通过 cURL 玩 Doom:终端中无依赖的服务器端游戏

开发者 Sawyer X 发布了 cURL Doom 项目——一个 HTTP 服务器,它使用 ANSI 半块渲染 Doom 帧,并通过网络经由 cURL 发送到终端。该解决方案无需安装任何软件,只需 curl 和 bash 即可。它支持两种启动模式:使用 bash 脚本的简化版,以及纯流式 curl。

简单启动机制

在简化版中,使用命令 curl -sL http://localhost:3000 | bash。向根路径发送 GET 请求,会返回已替换 SERVER 主机的 play.sh 脚本。该脚本设置了一个循环:

  • 每次按键向 /tick 发送请求。
  • 处理 stty 的原始输入。
  • 切换到备用屏幕。
  • 光标控制和终端清屏。

在同一 URL 下打开浏览器,会看到一个极简页面,只有一行代码。

Google AdInline article slot

无 Shell 的流式模式

对于“硬核”玩法:stty -echo -icanon min 1 time 0 && curl -sN -X POST -T - localhost:3000/play。这是一个双向流:

  • 按键通过 POST 请求体向上发送。
  • ANSI 帧通过响应向下返回。

只需一个 TCP 连接,无中间循环。标准终端问题:

  • stdin 直到 Enter 才缓冲。
  • 输入回显覆盖帧。

解决方案:stty 切换到原始模式。结束时使用 reset 恢复。

Google AdInline article slot
# 终端原始模式示例
stty -echo -icanon min 1 time 0
curl -sN -X POST -T - localhost:3000/play
reset

奇葩 Doom 移植背景

该项目属于一系列在非标准协议上运行 Doom 的实验。

  • cssDoom(Nils Lenheer):通过 CSS 渲染,无需 canvas/WebGL。逻辑用 JS 实现,基础为原版 id Software 源码(GPLv2)。图形:使用 div 元素,通过 transform 和 preserve-3d 实现 3D 空间、精灵、纹理和效果。
  • Doom Over DNS(Adam Rice,2026 年 3 月):.NET 版,通过 Cloudflare DNS TXT 记录。WAD 压缩成约 1964 条记录,使用 PowerShell 实时解压。无磁盘写入,DLL 加载到内存。违反 RFC 1035 预期,但全球缓存可用。

| 项目 | 协议 | 依赖 | 特性 |

|--------|----------|-------------|----------|

Google AdInline article slot

| cURL Doom | HTTP/cURL | curl, bash | ANSI 半块,双向 |

| cssDoom | CSS/JS | 浏览器 | 通过 transform 实现 3D |

| Doom Over DNS | DNS TXT | PowerShell | 无磁盘写入,全球缓存 |

服务器技术细节

服务器实时生成 Doom 帧,将其转换为终端用的 ANSI 半块。支持无延迟输入处理。代码开源,可 fork 用于网络渲染实验。

关键点:

  • 极简依赖:仅 curl/bash,无需编译或库。
  • 两种模式:脚本版方便,流式版纯净。
  • ANSI 半块在 80x24 终端提供不错渲染。
  • 背景:展示 Doom 在网络协议上的灵活性。

该项目适合研究低级网络交互、终端协议和极简游戏开发。

— Editorial Team

Advertisement 728x90

继续阅读