Published

Bringing Back The Dream

A lot of people have a particular moment or experience that defined their future. It can be anything: reading a particular book, traveling through a different country, meeting somebody special, or going through a very painful (or happy) experience. For me, the future crystallized on a Fall afternoon in 1985, when I sat in front of an 8-bit computer at a friend’s house. It was the beginning of a long personal journey.

The computer was laughably primitive by today’s standards: Z80 4MHz CPU with 64KB of RAM. What made it stand out from other computers at the time was a whopping 16 simultaneous colors (as long as you gave up half your horizontal resolution), three-channel square wave sound generation, and 3” floppy disks. Cell phones these days are hundreds of times more powerful than that computer. Heck, the chip inside your microwave oven is probably more powerful!

What was it that caused love at first sight with that computer? Impressive as they were at the time, it wasn’t the technical specs that attracted me. It wasn’t the silly games either, even though those were fun for a few days. It was being able to give commands to the machine and have it execute them immediately.

The computer booted directly into a Basic interpreter. I started experimenting with a few PRINT statements, then moved to FOR loops, getting input and solving algebra problems as if by magic. I spent endless hours typing game listings that came in magazines (usually with a few printing errors, which made them so much more fun to get working correctly). I experimented with graphics, sounds, and animations.

Before I knew it, the Basic interpreter was too slow and bloated and I had to graduate to assembly. Programming became a bit slower (especially since for some reason I could only save the assembly onto tapes, not disks), but the programs became thousands of times faster. I was finally able to draw sprites without annoying flickering, use all available memory, and even overwrite part of the ROM jump table to squeeze in a few extra KB.

I was hooked.

That experience totally changed the rest of my life. It caused me to study computer engineering and computer science, and eventually to write games professionally (much to my parents’ dismay).

If that little, primitive computer had that effect on me, today’s dazzling multimedia computers with broadband Internet connection must have a hundred times that effect on today’s children, right? Quite the opposite.

Today’s computers might be a lot more powerful, but they’re also a lot more complicated. Windows is very large and intimidating to a newcomer. It doesn’t exactly scream “play with me, experiment!”. Instead, it is a very closed system. It discourages experimentation, and you’re in constant fear of disturbing any of the overly complex configurations (like the registry or system dlls), not to even mention dealing with viruses and other malware. Linux is much more transparent, but it’s still far from an inviting system to play and experiment with for newcomers to computers.

Another problem with modern computers is the lack of a programming language out of the box. Things are actually a bit better now than they were a few years ago. Microsoft offers a free express edition of Visual Studio. Python and other scripting languages are also free downloads, and they also have libraries for game development. Unfortunately none of those tools come pre-installed, which makes it hard to get started and even harder to share your results with other people. Also, a lot of free development tools and environments today are geared towards GUI programming, which is very different from the free-form, take-control-of-the-machine approach that you need not just for games, but to really learn about the machine. There really aren’t many better ways to permanently scare people away from programming than showing them something like this.

Web development is a bit better because it tends to be simpler, and once you have a web server set up, it’s easy to show the results to anybody with an Internet connection (which I hope is everybody these days). Unfortunately it’s not particularly well suited for something like games with the exception of things like Flash.

Really, when I look at things this way, I feel bad for kids growing up today. They’re missing out on a huge source of enjoyment that I had growing up as a kid. Of course, today there are other new frontiers to explore, and they have the Internet with all the new social aspects, but it’s not the same.

So, is the dream dead?

I have often wondered, isn’t there a platform out there that is more like the 8-bit computers were in their day? The closest parallel today is game consoles, except that they’re very closed and proprietary and they’re only intended to play games. Sony started making some progress along these lines with the Yaroze program for PSX and Linux for the Playstation 2. Unfortunately neither program was particularly successful for a variety of reasons, but it was a start.

A couple of days ago, in the keynote for GameFest, Microsoft announced that they’re taking things further on the Xbox 360 with Game Studio Express. They’re planning to open it up and allow everybody to develop games for it. Even better, the code will be mostly common between Windows and the Xbox 360, so it will be possible to do a lot of development on the PC and then move it over to the 360 relatively painlessly. How cool will it be for kids to write their own games running on the Xbox 360 and be able to show them off in their friends’ living room?

