据 TechRadar 报道,开发者 Lukas Vogel 已将《毁灭战士》(Doom)完整移植进 SQL 数据库运行,游戏的逻辑运算与画面渲染全部由数据库查询完成,项目命名为 SQLDoom。这一移植在 640×480 分辨率下以全彩输出每秒 35 帧画面,所用 SQL 代码约 1300 行,分成 89 个查询块。
SQLDoom 把关卡几何数据和游戏状态存放在 CedarDB 的数据表中,另由一个轻量级 Python 脚本负责计时、输入和画面显示。按照 Vogel 的设定,渲染系统和游戏主循环都必须完全依靠 SQL 运行,输出内容也被限定为精确颜色表或位图。
这已经是 Vogel 的第二次尝试。他去年发布过名为 DoomQL 的版本,使用光线投射并以灰度文本字符呈现画面,效果更接近《德军总部 3D》而非《毁灭战士》。光线投射跳过了 BSP 树遍历,而这正是《毁灭战士》渲染方式的关键区别之一,Vogel 因此着手开发第二个版本。
重建新版意味着用数据库操作替代常规游戏引擎代码,重现《毁灭战士》渲染流程的关键部分。关卡几何的处理相对简单:地图加载时计算出排序键,之后只需一个排序子句就能决定绘制哪些墙面片段。地板和天花板则棘手得多,原版引擎使用的 visplane 与状态切换难以直接转换成逐列的 SQL 渲染,Vogel 用一个他自称“相当取巧”的办法替代,即循环遍历一系列已排序的面板来填充这些表面。
在性能方面,Vogel 称搭载 Ryzen 7 7840U 的笔记本上可达到约 60 帧,场景繁忙时会降到 35 帧。他表示数据表的开销相当大,但这一移植仍比他去年更简单的 DoomQL 跑得更快。Vogel 在项目博客中写道:“在数据库里渲染《毁灭战士》显然是个坏主意。”他还说:“我本来只把它当作技术演示,但它感觉就像真正的《毁灭战士》,尽管它和任何现有的《毁灭战士》移植版没有共享一行代码。”
该移植还支持死亡竞赛模式,欧洲和美国设有公开的在线服务器可供多人对战。试用过在线演示的评测者形容其运行迟缓,其中一家媒体认为问题出在服务器而非移植本身。Vogel 则为数据库方案辩护,称它能保持游戏状态的单一稳定记录,“不会出现部分应用的更新、物理错误,或者关于火箭是否真的命中的分歧”。
据 TechRadar 引述 The Register 的报道,这项工作同时也是对 CedarDB 的一次展示,该系统能把复杂查询编译成机器码。想要尝试的人可以在本地用 CedarDB 和《毁灭战士》原始 WAD 数据运行 GitHub 上的代码,也可以加入免费的在线托管比赛。