雷神之锤·SRP(Quake-SRP)启动引擎时显示 starting the engine…,提示点击或按回车(Enter)开始,随后按任意键进入菜单,并点击画面以捕获鼠标。准备就绪后,页面提示点击以全屏游玩,声音关闭,并列出按键说明,同时附上源代码与一段 6 分钟解说视频的链接。
正文
QUAKE·SRP
正在启动引擎……
点击(或按 Enter)开始 · 然后按任意键进入菜单
点击以捕获鼠标
QUAKE·SRP 就绪——点击开始游戏,全屏、声音关闭、按键。源代码(GitHub 上的源代码)解说(一段六分钟视频,讲解其工作原理与改动)
移动
WASD 键用于移动 / 侧移(id 原本的设定是方向键和 ,. ——在控制台输入 idcontrols)。鼠标视角(点击锁定;或点击拖动)。如果觉得太慢或太快,在 Options(选项)中调整 Mouse Speed(鼠标速度)——在 Mac 上,游戏鼠标起始速度偏慢(macOS 只传递了一部分移动量)。←→ 用于转身,空格键跳跃 / 上浮,C 键下潜。使用手柄时,左摇杆移动,右摇杆控制视角,RT 开火,A 或 LT 跳跃,肩键切换武器,Start 打开菜单(方向键、A 和 B 也可操作),Back 查看得分。在控制台输入 idcontrols 可启用 id 自己的摇杆设置(需先执行 joystick 1)。浏览器要在按下手柄任意按键后才会识别手柄。
战斗
点击开火,Ctrl 也可开火(DOS 风格——方向键 + Ctrl 即使不捕获鼠标也能正常游玩)。1–8 选择武器(1 斧头 · 2 霰弹枪 · 4 钉枪,拥有后可用)。滚轮切换武器——向上为下一把,向下为上一把(这是 slop 预设的绑定;Classic 预设使用 id 的设定,未绑定)。
界面
演示播放时按任意键可打开菜单;Esc 用于菜单 / 返回——如果鼠标已被捕获,按 Esc 会释放鼠标并打开菜单。在 Chrome / Edge 的全屏模式下,Esc 仅切换菜单(按住可退出全屏);其他浏览器中按第二次 Esc 才会退出全屏(浏览器规则)。按住 Tab 查看记分板(怪物、秘密、时间)。在菜单中,↑↓ 导航,←→ 调整,Enter 确认。Options(选项)中可设置画面尺寸、亮度、鼠标、始终奔跑——Customize controls 用于重新绑定按键,Video Options 设置画面尺寸,Slop Options 是本移植版自己的设置,最后是 Reset to Classic(与 id 的 WinQuake 完全一致)和 Reset to slop(恢复初始状态),两者都会在询问后重置所有内容——按键、选项、视频——但已保存的游戏会保留。以 ?classic 或 ?slop 打开页面可直接以对应预设启动。- 和 = 分别减小 / 增大画面尺寸。Alt+Enter 开关全屏,游戏、菜单或控制台哪个拥有键盘焦点就对哪个生效(Mac 上为 Option+Return)。若使用 id 原本的控制(idcontrols),其组合键对应 id 的侧移和跳跃:请使用 fullscreen 按钮。F11 是浏览器自身的全屏快捷键(作用于整个窗口)。F6 / F9 为快速保存 / 快速读取(id 原本的绑定——此外 F1 为帮助,F2 / F3 为保存 / 读取界面,F4 为选项,F10 退出,F12 截图——截图会存为本页存储中的 .pcx 文件,暂不能直接下载;F12 仅在游戏全屏时生效,否则浏览器会将其保留给开发者工具)。按 ~ 打开控制台(见下文)。本页还可游玩任务包(服务器的或你自己的):Quake、Scourge of Armagon 或 Dissolution of Eternity——在开始屏幕的视图下方,或手机菜单中的 GAME 里选择。选择后会以 ?game=hipnotic / ?game=rogue 重新加载页面(Quake 本身无此参数):收藏对应链接即可从那里开始。存档会保留;未保存的游戏会结束。
控制台命令——作弊与关卡选择(按 ~ 键)
god:无敌noclip:穿墙fly:飞行模式give a:获得满护甲——也可用h、s、n、r、c获取生命值 / 弹药,或用1–8获取武器(例如give r 50)impulse 9:获得所有武器与弹药map e1m2:跳到指定关卡(start、e1m1…e1m8)kill:重生preset classic:与 id 的 WinQuake 引擎完全一致(所有 slop 选项关闭)preset slop:本移植版的设置,每项也都是一个变量(如wasm_showfps 1、host_maxfps 60等;位于 Options > Slop Options)preset:单独输入会显示当前设置状态(菜单中没有该功能)。你的按键会保留,且两种预设下的控制方式(WASD、鼠标视角、手柄、始终奔跑)相同idcontrols:id 1996 年原本的控制方式:方向键,无鼠标视角,无手柄,始终奔跑为关help:id 的帮助 / 订购界面wasm_help:本移植版的控制台命令列表(echo、clear、演示命令等)
已经有《Quake》?添加你副本中的 id1/pak1.pak 可解锁第 2–4 章,添加任务包自己的 hipnotic/pak0.pak 或 rogue/pak0.pak,以及 CD 音乐(music/track02.ogg…,或任务包自己的 hipnotic/music/track02.ogg):把文件或整个 Quake 文件夹拖到本页面任意位置,或选择文件即可。它们会保留在此浏览器中。
快捷方式:行走 e1m1 · 播放 demo1(e1m3)
id Software 1996 年的《Quake》,根据其 GPL 源代码移植到 Rust,并在浏览器中通过软件渲染——无需 GPU,无依赖。包含共享软件章节(id 原始的 quake106.zip,9.1 MB)。GitHub 上的源代码。Quake 是 id Software 的商标。quake-srp 不隶属于 id Software,也未获得其认可。
联系方式(包括法律声明):terrapapagalli1516@gmail.com
拖入你的 Quake 文件——pak1.pak、任务包的 pak0.pak,以及音乐。
评论
社区整体气氛以惊喜和赞叹为主,多数人实测确认它能在手机浏览器里流畅运行,并把可一键即玩的浏览器游戏视为一种复兴。分歧主轴在于这波成果应归功于 LLM 的最终移植,还是归功于浏览器、WASM、Rust 等数十年人类技术积累;同时也有人质疑这种重写的必要性、可持续性,以及 Safe Rust 会抹掉原版 bug 与邪道玩法带来的魅力。
认为在浏览器与手机上流畅运行,标志浏览器游戏复兴
- 不少人实测在手机浏览器里无需额外加速就能跑起来,画面平滑,甚至有人联想到 1996 年无法想象手机浏览器能运行 Quake;社区把它放进“浏览器一键即玩”的文艺复兴里,并提到 Half-Life 等游戏也能这样运行。(认可度:较多人) > 在手机上连 turbo 按钮都不用按就能运行,我全心全意祝福这个 slop。(@flowerthoughts)
认为这是 LLM/AI 赋予的新超级能力,能自动完成人们会描述却不愿动手的任务
- 有评论把浏览器里跑 Quake 视为集体获得的新能力:只要能把任务描述清楚,就可以让计算机完成自己大概率不会花时间去做的事;作者也说明配套视频由 AI 在人类辅助下完成,说明 LLM 确实参与了重写与周边产出。(认可度:较多人) > 作者甚至提供了像素级比对的验证工具,证明它复刻了原版,这正是“让计算机去做我们能描述但自己不愿花时间做的事”这一集体新超能力的点睛之笔。(@aroman)
认为这更多是数十年人类技术积累的展示,LLM 只是最后入场摘了果子
- 反对把它主要看作 AI 的胜利;浏览器渲染、WASM、Rust 等基础设施来自几十年人类努力,LLM 只是在最后关头完成 C 到 Rust 的移植,真正惊人的前置条件并不是 AI 完成的。(认可度:少数人) > 这是站在巨人肩膀上:浏览器渲染、WASM、Rust 和 LLM 汇聚到一起,LLM 只是在最后一秒进场并摘走了胜利果实。(@onion2k)
认为用 LLM 把 Quake 移植到 Rust 没有必要,像在重复造轮子
- 有人担心开发者会用 LLM 把开源软件移植成 Rust 并当作自己的作品,指出原版 Quake 代码本来就基本没有 bug,看不出重写有什么必要;也有人直接问“这有什么意义”,或表示看完内心毫无波动。(认可度:少数人) > 难道以后开发者都要用 LLM 把各种开源软件移植成 Rust 并当成自己的作品?我看不出有什么必要,Quake 原本的代码基本已经没有 bug 了。(@hn_submit)
认为这只是又一个大概率很快被放弃的 slop 移植
- 由于仓库名自称 slop rust port,有人直接把这类 LLM 生成的移植称作 slop,并预言它大概一个月后就会被放弃,暗示缺乏长期维护价值。(认可度:少数人) > 这又是一个极可能在一个月左右就被抛弃的 slop 项目。(@rvz)
认为 Safe Rust 只是没有 unsafe,并不等于真正安全或理想
- 技术评论指出,把“Safe Rust”理解成“没有 unsafe”是肤浅的;即便不用 unsafe,也可以通过滥用 vector/slice 索引做出借用检查器看不见的内部可变性,作为 C 移植很可能就是这么做的。(认可度:少数人) > 把 Safe Rust 仅仅理解为没有 unsafe 是肤浅的,不用 unsafe 也能写出借用检查器看不见的内部可变性,这个 C 移植大概就在滥用向量/切片索引。(@dwroberts)
认为 Rust 重写会消除原版 bug 与邪道玩法,反而失去魅力
- 有人认真表示,游戏里的怪癖和 bug 长期塑造了玩家套路并带来魅力;如果全都用 Rust 重写、消灭了一整类 bug,游戏会损失不少乐趣。社区也用“安全火箭跳”“还能被火箭炸死吗”等玩笑调侃“safe”其实挡不住游戏里的死亡。(认可度:少数人) > 听起来好笑,但如果游戏全用 Rust 写、连某些 bug 都不再可能出现,反而会失去几十年里由怪癖和 bug 塑造出的玩法魅力。(@aizk)
认为浏览器不适合复杂游戏,这类项目必然卡顿不可玩
- 有评论强烈反对把浏览器当作复杂游戏平台,断言这条路永远做不出好结果,只会得到缓慢、不可玩的垃圾,应该去做桌面程序;这与多数人实测流畅可玩形成反直觉的对照。(认可度:少数人) > 让 vibe coder 停止把浏览器当成复杂游戏平台吧,这永远只会做出缓慢、不可玩的东西,要做游戏就做桌面程序。(@Uptrenda)
有价值的补充
- 有人在源码里搜索著名魔数 0x5f3759df 却没有结果,说明经典快速平方根倒数代码可能并不在这个移植里,或它本来就属于 Quake III 而非本次移植的原始 Quake。(@CBLT)
- Quake 在 2009 年就有 Flash 播放器版本;社区里还有用 CSS 与 ASCII 渲染的 Quake 移植(cssquake.wtf、asciiquake.wtf),有人觉得它们比这次的 Rust 移植更有挑战性。(@Marazan、@apresmoi)
- 有人手工把 Neverball 移植到网页花了五年,断断续续调优 UX,结果被这个项目抢走发布时机,侧面说明手工 web 移植成本极高。(@parasti)
- 浏览器游戏生态正在扩展:Half-Life 现在能一键在浏览器里玩,此外还有 Doom 与扫雷的 mashup、warweb.duckdns.org 等站点;也有人建议下一个 srp 目标改成 Quake 3 或 CS 1.6。(@sergiotapia、@franze、@maxyurk、@iwassayinbourns、@anilgulecha)
- 项目还配了一个约六分钟的视频讲解原理与额外的人性化改进,视频由 AI 在人类辅助下制作。(@airesQ)