The bug is made up by the fact that the Quake mapmakers and texture artists used different textures but with the same name in some maps. There are in total 6 texture names that are affected by this bug.
For example, the texture metal5_2 is actually two different textures with the same name:
- metal5_2 version 1 is comprised of arcs (upper image) and is used in E1M7, E1M8, E3M4 and E3M5.
- metal5_2 version 2 have an ornamental design made up by nested circles (lower image) and is used in E2M5 and E4M6.
This bug hasn't really been much of a problem until modified Quake clients, with added ability to replace the original content with replacement textures, first emerged sometime around year 2000. The only time before 2000 that this bug actually was a bug was with the original GLQuake client that crashed if loading two maps right after each other containing different textures with the same name!
Solution 1:
Note! This solution relies on client side code and as far as we know, this is only implemented in ZQuake and eZquake! If you want to include this solution in other clients contact Tonik.
Tonik, developer of ZQuake, brought this solution forth on the Quakesrc forums (forum is sadly not available anymore). In short, the client can distinguish between "buggy textures" by comparing their md4 values and, with some built-in code, it knows which md4 value goes with which map.
Crossreference table
Texture name in .bsp | Unique md4 value | Alternate name used for replacement texture |
metal5_2 | 0x45d110ec | metal5_2_arc |
metal5_2 | 0x0d275f87 | metal5_2_x |
metal5_4 | 0xf8e27da8 | metal5_4_arc |
metal5_4 | 0xa301c52e | metal5_4_double |
metal5_8 | 0xfaa8bf77 | metal5_8_back |
metal5_8 | 0x88792923 | metal5_8_rune |
plat_top1 | 0xfe4f9f5a | plat_top1_bolt |
plat_top1 | 0x9ac3fccf | plat_top1_cable |
sky4 | 0x8a010dc0 | sky4 |
sky4 | 0xde688b77 | sky1 |
window03 | ? | n/a |
window03 | ? | n/a |
If there is no replacement texture available with the alternate name, it will look for a replacement texture with the original name instead.
Solution 2:
This solution rely on the fact that clients first look for replacement textures in a base folder, usually named 'textures', and if map specific sub folders are present e.g. E4M3, any textures in the sub folder will override any exactly named textures in the base folder for that specific map.
Within QRP we've decided that for our forthcoming releases (QRP v.1.00 and on) the most frequently used version (version 1) of each buggy texture is placed in the base folder. The less frequently used version (version 2) will be placed in map specific sub folders according to where they belong.
Below is a list of all buggy map textures in Quake. The texture's alternate name, which is used in solution 1, is stated below each texture.
Buggy textures
Texture name | Version 1
| Version 2 |
metal5_2 |  (metal5_2_arc) |  (metal5_2_x) |
metal5_4 |  (metal5_4_arc) |  (metal5_4_double) |
metal5_8 |  (metal5_8_back) |  (metal5_8_rune) |
plat_top1 |  (plat_top1_bolt) |  (plat_top1_cable) |
sky4 |  (sky4) |  (sky1) |
window03 |  (n/a) |  (n/a) |