A counter-manifesto?
I may make myself a little unpopular here, considering the popularity of this manifesto that appeared a couple of days ago. Give it a read here: http://www.pointlesswasteoftime.com/games/manifesto.html
Bear in mind I haven't worked in the "big budget" game industry since the LAST hardware revolution, but I left that carrying many of the same frustrations voiced here. But while it sounds all nice and neat from an idealogical perspective, it's flawed (and it's meant to be - it's a rant, and rants aren't usually intended to be rational, well-thought-out evaluations).
So here are my thoughts:
AI
AI can be made mercilessly competent. In Void War, I had to dumb down the AI just to make the game emotely fun. (Well, okay, they still navigate around obstacles like a drunk driver sometimes, but they can shoot a flying gnat out of the air at 800 meters if I let them...) If you get to close range, you can see the AI deliberately TRY to miss. And that's the trick. It's making the AI play stupid more believably.
Players don't want AI to be better, generally. They want the AI to put on a better show of *trying* to be better while the player clobbers them. They don't like it when the AI is obviously letting them win. That's a really tough thing to design, because the player wants to feel like he's so freaking hot-bananas that the enemies can't touch him, when in reality if the AI were all real players teamed up against him, he'd have been dead before he got two feet inside the compound.
A Genre of Game That We've Never Seen Before
It's been done. Lots of times. And the players never did see them because nobody paid any attention to them, and they died without ever appearing on anyone's radar. With few exceptions. Go out to the Monthly Round-Ups at Game Tunnel and check them out. Yeah, there are a lot of "me too" products and remakes of old classics, but about once a month you also have some really bizarre, weird concept that is praised all-to-briefly for its originality and then forgotten.
Originality is rarely rewarded financially. People claim they want something they've never seen before, but they usually vote with their wallets for something familiar and comfortable with some cool new features to freshen it up. Sad but true. Hey, I also bought (and enjoy) Unreal Tournament 2004... though I also have UT 2003, UT, Unreal, and Unreal 2. The most original title I bought last year was Orbz.
Adult Games?
Those, too, are out there. For the PC. And mods for existing games that go to extremes of tastelessness. Anyone else remember "Custer's Revenge" for the Atari 2600?
Save Points
AMEN! There's a point where preventing the step-save-step-save "cheat" becomes a frustrating way to force players to re-play the same boring content they've already passed to extend the length of the game. Most console games go way beyond that point. If I have to repeat the same content more than twice - or repeat more than five minutes of content even once - I am not a happy camper.
Invisible and Arbitrary Barriers
Amen. I've been guilty of this in the past (though I have usually at least tried to explain it). Sometimes the invisible barrier in an area that few players will ever go is preferable to having some great big visible unrealistic and obvious barrier that everyone will see - or the seething hatred and screams of "bugs" that you'd get if you didn't restrict movement at all. Sometimes it's just the lesser of several evils.
Unfortunately, the reality of game programming is that you spend WAY more of your time dealing with exceptional cases than with the core parts of the game. But I am still in agreement in principle. Arbitrary barriers do seem lazy and break whatever weak illusions you have created. The less of them, the better.
Immersion-Annihilating Contrivances
If only we had holodecks instead of a 17" - 19" monitor to present immersion...
Of course, then you'd have that annoying "Arch" and the ship's captain breaking the immersion and calling you to report for duty and everything too, so there'd still be plenty to complain about. It seems that the better you make your graphics, the more noticeable the imperfections and faults become. You get people complaining about all kinds of things in the 3D world that they wouldn't have thought twice about in a 2D game.
I'm not saying this is WRONG - we should always strive to do better. But I will say that immersion is of a far lower priority than having fun, bug-free gameplay that provides you with plenty of feedback as a player.
BS on Difficulty
I'm mainly in agreement, though I'm not sure that "Ammo Starvation" is necessarily evil. It really depends on how the game uses it. If the game allows you to succeed in many other ways, so that shooting the enemies are only one of many options (and more the option of last resort), I don't see a problem with it.
But there's a point where it can be far more frustrating than fun. And keeping track of your number of bullets is only occasionally fun.
Jumping Puzzles in FPS Games
That's why I so rarely play FPS games anymore. The last time I really enjoyed a jumping puzzle in an FPS game was in Jumping Flash for the Playstation 1 back in 1995. And that game was really a jumping game with (I think) FPS elements in it.
The Final Analysis
People vote with their wallets. That has a much louder voice than any rant. The fastest growing demographic in the game market right now is women aged 40+. When they started shelling out significant dollars in game purchases for games THEY liked, you'd better believe game developers and publishers (and yes, even console manufacturers) are starting to take notice. Deny your support to the games that continue to irritate you, and throw your support behind those quirky, off-beat games that AAA publishers are loathe to touch (Katamari notwithstanding).
And whatever you do, don't restrict your search to big-budget, AAA games that are scientifically designed to appeal to the lowest common denominator!
Labels: Game Design
Warhawk Flies Again!
Warhawk PS3.

Wow. That takes me back. Warhawk and Twisted Metal were the first games I ever worked on professionally. I look back on the development of both very fondly, but I think my favorite game was Warhawk.
When I arrived at that newly-formed SingleTrac in October of 1994, it was filled a pretty sharp bunch of engineers from Evans and Sutherland who didn't know much about games, but knew a lot about 3D technology. I found myself in the role of "resident expert" on games, though pretty soon we brought another couple of gamers on board so that we could sanity check my limited expertise. At the time, Warhawk had the working title, "Red Mercury" (a name which kinda-sorta stuck as the subtitle), and Twisted Metal was being referred to by the very generic title "Firestorm." Within a week or so, Twisted Metal had been renamed "Urban Assault" (which for some reason didn't pass a trademark check, but Microsoft managed to push an "Urban Assault" game through somehow a couple of years later).
At first, I was more excited about Twisted Metal (DUH!), because I was a fan of the old Steve Jackson game, "Car Wars." But the Warhawk ("Red Mercury") concept really thrilled me. We were on the cusp of the "3D Revolution" with the yet-unknown Sony Playstation (we had the test boxes later called "PSX" - I don't think they even knew for sure what they were going to call it then). To me, Warhawk was about taking the old 2D side-shooter games like R-Type, Raiden, and SideArms, and putting them in a 3D world with 3D gameplay and graphics.
I remember one meeting when we had a late design meeting to discuss the Canyon bosses. I think we ordered Chinese food, and had it delivered. The sun was setting through the blinds of the boardroom, the whiteboard was filled with funky pictures, and we were arguing about missile launch rates and blaster attacks from the "eyes" of these things. I remember thinking to myself, "This is a business meeting? This is the coolest job EVER!"
My biggest contribution at that meeting was the warning that the bosses actually needed to get HARDER as they take damage, not easier. One of those little gameplay "duhs" that somehow escaped us at first as we were talking about shooting off weaponry.
Mike Badger, the lead programmer on the game. We had other guys working on the sound, the shell, and the 3D engine, so Badger and I got to divvy up tasks for gameplay. Badger worked on the flight controls for the Warhawk (called the "Peregrine" during development), and did an absolutely astounding job of it. Freed of the constraints of the flight simulators he'd spent his career working on, he decided that rather than the controller directly controlling the ship (after all, how much direct input could you get from a non-analog controller?), that it would instead simply be "hints" to what the player wanted to do, which a routine would then translate to appropriate actions on the ship. The controls were praised in numerous reviews for how awesome they were, and how easy the ship was to control. That praise mainly belongs to Mike Badger (and Kellan Hatch, the designer) - both of whom are (I think) working on Warhawk PS3 with Incog.
I got to work on weapon systems and some common functionality ("Destructables," explosions, special effects, etc.). Anything that didn't directly fall into those two categories were up for grabs between Badger and me. We had kind of a "task bucket" of jobs - and as soon as we finished one, we got to pick another one from the list of the appropriate priority. This had the added advantage of motivating us to finish our current tasks as quickly as possible, so we could pick of the most fun jobs from the task bucket. Like bosses. Programming the bosses were great fun.
Pierre Dufresne was one of the modelers. He'd work all through the night, and it would seem the less sleep he got, the more imaginitive the results. It seemed he'd just start having these imaginitive dreams half-asleep in his chair or something, and then BOOM! Four hours later he had taken whatever bizarre images his subconsciousness would generate, and convert them to simulated reality on the screen of his SGI machine - and in the game.


The found myself alternating between Twisted Metal and Warhawk pretty regularly - Scott Campbell (our producer) would shift me between projects pretty regularly. This is a bizarre practice that I've never heard of anyone else doing anywhere else in the industry, but it worked great for these projects. They originally shared the same code base - in fact, our early test level for Warhawk was the arena for Twisted Metal, and you could drive one of the cars around with one controller while flying the Warhawk (Peregrine) with the other. Even after we diverged the code bases for the game (the engine and sound code, along with certain other modules, remained common to both games throughout development), the two were similar enough that we could just yank code from one game and drop it into the other with only a little bit of modification.
My most famous contribution to Warhawk were the notorious "Swarm Missiles" - I'd taken the idea from numerous Japanese anime shows. When Scott Campbell to told me to put them into Twisted Metal, I almost got mad about it. These were special to the point of defining for Warhawk, and now they were being thrown into Twisted Metal as just another "cool" element. It turns out that because the cars were so close to the ground, the randomness of the missiles had to be reigned in so half the missiles didn't explode harmlessly into the ground or into a building before reaching their target that was dead-ahead.
Incidentally, I tried to put the swarm missile behavior into Void War - but the more realistic physics of my recent indie effort meant that the randomization of the flight path tended to even out so that their trajectory was unaffected. So it just looked like the missiles were buggy. So I got rid of that behavior.
Warhawk received pretty consistantly high reviews, with some reviewers simply gushing over the game's graphics and sense of flight (like I said, these were the early days of the 3D revolution - we weren't being compared to Quake yet, we were being compared to Doom and the first Starfox). The videos for the game drew jeers - they sucked to the point of being comedy, and we knew it, but Sony spent so much money on them we weren't about to say "No." Unfortunately, the amount of work we had to do on the levels kept the game pretty short, and the single-player only aspect also kept sales (and popularity) a bitl below that of Twisted Metal. Still, it went on to sell about a million copies IIRC, and was one of Sony's "Greatest Hits" series for the PS. We considered doing a sequel to Warhawk many times - we had a couple of design documents floating around, including one for a "spiritual sequel" to the game that never materialized.
But now it looks like a true sequel will finally see the light of day. I'm sorry I won't be a part of it, but I'm sure it's in good hands. The swarm missiles will fly without me. Though I expect they need about four times as many people this time around - depending on how much time they've already put into it, it looks like they have about twice the development time to work on it as we did for the first one (we had from October '94 to August '95 to put both games together - from SCRATCH).
I'm mostly just reminiscing about good times here - I don't know if I can tie it into indie gaming too well. There wasn't much "indie" about SingleTrac - except for the spirit that was there the first year or two. Part of the thrill of going indie for me is to try and recapture some of that spirit. I felt it working on Void War - or maybe it was just the the feeling of working so many hours without sleep. But Warhawk was one of those games that just succeeded because of the amount of sheer passion that went into the game. It wasn't technically resounding, it wasn't perfectly designed - but the people working on it just loved what they were doing and burned the midnight oil trying to make something great.
I'm just glad to see Warhawk take flight again.
Labels: Mainstream Games, retro
Star Wars Episode 3: Revenge of the Sith
I finally saw Star Wars: Revenge of the Sith this morning (Finally? It's still opening weekend, but it sure feels like it's been out a while). I'm gonna try to avoid being spoiler-ific here, and just go with some general impressions.
I think I need to see it once or twice more (and the desire to watch it again is always a good indicator) to really get a solid judgement on it, but at the end of the movie I felt really satisfied. Not only did the latest Star Wars trilogy do a pretty good job of linking the original trilogy with the new prequels, but it also did something which to me really elevates it to something that approaches greatness: It redeems the previous two movies in many ways. The whole of the three movies is greater than the sum of the parts - at least parts one and two. I feel like I could go back and watch The Attack of the Clones and The Phantom Menace and enjoy them a little bit more now.
Hayden Christianson and Natalie Portman do a MUCH better job this time around when they are on the screen together - it's not perfect, but it's at least LESS wooden, and the dialog comes off a little less like fingernails scratching across a chalkboard. And Chancellor Palpatine - brilliant. He really stars in this movie, and he's brilliant. The action scenes are far-and-away the best of any of the Star Wars movies up until this point, from the opening battle to the final lightsaber duel. And speaking of lightsabers - there seems to be more lightsaber action in this movie than all other Star Wars movies combined.
Anyway, like I said, it may take repeat viewings, but at this point I'd rate this one higher than "Return of the Jedi." It was cool, it was action packed, it was sad. Good show altother.
No E3 for me...
So I'm hearing all these reports from E3 from friends and the media, and I'm trying to convince myself, "It's okay. I'm glad I'm not there. I'm enjoying sitting in my cubical for ten hours a day working on user interfaces to the database. This is FUN. This isn't stress, this is me being giddy from being free of all the booth babes, parties, hype, and glimpses into the new games and game systems. Who needs it?"
Indeed. Instead, I'll just watch Star Wars Episode 3 a few times! Hah! Except I'm not. We've got free tickets to see it bright-and-friggin-early on Saturday morning. It's the first time I've missed opening day on a Star Wars movie since The Empire Strikes Back. Ah, well. I mean, it's not like I don't know how it ends. I mean, it's like Titanic: The ship sinks. And Anakin turns into Darth Vader. Beyond that, though, I've been trying to be incredibly spoiler-free. I really hope Jimmy Smits has more to do as Bail Organa this time. And I wonder if we find out what happens to Padme. I expect not, as in Return of the Jedi we know that she lives at least until Leiah is old enough to remember her.
So moving from Star Wars back to E3 (man, how come geek brains don't explode this week?), the big rumors from the indie game development perspective is about how the XBox 360 and Nintendo Revolution (isn't 360 degrees a complete revolution...? Curiouser and curiouser...) WILL be supporting indie game development. This won't mean that they'll be handing out free dev kits to any 14-year old who believes he can whip out Halo 4 in his bedroom. But it does mean that it's possible for a serious independent studio to see smaller games on these new platforms without needing Electronic Arts (or any other publisher) to act as the gatekeeper.
In the meantime, you have Electronic Arts VP of Communication Jeff Brown loudly proclaiming that his empire is now safe from barbarian invasion from the indies. "It is now impossible to 'Blair Witch' this business." He's thrilled it's going to be so much more expensive to develop content for games that it'll cut out all but the deepest-pocketed players.
This sort of country-club snobbery - praising the exclusivity to only the rich - really chaps me. But it's more interesting because it flies in the face of what Microsoft and Nintendo really seem to be thinking. And it's also flying in the face of a recent study that revealed that the fastest growing segment of the market was casual games - particularly the older female demographic The writing is on the wall - and Microsoft and Nintendo seem to be getting the picture. They are evolving with the market and setting themselves up to reap the benefits (Microsoft has ALREADY been doing this, with the XBox Live Arcade. Sony did this once upon a time, with the "Net Yaroze" or something like that, but it was much more limited).
EA, on the other hand, is frantically telling consumers not to bother looking elsewhere for entertainment, because only THEY and a few others have the ability to bring you realistic hair and watery eyes. And THAT, ladies and gentlemen, are what makes a great game.
I don't buy it. I don't really even feel too annoyed by that statement. True, I'm frustrated by the skyrocketing cost of developing competitive content - but consider this: The average cost of a major motion picture is SUBSTANTIALLY more (by 5x-10x) the projected cost of of a major videogame release. Blair Witch was done for what would easily be considered an "indie" budget (around $20k, from what I heard). It seems to me that the barrier-to-entry for Hollywood movies is still a couple of decades beyond the barrier for videogames, yet Blair Witch was still able to make Hollywood giants weep.
But you still caught me talking about a major Hollywood movie release at the top of the blog, didn't ya?
I don't pretend that there's gonna be some big indie revolution that'll sweep the world, and that legions of players will suddenly grow bored with Halo VI and will instead scour the net in search of low-budget balloon-popping games. But I think it's clear that while the indie-games "market" (can something that wild and varied really be called a market?) - particularly casual games - are growing into a real money-making source.
The portals understand it - they are frantically trying to establish their own "Mini-EA" style empires now, throwing lots of venture capital around to build themselves up as a nice little consortium that can dictate terms. Nintendo and Microsoft seem to be understanding it - they aren't just throwing a bone out to indies, they are really trying to capture some very real revenue. It's gonna make for a very interesting 5-6 years, that's for sure.
Labels: Indie Evangelism
This is why I do it.
It's so easy to get negative in this business. As an indie, it's very hard to get ahead. There are a zillion things I could be doing with my 'spare' time that would be worth a lot more in terms of financial gain (working minimum wage at a fast-food place comes to mind). I have a lot of friends who are still in the AAA, big budget games industry - and when I talk to them about my indie development efforts, it sometimes feels like I've been resigned to the island of misfit toys.
We work our butts off for almost zero attention. We don't have the budgets to make our games half as cool as we'd like. We have to deal with all the regular frustrations of game development, PLUS the frustrations of every other hat we wear, from marketing to customer support to systems administrator to manager to web designer to business guy and back to developer again.
So tonight I get an email from a customer (YAY! One can never have enough of those!) who has a question. Being an indie, I don't have a staff of people to answer those questions for me - it's all me. So I answer. I offer to help further if he needs it. This guy responds back with a thank you, and tells me that he thinks my game rocks.
Maybe he was just being nice because I had been helpful to him. He shelled out his hard-earned bucks to buy my game, though, so I certainly hope he was sincere. Either way, it made my day. I'm not sure which I felt better about - being able to help him out, or receiving the praise for my game. Either way, it reminded me why I do this.
I've had games that have received awards and glowing reviews. I've had games sell over a million copies (if only I was directly in on the royalty stream of those!). But there's nothing so awesome as meeting a stranger who tells you simply that they loved your game.
I love being a game developer.
Labels: Indie Evangelism
Dungeons and Dragons for Dummies
Oh, my.
http://www.amazon.com/exec/obidos/ASIN/0764584596/ref=sib_rdr_dp/104-5579935-2586310
It's a good thing Amazon exists. Can you imagine buying this book at your local Barnes and Noble? Would you want to be seen with this book? I mean, we D&D playing geeks are pretty low on the social-rank scale as it is - but to be seen with a book of this title would be like admitting that you are a wannabe who hasn't yet been able to cut the mustard to get to that level.
Ah, well. Despite all that, the book seems like a fairly cool introduction to the game. And hey - if it brings in more players, somehow, I'm all for it!
I "wasted" a bunch of time this weekend revamping the Rampant Games website. The biggest advantage for me was simply making it easier to add additional content in the form of games and articles. We've got a bunch of new things appearing on the website soon (the least of which have already been added, like a direct link to the Hackenslash page). The design isn't perfect, but I'm happier about it. Please let me know what you think!
Labels: Roleplaying Games
Viva La Resolution
And I ain't in it for the power,And I ain't in it for my healthI ain't in it for the glory of anything at allAnd I sure ain't in it for the wealth
--- Meatloaf, “Wasted Youth / Everything Louder than Everything Else”
A couple of nights ago I read George “The Fat Man” Sanger’s story behind the song “Viva La Resolution.” You can see it here:
http://www.oreillynet.com/pub/wlg/6949
It got me thinking a little bit. Part of the reason I decided to make my (semi-)graceful exit from the games industry in the first place was to get out of the world where creativity was constrained by bean counters, and where original titles were only considered after there were no franchises remaining worth a sequel. It turns out that doing games on the side, with very limited budgets and resources, is much harder than it sounds.
After a couple of years of puttering around, I finally got serious and created the game I really wanted to create. The trouble with “dream games” is that they may sparkle and shine on the showroom floor of your mind, but they don’t transition easily into reality, nor do they do it without significant changes and compromises – particularly on the very limited resources of a part-time indie development effort. I started without a plan and not much of a clue, without any amount of market research or serious thought to marketing or sales. It was a hobby that transitioned into a commercial venture halfway through development.
Just as the song says – I didn’t do it for the dollar bills. I’m quite proud of Void War, warts and all, and it’s every bit as fun in multiplayer that I hoped it would be. My biggest regret is I didn’t put enough into the game to facilitate matchmaking and allow people to play together more easily. But it was the game I wanted to make, and with a bit of help from friends I did it. The feeling of satisfaction of seeing it “done” was surpassed only by the satisfaction of seeing sales come in and realizing that the game was enjoyed by others enough for them to shell out their hard-earned dollars for it.
But I definitely want to do better. So now I’m a little bit older and wiser from the experience, and I find myself hanging out on discussion boards and reading books to get an education on things like conversion rates, customer retention, marketing strategies, contract negotiation, and all the other crap that never really had anything to do with the purity of MAKING GAMES. My current project isn’t any kind of long-term dream of mine, and I’ve made lots of changes and compromises in an effort to make it more accessible to potential customers. And so now I listen to Sanger’s song, and I wonder if I can rectify the love of making games with the realities of trying to run a business?
I heard a quote by John Mellencamp a few years ago about performing his older music in his live performances. He said that a lot of artists are resentful of having to perform their old hits, songs that they are quite sick of, when they have so much newer, better material they’d rather perform. But his attitude was that he is an entertainer – the audience pays their money for them to perform a service for them, and he’s happy to give them what they want.
I think that attitude reflects where I should be, mentally, as a game developer. Making money and expressing oneself, pushing the boundaries of game design… those are all cool fringe benefits that come from a job well done, but those aren’t my focus – nor should they be. But as weird as it sounds, I am starting to understand game development as a service industry. As a game developer, it’s my job to give something to my audience that they’ll enjoy and value. Call me idealistic, but I can’t imagine how success can’t follow from that.
So that’s MY resolution. Viva La Resolution!
Labels: Indie Evangelism
Video Card Woes
My wife's video card was failing - causing lots of shadowing and 'noise' on her new flat-screen monitor. She had a fairly old GForce MX card which she had been perfectly happy with (the only 3D game she plays now that we've kicked the EverQuest habit is Neverwinter Nights). So I did the hand-me-down thing: I gave her my machine's video card, and I did an upgrade on my own.
I went with the fairly budget-conscious choice of the PNY Verto 6200 card with 128 megs of VRAM. Unfortunately, the card was defective. 2D mode ran fine, but 3D causes lock-ups. Sometimes they were nearly instantaneous, sometimes they took a few minutes. The card tended to perform better when it was "cold" than after the machine had been on a few minutes, but I didn't think the card was overheating. I even tried to "under-clock" the card, but to no avail. It was in pretty sad shape.
I took it back to CompUSA today and traded it for a new card of the exact same model. I had some weird DirectX woes at first, until I "un-fixed" some of the fixes I'd made the previous night (OpenGL ran just fine). I was able to spend much of tonight "testing" the card to run it through it's paces. So far so good. Game development can now resume. But Neverwinter Nights, Battlefield: Vietnam, Unreal Tournament: 2004, Vampire the Masquerade: Bloodlines, Orbz, and City of Heroes are all running just fine, thank you very much.
Another interesting thing that happened was that I booted up the first early-adopter demo for the Torque Shader Engine. It worked on my GForce 4, but some of the effects just didn't seem that interesting. For example, I couldn't tell the difference between the per-pixel and per-vertex refraction. Ah-hah! Turns out there wasn't a difference on those earler shader-capable cards. The demo is quite different on the new card.
A day in the life of a game programmer
This weekend was pretty typical (i.e. frustrating) for game development. In case anyone is unfamiliar with the process (or feels like empathizing), here's how things go far too often.
I was whipping together a new special-effect type object with some rather unusual behavior. I had the basic design "in my head," and it was time to code it up. What happened was, unfortunately, pretty typical.
First, I created a prototype object in the modeler, wiring it up with animation nodes, and exporting it into Torque. I created a new class for this object - a derivative of ShapeBase. Fortunately I have LOTS of ShapeBase derivatives at this point, some with similar behavior, so there's a lot of cut & pasting I can do to speed things up. In all, creating the object and coding it up with simplified "stand-in" behavior takes all of a couple of hours. I'm almost done, right? How hard can it be?
* I spend almost an hour trying to find out why it's not appearing at all, only to realize I forgot to initialize the correct matrix.
* I found out I named the joints incorrectly in the modeler, so the dynamically generated animation behavior isn't working right.
* I make two changes at once (rarely a good idea) - both to make the code more generic instead of a special-case "demo" of behavior. Somehow, this breaks the whole object, and I have to roll back BOTH changes to get things back to where they were before, and re-implement the behaviors step-by-step.
* I break something else, which wasn't noticeable before because I was still testing a single-specific situation. Turns out it's a problem with the server and client being out-of-sync, and the client is missing crucial bits of data to display the model's animation correctly.
* Math still isn't working - I realize that the model is STILL modeled incorrectly, and needs to be re-done. Again.
* Math still isn't working. I realize there's a problem with MathUtils::getAnglesFromVector - it's not calculating the pitch correctly for my purposes. I replace that code, and test it to make sure it's right. I can now guarantee it's returning the correct Euler angles - but the math is STILL not working out correctly, and I'm getting some wonky visuals.
* I try to avoid the problem entirely by creating three entirely new functions to skin the cat a whole different way. None of them work, and I've wasted a good three hours fussing on them. (Note: They still may be used, because they allow new general-purpose effects... which was the whole point)
* I finally realize that the weird, wonky behavior is something I've dealt with MANY times in the past (so I should REALLY KNOW BETTER), and it's related to the non-commutative properties of matrix multiplication. I've been using the default matrix-creation routine for so long I forgot that it might not work for some situations. I fix that, and finally everything comes together and the code appears pretty solid. Not pretty and polished, but solid.
One of the jokes of managing software development is that you should take your estimates, and then double them. And then double them again. Then you won't be too far behind schedule. It's very true - I had everything "basically" working in two hours, but the whole project actually took around eight. And I haven't done any polishing yet.
But hey, polishing shouldn't take too long. Afte all, I'm almost there... how much time could it take? :)
Labels: programming
