Actually, the first thing that comes to mind is rather a phrase, and the words typically average four letters. I won't repeat it here, as I suspect even the veteran sailors among us would be made slightly uncomfortable.
(Now I'm out of hyperbole and melodrama, so I'll just tell it straight. OK, maybe with a little bit of exaggeration. You know, screw it - 99% of what follows is probably total lies. But at least they'll hopefully be entertaining lies.)
So this cutscene system is getting larger. And by "getting larger" I mean that I am more or less resigned to dwelling in a cave for several millenia, doing nothing but writing code and subsisting on recycled guano, just to get the outline of the functionality done. It should only take a couple of lesser eternities to actually produce a working alpha.
It isn't really as bad as I'm trying to make it sound, but it is rather severe. Originally, I'd understood the system as having two main parts: a sort of generic rendering service that draws pretty movie clips on the screen, and a semi-intelligent decision system that picks out different interesting things to draw, and feeds them into the rendering chain. I arrived here at the company office proud of my accomplishment (I'd finished a viewable prototype of the render chain, loading a dynamic scene from XML files) and was ready for my parade in the streets, complete with fountains of beer and numerous women with... shall we say... highly friendly dispositions. Well, I would have settled for a "cool, you're on schedule, that's great. What's next?"
Instead you'd think I came in and announced that I was going to kill everyone by suffocating them in my rectum. There was that kind of awkward silence and shuffling-of-feet going on. Although, to be fair, I was asked to give the presentation rather suddenly. I'd dismantled the actual live-demo part in the airport during a layover on the trip over, so all I really had to show was stuff that's been in the project wiki for almost two months, and the demo XML file. I'd also been roughly awakened from my jetlag-induced nap no more than an hour before. I'm not entirely sure if the response was due to my presentation's utter lack of content, or if I inadvertently used a term like "schweinhund" along the way. I may never find out.
In any case, as it happens, the expectations for what this system will do have grown quite a lot since the last team discussion we had (at least, the last one I was involved in). The "semi-intelligent" side of things - the part that picks out cool stuff to show on the screen - has inflated a bit. I would have been ready to handle, say, Data from Star Trek, or perhaps even the HAL 9000. Unfortunately, things are slightly out of hand. Suffice it to say that by the time this thing works according to the current spec, it will set new standards for measuring just how smart something is. In fact, if you randomly pick a sequence of 10 lines of code from the (hypothetical) finished code, those ten lines will - by themselves - be smarter than Chuck Norris. I think it is now clear just how far things have gone.
The system now is going to need at least three tiers on top of the existing (and basically done) rendering framework. The first is a sort of cameraman that is responsible for composing individual shots, given a list of subjects (a ship, a planet, and that thing over there that's blowing up) and some priorities (explosions cool, planets pretty, ship not so important just now). This will be challenging enough simply because it requires a lot of logic that is typically approached subjectively by the artists - which is to say, there are no written rules for how to make a particular shot "look good."
It doesn't stop there, though! The next layer up is a sort of director, who will go over a scene and pick out groups of interesting subjects. The director then gives the subjects to the cameraman logic and says "make a nice shot showing this stuff over here." After the cameraman decides on a shot, he generates some parameters for the render pipeline, which then in turn boils things down into atomic operations in the actual 3D engine itself.
Overwhelmed yet? We're not done. The final layer is an evolution of the "event watcher" system that I'd originally thought was all the smartness needed by this thing. This top layer observes the entire universe and acts as a sort of agent for the player, picking out hotspots of "important things" and telling the director logic to show them.
To make this all the more interesting, each layer has to be accessbible directly without touching the upper layers. So we need the power to manually control a scene (which is now basically finished), or to manually control what shots are displayed, or to manually specify an environment in which the director should find interesting stuff to show.
Thankfully, I've got a very solid base design that will be able to handle all this data, and stacking the different systems will work out. It actually fits nicely into the horizontally-stratified abstraction/"mini dialect" concept that I've burbled about at great length. The only downside is that all the people interested in the system itself are also people who don't spend their time contemplating software architecture, so it's very hard to convince them that A) all the work I've done on the base rendering chain is actually necessary, and B) it's better to build this from the bottom up as a general system, instead of just hacking in a bunch of special-case code to finish the tech demo they want to see.
Interestingly, the artists themselves don't really see this as feasible for the most part. Most of the pressure is coming from Down On High to reduce the amount of work needed to generate cutscenes, plus of course the obvious bonus that once we have this technology we can use it all throughout the game for various cool things. The term "clever code" has been abused enough to make a two-dollar hooker feel positively loved. I've started privately referring to this entire escapade as the "Artist ex Machina." I deeply fear that the code may need to be more clever than I am, which makes it a bit hard to write - and debug. (There's some famous quote about that somewhere but I'm too lazy to dig it up.)
All of this stuff might be possible, maybe, but it's going to take a heck of a lot of work, and even after all that, we have no guarantees that the results will look good. So no pressure on me, really; we don't have an entire product design riding on this, or anything. That's definitely not a big load to carry out of bed every morning. Nope.
But then again, hell, this is what I live for. I was perpetually pissed at my last job because I never really had any major challenges. I'm just getting what I wished for... now I have to find out if that wish was a dumb mistake [smile]
There's plenty of other interesting little tidbits of team culture and personality coming to light, but I'll have to bore you with those at a later time, because right now I should probably be working [grin]