Saturday, December 31, 2005

Damn Kids and their CS Degrees!

Joel on Software had a nifty lil' article I dug recently. He kinda echoes my sentiments on the current crop of programmers coming out of colleges nowadays: they're more vocational than educational. Wow. That was catchy. I just thought that up!

To any point, the issue at hand is that pragmatism has seeped into colleges that keep wanting more money to give to football players. When I was completing my undergraduate degrees, a few courses were starting to teach data structures using Java instead of C++. The idea behind their reasoning is that they would have to spend less time fighting memory leaks, more time learning a language actually used in the industry and more focus on the algorithms at hand (since data structures are language-agnostic). It seems sensible to me to teach some data structure courses in Java... that way you can spend more time figuring out why a binary search tree is more efficient than a linked list.

But back in my day, we started CS 101 with freakin' Scheme. That's right. That's right. And it blew everyone's freakin' minds. Recursion vs. iteration was something that was absolutely essential to our budding brains. List manipulation was needed for us to learn how to manage memory later. And once we learned the essence of all the basic CS algorithms, we didn't need to really learn a language, we just needed to understand syntactically how a language was comprised.

Now that I actually have a "job" managing enterprise software, I'm finding that software in the corporate world doesn't need to be fast. It doesn't even need to be that correct, ultimately. It just needs to be easily mantainable. That's what the crux of enterprise software is - maintainability; so when you quit and move on the next dufus who sits in your chair can easily pick up where you left off.

And hence why all the knowledge I gained in four years is quickly evaporating from my head...

Monday, December 26, 2005

Path of Whassit?

Just got Path of Neo and tried it out... yes, it's shameless merchandising. But it's fun.

It was actually ticking me off big time for the past hour... I thought this was going to be a Matrix-like twist on the third-person action genre (akin to Oni). Going into that sort of mindset the game was absolutely terrible. Controls were inconsistent, camera controls were way more than wonky, and character animation/generation was borderline awful. I think character meshes were... what... six polys?

But then it hit me. This isn't an action game. The weird play controls... the cinematics... the generic "action" button used for every damn thing... it's a freakin' adventure game.

The thought of a Matrix adventure game simply cracked me up. First off, it's been a stalling genre since Lucas Arts' release of Full Throttle or Sam & Max. To suggest that Shiny Entertainment was using the genre for a Matrix title makes a helluva lot of sense... it's just... weird in this day and age.

By the way, thanks to Bob and Chris for their feedback this week. I didn't realize people actually read this drivel ;)

Saturday, December 17, 2005

Character Generation in Blender

I just posted three new tutorials: Building Textures with GIMP which focuses on how to build textures out of repeatable patterns - perfect for texture mapping; Building a Low-Poly Character Mesh in Blender which focuses on creating a character mesh using as few polygons as possible, and Texture Mapping Character Meshes in Blender which ties the first two together.

I also found an interesting tutorial on using diffuse maps, normal mapping, height maps, specular maps to utilize CrystalSpace's parallax and specular shaders. Something I've wanted to research for a while now... I'm way behind the times when it comes to shaders. WAAAAAAAAAAY behind. Looking at what Bethesda Softworks can do in Oblivion with parallax, diffuse, specular and normal maps combined into each texture blows the mind.

The shader 3.0 spec was easy to follow... vertex processing -> primitive processing -> pixel processing. But throw in volume shaders or subsurface scattering and it starts to become more shader levels than my little brain can handle. I hardly have time to build a low poly character mesh - how the hell am I going to model its vascular system?

Sunday, November 27, 2005

Burning Transistors

All at once, my ol' Socket A machine decided to go dark. Afterwards it could no longer boot. The mobo could POST, but the CPU never quite woke up. Although a new layer of thermal paste and reseating the heatsink might have fixed it... I wasn't able to get it to awaken.

