Q3Edit:在浏览器里编辑并试玩《雷神之锤 3》地图
文章摘要
Q3Edit 是一个完全跑在浏览器里的《雷神之锤 III 竞技场》地图编辑器,作者是 HN 用户 drdator。它的口号很直接:在你的浏览器里编辑、编译并试玩 Quake III 地图——不需要装桌面软件,也不需要游戏本体文件。
界面基本复刻了当年 Radiant 系列编辑器的经典布局:四视口编辑,支持 brush(画刷)、patch(曲面片)、CSG 布尔运算和地形工具,配有材质浏览器、实体属性面板和对象列表。它读写的是真正的 .map 文件,因此可以和既有的地图资产互通。
技术实现是这个项目最硬核的地方。渲染用 WebGL2,编辑器框架用 TypeScript;关键在于它把 id Software 在 GPL 开源版本中释出的原版 q3map 编译器编译成了 WebAssembly,因此 BSP 编译这一步是在浏览器内完成的;编译出的地图随后交给同样以 WASM 形式运行的 ioquake3 直接试玩。作者明确说明用的是原版 q3map 而非社区更常用的 q3map2,后者会在之后考虑支持。
Q3Edit 还加了一层现代性:它支持 MCP(Model Context Protocol)连接,让 Claude、Codex 这类 AI 智能体可以实时检视、创建和修改几何体,所有改动会即时反映在编辑器里,并且保持可撤销。
限制方面:需要浏览器支持 WebGL2;随包附带的是 OpenArena 的资产而非官方 Quake III 文件;项目是独立社区作品,与 id Software 和 ZeniMax 无关,以 GPL-2.0 许可发布。作者在评论里坦言,做这个纯粹是为了好玩——他当年就是 Radiant 时代的地图作者,想看看能不能在浏览器里做出类似的东西,”分享出来只是事后想起的”。
HN 评论精华
-
drdator(作者)在被问及是否用 q3map2 编译时给出了技术澄清:”不是,用的是 GPL 源码释出版里的原版 q3map,编译成了 WASM,不是 q3map2。之后会研究一下 q3map2。” 关于为什么做,他的回答很坦率:”老实说不知道(社区还在不在)。我纯粹是为了好玩才做的。我在 Radiant 年代画过地图,想看看能不能做个类似的东西跑在浏览器里。分享它是事后才想到的。”
-
全场最妙的巧合来自 drdator 对另一条怀旧回帖的回应:他当年也是 Quiver(经典 Mac OS 上的 Quake 编辑器)的忠实用户,”我 14 岁那会儿甚至把 q3map 移植到了经典 Mac OS 上,这样我就能在 Quiver 里做地图、在 Q3 里跑起来,全程不用离开我的 Mac。所以 Q3Edit 里这个 WASM 构建,算是我第二次把 q3map 移植到它从未被设计要去运行的地方。”
-
oldquakedays 贴出了一段带着复杂心绪的往事:他高中时和朋友用 Quiver 在 macOS 上做 Quake 地图,”想到 Quake 的网络代码能在那种老式调制解调器的延迟条件下工作,还是挺不可思议的,id 的人真是奇迹般的开发者”。他记得自己曾向学校职员要一份校园平面图,想在 Quake 里重建学校,还打算把最不喜欢的老师做成可以追杀的怪物——”现在回想有点可怕,尤其因为科伦拜恩就发生在同一年。我这边完全没有风险(绝无可能也无兴趣接触枪械,我们只是严格控枪国家里的书呆子少年),但回头看,我很庆幸自己从没做完也从没分享那些地图。”
-
spikk 一句话指出了作者可能没意识到的定位价值:”这其实可能意外地成为 .map 文件最好的调试工具,说真的你应该继续做。”
-
jacobgold 提供了历史现场感:”太酷了。很难向人解释我们第一次在早期地图编辑器里看到 GPU 渲染的预览窗口时,那有多酷。”
-
bishopdynamics 表达了同好之情并推荐了 Fabien Sanglard 那套 id 引擎源码剖析文章(”读起来是一种享受”),顺带自荐了自己折腾老引擎的项目 Continuum。mmh0000 具体点出其中的网络模型那一章(Quake 3 Source Code Review: Network Model, Part 3 of 5)。
-
voidfunc 说出了很多老玩家共同的怀念:”这让我回到 q3radiant 和 gtkradiant 做地图的日子。我怀念那些有强大社区自建服务器的射击游戏的年代。” naikrovek 补了一句更精准的:”哪怕只是那些自带地图编辑器的游戏,我也很怀念。”
-
SaltyAstronaut 希望能直接在浏览器里联机对战,carlosjobim 立刻给了一个现成的 dos.zone 的 Q3 大厅链接,前者的回应是:”哇!好吧——我的周末就这么没了。”
-
vivzkestrel 提了一个新手最真实的问题:像 Quake 3 这样复杂的代码库,一个非 3D 游戏开发者该怎么入门理解?他还预先堵住了那句”直接读源码啊兄弟”。NackerHughes 给出了一份分量十足的回答:确实归根结底就是读源码,但要有方向感——先别想着理解整个代码库,而是挑具体的部分入手;从做小改动开始,比如让枪射得更快、让玩家跳得更高,然后去找做这件事的代码在哪。”你可能会被带上一段旅程:找到一个函数的定义,然后是它内部调用的函数和传给它们的变量……一路上你会不断发现引擎里各种别的东西是怎么做的、整个代码库的大致布局,以及大量在任何地方都有用的通用编程概念。” 他还给出了自己的成长路径作为佐证:17 年前从给 Cube 引擎和 Sauerbraten 加功能、改功能开始,之后转向大得多的 Stepmania,而前面那两个项目里学到的东西价值无量。raymond_goo 则给了截然不同的现代答案:下载源码,用免费的 VS Code 打开,用 Claude Code、Copilot 这类 AI 工具去了解它。
-
malux85 回应了”这个社区还在吗”的疑问,把落点放在别处:”HN 是一个由好奇的技术人组成的社区,单是把这一整套东西在浏览器里跑通、同时保持与二进制格式的兼容,这些技术部分本身就很有意思、很酷。”
-
raymond_goo 报了一个具体 bug:加载 q3dm17sample.map 正常,但 Quick Play 会在第一阶段 BSP 编译时失败,q3map 抛出
LoadTGA: Only type 2 (RGB), 3 (gray), and 10 (RGB) TGA images supported。drdator 先回”生产环境的 Quick Play 似乎坏了,我在找原因”,随后贴出修复的 commit 链接确认已部署。valorzard 报了另一个:Windows 11 + Firefox 上 Quick Play 提示无法捕获鼠标,作者也接下了。 -
murzynalbinos 用一句话总结了这个项目的情绪价值:”青春和网吧的日子回来了。”