ID:50733
 
Ah, how quickly two weeks have passed. Project Xenoverse continues to be developed, with a minor diversion as I give Valve's Left4Dead an extensive play.

An interesting thing happened in my development of Project Xenoverse not too long ago.

I wanted to let players develop bases dynamically, so I created an item - a suitcase - that they could drop an activate. This item would then spawn a list of mobs which would move to the appropriate location relative of the suitcase, and create an atom based off of what was in the list. (Yes, I know I didn't have to use mobs.)

Much to my delight, it worked just fine. More or less... my elevators wouldn't get created for some mysterious (yet probably right in front of my nose) reason. Still, I now had this awesome little item that could be given to players to create this fabulous effect which creates an entire base if I wanted to.

I threw it away. Why?

Because I realized I had effectively and cleanly bridged the major types in BYOND in one implementation: I made a /obj that the /client.mob drops which spawns a number of /mobs which Move() across /turfs in order to create whatever /atom I wanted based off of a /list from a custom /datum!

In short, if I could code that, I could create anything. Well, almost anything, but my coding kung fu has certainly come far indeed. And it'll go further yet with more practice, no doubt.

Consequently, Project Xenoverse is now mutating into something much larger and more interesting than the rigid limitations I had set for myself earlier. If I'm getting this good, I might as well, you know, Build My Own Net Dream?
Some important advice:

"There's a temptation to create "the ultimate game of all time," so keep your focus on a couple of cool features, make sure those are great, and leave some room for a second game."
-- Sid Meier, Firaxis
Excellent advice, and from amongst the greatest of pioneers in gaming. However, I'm very careful when observing quotes. Even the greatest of masters are still human, and sometimes make false conclusions like the rest of us. Also, a quote is somewhat vulnerable because the full context is often left unexplained.

Thus, I believe it's important to always be critically thinking, both to catch mistakes and also to detect if there's more to it than the quote suggests. In looking at that quote, I'm wondering if this would be correct advice as well:

"While creating the 'ultimate game of all time,' may be an insurmountable task, you may nonetheless end up with a similar result if you instead set your goal on creating a simple game with a heavily extensible program structure.

Such a design begins with the simplest functional example needed to make a part of the game you know you want work, but coded in such a way that it can be expanded upon later if you decide you want to do more with it later.

In that way, you have a potentially limitless game that remains functional even with only base elements in tact. You get the result of a fully functioning game sooner while leaving the path open for a later ultimate conclusion."


-- Geldonyetich, Wannabe Future Gaming Pioneer ;)

At least, that's how I'm going about it, and it seems to be working pretty well.

It seems to me that the main trouble with trying to make "the ultimate game of all time" is you try to do too much at once. I've stumped myself more than once laying out elaborate data structures long before I needed them. Then I get to some minor snag that brings down the flimsy house of cards I've trapped myself within: game over.

By using the "keep it simple" method but coded in such a way that keeps future expansion in mind, I can get there one small step at a time instead. Instead of the elaborate design existing at a big level and me being forced to fill in the blanks, you instead work on a robust foundation that can be built upon as needed. This creates a game that grows somewhat organically.

Maybe me and Sid Meyer are saying two sides of the same coin here. It could be what he's saying here is what I just said: code your foundation (the cool features) and expand later as the opportunity presents itself (e.g. sequels).