I’ve been googling for a solid two hours now, and I’ve managed to track down the .map specifications for quake 1, but I can’t find anything for quake 3. I did find about 4 versions of the Q3map and Q3map2 shader manual, but that doesn’t help me today. I just want to know where I could find the reference document that outlines how the quake 3 .map format is structured.
I’m mirroring id software’s FTP for everything quake 3 related and I’ll be sifting through all of that in a while. I’d think it has to be written down somewhere so that the people making the level editing tools know how to make the .map files save correctly. It also crossed my mind that Q3map2 would have had to make use of a such a reference as its primary purpose is to read in .map files and output the bsp counterpart.
Thanks for any links/suggestions!
the cause behind my quest for knowledge:
A friend of mine has recently been getting into quake 3 mapping (better late than never) and he ran into a very strange issue, one I’d never even seen/heard of. His map would fully compile with no errors, but when quake 3 would load it, he’d get an error saying “recursive error after: SV_SetBrushModel: NULL” - this error actually causes ioquake3 to panic and close instantly.
After a lot of tinkering, we eventually found that the problem seemed to stem from NetRadiant handling triggers and events weird. It occurred to me that since the error mentioned “NULL”, the issue was probably that some element of the map, say, a trigger, that isn’t really looked at in-depth during compile, was being written incorrectly into the .map file. My guess is that the .map was supposed to have a line in it that said something like “this trigger causes event X in conjunction with brush Y” but all that made it into the .map file was “this trigger”
He eventually “fixed” it by selecting his entire map, copying it, and dumping that into a new map file in NetRadiant. As nice as it was that doing so resolved the issue, it doesn’t really stand to reason that making a duplicate of bad code somehow produces good code. I endeavor to find out more about the cause and solution of this issue.