Archive for July, 1997

Ultra-Large Servers

Wednesday, July 30th, 1997

quake2 +set maxclients 200

:)

The stage is set for ultra-large servers. Imagine everyone at QuakeCon in one gigantic level! A single T1 could run 80 internet players if it wasn’t doing anything else, a switched ethernet should be able to run as many as we are ever likely to have together in one place.

There will be a number of issues that will need to be resolved when this becomes a reality, but the fundamentals are there.

There will probably be issues with UDP packet dropping at the ethernet card level that will need to be worked around with a seperate qued thread.

Quake 2 isn’t as cpu intensive as QuakeWorld, but I’m not sure even a Pentium-II 300 could run 200 users. An alpha 21264 could certainly deal with it, though.

The new .bsp format has greatly increased size limits, but you could still make a map that hits them. The first one to be hit will probably be 64k brush sides. Ten thousand brushes can make a really big level if you don’t make it incredibly detailed. Loading a monster map like that will probably take over a minute, and require 32+ megs of ram.

I should probably make an option for death messages to only be multicast to people that are in the potentially hearable set, otherwise death messages would dominate the bandwidth.

Everyone should start thinking about interesting rules for huge games. A QuakeArmies dll has immense potential. Enemy lines, conquering teritory, multiple clan bases, etc.

Cooperating servers will be possible with modified dlls, but I probably won’t include any specific code for it in the default game.dll.

Drag Strip

Friday, July 25th, 1997

Id Software went to the drag strip today. The 100 degree heat was pretty opressive, and my NOS regulator wasn’t working, but a good time was had by all.

I made six runs in the 126 to 133 mph range and didn’t even burn a spark plug, which is a nice change from a couple road track events I have been to.

Best times for everyone:

Bob Norwood’s PCA race car: 10.9 / 133 mph (slicks)
My turbo testarossa 12.1 / 132
Adrian’s viper 13.5 / 105
Todd’s ‘vette 13.9 / 101
Tim’s porsche 14.3 / 96
Bear’s supra: 14.4 / 96
Cash’s M3 15.2 / 94

My TR is never going to be a good drag car (>4000 lbs!), but when we go back on a cool day this fall and I get my NOS running, it should be good for over 140 in the quarter. 50 mph to 200 mph is it’s real sweet spot.

I think Bear is heading for the chip dealer so he can get ahead of Tim :)

Fred Brooks “The Mythical Man-Month”

Friday, July 11th, 1997

Zoid commented that my last .plan update sounded like Fred Brooks “The Mythical Man-Month”. He is certainly correct.

When I read TMMM two years ago, I was stunned by how true and relevent it was. I have something of a prejudice against older computer books — I think “If its more than a five years old, it can’t be very relevent” (sure, thats not too rational, but what prejudice is?).

Then I go and read this book that is TWENTY YEARS old, that talks about experience gained IN THE SIXTIES, and I find it mirroring (and often crystalizing) my thoughts on development as my experiences have taught me.

It even got me fired up about documenting my work. For about a day :)

I had to fly out to CA for biz on thursday, so I decided to grab and re-read TMMM on the plane.

It was just as good the second time through, and two more years of development under my belt hasn’t changed any of my opinions about the contents.

If you program (or even work around software development), you should read this book.

Quake’s Software Quality

Monday, July 7th, 1997

The quality of Quake’s software has been a topic of some discussion lately. I avoid IRC like the plague, but I usually hear about the big issues.

Quake has bugs. I freely acknowledge it, and I regret them. However, Quake 1 is no longer being actively developed, and any remaining bugs are unlikely to be fixed. We would still like to be aware of all the problems, so we can try to avoid them in Quake 2.

At last year’s #quakecon, there was talk about setting up a bug list maintained by a member of the user community. That would have been great. Maybe it will happen for Quake 2.

The idea of some cover up or active deception regarding software quality is insulting.

To state my life .plan in a single sentance: “I want to write the best software I can”. There isn’t even a close second place. My judgement and my work are up for open criticism (I welcome insightfull commentary), but I do get offended when ulterior motives are implied.

Some cynical people think that every activity must revolve around the mighty dollar, and anyone saying otherwise is just attempting to delude the public. I will probably never be able to convince them that isn’t allways the case, but I do have the satisfaction of knowing that I live in a less dingy world than they do.

I want bug free software. I also want software that runs at infinite speed, takes no bandwidth, is flexible enough to do anything, and was finished yesterday.

Every day I make decisions to let something stand and move on, rather than continuing until it is “perfect”. Often, I really WANT to keep working on it, but other things have risen to the top of the priority que, and demand my attention.

“Good software” is a complex metric of many, many dimensions. There are sweet spots of functionality, quality, efficiancy and timeliness that I aim for, but fundamentally YOU CAN’T HAVE EVERYTHING.

A common thought is that if we just hired more programmers, we could make the product “better”.

It’s possible we aren’t at our exactly optimal team size, but I’m pretty confidant we are close.

For any given project, there is some team size beyond which adding more people will actually cause things to take LONGER. This is due to loss of efficiency from chopping up problems, communication overhead, and just plain entropy. It’s even easier to reduce quality by adding people.

I contend that the max programming team size for Id is very small.