It seems that the only language available will be C#. At first I was disappointed as I was hoping it would work with C++. Then I realized it wasn’t such a bad idea. If anything, it would be better if it were something simpler, more like Dark Basic, that people with very little programming experience can quickly start messing around with. Game Studio Express is supposed to include several tools and APIs that allow you to program things at a really high level, so that might be good enough.

I’m very curious about the details, though. For instance, are we going to be able to get our hands dirty and write as much C# as we want, or are we going to be limited to a very strict framework? Is the link between the PC and the 360 something that they’re going to expose? In other words, will we be able to create other tools that use that functionality to create new types of content?

A really important question is whether anybody will be able to play content created by users, or will they have to have some special payment-based subscription. Having to pay to develop for the 360 is not ideal, but I don’t see it as an unsurmountable barrier. However, if users have to pay and be part of the developer program just to be able to play some user-generated content, that would come close to killing its usefulness. I hope that Microsoft learns some lessons from YouTube and Google Video and realize that the lower the barriers for people to browse the content, the more successful it is going to make the product. People have been able to share videos for a long time already, but it involved downloading them, getting a player that could decode them, and playing them back. Now it’s as simple as clicking on a link, and that’s why it has finally reached critical mass.

I’m definitely keeping a very close eye on this project, and I’ll try to give it a test drive as soon as I get a chance. It’s a bit ironic that with dozens of multi-million AAA titles out there, the reason I might end up buying an Xbox 360 is the chance to do play around with some sprites on the screen and re-create a bit of the old 8-bit days. The dream might indeed be back.

Published

I could not agree more with the first part of your article, the complexity kills the fun. (About the second part I don’t really know, since I haven’t looked enough at the XNA initiative yet, but this is clearly going in the right direction)

I miss the days where I could just boot up my 386, type in “tb” and start writing the next wolfenstein-killer (with zombies and plasma guns and stuff) right after “screen 9”. I never managed to put something convincing out of all this (apart from a job in the games industry), but I really had lots of fun playing with the machine.

Nowadays, when I sit in front of my msvc at home, I start collecting all the libraries I’ll need, then I setup them all, read a bit of doc to do it properly, write some framework code, fight with the linker… And by the time I can display “hello world” on the screen, I forgot my idea about my next doom3-killer (with zombies and plasma guns and stuff).

Awesome post! I am a dev on XNA Game Studio Express and I can totally relate to your experience. In my opinion this is exactly what is driving us to create the XNA Framework. We are very much trying to give both an open environment for people to play with and give them a helping hand when/where they need it. IMO we also want to create a community where people help each other and learn from the shared experience. Game programming is hard, especially in 3d, and there is much we can do to improve this without closing too many doors in flexibility and usability.

On the distribution front for the 360, I think we’re on the same page as well and we are very aware of this hole in our v1 product. To quote the person in charge of XNA GSE (from the team blog at blogs.msdn.com/xna):

“Because this is a blog and not the actual press announcement, I can talk about the big obvious hole in the plan. When we ship XNA Game Studio Express this fall, you will be able to share your final product with anyone on your windows machine that you want, but there is no support for sharing Xbox binaries other than sending your source around. We fully intend to fix this in the future, and if I have anything to do about it, it will be sooner than later. The more people that sign up for the subscription and start showing cool innovative content that everyone wants, the easier it will be to get this done.”

This project is a challenging and bold project and IMO we still have to prove internally and externally that it’s really worth the investment and there is something huge to be gained from it. I strongly believe this is the case and it’s probably the most exciting thing I’ve done in my career as a software engineer. I hope you’ll be happy with where we want to bring this project :).

(The lawyers would kick me in unpleasant places if I didn’t say that : ‘The posting(s) on this site are provided “AS IS” with no warranties, and confers no rights. The opinions presented here are mine and mine only and do not represent the views of my employer, my management or my co-workers’.)

I really want to love this XNA thing but without more details, so far it sounds like C# with a smaller .NET library that runs on both platforms. Other than the Microsoft name stamped on it is that really more than just using SDL or a hundred other free frameworks out there?

If this was an MS clone of Virtools for PC/360 or an MS clone of the Unreal tools for PC/360 then maybe this would truely be revolutionary opening up the doors for more and more people, letting them get their feet wet in game development without having to know 100s of details of programming but as it is it sounds like the hype of being executable on 360 is actually overshadowing that it’s really not more than is already out there.