I decided to gut the machine and go with all new gear. Gone was the ATA/166, in was the SATA WD Caviar. Gone was the GeForce 5950, in was the GeForce 7800GSX. Out was the AthlonXP 1700+ (oc'd to 2133 MHz), in was the 2GHz AMD 64. Gone was single-channel PC2700, in was dual-channel PC4000. Out with the 380W PSU, in with a modular 500W PSU.

The case and the DVD/CD drives remained, but the rest was gutted. Since I've had some fun flexing my new vertex-processing muscle. I've been able to add window transparency and drop shadowing to my WinXP and SuSE 10 desktop, thanks to the NVidia drivers, XOrg's composite extensions and KDE. I never realized how nice those lil' add-ons could be, but its quite handy.

I was also able to try out the latest NVidia tech demos, showing all the luster of real-time sub-surface scattering, volume shaders and high dynamic-range lighting. I never realized how nice volume shaders could really be - it's something I need to look into closer. This is especially nice for the low-poly meshes I make... something decidedly low-poly could look very high-poly with the right shader. Add vertex shaders for hair & fuzz, then pixel shaders for lighting and reflection and it's a great combo.

I also tried out Valve's "Lost Coast" demo, showing HDR and the glossyness of their rocks and textures. It was a fantastic demo - and definitely made a solid case for HDR.

Exploring the native 64-bit land of SuSE 10 is interesting. Now I have things actually compiled and optimized for my platform... the closest I was able to get before was a x586 package for SuSE. But with a native 64-bit OS, things are going well. The only problem I've had so far have been interfacing with the old 32-bit Macromedia Flash plugin - I had to install 32-bit browser libraries to interface with it. Other than that, however, things have been great.

Of course, rebuilding a machine, prepping for Thanksgiving and Christmas, finishing the end-of-year strong at work, wrapping up some rather large projects and taking about fifteen days of vacation in December is taking a rather large bite of time out of finishing these Crystal Space & Blender tutorials I'm still writing. Hopefully we'll see a rough draft soon.

Sunday, November 13, 2005


I'm trying not to give up.

It's amazing to me how living corporate life will suck the soul straight out of you. It used to be "us versus them," where "they" were the corporate suits that governed everyone from afar. Now "they" are simply everyone else... people who learned to survive the tough times when the tech bubble burst by being cutthroat and ruthless, then never going back.

I'm tired.

My computer just died... I think the proc overheated and finally went frizzle. I've been working on tutorials for Blender and CrystalSpace, focusing this time on creating a human mesh from reference images, vertex modeling, texture mapping, rigging and finally exporting. I have finished examples for all stages and just started writing the texture mapping chapter when the whole machine went dead. It POST's to BIOS, but after that no dice. So I'm shopping on now. I'm cringing 'cause I can't afford any of this crap... so maybe I'll just live with a 2' brick on my floor.

So... right now, if this were a Shakespearean drama we'd be in the "rising action" section. Bear in mind, this is from my own self-centered, egotistical perspective. But who knows what happens.

Sunday, July 24, 2005

Abandon All Hope Ye Who Enter Here

Too tired...
All projects abandoned...
Now managing a development team...
No time to code anymore...
Skills slipping away into oblivion...

Thursday, July 14, 2005

Voice Dial VCF

I've been working with Samsung's i500 distribution of PalmOS 4.1 for a lil' while now. It's interesting coming from a PocketPC background (I've had a CE PDA since the original Casseopia, yo)... I expected PalmOS to be the more stable OS. I've already had around ten reboots coming from I/O lockups, power issues or just random occurances. It may just be the hooks that Samsung's apps have in the OS to merge the CDMA phone with the PDA hardware... I dunno.

Once nice thing is that PalmOS apps are infinitely easier to troubleshoot or reengineer. This is no doubt why things work so nicely in Linux (other than trying to get the USB tty interface working... serial I/O over USB? Wha?).

For example, I've been using the "Voice Dial" app that Samsung wrote to dial numbers using my headset. It's something you manually have to train, then it associates a record with an entry in your address book. Problem was, after my device sync'd all the voice dial associations were gone.

So I looked at the AddressDB file that the i500 had and noticed that each record had a unique ID associated with it. I took a guess that the Voice Dial app used that key to associate a voice dial entry with an AddressDB key. Looking at the actual .vcf file that was being sync'd from PalmOS onto my desktop I found there was indeed a field called X-KPILOT-RecordID: that was storing the record's unique ID.

I added a lil' sed routine to my evolution-to-KDE export script that adds the field to the appropriate VCF contact records. Now that my contacts have the X-KPILOT-RecordID field the voice dial stuff stays in sync.

Wednesday, July 06, 2005

Entropy and Chaos

Entropy, uncertainty won't yield to you...

NeroVision Express has been aligning pixels weird in 3-5 vertical rows on the right side of my encoded MPEG2's. I haven't really noticed 'till now, but all of my 16:9 DV video is consistantly encoded with those weird aberrations. I took my occasion of feeling unsettled to try the latest version of Kino/ffmpeg/MJPEG/SuSE 9.3. I did a head-to-head comparison encoding the same AVI Type 2 DVI file with all the new stuff from SuSE, PackMan and Guru's RPM Site.

Tests were done using the default settings for a 16:9 NTSC DVD. Note that MJPEG still looks awful and blocksizes are way too big. NeroVision's encoder almost looks okay, but motion lines are rendered all over the place. ffmpeg looks good however - lines are even, things aren't harshly blocked. Bear in mind, however, that MJPEG in Kino is a single-pass encoding, while ffmpeg is a dual-pass encoding. I'm sure this is a big reason for the difference.

ffmpeg is looking much better, but I'll probably stick to NeroVision for now. Kino only processes ffmpeg files one at a time (as opposed to its MJPEG batch conversion), so doing an entire batch of AVI's has to be done manually, typing individual file names and selecting individual frame sets. I could possible write a shellscript to do what Kino does, but Kino an internal (and very nice) YUV generator which pipes output directly to ffmpeg, as opposed to creating the YUV and then processing it. For example, here's the first pass of the encoder:
ffmpeg -v 0 -f dv -i pipe: -f rawvideo -pix_fmt yuv420p pipe: -vn -f ac3 -ac 2 -ab 192 -ar 48000 -y /home/jellis/Documents/March 2005/2005.03.27_13-17-44.ac3
ffmpeg -v 0 -f rawvideo -pix_fmt yuv420p -s ntsc -r ntsc -i pipe: -an -target dvd -f mpeg1video -maxrate 8000 -ildct -ilme -aspect 16:9 -pass 1 -passlogfile /home/jellis/Documents/March 2005/2005.03.27_13-17-44 -y /home/jellis/Documents/March 2005/2005.03.27_13-17-44.m2v

And the second pass:
ffmpeg -v 0 -f dv -i pipe: -an -f rawvideo -pix_fmt yuv420p pipe:
ffmpeg -v 0 -f rawvideo -pix_fmt yuv420p -s ntsc -r ntsc -i pipe: -an -target dvd -f mpeg1video -maxrate 8000 -ildct -ilme -aspect 16:9 -pass 2 -passlogfile /home/jellis/Documents/March 2005/2005.03.27_13-17-44 -y /home/jellis/Documents/March 2005/2005.03.27_13-17-44.m2v

Then it seems to multiplex using:
mplex -f 8 -o /home/jellis/Documents/March 2005/2005.03.27_13-17-44.vob /home/jellis/Documents/March 2005/2005.03.27_13-17-44.m2v /home/jellis/Documents/March 2005/2005.03.27_13-17-44.ac3

Both using internal deinterlacing (I'm guessing from the 420 progressive format it selects). Kino does this pretty well, and I might have problems trying to hack it on my own. Notice that it pipes both audio and video streams in seperately... so the source format is kind of a black box to me.

NeroVision, however, works fairly well right out of the box and will batch everything together for me automagically. I want seperate VOB's for each chunk of video sometimes, and others I want to splice them together. But most of my video should have its own VOB... something I can't very easily define in any DVD authoring or video authoring software currently available in Linux.

I'll give a quick pass at demux'ing the Type 2 AVI's and creating raw source audio/video files... I'll let you know if I figure anything out. I might just try piping
dvgrab --format raw --frames 0 --size 0 -
to stdout and see how that works. dvgrab is part of the Kino project, so I'm hoping it'll be just as nice.

This latest round of entropy has killed any productivity I once had. It's frustruating, especially when I wanted to have the isometric camera for CEL done by now.

Sunday, July 03, 2005

Rise of the Casual Gamer

My wife and I are using the same PDA platform now, so I beamed her a demo copy of Bejeweled. Just as I thought - she became instantly addicted.

There's a common stereotype in the gaming community that puzzle games are the only genre that can target female gamers. But men seem to be increasingly into puzzle games - especially as they've been ported onto cell phones and distributed with PDA's. To me at least it seems that saying "women are only into puzzle games" was ignoring what the actual market was: the casual gamer.

Casual gaming has been a big topic as of late on Slashdot Games. Those kiddies addicted to Nintendo 8-bit systems in elementary schools are now parents working 50 hour work weeks and coaching soccer teams, so they don't have time to become an uber-leveled avatar in an MMORPG.

The BBC had an article about women becoming an emerging market in gaming where it sounds like the industry just isn't getting that point. Ernest Adams of the IGDA even said:
Women don't have free time even to set up a game. They require a game that is quick to get into and doesn't require a great time commitment,

No, that's anyone who just doesn't have the time. The article also states:
The so-called casual gaming market, made up of games such as poker, pool, bridge, bingo and puzzles, is a booming one, especially among women.

It seems like Guild Wars gets this point - where you don't have to be an addict to justify subscription costs and it doesn't take 30+ hours a week to ascend to playable experience levels. As target audiences get older and time becomes more precious, people will find out that the "casual gaming audience" is much bigger than they thought - and not just limited to a stereotypical view of women.

Saturday, July 02, 2005

Chaos Ensues

Considering I just rendered useless my PDA and my cell phone and my USB key recently, I swapped them out with a Samsung i500. Works great, aside from the LOUD, EAR PIERCING SCREECHES THAT EMANATE FROM IT WHENEVER IT RINGS. That's slightly annoying. Hopefully Fry's will do a quick exchange and I'll have my carrier switch my account... again.

One big problem was figuring out what @#$&*! tty to use. There are several USB tty's in SuSE's /dev system... /dev/ttyUSB, /dev/usb/ttyUSB, etc. Finally figured out that /dev/usb/ttyUSB1 was the one I wanted for cradle sync's. I hacked with syncing via IrDA for a while - the kernel module kept returning I/O errors until I realized how stupid I was and the Ir port was disabled in my laptop's BIOS. D'oh. Enabled that and /dev/ircomm0 worked great, albeit sloooooow.

It sync's with Linux nicely, however. The lovely people and Ximian made the good move with storing their calendar information for both Exchange (cached) and locally to use ICS file formats, so I can easily concatenate Exchange and local to-do lists and calendar items into a single file. Very nice! There's a very nice command-line exporter for the address book - I have it converting both local and Exchange contacts into a combined VCF file, which worked nicely. Now KPilot just syncs a simple .ics and .vcf file with minimal fuss.

For example, to move all my files together for sync'ing all I need to do is:

# Export contacts from local store
$EVOLUTION_BIN/evolution-addressbook-export file://$EVOLUTION_DIR/addressbook/local/system > $KABC_FILE
$EVOLUTION_BIN/evolution-addressbook-export exchange://$EXCHANGE_USER/personal/Contacts >> $KABC_FILE

# Move over tasks from Exchange cache & local store
cat $EVOLUTION_DIR/exchange/$EXCHANGE_USER/personal/subfolders/Tasks/cache.ics > $KORGANIZER_FILE
cat $EVOLUTION_DIR/tasks/local/system/tasks.ics >> $KORGANIZER_FILE

# Move over calendar from Exchange cache & local store
cat $EVOLUTION_DIR/exchange/$EXCHANGE_USER/personal/subfolders/Calendar/cache.ics >> $KORGANIZER_FILE
cat $EVOLUTION_DIR/calendar/local/system/calendar.ics >> $KORGANIZER_FILE

So... I've got a defective i500. But at least I had it as a proof of concept.

The nice thing is now I have a cell phone that I can develop on. Mebbe I should use PalmOS for game development instead of the freakin' J2ME stuff I couldn't even deploy. I wonder how big PalmOS' market share is... including both PDA and smartphone sales. According to, it sits at 40.7% including cellular PDA's such the BlackBerry, but not smartphones or Handsprings. Windows is gaining at 40.2% while PalmOS is declining, but it's still a much more level playing field than I expected.

Thursday, June 23, 2005

Big is the new Small

It's been interesting to see how technologies have been shifting from the very small (i.e. pixel & vertex shaders, dynamic lighting, self-shadowed models, etc.) to the very large (mapping entire worlds out, streaming cities and levels, building accurate terrain maps).

The CrystalSpace mailing list has been having an interesting discussion on the topic of how to create very large maps. This is of course a big concern for MMORPG's and RPG's, but it has become of increasing concern for anyone who wants vast, open-ended maps.

It's not quite as simple as it might seem. Not only do you have to worry about terrain maps seamlessly being stitched together, but you also have to worry about where you do your clipping, if you still use portals to decide what gets rendered and what doesn't, if you have entities and items still loaded without an actual mesh to sit in, if you'll use LOD (dynamic level of detail) to manage rendering far-away objects, how you'll quickly determine what sectors can be rendered, how to best stream data to the engine, blah de blah de blah.

I recall the same thing happening with shadows - except the emphasis was on polishing the small details. Here bumpmapping and shaders really came to be - new hardware conventions that allowed a greater level of detail than before. Now that we've figured out how to have eerily realistic lighting, shadows and mapping for the many details on today's high-poly models. Are we going to have to perform a similar re-invention for the very large as well?

It looks like the new Unreal 3 engine is. For example:

Artists can build terrain using a dynamically-deformable base height map extended by multiple layers of smoothly-blended materials including displacement maps, normal maps and arbitrarily complex materials, dynamic LOD-based tessellation, and vegetation layers with procedurally-placed meshes. Further, the terrain system supports artist-controlled layers of procedural weathering, for example, grass and vegetation on the flat areas of terrain, rock on high slopes, and snow at the peaks.

Neat stuff. Now artists can easily build large maps that have realistic environmental details - without having to model every nook and cranny by hand. Here the engine dynamically builds the "repetitive" stuff for you - so you can work more on layout than on building one hundred shrubs in the landscape. The UT3 engine still makes individual models look beautiful, just like everyone else's engine right now. But they're also spending the effort on making the BIG level models look just as immersive - without a million-person team of artists.

Patenting the E.U. and the U.S.

In 10 years' time we will only have half the small and medium sized companies that we have now,
- Evelin Lichtenberger on the European Parliment's bill on software patents

Stallman also made some excellent points on the EU's push towards software patents. One important point he made was that politicians are confusing patents with copyrights, which are two entirely different concepts. Again, this goes back to the distinctions made between "opening" creative content versus opening code.

The U.S. is also working on patent reforms that will push small business out and allow large businesses to eat them. The U.S. Patent Reform Act of 2005 is something I'm still trying to digest. While it seems like it might abate "submarine patents" that lie dormant until approval only to spring up as a reason for the owner to start suing for patent infringement, it might offer more problems for those who can't afford to pursue or defend their patents. From the article:

The issue is this: do the big players need more help? If it's harder to sue for patent infringement, and it's easier for big businesses to file for patents than it is for capital-starved little guys, is it fair to the little guy? For example, I can imagine the following scenario: I invent something and write a scholarly paper about it. I can't afford to patent it or it takes me a while to find a lawyer I can afford. So Microsoft reads my paper, runs to the Patent Office, patents what I wrote about, and then sues me for infringement of their patent. I haven't analyzed the bill enough to know if there is a way to block this scenario, but it's something to look for. You don't want the fix to be worse than the problem you are addressing.

One downside to the U.S. revisisions is the first-to-file provision pretty much kicks the little guy in the shorts. However, given how much patenting people do for existing processes/concepts, the post-grant submission of prior art by third parties is welcome.

Sunday, June 12, 2005

So... tired...

Can someone hold down a full time job and try to publish a title that's worth a crap? I don't know.

I got a somewhat lateral promotion at work recently, so I'm spending more time on work projects. I'm too tired at the end of the day anymore to do fruitful coding. So what's left?

I got some Starbucks DoubleShots in the fridge downstairs... mebbe I'll give them a try.

Installing SuSE 9.3 on my development box... wheee...

Thursday, June 02, 2005

Why Even Bother

With patents like this one, it's no wonder that the innovation, small businesses and independant game shops are dying out. No, it's not because of market conditions. No, it's not because the cost of development is too steep. It's because huge companies get to patent vague notions such as "keeping score in a game." The Patent Office obviously doesn't care about what's a valid patent anymore - they get paid if your patent is later litigated & revoked or not. Basically all the USPTO does is take gobs of money from large companies, stamp their patent form, file it away, then call it a day around 10 AM.

Since no one is reviewing patents before approving them anymore, it's up to challenges & lawsuits to decide if a patent is valid or not. And who has the money to challenge patents? You guessed it... big corporations! So the only way to be able to use a vague notion of a non-unique concept patented by a USPTO that just doesn't give a damn is to be another big company and be willing to fight it out in a court battle.

So... let's see... we kill off every small business, which employs the majority of the workforce, then scratch our butts and wonder why unemployment figures are so high. Here's the reason... small companies don't make sizable political contributions to lawmakers. So why do they give two craps about small business? They have a job, a quite comfortable one, thank you. Why would they waste their effort helping the thousands of companies that won't give any money back, when they could be catering to bigger interests that continually pull trucks of money to their back door?

You want employment? You want innovation? You want capitalism to work? Get rid of stupid patents. Make the USPTO work for a living. Kick out congressmen who would rather enjoy a nice, sizzly steak than think twice about Joe Sixpack.

Gamasutra wrote a pro-patent article, saying:

Patents, by their very nature, grant the right to exclude your competitors from stealing the fruits of your labor, and yet this powerful tool appears to be overlooked by the majority of the industry. In an effort to answer this question, we set out below to dispel what we see as the top myths surrounding patent protection of video games, and hope to encourage innovative game developers to take steps to protect their valuable innovations.

What the hell? Tell you what, let's replace the word "patent" with the words "machine gun" and see if it sounds any more convincing.

Machine guns, by their very nature, grant the right to exclude your competitors from stealing the fruits of your labor, and yet this powerful tool appears to be overlooked by the majority of the industry. In an effort to answer this question, we set out below to dispel what we see as the top myths surrounding machine gun protection of video games, and hope to encourage innovative game developers to take steps to protect their valuable innovations.

Same general gist. If dem der people try ter steel yer propertie, giv 'em a quik shot in the arse. Hell, it's my right to own a machine gun patent. Another quote from the Gamasutra article:

A classic argument among those who feel that the entire patent system should be abolished. You might want to make that argument to your representative in Congress, because unless the Constitution is amended to do away with patents, they're here to stay. In drafting the Constitution, our founding fathers recognized that the best way to promote progress in the "useful arts" was to reward inventors who come forward and share their inventions with the public by granting them a limited period of exclusivity in which they can exploit the fruits of their labor. In other words, discouraging slavish copying encourages innovation.

Wrong. This isn't what the founding fathers were talking about.

He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me. That ideas should freely spread from one to another over the globe, for the moral and mutual instruction of man, and improvement of his condition, seems to have been peculiarly and benevolently designed by nature, when she made them, like fire, expansible over all space, without lessening their density in any point, and like the air in which we breathe, move, and have our physical being, incapable of confinement or exclusive appropriation. Inventions then cannot, in nature, be a subject of property. Society may give an exclusive right to the profits arising from them, as an encouragement to men to pursue ideas which may produce utility, but this may or may not be done, according to the will and convenience of the society, without claim or complaint from any body.
- Thomas Jefferson, letter to Isaac McPherson, 1813

We haven't evolved as a society by making ourselves grandiose versions of the Hatfield's and the McCoy's. We have grown by accepting and integrating a free exchange of ideas, concepts and principles that make us stronger. Firing warning shots at people close to your property and building a row of razor wire will only ensure that you become nothing but inbred and ignorant.

Tuesday, May 31, 2005

No Such Thing As a Free Beer

There's a weird, somewhat transient sense of "ethics" that comes with using Free Software. Free Software licenses, such as the GPL, do a terrific job at enforcing that the spirit of "liberated" software is that it remains free. Not free as in no cost, mind you, but free as in publicly available to all.

Some people struggle to understand what this means. The common phrase you'll often hear to illustrate the concept is that the software is "'free' as in 'free speech,' not as in 'free beer.'" The weird thing is that this is a freedom granted to the user, not to the owner, of the software. In a world where the owners are often given the most protection possible, this seems like an anathema of capitalism. Hence the term "copyleft" when talking about Free Software - it inverts the protection often offered by copyright licenses.

Even more people struggle to understand why the hell someone would release their hard work under a copyleft philosophy. From the experience I have, Free Software works well since in the end we're all consumers. We don't live in our own lil' self-sustained software ecosystem - we all depend on one another to get crap done. If we all build off of each other's work, if we all yield to the rights of the consumer, then eventually reap the benifits ourselves. You may be the owner of one piece software, but you're the consumer of a hundred other pieces. If everyone is protected as a consumer, and everyone is a consumer, transitively everyone wins.

But, just like every well-meaning philosophy, there are a group of wieners and dofuses that run afoul. You can't change that. On average, 80% of all people are idiots (dictated by my own "Chuckles' Theorem of Democracy"). So how do you protect your original utopian concepts? By making it legally binding and giving very specific terms of usage. That way at the very, very least you get someone who absolutely has to abide by the minimal terms set forth in your license and can't bring down the whole deck of cards.

Case in point. Sveasoft, which builds a Linux distribution for the infamous Linksys WRT54G(S), made everyone happy by creating an alternate firmware release based off of Linksys' GPL'ed codebase. Once everyone was happy, they started charging people $20 for using their support forums. Then they only started to release new firmware in the support forum. Then they started revoking people's subscriptions if they re-distributed the firmware (which they were allowed to do by the GPL, but by the same merit Sveasoft reserved the right to kick whomever they wanted out). Then they allegedly started threatening people who were offering the firmware releases to the public. Then they started charging for their next-generation of firmware releases, and required them to be activiated for a particular unit.

Technically, as long as they freely release the source code along with their binary releases they are still in line with the GPL. But people started to major league get ticked by the shift in protecting the user (so they could use or study the firmware for whatever purpose) to protecting the owner (who was trying to make money off his work). The point of reconcilliation here was that the GPL allowed redistribution and required source code disclosure of the firmware - but this was discouraged by kicking people off the forums. People felt shafted since their protection as consumers was no longer as strong as they had hoped.

But then look to projects such as CrystalSpace. Here's a team of developers that bust their respective butts to make sure people can easily use the framework, learn about real-time graphics rendering and develop their own apps. They've asked for donations, but mainly so they can replace their old, crusty workstations that were built using stone tablets and hamsters spinning inside wheels. Every piece of code, every scrap of documentation, every sample app is freely released. And the maintainers (very patiently, I might add) answer questions and help to develop the community. People regularly flock to CrystalSpace because they get to be in control over whatever the hell they want to do with it.

But where's the line in between? Think about Hibernate and Struts, two open source software projects that are widely used as frameworks for web applications. Yet the majority of the applications that take advantage of these LGPL'ed projects remain closed source, some available commercially. This is completely legit since the LGPL doesn't place restrictions on software that just refers to or makes library calls to LGPL projects. LGPL hasn't be violated. People don't raise a stink, so I'm taking it that they don't feel their user rights are violated. Maybe since Struts and Hibernate is mainly used to develop enterprise software people don't care nearly as much. After all, enterprises are still catching on to the whole "free software" concept, while individuals have been embracing it for decades. Maybe there are no consumers that feel burdened by closed enterprise software.

PlaneShift is another interesting example. Here's something that individuals would fight for their rights for - an MMORPG based on CrystalSpace. I actually did development for them briefly... they have an interesting stance of keeping their code open but their creative work (maps, character models, textures, story) closed. They have sizeable code contributions they give back to CrystalSpace, and their work has helped evolve a lot of the CS/CEL framework. The artwork, however, could be the commodity that could drive sponsorship/sales/membership. Again, people don't seem to balk at that... code is code, artistic content, however, is unique. In fact, this seems to be a point that Richard Stallman has made during a Slashdot interview and, related by Rusty, during a stump speech at The Bazaar in '99.

Or is it? Rusty claims that "programing may be an art but isn't Art" [emphasis his]. What about a unique and distinct AI algorithm that makes an NPC so weird but loveable? Or a procedural texture that renders so beautifully? Or an algorithm that spawns a forest of fractal trees? Or the events fed into a quest manager that drives the storyline? How about a visualization plugin to XMMS or Winamp?

It seems to me there's a more distinct difference between "unique" code and "core" code, and that's where the line should be drawn. "Core" code is that codebase that can be reused over and over by any number of projects. Hibernate, for example, can be reused for any number of purposes by a huge number of potential developers. The artwork for player characters within PlaneShift, however, can be a unique feature of PlaneShift itself. The AI algorithm that creates a dramatic character is a unique feature of a particular game, and perhaps can't be reused somewhere else. That which makes your application distinct and personal can be closed and distributed as "artwork," that which is global and reusable can be opened up for all to see. Some applications don't want to have distinctive or one-time-use features - they want to be as reuseable and functional as possible. Some applications want to be extremely unique - a visualization plugin for XMMS wants to be as different and distinctive as possible.

The difference is also in how much collaboration can be done. In art you're usually taking the thoughts, emotions and impressions of the artist and trying to portray them on whatever medium that artist is most expressive with. It could be film, canvas, clay or C++. Free Software seems to be, at its very heart, about collaboration. Everyone has equal access to code, and must submit its contributions back to the community. This collaborative process makes the software stronger and more refined. But it's hard to have that same collaborative effort with art... when someone inserts their impressions into the medium, it may change the voice of the original work entirely.

Maybe art is that which becomes something entirely different of something is added or taken away. Take away one word in Tom Sawyer, for example, and it ceases to truly be Tom Sawyer. Add some nips and tucks to ConsultComm, however, and it remains ConsultComm. Perhaps the standard is that art must stay intact to preserve its meaning and its impact.

Monday, May 30, 2005

I Hate That Cliché!

Always poignant, sometimes pungent David Wong recently posted an article about the "20 things gamers want from the seventh generation of game consoles." Aside from his very true observations about crates, stale genres and straight-out lying about in-game graphics, he also mentioned a few design items I thought were dead-on:

  • Doors aren't indestructible. Big wooden doors can be obliterated by a rocket launcher. A padlock won't help.

  • Games shouldn't have load times. It's true - now that I have next to no free time, I don't want to waste it trying to find the CD, then loading, then waiting for the distributor's movie to roll, then the producer's movie to roll, then the studio's movie to roll, then the intro cinematic to roll so I can go to the menu, load the last savegame, wait for the level to load, then get into actual gameplay. I'm already bored by the time I see any action.

  • Women are a HUUUUUUUUUUUGE audience that's being overlooked by nearly every single major release. Go to sometime and look around. Not only do they have better observations on the market than most sites (they were the first to actually convince me that Ageia's Physics Processing Unit might actually be worthwhile), but they also make excellent points about how game studios have absolutely no clue how to relate to the female gender. If any other business was so stupid, they'd be laughed off the planet. The gaming industry, however, is content to lose 50% of their audience because they never got past having gum spit at them by girls in high school.

    I'm hoping that by actually listening to the dissent out there... most of which I can really agree with... I can avoid some of the same design pitfalls.
  • Ah... Working at Home

    I took this three day weekend to do some extended hacking on my current project. I'm forcing myself to use CEL instead of CrystalSpace now, which means I just recently ditched my working engine with an isometric camera angle to use CEL's simple camera that follows the character everywhere.

    I'm working on getting an isometric viewpoint working, but it looks like its going to take more code. Still, if this means that saving/loading/collision detection/managing meshes is going to be easier, the longer ramp-up time should be worth it.

    It's so nice to hack in my peaceful abode. My better half has been wonderfully supportive in letting me hack away at my new pet project. And now I can blog when thoughts pop into my head instead of waiting until after work. I should take some vacation time to continue hacking next week. Ahh... so nice...

    I've been re-reading C++ Primer, Fourth Edition, trying to force my brain to switch from Java mode to C++ mode. It's amazing how much I've forgotten about pointer arithmetic and inline directives. It's a good book, albeit very anti-C.

    Tuesday, May 24, 2005

    Music Fills the Air... and Dead Air

    Some of you may have seen Eytan's comments to a post a while back. Actually, no one saw them because only two or three people know of this blog's existence. Anywho...

    Two of Eytan's original performances can now be had here at this very blog. Check out Carolina Shout and the transcendent That Mesmerizing Mendelssohn Tune. Ever since he e-mailed them to me I've been tapping my feet and dancing in my chair. One day I hope to listen to them.

    On the topic of gaming, it appears that GamingFM is down for the count. Up to you to decide if its for good or not. It's a bad sign, tho, when the streams go completely dead for two weeks and the server admins haven't updated the site in just as long. No word from the GamingFM crew what's going on - which probably means they're gone for good. Sad, really.

    Friday, May 20, 2005

    Isometric Engines

    I've halted work (for right now) with the texture mapping tutorial. My brother and long time encourager of my level building skills had a good game idea - so I'm going to try and flesh it out. If he can do the art entities (I'm hoping he can get up to speed with Blender and do some mesh work) then I think we can definitely do something. I'm working on building an isometric engine using CEL and CrystalSpace... something that CEL seems to do exceedingly well. It's basically just a fixed camera angle within the standard engine - your level design just has to adjust accordingly.

    Once again I forgot my sketchbook, which I'm going to have to carry around if I'm going to remember all these design ideas.

    Now the fun with building a dev environment.... w00t... just upgraded to SuSE 9.3, and the freakin' ATI drivers keep uninstalling my symlink. So I have to keep reinstalling the xorg-x11-mesa drivers.

    Wednesday, May 11, 2005

    I'm not dead yet!

    Springtime illnesses. Ugh. I live in a petri dish. Well... more like a cattle ranch.

    Anywho, it's tough recovery but I think I'm ready to start working on an isometric implementation of CrystalSpace. That'll be fun.

    Freshly stuffed with chicken wings. Let's code!

    Saturday, April 30, 2005


    I'd like to make a special announcement. As of yesterday, I burned all my home movies onto DVD, took the DVD filesystem and copied it to the fileserver, then stowed away the actual media in my backup archives. The raw AVI Type 2 feeds were deleted and replaced with the MPEG2 VOB's.

    The home movie transcoding project is now marked as complete.

    Damn. That was not easy. But I must say, I learned a lot about how to produce DVD-Video. Most noteably:

  • Windows (XP Pro at least) absolutely sucks at pulling frames from a DV interface. Absolutely and completely. Linux didn't drop a single frame unless memory was being taxed for some other process. So ripping raw DV as AVI Type 2 was only really feasible on SuSE.

  • Linux (currently) absolutely blows at transcoding DV into MPEG2. The software is there... the fool-proof tools aren't. For some reason MJPEG consistantly produced absolute rubbish MPEG2 streams, and ffmepg would work spectacularly aside from random garbage, bad timestamps and codec errors every so often. But having just one error every so often ruins an entire DVD, so it was nixed. And while I'm a so/so fan of Nero tools, Nero Express 3 on WinXP Pro transcoded the video and built the DVD filesystems (including some really spiffy menu screens) beautifully. Linux has a way to go with DVD authoring, Nero has it now.

  • Apple makes the best DVD media. But it would be cheaper for me to buy an entire publishing studio than to buy a 20-pack spindle. I used Sony's instead. TDK was the only dual-layer media I could find at the time.

  • NVidia's NVDVD is actually a neat lil' tool - one I'd rate as the best media player on the market right now. Fast (in rendering, not loading) and unobtrusive, I'm using it for everything now. In Linux, there's half a dozen media players that are fantastic. Take your pick.

    Alas... I'm done. So happy. Now, once I heal from being sick for the past two weeks, I can get back to finishing SystemInfo. Then work on my CrystalSpace stuff. Ugh.
  • Monday, April 18, 2005

    I Hate Walking

    I've been trying to pick back up with Morrowind and Thief: Deadly Shadows recently. You know what they're big on? Walking.

    Somewhere down the line the "RPG avatar" became the "video game powerwalker." It's like someone watched Final Fantasy being played and said "Hey! You know what defines this series? You need to walk places! Walk, walk, walk. That's a funny word, isn't it? W-a-l-k. Walky walky walky."

    So you just scored some big loot. In the original Thief series, they just gave you cash right up front. They trusted you'd find a fence somewhere to sell your diamond-encrusted full plate of armor. But now... nooooooo... they've incorporated "RPG elements," which means you need to go walk from town to town (and level loading screen to level loading screen), finding places that buy furniture, antiques, plate armor, handicrafts, birch bark canoes, etc. Because I don't already have to wander enough from place to place running errands in real life.

    I don't mind walking around and enjoying the scenery. In fact, 90% of my time in Morrowind is spent enjoying the scenery. But this is supposed to be an escape from reality. Not an attempt to run chores on an ethereal plane.

    Thursday, April 14, 2005

    Healin' Feelin'

    I had no better title that came to mind. Sorry.

    Wow. Bad chicken in the pasta. Severe gastric pain for two days. Ick. Kids, don't try that at home. Adults either. Ow.

    Ummm... so... I must now confess. My train of thought has so completely derailed that recently I bought a breadboard, logic circuits, a zener diode, resistors and a lil' booklet to learn how to build circuit... stuff... I DON'T KNOW IT SEEMED LIKE A GOOD IDEA AT THE TIME.

    Coder's block. See, my thought patterns don't just work like a deck of cards... they are a deck of cards. That is, if I don't have a full deck stacked, it just doesn't work. Kinda like... riiiiiiight... now.

    C'mon... *slams head against table* C'MON!!!

    Wednesday, April 13, 2005

    Bad Chicken

    Bad chicken... now... severe pain... ugh...

    Thursday, April 07, 2005


    I have to share this spam...

    On behalf of the organizing committee, I would like to extend a cordial invitation for you to attend one of the upcoming IPSI BgD multidisciplinary, interdisciplinary, and transdisciplinary conferences.

    Wow! Multi, inter AND transdisciplinary! How is that even physically possible?!?!

    In the days when Sussman was a novice Minsky once came to him as he sat hacking at the PDP-6. "What are you doing?", asked Minsky. "I am training a randomly wired neural net to play Tic-Tac-Toe." "Why is the net wired randomly?", asked Minsky. "I do not want it to have any preconceptions of how to play." Minsky shut his eyes. "Why do you close your eyes?", Sussman asked his teacher. "So the room will be empty." At that moment, Sussman was enlightened.

    What Time is It?

    What time is it? Hell yeah, it's Darwinia time.

    Linux client was released March 18th, but because I had all but given up on it I wasn't watching. One more reason not to sleep.

    One nifty addition to their website is their developer's diary. I'm always interested in how a game creatively evolves... and it appears their version of "evolution" is pretty much akin to my own. Try out some random nifty game ideas and then... umm... profit?

    They had a geninue love for the technology and loved the challenge. Then, when it came time to think about game balance:

    At this point the Player STILL controlled a group of around 100 Laser Troopers at once, which meant despite all our best efforts over the past few months, the game was still shit...

    ...Chris had a flash of inspiration about how to generate trees using simple fractal algorithms, and was more than willing to invest serious time investigating this issue rather than dealing with the underlying gameplay problems. Nevertheless, the resulting trees were beautifull to behold and gave us some wonderful early screenshots.

    I love these guys.

    Monday, April 04, 2005

    Enterprise Software vs. Enterprising Software

    Here's the crux of the post I was about to write:

    Blah blah job is boring blah blah enterprise software is more about readability and maintenance than speed blah blah ISV realms are more interesting blah blah Java blah blah Ruby on Rails blah blah wish I could work more on texture mapping blah blah blah.

    There you go. Glad I got that out of my system.

    Thursday, March 31, 2005


    Looks like Carmack agrees with me about cell phone games. Good luck makin' em! I can't even transfer a freakin' file...

    Saw screenshots from Bethesda's upcoming Elder Scrolls title. Morrowind is still the most beautiful game and one of the most memorable games I've ever played. Too bad it takes 1600 hours to finish... I should pick it back up again... [in my spare time? HAHAHAHHAHAHAHAHHAAAAAAAAAAA]

    I'm trying to get SystemInfo working on Windows 95,98 & NT. WHAT A PAIN IN THE BUTT. Ugly callbacks in C. Ick. Can't wait until that's finally done.

    Thursday, March 24, 2005

    It's Like A Game! Except... Ummm... Not.

    George Zhang put up a description of what I'm working on right now. Once I get SystemInfo squared away, ConsultComm 3.2 should be posted and done. Finally.


    I've been quite off-topic in my projects lately. I've been trying to fix & ship the final version of ConsultComm 3.x, and part of that was fixing a JNI call to a native Windows library I made. I offered to donate it to the JDesktop Integration Components, then became maintainer of an incubator project. Now I need to polish what was once auxillary code into an API so I can ship it off... then finish ConsultComm, then pick back up on texture mapping.

    Wednesday, March 16, 2005


    I don't know why I'm waxing rhapsodic about this, but I am. Webdog retired at the end of February, but I didn't notice 'till now.

    Back in the good ol' days, .plan files could be finger'ed to query information about a user. The first "blogs" were born from these ASCII files spewed from UNIX servers scattered about. This mainly caught on in readable popularity as John Carmack and others at id used it for talking about random thoughts, product announcements, server downtime, etc.

    However, Carmack has since moved out of the .plansphere and into the blogsphere, and I'm sure Justin Frankel isn't far behind. Or maybe he is. He seems to like the obscurity.

    Me too, I guess.

    Saturday, March 12, 2005

    Rants at the GDC

    There are some great rants that have been transcribed from the current Game Developer's Conference in California. Here are a few excerpts from my favorite rants:

    I say, enough. The time has come for revolution! It may seem to you that what I describe is inevitable forces of history, but no, we have free will! EA could have chosen to focus on innovation, but they did not. Nintendo could make development kits cheaply available to small firms, but they prefer to rely on the creativity on one aging designer. You have choices too: work in a massive sweatshop publisher-run studio with thousands of others making the next racing game with the same gameplay as Pole Position. Or you can riot in the streets of redwood city! Choose another business model, development path, and you can choose to remember why you love games and make sure in a generation’s time there are still games to love. You can start today.
    Greg Costikyan

    Wal-Mart drives development decisions now. When publishers minimise risk by kow-towing to the retailers, you have a serious problem. When every game has to either be a blockbuster or a student film, we got a real problem. For my end of the game business all of our efforts are going into reaching a mainstream audience who may well even not be interested in what we do! My first game cost me 273,000 dollars. My next one is BLAH millions. How many of you work on games that make money? 4 out of 5 games lose money, according to one pundit who may be lying, admittedly. Can we do any worse if we just trusted the creative folks entirely instead of the publishers?
    Warren Spector

    Q: Retail developers, get out of your death march! Do you guys think it’s possible for a young student who wants to get in to be an independent developer? Is this possible? Artists these days are getting a 30K dollar degree to work in a 40K job for 80 hours a week. It’s disgusting.

    Jason: not an easy path. IGDA are trying to help. All the time when .. we see a lot of students and schools, and when they work on game projects in schools, every one of those projects is a clone of an existing game. NOW is your time to make something innovative or wacky.

    Thursday, March 10, 2005


    Well, MakeHuman just released a new version, this one apparently fixing the licensing problems that restricted the previous releases. Purely because of the licensing, I created a new mesh from MakeHuman and re-did my character model.

    There is TONS of detail in the new model, including teeth, gums and palate for the mouth. Of course, I needed a low-poly model so I had to remove all of these faces by hand. Ick. Border select/deselect quickly became my best friend, but I think I have a decent model to work with. One problem is that the face is a bit messed, but I'm straightening it out. Now to re-try unwrapping the mesh using seams.

    And on an ever-persistant sidenote, I finally gave in with MPEG2 encoding and I'm just storing all my video footage in DV Type 2 AVI's. About 12 GB / 1 hour of footage, but no more freakin' codec problems. The down side is that my 250 GB hard drive is now full, so I'll have to either add on some additional storage, compress the files (ick) or do the encoding soon.

    Still waiting for Darwinia.

    Thursday, March 03, 2005

    Creating Creative Creations

    mpeg2enc -q 1 -b 8000!!!
    mp2enc -e!!!
    mplex -V!!!

    Please tell me that works...

    Nope. And such is the life of a content creator.

    I'm realizing that content creation is the crux of all new game creation now. In the days of yore the code was the biggest obstacle... making things faster, scalable, playable. But now the biggest obstacle in creating modern games is a) creative content and b) the tools to create the content.

    For example, id wrote a software tool that took high-poly meshes with detailed textures, converted them into lower-poly models with bump and normal maps, then exported that content into the game. So you'd spend weeks on creating a single model, have software figure out which details were best suited for normal or bump maps, then drop the corresponding textures and meshes into the engine. Meanwhile Carmack wrote an entire radiosity engine in the shower, using nothing but Pantene and a loofa.

    Now that I'm trying to still figure out texture mapping in Blender, I'm definitely gathering an appreciation for the DAYS it takes to generate nice models. And now that I've been failing to get a good, reliable way to encode MPEG2 video from a DV camcorder, I'm appreciating how hard it is to get the appropriate tools.

    Yes, I still have completely failed to get a good routine for archiving home movies. I was set on Kine and ffmpeg, actually re-encoded everything AGAIN, only to find that the timestamps for 50% of the MPEG's were fragmented at points. Some were serious enough to make my DVD player freak out.

    Cursing SuSE under my breath for not giving me a good toolchain, I tried using Nero's video capture utility in WinXP. It was horrible. Even capturing to raw DV Nero dropped frames like a hammer like a one ton barbell like a bad habit a lot. If I dropped a single frame in Kino I'd start all over again. With Nero I'd average about 1 dropped frame per minute. So Linux still won, although I still lost.

    I'm going to try something from MainConcept methinks, maybe MainActor.

    Still working on texture mapping too... creating seams in Blender seems to be the way to go, but since my mesh is so asymmetrical (and it's gonna stay that way, dammit!) it's tough to get it to work 100%.

    Monday, February 28, 2005

    Three Times is a Charm

    Well, my little video project is borked again. This is good experience... I guess.

    Evidentally the source was somehow corrupted on the way to the raw video feed, which was just exacerrated when it was encoded & multiplexed into a composite file. Thppppttt.

    Of course, I didn't find this out until I had ripped everything. Again. Oh well. Now I have to re-rip everything... and this time it wouldn't have helped at all to keep the raw files, since evidentally they're the ones at fault.

    So now the plan is to try a few different ways of doing things: clean the tape head and make sure that's not the problem (I doubt it is), update libdv to see if that helps (it might), rip the video stream as AVI instead of raw DV (who knows), try using the command-line ffmpeg instead of Kino's invocation. One would hope at least one version would be verifiable by mpgtx.

    Delete everything! Start again! w00t!

    Wednesday, February 23, 2005

    A Cross Platform

    Cross-compiling (or CrossCompiling or x-compiling if you're trying to Google the freakin' thing) is neato. I've been trying to find a way to easily build apps for Windows from Linux, namely RMI dll's for Java. I finally tried buildling MinGW's binutils, GCC and Windows API's into a cross-compile toolchain for Linux. After fighting off lovely GCC_NO_EXECUTE configure errors and finding this fantastic build script I finally have a working build environment. I absolutely dig it - now I can build both X Windows and Win32 native code at the same time on the same platform. w00t!

    I just got to thinking about that after IBM announced Chiphopper, it's end-to-end service and product line to port Linux apps to their z Series and p Series line. Methinks IBM realizes that OS/400 is well past its prime and is overdue for retirement. Considering DB2/400 was missing a lot of things MySQL even had (including performance), I don't think it will really be missed. DB2 on Linux, however, is a whole other ballgame.

    Wow. I'm really wandering off-topic now.

    Saturday, February 19, 2005

    Wrapping My Head Around It

    I remember my teacher in fifth grade telling us how a globe is the only way to get accurate idea of the continent's proportions on Earth. She tried very hard to explain how the topography becomes warped when you're trying to represent a three-dimensional sphere on a two-dimensional map. Considering we were eleven, the euclidian geometry went straight over our heads.

    Now I get it. Trying to map a three-dimensional head onto a two-dimensional texture map is next to freakin' impossible for my feeble brain to grasp... I can't get the stretching out. Ugh.

    Arms, legs and torso better be damn easier. Hopefully just cylinder mapping.

    I might just give up and try Wings 3D.

    Level One

    I remember spending hours at a time with Build, DoomEd and DOOMCad. Aaahhh... the good ol' days of convex polygons and wondering what misjoined vertex was causing my level to leak.

    When reading FAQ's to build one of my many one-trick levels, I came to find one of the eternal truths of design:

    "Lets face it, your first level IS going to suck. This happens to everybody. I HIGHLY reccomend you make you first level suck on purpose."

    Map Editing FAQ v0.1 by Brett Gmoser

    Tuesday, February 15, 2005

    Brain Fried; Motherboard Isn't

    Just installed my new Abit AN7 to replace the SY-KT333 DRAGON Ultra that I fried. It's neato. Even prints out the BIOS POST codes on an LED next to the PCI slots.

    I had to reinstall WinXP - too much crud had built up. Drivers and been installed and uninstalled, hardware had changed over and over, activation was about to go down. SuSE handled it fine once I installed the nForce drivers. Chalk one up for SuSE.

    Friday, February 11, 2005

    Too Much in My Head

    Someone submitted a bug report for ConsultComm recently, so I stopped to do their quick change. Then I wanted to add a few minor features. Then I wanted to build in the latest version of the JDesktop Integration Components. That's what always happens with my ol' ConsultComm... I go three months without thinking about it then all of a sudden I'm hacking away at everything. I am pretty pleased with the plugin system, tho.

    Motherboard also died recently... so I just got a new one in to replace it. I think my Audigy and USB ports were fried from static during the winter. Ick. At least since it's an older Socket A board it was fairly reasonable to get a replacement.

    Still trying to get texture mapping right. I need to fuse my model's mouth together (and some would say fuse my own while I'm at it). Texture is still stretching too much... and I need to figure out how to map the rest of the body while still not missing any mesh faces. Ugh.

    Tuesday, February 08, 2005

    Emotional Gaming

    Remember how I posted a while back that a breakthrough game would need to "redefine" the genre? Consider Romeo and Juliet, something developed by Full Sail grads for their final project. Rendering is done using a paint & canvas technique. Language is expressed by ballet. Colors on a palate represent emotion.

    Looks like they're thinking of making a public release as well.

    On a similar note, if Darwinia doesn't release a Linux demo soon I'm gonna spit.

    Friday, February 04, 2005

    Head Texture

    Texture mapping is hard. It doesn't help that my mesh isn't perfectly symmetrical, either... makes face selection for uv mapping awkward.

    I used the mesh decimator in Blender to take a high-detail model down a few hundred notches and get a poly level that was more-or-less acceptable. Now I'm trying to unroll the mesh so I can create a texture to map onto the surface of the head. In this guy's tutorial it seems like cake, but not so much for me.

    The biggest thing for me is getting an acceptable set of skeletal animations so at least I have a template to work with. Once those get done I'll work on actual code and see what I can do about collision detection. My big thing that will cause me to celebrate will be collision detection between sprites (i.e. a boxer hitting a heavybag).

    I'm thinking about writing another tutuorial about UV texturing... that'd be helpful methinks. What I'm really psyched about is using shaders for textures... but that's way, way down the line.

    Wednesday, February 02, 2005


    I've tried out cell phone gaming with Sorrent's Baldur's Gate recently. I wanted an RPG somewhat akin to the ol' GameBoy days... something that made it easy to pass the time in some loosely held story with a lot of arcane items.

    Boy was Baldur's not it. I mean c'mon, game designers should at least be able to match some of the old GameBoy carts. But this game is so freakin' awful I can't even describe it.

    First, the storyline. Usually not a big part of a game - except if it's an RPG! Here I have to go around and get a few scrolls to give to some cleric to look at. Whoop-de-freakin'-do. I bet the sequel is going to be a character returning movie rentals before they *gasp* become overdue.

    The game uses the AD&D ruleset and has a variety of character classes to use - but the combat is so monotonous who would even care. Swing. Miss. Swing. Hit. Swing. Die. Wheee!!! Ranged combat is the same as close combat... the only difference is with ranged combat you attack - then stand still while something implike walks up and thrashes you.

    Collision detection and map layout was done better in 8-bit NES land. The overhead view you have means that maps are defined by terrain tiles - which means the 8x8 sprite might be dry land, it might be a river, it might be a ton of pointy spikes. Hell if you know - you're just trying to run away from something implike and for the life of you there's no way to cross this corner of seemingly open plain.

    But at least the bad collision detection makes killing things easier - enemy pathfinding has just as much trouble trying to walk through apparently open tiles and just gets stuck on the corner of a riverbed. So if you have ranged combat just sit back, pop open a cold one, and just auto-attack until aforesaid implike creature is gibbed.

    I also tried the free demo of Fox Football. Evidentally you are a football player. And you need to press numbers. That somehow corresponds to the goings-on during a "football game." I'm not sure what happened... nor do I care... I could have sat on the phone and done just as well.

    If this is representative of the market right now, maybe I should be getting a copy of J2ME and trying my hand at some mobile game development instead. If I could make something half as decent as my 16-bit greyscale handheld from fifteen years ago I'd be a raging success.

    Hopefully all that time wasn't wasted...

    Sinus infection going away now. That last round of antibiotics was pure 3vi1.

    Finishing up my "I can't freakin' think or breathe so I'll just rip video all day" project so I can get back to Blender modeling. I had originally used mjpegtools to encode all my DV video into MPEG-2. It looked fine on any computer I used, even when burned onto a DVD, but looked like absolute crap on a consumer DVD player. Motion trails, decoder noise... ick.

    At first I thought that the player was having problems reading the media - which is weird because I have a Pioneer progressive-scan player that has thus far displayed every form of media, encoding, codec or book type known to man. But I switched from DVD-R to DVD+R to see if anything worked. Same results. Then I thought it might be the multiplexor separating out audio and video from the file stream. I tried both DVDStyler in Linux and Nero in WinXP to build the DVD filesystem, and both had the same garbled output.

    I found out it was the mjpeg encoder... so all the work I'd done to encode every single DV tape I had was all for naught. I replaced mjpegtools with ffmpeg and all was beautiful. About twice the size than the mjpeg files, but looked even better than Nero's MPEG-2 encoder. Plus it uses AC3 instead of MPEG-2 audio. You can see a comparison at Transcoding's site - for some reason they still recommend mpeg2enc at higher bitrates, but I just don't see it. I hate the boxy sample noise generated by mpeg2enc.

    The one problem is that Kino doesn't split scenes for ffmpeg (it's just a DV pipe). So I either have to

    1. Figure out what options are being (not) passed to mjpeg and try to force 'em
    2. Manually set the beginning frame and end frame for each export using ffmpeg
    3. Write a script to invoke ffmpeg over each individual DV file
    4. Or just archive "movies" instead of "scenes"

    So now I'm mullin' thru man pages and examining the command-line options Kino is passing along. w00t. One day I hope that mpeg2enc -v 0 -f 8 -I 1 -n n -a 3 and ffmpeg -v 0 -f rawvideo -pix_fmt yuv420p -s ntsc -r ntsc -i pipe: -an -target dvd -f mpeg1video -maxrate 8000 -ildct -ilme -aspect 16:9 -pass 2 -y make as much sense to me as ps -eLf.

    Damn I'm hilarious.

    I forced 9000kbps and sent a bunch of arcane commands to mjpeg, which eventually removed the "blockyness," but it still looked worse than ffmpeg. I tried it on different hardware and even custom-compiled the latest CVS version, but still not as nice as ffmpeg. True, mjpeg file sizes are nearly half of ffmpeg's, but the difference in apperance is noticeable.

    So I think my final toolchain (I'm big into defining toolchains) will be:

    I tried using Nero on the Windows XP side but I didn't find it as easy to use. File sizes and image quality was just about the same as ffmpeg. It encoded on-the-fly which was very nice, but I'd rather rip it all as DV Raw files, then do post-processing, then MPEG-2 encode. Plus I got weird lock-ups at times. The DVD authoring tool was very nice and I might end up using it instead of DVDStyler at times, but you can't save an ISO for burnination later (for some reason it thinks that only CD-R's get ISO's).

    Thursday, January 27, 2005

    Sinus Infections

    Sinus infections suck. Ick. And the meds I'm taking made things worse. Ick.

    So... I've been ripping (is that what you kids call it?) my home videos since I don't have the mental capacity to do much else. I've been using kino to pull the video in from Super8 and MiniDV via FireWire in Linux. I encoded the raw DV into MPEG2 and will hopefully use that format to archive it all.

    Ugh. Can't think. Tried to do model design and can't... focus... my... eyes...

    Friday, January 21, 2005

    Master List of Articles

    I'm keeping a master list of articles up on my IU Computer Science alumni page. If you are curious about the stuff I write, it's all linked from there.

    Thursday, January 20, 2005

    Queensbury Rules

    Queensberry rules of boxing:

    1. To be a fair stand-up boxing match in a 24-foot ring, or as near that size as practicable.
    2. No wrestling or hugging allowed.
    3. The rounds to be of three minutes' duration, and one minute's time between rounds.
    4. If either man falls through weakness or otherwise, he must get up unassisted, 10 seconds to be allowed him to do so, the other man meanwhile to return to his corner, and when the fallen man is on his legs the round is to be resumed and continued until the three minutes have expired. If one man fails to come to the scratch in the 10 seconds allowed, it shall be in the power of the referee to give his award in favour of the other man.
    5. A man hanging on the ropes in a helpless state, with his toes off the ground, shall be considered down.
    6. No seconds or any other person to be allowed in the ring during the rounds.
    7. Should the contest be stopped by any unavoidable interference, the referee to name the time and place as soon as possible for finishing the contest; so that the match must be won and lost, unless the backers of both men agree to draw the stakes.
    8. The gloves to be fair-sized boxing gloves of the best quality and new.
    9. Should a glove burst, or come off, it must be replaced to the referee's satisfaction.
    10. A man on one knee is considered down and if struck is entitled to the stakes.
    11. No shoes or boots with springs allowed.
    12. The contest in all other respects to be governed by revised rules of the London Prize Ring.

    Evidentially the Acme company was busy selling spring-loaded shoes to boxers. Rockets were okay, however. Or giant rubber bands that slingshotted boxers into the ring.

    "No hugging allowed." Please, leave your problems at the door.

    Wednesday, January 19, 2005

    (Don't) MakeHuman?

    MakeHuman is a nifty little project. It's basically a human mesh that's automagically deformable based on a set of targets. Considering how hard it is to create a believable human mesh when your software budget is... oh... nothing it's a fantastic way to develop hi-res or low-poly figures

    One really interesting discussion isn't about the tool itself, however, but its licensing. Reading through the forum threads, content creators and developers have been trying to sort through what MakeHuman's GPL license means to content created by the tool. The developers seem to have intended content created by MakeHuman to not have an inferred license, but instead be usable by whomever. But the Free Software Foundation seems to think otherwise.

    >> The output of MakeHuman (models, images) must be forced GPL'd?


    This is an interesting contrast to Blender itself, which states:

    So I own the copyright to all output?

    In almost every circumstance for blender, only the code and other GPL'd files themselves are covered. Any output of such material is copyright the person who produced the output, in this case, the artist.

    It seems that the difference is with how MakeHuman defines the mesh you're working with. Targets are modifications on top of a base mesh, both of which are GPL'd. And since both are GPL'd, changes to the targets and base mesh are also GPL'd. If it had all been done in code, I would imagine the resulting mesh would not be GPL'd.

    I can understand now why commercial software vendors are scared of touching open source software. It gives me the willies to just post these legal mumblings to a blog nobody will even read. The thought of being sued is too harsh for any small business or independent developer to consider. GPL can be weird... usually free software "acts" like commercial software, but in instances like this it doesn't. For example, you'd expect to be able to use meshes created with Poser in whatever darn way you like, but with a license that extends onto derivative works it's not so clear cut.

    Sunday, January 16, 2005

    The Next Thing

    IGN posted an article about the Future of Game Design - something which doesn't focus on the technology evolution of gaming but the evolution of features in gaming.

    The article's emphasis on what a totally immersive game should "feel like" is important - it's not about how many textures or render passes you throw at an engine, it's about how you should be able to interact with your environment. One idea I particularly liked was the concept of being able to transfer your player characters into sequals of a title... something done in ye olden days but not seen too often as of late. It's a great idea, especially with RPG's, and fosters an attachment to your character that actually makes you care about the series.

    It also made me think about the old King's Quest series. It's what inspired me to get into gaming in the first place... figuring out how to make a custom boot disk to manage my @#$!$#% 640K of base memory and still load MSCDEX.EXE took a lot of research. But in the end, hearing my lovely 16-bit Sound Blaster belt out all the speach from my characters in King's Quest V was worth it. And when VI actually ran in Windows 3.11 with amazing 16 bit color depth... I was just the mac of all boot-loading h4x0r skillz. I lived in the kingdom of Daventry until DooM quaked everyone's world.

    Speaking of Quake... I remember looking at the alpha of Quake that John Carmack released, prewarning the world that everyone would now need the new Pentium's floating-point unit. Unfortunately I had a 486DX2/66... with while it had a math co-processor didn't quite give the framerates it needed. In fact, that's the first time I ever worried about frame rates... in a room with two floors (both were visable at the same time and had entities over top of each other), a few crates and a nailgun in the center.

    I upgraded two semesters later. But it wasn't until six months later, in a fit of self-loathing and depression, that I made one of the most evolutionary purchases of all: the 3dfx Voodoo 3D OpenGL accelerator. While it couldn't do 2D content (you had to use a pass-thru cable which would use your standard video card for desktop stuff) it was the first card dedicated to blitting ploygons as fast as you could handle.

    Suddenly QuakeGL kicked the door open. Textures were smooth and no longer pixelated. Water was transparent. Windows were tinted and see-thru. Explosions launched particles everywhere. The revolution had begun.

    Next up, believe it or not, was Tomb Raider. It's 3rd person camera angles and OpenGL rendering engine made everything look damn pretty. Not only that, but she could climb, scale, roll and dive like an acrobat. The CPU didn't need to be dedicated to rendering - it could handle larger character animations as well.

    Say want you want, but progress has been incremental ever since. Yes, now we have volumetric shadows, per-pixel lighting, glistening texture shaders and refractive water. System Shock and Deus Ex represented another step in "gaming-as-cinema," where you feel like you're the lead role, director and writer of your own action flic. Your character evolved, your choices weren't predetermined, and your actions required forethought. Storytelling again took center stage - and while gameplay became increasingly nonlinear it was still largely reminicent of King's Quest and 7th Guest.

    Half Life 2 seems to be the greatest example of all the incremental advances being coalesced into a single release: lighing is pretty, eyeballs are shiny, water is watery, NPCs react in intelligent ways and the storyline is engaging. It's the fruit of our cooperative looms.

    So what's next? I think it's not going to do with technology per se, but instead who is going to create new genres for the gamescape out there. The MMORPG genre is a new one that has shaken up conventional ideas about gaming and social interactions, and has made player networking a central part of the gaming experience. This type of virtual society has definitely split games into two ranks - the massive multiplayers and the single players. While consoles are just now jumping onto the multiplayer bandwagon, computer gamers have lived there since QuakeWorld. People (such as myself) who don't have the time to dedicate their lives to 24/7 character advancement often live in the single player or quick competition multiplayer world... ye olde frontier. Some people like to leave a game then come back two weeks later to find it exactly how it was. And some interact with enough difficult people during the day that the last thing on their mind is dealing with some dufus player-killer.

    I'd like to think that the next genre of single player gaming will be driven by small developers willing to take a risk. Look at Uplink - it was small, involved, engaging, brilliant. The user interface was the game, and you really were a hacker. How freakin' genius is that?!?! Uplink, in my eyes anyway, set the standard of what hacking should feel like in a game. And that kind of genre-eluding creativity is what will lead to the next... thing.

    Wednesday, January 12, 2005

    Tutorial Authoring

    I've been trying to decide the best format to write my tutorials in lately. The Wiki site at is nice now that I have editing rights - people can offer feedback and the HTML/CSS layout seems fairly sane. I was also looking at Texinfo, which is what the Crystal Space documentation is written in.

    I've authored pretty much everything in OpenOffice, which I've been very happy with. Recently I've just been doing straight HTML exports (which are freakin' HUGE) and PDF exports which I post to my old IU Computer Science account. I don't want to leave them with that burden permanently, tho.

    Monday, January 10, 2005

    Sure Ways For a Project to Fail

    There are several good ways to guarantee a project will fail:

    1. Announce It
    If you announce a project before you actually have a working version, it will fail. The lil' boxing game I mentioned previously isn't really a project per se, more of a means to create more tutorials - so hopefully I haven't cursed it. It may never see the light of day, aside from whatever knowledge I glean from it and put inside of my articles.

    I can't tell you how many people I've seen announcing "I need developers to make a totally huge project of amazing proportions." And everyone ignores them. Why? No one cares. You can't pretend to be the manager of some huge project unless you know what you're doing. And you don't know what you're doing unless you've done it.

    If I made two ugly stick figures headbutt each other until you hit ^C I'd get way more interest than by claiming I'm creating a virtual universe unlike one that has ever been seen by Sony, Lucas Arts or Blizzard.

    2. Name It
    If you think of a name for your project before you actually have a working version, you're in it for the wrong reasons. A project doesn't need a name until you want to communicate regularly about it, and it doesn't need to come up in that many conversations unless you've announced it. And if you've announced it, you've violated point 1.

    3. Promise It
    This is the biggest one. If you ever, ever promise something will be released it never will be. Have you ever noticed that the best game development companies keep everything under tight wraps until they go into beta testing?

    Hype kills a project. You have a split second to get people interested in your project, and if you don't have enough stuff to fuel there interests then they'll move on. Projects promised on concept art and a five-person development team might generate interest for five seconds, but
    unless you have a demo, a beta or at least a smattering of screen shots everything will quickly turn to vapor.

    Low expectations! That's what I'm all about!

    Damn. Do I sound cynical or what?

    Thursday, January 06, 2005

    Modeling for the Camera

    My previous contributions to the Crystal Space community have been my tutorials on map creation and character modeling. It got me a brief stint as a contributor working with the PlaneShift development team, but evidentially I've fell out of their good graces when I took time to look for a new job last summer. Since then I've been working on revising my tutorials, this time concentrating on Blender 2.35 as the sole design suite. I've been happy with the changes so far, and have posted the older and currently-being-revised versions on my IU CS site. I've also taken time to Wikify them (but alas, lost the witty footnotes) and place them as articles on the Crystal Space community site. They've received a fairly good response thus far.

    I tried to start writing code tutorials, but then I realized how incredibly unorganized my brain is when it comes to writing clean C++. I deleted about 10+ pages from the tutorial because it made no damn sense, and thus decided to actually code for a while so I can organize my thoughts before I try to organize someone else's.

    Then comes the chicken and the egg paradox: do you start writing code before you have any content, or do you create content before you actually have anything to place it in? I tried just creating half-assed content so I can get hackin', but I ended up with half-assed code. But if you're going to create nice content, why not have it accomplish something purposeful? Otherwise you're just wasting your time.

    So I decided to start writing my first full-sized game. I didn't want to make anything grandiose... not a sprawling landscape for an RPG, but not as simple as a logic game. Not too many animated models... I'd like to keep framerates up and keep things simple to debug. Plus they take forever to design. How about...


    I'm working on building a ring first, then a couple of character models with quick left hook animations. Thanks to the lovely MakeHuman project this shouldn't be too bad. I'm not sure how I'm going to render the crowd... that might be my first trial with mass-sprite animations. Or maybe I'll make it a two-state bitmap that flips back and forth like the old Nintendo days. Heh.

    After I get one ring and one boxer, I'll work on the code... getting a third-person camera working intelligently promises to be interesting.

    Cross your fingers folks... I'm hoping to have the artwork done by February...

    Wednesday, January 05, 2005

    In The Beginning... There Was WEIRD...

    I decided to create this webspace specifically because I expect zero people to read it. I have a stupid dream. And I figured I'd document it in case the stupid dream became a brilliant reality.

    I remember trying to invent video games as a kid, in lieu of whatever kids my age did then (I never did figure it out). I remember the DoomEd tools when DooM came out and creating ugly levels with custom textures and nothing but secret rooms. I remember playtesting an awful educational RPG for my teacher in fourth grade. I remember spending 16 hours a day for four weeks trying to create a version of minesweeper using Motorola 6800 assembly using a frankensteined-from-1971 workstation and a 80x24 character display.

    I remember having fun.

    Now I'm a programmer. Sort of. Not really. My title says "Web Architect" but I've neither mutated into the spider nor built any interesting web applications. Real jobs aren't fun... you spend the time trying not to incite trouble and avoid the work that sucks the most. In truth, I'd be happy if I could just code away. But when you work for a company it's more about social engineering than hacking.

    Which is why I'm here.

    My job is 9-5, and I'm putting aside my heavy volunteer work for now. I've been working on learning and writing tutorials for Crystal Space, learning 3d modelling and prepping my C++ skillz. I'm hoping to start hacking again.

    Most likely this will be one of my stupid pipe dreams that never becomes realized. However, unlike my previous pipe dreams, this one has actually persisted for several years. So who knows... maybe I'll get back to the same level of inspiration I had with my Apple IIe.

    It never hurts to try.