Pages

Saturday, May 15, 2010

DOOM, the last bug

This is an excerpt (~5 minutes) from Romero's interview on Matt Chat. If you want to get the full interview in MP3 format, check out my previous post.


[01:28:30] The last bug that we had in DOOM was the most mind stumping bug that we had. But we only had that bug for 2 days. (laugh) And the thing about that was... the game when we were doing our final burn-in tests on it, just running it on everybody's machine in the office to see what' d happen if it run, yeah I mean it was like...

We looked in Nintendo for everything, right? We've looked it, and Nintendo's design and their quality and all of that stuff, to gauge our own quality against. So, the thing about Nintendo games is you can leave them plugged into a cartridge and they will run forever because they had their Q&A process down to a science. I mean they would not let any game come out if it had a glitch on the screen. So that was what we wanted to do and we didn't have a Q&A team at id. We were Q&A, the developers were the Q&A team, so, you know, that didn't exist.

So you know, as precises as we were with our programming and as the nasties as we were with our design and everything, we used all of that on testing our games as well. And so we left those, we left the game running on everybody's computers just to see if anything will happen; we don't want that Nintendo glitch kind of issue to come up because it needs to be fixed. It can't be one single thing wrong.

And randomly computers would lock up forever. Seemingly forever. They're just like... the game is like be running in demo mode, you know, and during the demo loop somewhere it was like kchh, freeze, everything, and it was just like woooow, what is going on? This is really nuts! And it was random, it wasn't like it was any specific time and Carmack was trying to nail it down like what could be stopping the game from running, you know?

And he finally found what that was and it ended up being... we were using the timer chip in the PC to time the refresh, you know, how fast the game should run. The game simulation part of the game ran at 10 frames a second and the refresh of the screen was at 35 frames a second. It was half of Wolfenstein's. But it insured that it was going to run at the frame rate; at 35. And what was happening was the timer chip in the PCs, they would have... you can setup the timer chip to be a certain number, and it would just time like crazy and you  would... if you set it to zero it would time out to 4 billion, you know, in days, so you know that's not really an issue. (laugh)

But yeah, we didn't want to have our game locking up and what happened was when the game was running we never did clear the timer chip value so it was some random number and when that value flipped over from all the FFFFFFFF over to zero, that's when the game froze. Because it was looking for a bigger number than that and it wasn't one; it was a lower number. So you're locked in this check that it was not going to happen again, ever.
Carmack simply fixed it by zeroing that out at the beginning of when the game run, and then every once in a while just zero it like at the beginning of I guess the level loader or something, and that fixed it! And so that was only like a 2 day bug, but that was like a crazy insidious bug. We had one on Quake that was pretty crazy as well.

No comments:

Post a Comment