LmCast :: Stay tuned in

Quake Engine Indicators

Recorded: Nov. 28, 2025, 1:02 a.m.

Original Summarized

Quake Engine Indicators

FABIEN SANGLARD'S WEBSITE

CONTACT    RSS     DONATE

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.
TURTLEThe 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.
Alike the turtle one, this indicator can also be enabled/disabled with command showram 1/0.
DISCThe 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 Draw_BeginDisc.
NETThe 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 connection was (a distant server would easily have a 500ms ping in these dial-up over PPP modem days) or if they had plainly lost connection to the server.
The code for this indicator is in SCR_DrawNet.
The NET indicator is prevent and active in Quake 2. The code is still in SCR_DrawNet but the image is no longer in a wad. It is store in pak0.pak at pics/net.pcx.
All togetherBelow, 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.

*

The provided documentation details a series of diagnostic indicators implemented within the Quake engine, primarily discovered during Fabien Sanglard's investigation of a network instability issue. These indicators, found within the pak0.pak file and associated wads (TURTLE, DISC, and NET), were originally intended for use by id Software developers during the game's creation and early testing phases. They were not designed for direct player interaction but rather served as internal tools to monitor system performance and network connectivity.

The TURTLE indicator emerged when the framerate fell below 10 frames per second. Its presence flagged potential issues related to map complexity, specifically notifying map designers if their creations contained an excessive number of polygons. The visual representation, resembling a tortoise, rather than a turtle, underscores the animal’s terrestrial locomotion, highlighting the indicator's relevance to land-based performance. Control over the indicator's visibility is managed through the command ‘showturtle 1/0’, utilizing the `SCR_DrawTurtle` function and referencing `host_frametime`, the time taken to render the previous frame. The underlying intention was to illuminate situations where the engine's surface cache – the system's temporary memory for rendering – was being overwhelmed, leading to performance degradation.

The DISC indicator’s purpose was to provide feedback to the player regarding hard drive access facilitated by the `Sys_FileRead` function. Because its visual placement overlapped with the TURTLE indicator, it was likely never used for diagnostics. Instead, its flickering appearance while `Sys_FileRead` was in operation was seemingly a purposeful effect, intended to signal the player that the game was loading data from the hard drive, a common occurrence during gameplay. The associated code is contained within `Draw_BeginDisc`.

Finally, the NET indicator signaled a loss of connection to the game server. Specifically, it activated when a client hadn’t received any packets from the server within a 300-millisecond window. This was particularly relevant during the era of dial-up internet connections over PPP modems, where latency could routinely exceed 500 milliseconds. The indication was intended to aid players in assessing the quality of their connection and identify periods of disconnection. The code for the NET indicator is in `SCR_DrawNet`, however, in Quake 2, the image for the indicator has migrated from the wads to `pak0.pak`, specifically stored in the `pics/net.pcx` directory. These indicators collectively represent a sophisticated, albeit initially internal, approach to monitoring and diagnosing performance issues within the Quake engine. The architecture highlights a proactive method by id Software to detect and address potential problems related to map detail, rendering efficiency, and network latency.