Hard Road——一款漂亮的程序化生成后启示录游戏

查看原文 HN 讨论

文章摘要

Hard Road 是一款直接跑在浏览器里的程序化生成开放世界驾驶游戏,由 getbutterfly 提交到 HN,拿到 45 分和 17 条评论。

站点本身几乎不含说明文字——它是一个纯客户端渲染的 WebGL/WebGPU 应用,HTML 骨架里只有主菜单和加载提示,全部内容由 js/main.js(版本 0.7.0,约 133 KB)在运行时构建。从页面上能直接读到的部分是:加载时显示「Booting physics & world…(正在启动物理与世界)」;主菜单包含 Continue(继续)、New Game(新游戏)、Controls(操作说明)、Settings(设置);HUD 上有速度表(km/h)、HANDBRAKE(手刹)指示、一个 24 小时制时钟(初始 06:00),以及一句提示语「H — honk to visit(按 H 鸣笛以造访地标)」。

操作说明页列出的按键是:WASD / 方向键驾驶与转向,空格手刹,H 鸣笛(用于造访地标),L 车灯,I 内饰灯,F 翻正车身,R 重生,C 切换镜头,ESC 打开菜单。这里也解释了 HN 上第一批人遇到的问题——它是纯键盘操作的,没有触屏控制。

从 JS bundle 里能确认的技术细节:渲染基于 Three.js,并且带有 WebGPU 支持检测(代码里有 'WebGPU support', 'gpu''timestamp-query' 之类的能力探测字符串),失败时会回落。摄像机有五种模式:chase(追尾)、bumper(保险杠)、cockpit(座舱)、topdown(俯视)、free(自由)。HUD 元素可配置,包括 speedolightclockhull(车身状态)、driven(行驶里程)、elev(海拔)、dist(距离)。游戏还带一套颇为讲究的「胶片感」后处理调色系统(hardroad.filmlook.v1),可调项包括 curve(曲线)、cool(冷调)、warmth(暖调)、sat(饱和度)、grain(颗粒)、ca(色差)、lift(提亮),以及一个 Bleach bypass(漂白旁路)效果。世界里有天气系统(代码中出现 storm、「gust front slammed(阵风锋撞上来了)」、「squall incoming(飑线逼近)」之类的事件文案)和冬季雪地相关的地形材质(snow-packedrock-snow-iceiced-over-grounderoded-smoothed-rockface)。进度通过 hardroad.save.v1 存在本地,另有 hardroad.autostart 开关和截图功能。

需要说明的是:由于站点是完全客户端渲染的,本文的正文信息来自 HTML 骨架、操作说明页和对 JS bundle 的字符串提取,而非一篇作者自述。HN 上作者本人也没有发帖说明,所以关于「程序化生成的到底是什么」这个最核心的问题,评论区并没有得到官方回答。

HN 评论精华

这条帖子讨论不算热烈(17 条),而且一度被 flag 过——Evidlo 专门问了一句:「这为什么被 flag 了?这明明很酷。」但仅有的几条评论质量相当高,尤其是关于「vibecoded 指控」的那一轮交锋和一份非常具体的开发者建议清单。

第一类反应:手机上玩不了

teaearlgraycold 第一条就问:「看起来我在手机上没法控制它?」taneq 确认了同样问题(iOS),「不过看着挺好看的」,并在编辑中补充:Controls 按钮打开的帮助页只提到了按键(比如 WASD),所以应该是纯键盘操作。cush 也问了一遍能不能在手机上开车。这大概是这款作品最直接的门槛。trinsic2 则报告了一个更糟的结果:「Failed to load TypeError」。

第二类:到底什么是「程序化」的?

avaer 提出了本帖最实质的技术问题:「什么是程序化生成的?网格?贴图?」他同时给出了一句很实在的赞赏:「我印象深刻的是我竟然没能开进虚空里。这类东西我见过很多次都是单次生成、走两分钟就到头了。它是在按 chunk 无限生成吗?」他还问:这游戏的目标是什么,是像《欧洲卡车模拟》那样的驾驶模拟器吗?anigbrowl 猜「地形吧,我想」。这些问题最终没有得到作者回答。

cjkaminski 从另一个角度表达了同样的不满:「这个 demo 第一印象不错,但缺少技术细节让这个帖子感觉更像广告而不是一个可讨论的话题。」

第三类:vibecoded 指控与反驳

peyloride 只留下一句:「看起来像个 vibecode 出来的没做完的游戏。」

Conscat 的回击言简意赅:「早在 LLM 出现之前,我就能上传粗糙未打磨的业余游戏 demo 了。」p-e-w 说得更尖锐:「当然,但用不可证伪的『vibecoding』指控去诋毁一个人,总比在任何实质层面上认真对待他的作品来得容易。」

anigbrowl 给出了本帖最有价值的一条评论,也是对这场争论最好的回应:

我很喜欢它作为一个引擎。从游戏性上说,我最先会加的是车辆/轮胎损伤、油耗,以及在附近散落替换零件。也许越野的轮胎痕迹有时会通向值得一探的战利品,但常常也通向危险。既然是后启示录,盖革计数器或者野生动物都是很自然的扩展。

我不在乎它是不是 vibe-coded 的,作者显然在调校手感和操控上投入了时间和精力,也在程序化地形上找到了自然的感觉,这弥补了低多边形的画面。这里的驾驶体验比我玩过的大多数游戏都好得多——那些游戏的转向和加速常常伴随着让人分心的过度修正。

soco 对「散落零件」这条提了异议:随机散落的零件或贵重物品总让他别扭,不如让玩家找到一处废墟或车骸(既然说到轮胎痕迹)再从中打捞零件,「这样更说得通」。anigbrowl 的回应很妙:「它们也让我别扭,但我在现实世界里确实经常看到孤零零的车轮和其他碎片。」

第四类:具体的开发者建议

riidom 贡献了一份非常细致的清单:

他最后那句祝福透露了作者的另一重身份:「希望你能卖出很多插件,好继续做这个 :) 已加书签,期待更新。」

dwd 报告了一些讨人喜欢的物理细节:「做得不错。越野时我发现了一些很棒的物理表现,比如高速撞上一块小石头,它会在我旁边弹跳好几秒;或者差点被卡在一个类似火山口的边沿上。」他唯一的建议是:当你绕到山脉之类的地块另一侧时,应该更容易找到回到路上的方法。

第五类:新手提问

vivzkestrel 提了一串「愚蠢但真诚」的问题,某种程度上正好呼应了 cjkaminski 对技术细节缺失的抱怨:怎么从零开始做出这样的东西?涉及哪些流程?实际需要什么技能和知识?做这类东西需要哪些库或游戏引擎?大概要多久?——同样没有得到作者回答。