For instance, sometimes I need to make a change in the editor, the utilities, and the game all at once to get a new feature in. If we had the task split up among three seperate programmers, it would take FAR longer to go through a few new revs to debug a feature. As it is, I just go do it all myself. I originated all the code in every aspect of the project, so I have a global scope of knowledge that just wouldn’t be possible with an army of programmers dicing up the problems. One global insight is worth a half dozen local ones.

Cash and Brian assist me quite a lot, but there is a definite, very small, limit to how many assistants are worthwhile. I think we are pretty close to optimal with the current team.

In the end, things will be done when the are done, and they should be pretty good. :)

A related topic from recent experience:

Anatomy of a mis-feature
————————
As anyone who has ever disected it knows, Quake’s triangle model format is a mess. Any time during Quake’s development that I had to go back and work with it, I allways walked over to Michael and said “Ohmygod I hate our model format!’. I didn’t have time to change it, though. After quake’s release, I WANTED to change it, especially when I was doing glquake, but we were then the proud owners of a legacy data situation.

The principle reason for the mess is a feature.

Automatic animation is a feature that I trace all the way back to our side-scroller days, when we wanted simple ways to get tile graphics to automatically cycle through animations without having to programatically each object through its frames.

I thought, “Hmm. That should be a great feature for Quake, because it will allow more motion without any network bandwidth.”

So, we added groups of frames and groups of skins, and a couple ways to control the timing and syncronization. It all works as designed, but parsing the file format and determining the current frames was gross.

In the end, we only used auto-frame-animation for torches, and we didn’t use auto-skin-animation at all (Rogue did in mission pak 2, though).

Ah well, someone might use the feature for something, and its allready finished, so no harm done, right?

Wrong. There are a half dozen or so good features that are apropriate to add to the triangle models in a quake technology framework, but the couple times that I started doing the research for some of them, I allways balked at having to work with the existing model format.

The addition of a feature early on caused other (more important) features to not be developed.

Well, me have a new model format for Quake 2 now. Its a ton simpler, manages more bits of precision, includes the gl data, and is easy to extend for a couple new features I am considering. It doesn’t have auto-animation.

This seems like an easy case — almost anyone would ditch auto-animation for, say, mesh level of detail, or multi-part models. The important point is that the cost of adding a feature isn’t just the time it takes to code it. The cost also includes the addition of an obsticle to future expansion.

Sure, any given feature list can be implemented, given enough coding time. But in addition to coming out late, you will usually wind up with a codebase that is so fragile that new ideas that should be dead-simple wind up taking longer and longer to work into the tangled existing web.

The trick is to pick the features that don’t fight each other. The problem is that the feature that you pass on will allways be SOMEONE’s pet feature, and they will think you are cruel and uncaring, and say nasty things about you.

Sigh.

Sometimes the decisions are REALLY hard, like making head to head modem play suffer to enable persistant internet servers.

D3D vs. OpenGl

Thursday, July 3rd, 1997

This little note was issued to a lot of magazines by microsoft recently. Just for the record, they have NOT contacted us about any meetings.

All the various dramas in this skit haven’t quite settled down, but it looks like microsoft is going to consciously do The Wrong Thing, because of politcal issues. Sigh.

Our goal was to get the NT OpenGL MCD driver model released for win-95, so IHVs could easily make robust, high performance, fully compliant OpenGL implementations. Microsoft has squashed that. Flushed their own (good) work down the toilet.

The two remaining options are to have vendors create full ICD opengl implementations, or game specific mini-drivers.

Full ICD drivers are provided by intergraph, 3dlabs, real3d, and others, and can run on both NT and 95 (with code changes). Microsoft still supports this, and any vendor can create one, but it is a lot of work to get the provided ICD code up to par, and bug prone. On the plus side, non-game tools like level editors can take full advantage of them.

Minidrivers certainly work fine — we have functional ones for 3dfx and powerVR, and they have the possibility of providing slightly better performance than fully compliant drivers, but partial implementations are going to cause problems in the future.

We will see some of both types of drivers over the next year, and Quake 2 should work fine with either. We also intend to have Quake 2 show up on several unix systems that supports OpenGL, and I still hope that rhapsody will include OpenGL support (we’ll probably port a mini-drivers if we can’t get real support).

Once again, we won’t be idiotic and crusade off a cliff, but we don’t have to blindly follow microsoft every time they make a bad call.

Subject: Microsoft D3D vs. OpenGL
Author: Julie Whitehead at Internet
Date: 6/23/97 10:01 AM

Dear Editor,
You may be aware of a press release that was issued On June 12, by Chris
Hecker, former MS employee and developer of D3D [sic]. The statement asks
Microsoft to develop a stonger link between D3D and OGL.The press release,
was signed by several game developers representing the top tier 3-D game
developers. Microsoft is dedicated to maintaining an active relationship
with its DirectX developers. In response to this request Microsoft will host
the developers included in the statement at a developers roundtable in July.
The purpose of the roundtable is to openly consolidate input and feedback
from developers. Tentative date for the roundtable is immediately following
Meltdown, July 18.

Direct3D is Microsoft’s recommended API for game developers with more than
100 developers using Direct3D as the defacto consumer API. OGL is widely
regarded as a professional API designed for high precision
applications such as CAD, CAM, etc. Our hope is that this round table
will provide Microsoft with the feedback required to evolve our 3D APIs
in a way that delivers the best platform for our developers.

If you have any questions or wish to speak with a Microsoft
spokesperson, please let me know.

Julie Whitehead