Wednesday, February 02, 2005

Actually Making Games (For Idiots like Me)

I've mentioned before
that I am a failed programmer (But not unemployed - not yet).

What this means is that I've wasted hours and hours and hundreds of dollars in attempts to find a computer language I can understand and utilize.

I have programmed "Hello, World" in Java (1 and 2, as well as JavaBeans and Applet forms), Python (no, I have no idea 'why?'), Perl, Asp, C, Visual C++ and BlitzBasic.

"Hello, World." That's as far as I ever got. I tried all the examples. I understood variables and functions and how to peform operations and even grasped classes and inheritance.

But there's a serious disconnect between me understanding the overall concepts and actually, y'know, getting a program to do anything, at all, that I want.

Nevrax has their MMORPG client / server library available on their site under the GPL (General Public License). When I hear about opportunities like these, I kick myself yet again for being so horrible at coding. There are so many great, totally-free, open-source resources available on the internet. Just browse through Sourceforge's code repositories to get a glimpse of the possibilities.

So why, with all these brilliant snatches of code floating around for the taking, and plenty of fantastic designers posting their ideas (See here, this one, too, and yeah, here too) are we not flooded with thousands of fantastically innovative indie games?

[Please don't point out that there are lots of great indie games. I know this. Thousands, though? We aren't even flooded with thousands of fanstastically innovative big-budget games.]

But access to the tools and the desire to create something with them do not come together in a magical burst of light and give birth to your dream programs.

I know I'm not the first to desire it, but here's how I'd imagine my own personal programming language would sound (I'll dub it PiSpeak) - yes, it would be spoken:

Make a grid of equal squares. Ok, let's define a common board as fifty by fifty squares. Tile the squares with a brown ground texture for default. Make the texture darker. No, swap it to the next texture it resembles most. Now let's create a default unit marker - make it circular. Have it fit within the confines of one square on the board grid.

And so it would continue . . .

Now to many people this method would seem incredibly, well, tedious. But in my mind what I'm doing is building specifics in from a general picture - the way a sculptor might work clay, envisioning a final result and molding, reshaping, scraping and adding bits slowly to work toward the intended shape.

Maybe a game design software that would work like a police sketch artist. Buttons lay out broad options (maybe genre descriptions), and every decision will open up new pathways and provide easily grouped examples of classic game options with places to add in user-made definitions.

I realize this is partly what the Visual family of programming languages attempted to do, and they did a fairly good job. But how is it so difficult to add in the option to put menus into simple language? Maybe some enterprising soul could add skin functionality to a Visual IDE and let users themselves define how the elements are named?

PiSpeak, of course, will take quite a bit more advancement in Natural Language Processing before a demo can be developed.


Anonymous said...

Personally, being a programmer, the biggest problem I've always had with trying to make an independent game is a lack of content (2d, 3d models, texturing, animation, levels, etc).

It sounds like PiSpeak would have a lot to do with level design and/or adjusting stats, but not with the actual creation of assets or code. Or am I misunderstanding things?

As far as I know, there already are some tools that can do things like that (although not spoken or as intuitive), such as 'RPGMaker' and 'tis ilk. Although, they are normally fairly limited to the system they were designed within. However, they might be worth a look.


andrew stern said...

Great idea, and one that could (and probably will) be made to happen, with a lot of work. I briefly address some issues with this idea, and a suggested solution, in this comment. Here's a snippet of what I wrote:

Let’s say we want an NPC to greet the player character at the door. Declaratively (in plain English), I’d imagine this would written something like:

"while hanging out in my apartment, if someone knocks on the door, act surprised, open the door and greet them with 'Hi, how are you?' "

Then, for comparison, I paste in some behavior code that accomplishes that, about 50 lines of code (from a character-behavior language called ABL).

A writer would much rather just write that simple one-liner declarative statement, rather than write all this behavior code, right? Well, the problem is that this code is doing more than what that one declarative line has (under)specified. For example, if the NPC is far from the door, the NPC will yell for the guest to enter, instead of actually going to the door. To specify that declaratively would start making the declaration messier... But more interestingly, what if we wanted a variety of ways to open the door and greet the guest, depending on who the guest is, how the NPC feels at the time, etc, etc...

A solution, with some reservations. Basically, it requires an AI system to fill in behavior for what is underspecified by the simpler English descriptions of what you want to happen.

One could imagine an AI system with a huge library of default common-sense behavior built into it, including all varieties of typical behavior for answering a door; in such a system, a writer would merely declare a few new, custom things she wants for a new, particular version of answering the door. That’s theoretically possible, but not easy to build, and not easy to give the writer straightforward hooks to really customize the behaviors. In the end, you’d have your various NPC’s of supposedly different personality acting too much the same, I think.