Some Notes and Tales About Nexuiz

Nexuiz is a nice, multiplayer FPS game that I've worked on as part of a bigger team (really pretty big). However, I've been inactive for a long time, only doing bugfixes now and then when threatened to be shot and enjoying the fame that came with the project.

And there really was some fame to be honest about it. Not so much in the outside world but in my imagination. OK, OK, it was downloaded a few hundred thousand times since release. OK, it was on TV and in some game magazines but still..

It shouldn't be (and to speak the truth: it isn't) my fame. I can take some pride at most out of it and now and then always use it in my resumes and RAC applications, but I didn't do the major, important parts of it. Others did and I only did what I was capable of. It was nevertheless a great learning experience and I made many friends I still have today and whom I enjoy talking to about everything.

However, my work consisted of a few interesting experiences:

First of all, when I joined the Nexuiz team, 'Alientrap', in fall 2003, this was my first project where I wasn't on my own and where I started off from other's work and had to discuss everything I did with other coders and let the lead coder approve it. It was interesting to learn about Darkplaces (the engine Nexuiz uses) and the still alive Quake1 community behind it and learn from the people who have already been working on Nexuiz a few years before I jumped on the train. It was not so nice, though, that the engine had an almost crushing legacy it was dragging behind. In contrast to Tenebrae and other 'fancy' engines, the lead coder, LordHavoc, cared about compatibility and the engine still runs Quake1 as well as any high-end, eye-candy game like Nexuiz or Darsana, so I as minor code-monkey had to make sure that my changes didn't break good, ol' Quake 1.

Lee Vermeulen, our project leader and - pretty much with LordHavoc - the guy behind Nexuiz, gave me simple assignments: coding a new HUD, writing a new menu. And I, of course, made the worst of them. OK, the HUD was nice and easy and it's still in today, but the menu - that's long story and I'm going to tell it. My fish already took out his pillow and put on his pyjama, so you maybe want to do the same in case you fall asleep.

Once upon a time I was told to write the menu for Nexuiz. It should be cool and neat and have mouse support and all that other fancy stuff. I yelled "Yeah!" and immediatelly ran off to work on it. I remembered that Quake 3: Arena or rather Team Arena had a very nice, customizable menu. Looking though the gamecode I quickly found out, how nice and clean the parser was and I decided to do the same, so I designed the so-called "menu script" language. As you can probably guess, it never evolved very far, but I still have a design doc here on my disc. Perhaps you want to take a look at it for your own amusement. Here it is: Menu Script Version 1.3.

It was a total failure: my code was bad and entropy was approaching infinity in wide steps, so I gave up after 3 weeks and went back to my best time-killing mode: thinking. After many, endless dicussions with our lead engine guru, Forest 'LordHavoc' Hale, we (I don't want to take the sole credit on the idea) came to the conclusion that it may be worth a try, if I took our Virtual Machine, which at that point was only running the server-side game code, and changed it to support multiple instances and run different services on it. The advantage was, that there already was a language, QuakeC, and a few (buggy) compilers for it and I'd only have to refactor code previously written by id software that had lived almost untouched for years in the engine.

The decision was made and I was coding again. Amazingly after two or three weeks spent with after-school coding it was done. I had refactored a big subsystem of the engine and it even worked. It took another week or two until the new menu plug-in part was written and all functions bindings were done, but the engine part of the assignment was pretty much finished. It's needless to say that I've learnt a lot during that subproject.

Next came, what turned out to be the bigger challenge: writing a menu/UI system, starting only from an idea. If I recall correctly I worked on the first iteration on it for a few months. It was OK, but very nasty to edit/deal with, so I threw it into the garbage can and started afresh - my fish just awoke and pointed out that there should still be a version of it in DPMod's repository.

The next one was called NG-Menu (- yes, I like to have fancy codenames for stuff -) and was pretty much intended as the god-like version of the first menu. It was my Daikatana. Well, Daikatana was at least finished and this menu wasn't, so I guess John Romero is better than I after all. But to my defense I have to say that, if we jump to fall 2004 now, I will have used the NG-Menu's code to write my final menu iteration based on it. I basically stripped off every fancy and useless feature and made the design simpler and less STL-generic-like in a language that doesn't even support different structures but only one linked-list for all entities and started implementing the new design.

So here we are in fall, winter, spring 2004/2005 in the midst of developing the SCMenu (another fancy name - I know). My fish tells me that the SC prefix was meant to be a not-so-cool sounding abbreviation for "scarce" and it pretty much summed up my design attitude at that point. I simply wanted to get it working and finally finish that darn assignment. So I was working and coding and even more of the former and too little of the latter (how I am any productive is still a miracle to me) and not paying enough attention at school and real-life. All in all I felt burn-out at some point. You probably know the feeling, when you work all night and all day and work simply doesn't become less but more and more complicated.

One of the my main problems was debugging. You see, this language, QuakeC, isn't very fortunate in having only buggy compilers (even now-a-days) and that drove me to the border of insanity. I started to debug three different things: my code, the bytecode output of the compiler and finally the compiler itself. But since you never knew that it was the compiler's fault 'till you figured out the bytecode output after endless hours of tracing the problem with printfs and the like, you were bound to start to question your sanity and ability to think logically at some point. So here I was with my first burn-out syndrome in my life and heaps of work I felt obliged to do.

So... what did I do?

I took some time off every day and blew heads off, tore bodies apart and had a real bloodbath as far as I can blurry remember that period of time.
Yeah, CS:S was real fun.

Back to the topic: I managed to "finish" the menu in June, 2005 nevertheless and was happy to see it released with the rest of Nexuiz in the next month. But my work didn't stop then. There were a few bugreports and feature-requests I happily implemented and finally sometime in the fall of 2005 I finally decided that I was done with the assignment.

Of course, now, in summer 2006 everybody wants me to work on a new menu again or fix the old one that has turned out to become buggy with time, which I also happily refuse to do and I'm back at the beginning of the journey. Only this time, I already know my foes and a lot about developing in general. So maybe, if I find time and lust, I'm going to work on a new iteration of the menu and this story will be continued some more.