remembering idevgames (2003)
In the early 2000s, I joined a community of hobbyist Mac game developers at a site called idevgames.com. Mainstream gaming was happening on Windows, but the Macintosh had developed its own quirky indie scene. The forums were filled with screenshots of the small, weird games people were making.
The site had been created by Carlos, an American expat living in Japan. One year, he started an indie game competition that received dozens of entries. I remember a game with flying sheep obliterated with machine gun fire. Someone else built a fast-paced hand-to-hand combat game (“OpenGL Fighter”?), compiled from a single C file with tens of thousands of lines.
(The screenshot above shows what the iDevGames forum looked like in December of 2002. I chose the page arbitrarily from a snapshot in the Wayback Machine and didn’t realize until later that my screen name is visible at the bottom: “kingofsquirrels”)
I was a teenager, self-taught from programming books, and I was in awe of the coders in the forums. They knew sorting algorithms and vector math, linked lists and hash maps, networking protocols and bit hacks. People were friendly, and I felt completely comfortable asking questions. I think my first question, sometime in 1999, was how to lease a T1 line to my house so I could run a server (the answer involved money, which I didn’t have).
When I was seventeen, I was working on a game and discovered a bug I didn’t know how to solve. I had narrowed the problem down to one if
statement. I would set a breakpoint on the if
statement, examine the variables to confirm that the condition should evaluate to false, then watch in confusion as the program executed the block anyway. After a few hours, I posted a question to the forum: here’s my code; why is program ignoring the condition in the if
statement?
I drove to a friend’s house, and at some point in the afternoon logged into his computer to check the post. Someone had answered the question. The C code I had posted looked like this:
if (/* condition that evaluates to zero */); {
/* block that shouldn't execute */
}
The semicolon terminated the block after the if
condition. I had made this mistake before and felt mortally embarrassed that I hadn’t seen it.
“Oh,” I muttered.
My friend stopped strumming his guitar. “What happened? Did you just get pwned?”
“Yeah, pretty much.”
But that wasn’t quite right. I hadn’t been pwned, I had just asked a n00b question in public.