《Quake 引擎指示器》
Quake Engine Indicators

原始链接: https://fabiensanglard.net/quake_indicators/index.html

## Quake 引擎隐藏指示器 在修复 Chocolate Quake 中的网络代码错误时,一位开发者发现游戏文件(pak0.pak/gfx.wad)中隐藏着一组“指示器”——TURTLE、DISC、RAM 和 NET,此前未被记录。 **TURTLE** 会在帧率降至 10fps 以下时出现,可能是一种开发工具,供地图设计师识别性能瓶颈。**RAM** 警告引擎超过了其表面缓存容量,导致由于不断重绘而产生性能“死亡螺旋”。**DISC** 会短暂闪烁,指示加载期间的硬盘访问。最后,**NET** 信号在 300 毫秒后与服务器失去连接,提供了一个基本的 ping 指示器。 这些指示器并非供玩家使用,但可以深入了解引擎的内部状态。它们可能被 id Software 的开发者和地图设计师用来优化性能并在 Quake 制作过程中诊断问题。同时遇到所有指示器会导致游戏体验严重下降。

黑客新闻 新的 | 过去的 | 评论 | 提问 | 展示 | 工作 | 提交 登录 Quake 引擎指标 (fabiensanglard.net) 31 分,由 liquid_x 发表于 2 小时前 | 隐藏 | 过去的 | 收藏 | 1 条评论 whou 8 分钟前 [–] 有趣的发现!巧克力 Quake 源码移植也很棒。我一直想知道为什么没有 Quake 的巧克力 Doom 等效版本。很高兴今年早些时候看到它的发布公告,从那时起我就一直在默默关注它的开发。开发者做得很好,现在我们只需要一个 Quake 的清晰 Doom 等效版本! 我也想知道那个乌龟纹理是从哪里来的。开发过程中为了制作艺术素材而付出的努力,似乎为了这么小的事情有点过头了。 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文
Quake Engine Indicators

Nov 24, 2025

Quake Engine Indicators


I was working on a bug in Chocolate Quake netcode. The issue was an edge case where starting two clients on the same machine resulted in the second one zombifying the first one. When the bug occurred there was no disconnection but the client could no longer move. Instead the screen would show an "indicator" looking like an unplugged Ethernet cable in the upper left corner.

As I dug into the code, I learned there were more of these. Located inside pak0.pak and nested in gfx.wad are files TURTLE, DISC, RAM, and NET. I could not find anything about these "indicators" so I documented them here.

TURTLE


The TURTLE indicator shows up on screen when the framerate goes below 10 fps. It is unlikely to have been intended for players but rather for people at id Software during development. Programmers could see where the engine was not fast enough. More importantly map designers could see if they had too many polygons in specific areas of their map.

The TURTLE indicator can be enabled/disabled with command showturtle 1/0. The code is all in function SCR_DrawTurtle, where host_frametime is the time in seconds it took to draw the last frame.

There is a scr_showturtle in Quake 2 source code but it does not do anything.

The icon doesn't actually depict a turtle but a tortoise. A turtle swims in the water while a tortoise walks on land.

RAM


Quake does not render polygons using directly a texture and a lightmap. Instead it combines these two into a "surface" which is then fed to the rasterizer. After being used surfaces are not discarded but cached because the next frame is likely to need the same surface again.

The RAM indicator is here to warn when the engine evicts from the cache surfaces that were generated and cached on the same frame. This means the geometry of the map forces the engine to operate beyond its surface cache capacity. Under this condition, the renderer enters a catastrophic "death spiral" where it evicts surfaces that will be needed later in the frame. Needless to say the framerate suffers greatly.

This was likely a feature intended for map designers to warn them of scenes going beyond the amount of surface cache memory Quake provisioned. See D_SCAlloc where thrashing is detected to learn more about it.

DISC


The DISC indicator wraps HDD access done via Sys_FileRead. It is unlikely it was used by developers to diagnose anything since its screen location overlaps with the TURTLE indicator. It is just here to give feedback to players that the game is loading.

Because the icon is hidden when Sys_FileRead returns, it is normal to see it flicker on the screen (and it also looks kinda cool). The code for this indicator is in SCR_DrawRam.

NET


The NET indicator is displayed when a client has not received any packets from the server in the last 300ms. This was likely aimed at players to help them determine how bad their ping was.

The code for this indicator is in SCR_DrawNet.

All together


Below, a terrible user experience where the frame made the engine thrash its surface cache, the framerate dropped below 10fps, and the engine last received packets from the server more than 300ms ago.


*
联系我们 contact @ memedata.com