In fact MS’s own DirectX already ships with C# game examples or visa-versa.

As Noel mentioned, something like Dark Basic or possibly better yet Blitz Basic might have been better. It’s pretty clear they work well. Some where between Virtools and C#.

I have similar memories (I also started out on the CPC); that cursor prompt practically said “make me do something” and I seem to recall that the manual that came with the machine was also an introduction to BASIC. When I upgraded from that to an Atari ST, I can remember how amazed I was that there was no inbuilt programming language. It’s even worse nowadays, there seem so many barriers to just getting started and nothing’s simple.

I have suspected for a while that this has also had an adverse effect on the programmers coming into the industry. When I started, there was a culture of experimentation and exploration; you were encouraged to learn and understand, and things were accessible. Today, this seems to have shifted towards knowing how to use visual designers and what libraries to use / call.

However, I’ve increasingly noticed that when faced with something slightly more unusal or things that aren’t working as expected, they often simply don’t know how to even start trying to solve the problem; this is especially noticeable if they have to use a debugger, which many newcomers have often only used a few times before. I suspect that the lack of this history of experimentation, machine organisation, etc. discourages them from trying to find out and understand more about the machine, language, libraries, etc. they’re using and this puts them at a serious disadvantage in my view.

Although I like the sound of XNA, I’d really like C++ support as well; whilst I understand Microsoft want to push .Net, as far as I can tell C++ is still (by far) the dominant language within the games industry, and likely to remain that way for the near future (if not a lot longer).

I was hooked by programming in the same way, but on the Apple IIe, which also would boot to a BASIC prompt (though there was some sort of reboot key combo required as I recall). Started w/ print statements, and soon moved to graphical programming, which luckily one of my manuals had a section on.

I also remember trying to learn C in the late 90’s; the selection of free tools available at that time was pale in comparison to tools available today. This is something that I think was a major barrier; it’s much less risky to spend a bit of time installing some free tools to experiment with than to have to buy a piece of software just to do some tinkering.

So I think the resources available today are much greater, but as you say, it’s much more complicated. Luckily, as you point out, there are languages such as python which are quite easy to start playing with, but do not come pre-installed . . . at least on a windows machine. Python, Perl, and gcc are pretty standard features of most Linux distros. Heck, users can even start with a bit of bash scripting if they have the bug to make the computer do their bidding 🙂

I think this is probably one of the major advantages that drew me to linux; the plethora of powerful tools that are easily available to me. Setting up similar tools on windows can be a nightmare in my experience.

Totally agree. I got a Commodore 64 in 1983(?) and had the same BASIC to assembly experience, with lots of fun along the way. I was very naive — didn’t realize there was such a thing as a symbolic assembler, so I coded all my assembler directly to memory with a debug monitor and addresses of “variables” scribbled on scrap paper.

The C64 was the first and last machine that I truly understood inside out … came close with the Nintendo 64, but a Windows PC? Forget it!! I like where the XNA initiative is going, pity it’s not free on Xbox360 too, and definitely needs a simple distribution model — perhaps a public corner of Xbox Live Arcade?

Great article. I’m significantly younger than you, but I had a very similar experience with TI calculators in middle school and high school – going from BASIC to Z80 assembler. If you’re interested in getting that feeling again, pick up a calculator and link cable — the possibilities are endless. The TI-84+ may be your best bet, because it supports USB and comes with a cable, so the cost of entry is slightly lower.

I disagree with the thrust of this post. If you compare 2006 with 1985, 2006 has such an overwhelmingly huge variety of free game programming tools and assets for everyone. If the 1985 me were teleported here, he would drool at DarkBasic, C# express, Perl, Python, OpenGL…

The fact that these tools are not “pre-installed” would not stop anyone who really wants to make games. If you’re too afraid to download a free programming language, you don’t deserve to make games anyway.

If you want to make games today, there are just thousands of free choices: you can join a MOD crew, you can write GameBoy Color in ASM, you can write Direct3D in C++, etc. etc.

If there’s a problem, it’s that no matter what game you make, and no matter how good it is, chances are that you’ll **never** make any money at it, unless you become a very small cog at a very large company.