Category: Cool People

Your Sinclair – The Rock & Roll Years

One of the best things about the internet is that you’ll occasionally stumble across a site that feels like it was tailor-made to make you happy.

In the past I have bemoaned the fact that the Sinclair Spectrum, Britain’s first popular home computer, never made it big here in the States. This is only natural, really, since it wasn’t released here until after the Apple II and Commodore 64 had already asserted their dominance, and by that time the Spectrum seemed like “too little too late” even though it was cheaper than either of those models.

So finding a website that allows me to vicariously live through the heyday of the Spectrum was wonderful. This website is devoted to the now sadly defunct Your Sinclair magazine, which was to the Sinclair was The Rainbow was to the Color Computer and Run was to the C-64. It was chock-full of reviews, editorials, and hardware and software projects, and eventually started shipping with a cassette full of demos with every issue.

And as if that weren’t enough, the site’s maintainer is also in the process of creating retrospective videos for every year of Your Sinclair‘s existence, and many of these are already online.

Go Speccy!


Daily Randomness

Please click here to hear The Little Mermaid say “NOW I’m pissed.”

That is all.


Notes on the April Austin Game Developers Meeting

Okay, a bit of backstory. Austin Game Developers was a group that held monthly meetings for game developers in Austin, and I went to those meetings whenever possible for years. That’s where I heard that excellent talk by Phil Steinmeyer about his work on the Heroes of Might and Magic games and the Railroad Tycoon series and the subsequent creation of PopTop.

But about a year ago AGD lost it sponsor and could no longer hold meetings. Things looked bad for a while, but Austin Game Developers finally managed to respawn as the Austin chapter of the International Game Developers Association. And they just held their first meeting a month ago.

Unfortunately I didn’t know about it, so I missed a talk by one of my favorite programmers, Mike McShaffry. Grrr….

But the grapevine did its job and I heard about this month’s meeting, which would feature a three-person panel talking about how to make video games fun. The panel? Richard Garriott of NC Soft, Harvey Smith of Midway, and Chris Cao of Sony Online Entertainment.

(Yes, yes, I know, go ahead and make your “Sony Online? What the heck do they know about making games fun?” crack.)

The meeting was held at Midway’s Austin studio. Just getting to the front door of Midway is an epic-level challenge, as construction has turned the parking lot into a maze. But once inside I was greeted by a very nice-looking game development space. Clean and well-laid-out, with lots of big conference rooms (one of which sports a beautiful projection TV). Big lounge and kitchen space, big offices. But it doesn’t feel too corporate – it definitely feels like a game studio, with Xbox 360s in practically every room you visit and posters, concept art and toys all over the freakin’ place. The only exception – tiny, tiny cubes. It seems that Midway Austin is growing.

When I arrived the Mingling Period was well under way. I saw several friends of mine whom I hadn’t seen since…well, the last AGD meeting. One of them was the Fat Man; it was great seeing him again. And I discovered that several of my friends whose fate I lamented in one of my video blogs ended up at Midway and seem to be doing just fine.

Then they fed us. The food was good but too spicy for me. I got a free alcoholic beverage and asked for a rum-and-Coke, then I put another can of Coke into it and it was drinkable. (Not trying to slight the bartender; please recall that alcohol doesn’t taste very good to me.)

So there I was, drink in hand, listening to some very good game developers speak. Frankly it was the most fun I’ve had in months, and I’d forgotten how much I missed going to those meetings because I always feel recharged and excited about game development afterwards.

Each person on the panel gave a short presentation on what they thought “fun in games” meant and then the panel took questions from the audience. It was fascinating to see how different these three guys were in their philosophies.

Chris Cao was first. His presentation was shortest and highest-level. His basic message was that you can make fun games by having fun making games and fostering an environment where crazy thinking can happen. He said that one of the imagination-building exercises he used was having every member of his team – no matter what their actual duties – make a board or card game so that they all understood the entire game-making process.

Richard Garriott was next. His presentation could not have been more different than Cao’s; the first slide Richard presented said, “Research, research, research!” Richard’s point was that “fun” is hard to define and a real “lightning in a bottle” quality, so the best thing to do was use rigorous procedures and follow basic rules of software design so that the fun could come out unmarred, if it were there. He talked a lot about things like not obscuring what would have been a fun game by making the actual software too hard to use. He also talked about the tropes that gamers tend to respond well to and understand, like numerology and symbolism.

Harvey Smith was last. His talk was closer to Garriott’s than Cao’s, but he had some unique things to say. He didn’t shy completely away from defining “fun” like Garriott did. Instead he presented a concept by Marc LeBlanc, another designer, called The Eight Kinds of Fun. Harvey seems to definitely subscribe to this philosophy and says that the first step to making games fun is to define which of the eight types you’re going to try to provide for your player.

Once all the presentations were over, they took questions from the audience. Some questions drifted away from the topic but nobody seemed to mind. Richard Garriott got the biggest laugh of the night when he responded to a question about game development funding and return-on-investment by saying, “I made Akalabeth in six weeks after school. The cost of development was zero. It made me about $150,000. That’s effectively an infinite return-on-investment, and somehow it’s all been downhill from there.”

Afterwards we retired to the large conference room with the beautiful projection TV I mentioned earlier to play some Guitar Hero II. The Midway guys had completed the experience by decking the room out with disco balls and strobe lights. It was awesome. Fat challenged me to play a song competitively against him; I accepted, sure that I was going to go down to ignominous defeat. We played “Can’t You Hear Me Knocking”, and to my great surprise I kicked his ass even though I’d never played the song before.

And he calls himself a musician…:)

Final note: the official wrap-up of this meeting on the IGDA Austin site is here, and you can download the slides for all three of the presentations from that page. You can also see me if you really really want to; I’m in the third picture. I’m sitting in the front row and wearing a black shirt. I am apparently amusing my friend Jamal Blackwell by doing the hand jive.


Mighty Acorns

The screenshot I presented yesterday was a visual representation of the galaxy map of the original Elite. I generated it myself from the game data.

The Classic Elite Galaxy.

So why wasn’t such a map actually available inside the game itself? Surely providing such a map would have been very helpful to the player.

The answer is because in order to draw such a map and make it interactive, you would have to have the entire dataset for the galaxy in memory at once, and Elite couldn’t do that.

The designers of Elite, Ian Bell and David Braben, had a problem. The machines they were designing Elite for had at most 16k of RAM. One of the premises of Elite was that you were exploring a large section of the galaxy, one 256×256 units in area. This galactic sector had 256 star systems in it. Each star system would have data for its own unique name, tech level, economic level, government type, population level, productivity level, price for each trade good, and even a couple lines of text describing the most interesting aspects of the system. Each star system required four 16-bit values for this data. Thus, storing the entire galactic map would have required 2048 bytes of data – 2k, or 1/8 the amount of total space usable by the game. And when you’ve also got ship data to store and a 3D engine to run that’s just not good enough.

But Bell and Braben didn’t need access to the entire galactic data set at once. They typically only needed the data for the current star system the player was visiting.

Realizing this allowed them to solve the problem through the use of procedurally generated content. They started with three sixteen-bit numbers, which could range from 0 to 65535. These were called seed0, seed1, and seed2, and the values for the original Elite galaxy were 23114, 584 and 46931. These were not generated but were stored in code.

They then created a function called “tweakseed” that would create new numbers based on the existing ones. This function would also push the existing values “up”, getting rid of the oldest one and putting the new one into seed2. Here’s the C version of tweakseed from Bell’s Text Elite sources:

void tweakseed(seedtype *s)
{
    uint16 temp;
    temp = ((*s).w0)+((*s).w1)+((*s).w2); /* 2 byte aritmetic */
    (*s).w0 = (*s).w1;
    (*s).w1 = (*s).w2;
    (*s).w2 = temp;
}

Thus, before the first run of tweakseed, the seeds would have their initial values:

seed1 == 23114
seed2 == 584
seed3 == 46931

Running tweakseed once would generate a new seed, 5093, and the values would then look like this:

seed1 == 584
seed2 == 46931
seed3 == 5093

Since these values were generated by a function, they were predictable. They were random but in a controlled fashion. The game would use four seed values for each planetary system; thus, if the game needed the data for star system 113, it could just run tweakseed 448 times and then use the next four seeds as its data. The data would always be the same; thus, star systems would stay put. “Jumping” to a new star system was simply a matter of clearing out the data for the previous star system and replacing it with the generated data for the star system the player was jumping to.

Thus, these three numbers and this one small function represented an entire galaxy inside Elite. And as as if that weren’t enough, it didn’t just represent one galaxy. By changing the three starting seeds you change the entire galaxy. Since the three starting seeds could range from 0 to 65535 each, this formula could generate 281,474,976,710,656 galaxies. And initially Bell and Braben were going to allow the user to input their own seeds so that each player could play in his own private galaxy. They were overridden by the publisher, who felt that it was a bad idea to emphasize the fact that the galaxies were random. So Bell and Braben chose eight seed sets to represent the eight galaxies of the classic Elite Universe.

Procedurally generated content is all the rage nowadays, but it’s a very old concept. (As is sandbox gameplay, something Elite also pioneered decades before Grand Theft Auto III.) The interesting thing is that nowadays we are looking to generated content for exactly the opposite reason Bell and Braben did. Bell and Braben used generated content in Elite because they didn’t have the space to store their entire dataset at once. We are looking to generated content because we’ve got so much storage space that we can’t possibly hand-create enough content to fill it.


Dinner Unconquerable

I’ve been watching a new show on Food Network called Dinner: Impossible. Every week, a top-tier professional chef (Robert Irvine) is given a nigh-impossible challenge to complete. In the first episode it was merely to create a five-course dinner for a wedding reception of 200 in ten hours, but things have gotten much harder and more bizarre since then.

I’ve thoroughly enjoyed the show. Robert is a pro from Dover (possibly literally, since he’s English) and has never failed a challenge yet.

Now that I’ve watched about five episodes, I’ve noticed that once Robert gets on site and manages to map his current challenge to his formidable previous culinary experience he’s unstoppable. He’ll get into his groove and start barking orders and delicious meals will pretty much appear out of nowhere.

So the producers have ramped up the challenge by throwing him more and more curves on every episode. The most recent challenge had him cooking in a tiny train car with only one of his sous-chefs and the conductor of the train was constantly interrupting him with change orders. Once his food was nearly done, he had to transport it to the dining cars, reheat it and then serve it.

Now, as I was watching the most recent episode, I oddly enough saw a parallel to game AI. Specifically, the episode reminded me of the original Command & Conquer.

The AI for Command & Conquer was pretty weak. It didn’t respond well to feints and was highly predictable; thus it was pretty easy to beat. Of course, in order to beat it you had to get your economy going. You had to build your base, get your Tiberium stream flowing and start cranking out units. So later missions of Command & Conquer rasied the difficulty not by making the AI smarter (the AI is the same in all missions) but by making it more and more difficult to get your base built and get into your groove. One late mission had you landing on a beach with just your mobile construction vehicle. The beach already has emplaced NOD guns so your MCV starts taking damage right away. If you’re quick you can run right and just barely get away from the guns with a sliver of health left on your MCV, which you can then deploy near a Tiberium field. But a damaged MCV deploys into a damaged Construction Yard, so a lucky hit from a passing NOD bike is all that’s necessary to hear EVA say “Your mission is a failure”.

When the Ensemble guys got together to make Age of Empires one of their goals was to create a non-cheating AI that played at several levels of difficulty. For a long time I thought it was kind of foolish to spend so much time on a non-cheating AI when for the most part we players wouldn’t be able to tell the difference. But now I’m convinced they made the right decision.

As for Planitia…well, I think Planitia will be lucky to have any kind of AI.


Five Things You Don’t Know About Me

Okay…everybody else is doing it. I guess I will too.

1. My cousin is my sister. Okay, please pay very close attention as I explain this. The tortuous intricacies of my family history have driven more than one man mad.

Hmm…given that, maybe I shouldn’t post this…

Oh, what the heck. What’s the worst that could happen?

All right. Once upon a time, I was born. When I was four years old, my birth mother gave me up for adoption and I was adopted by my birth mother’s brother and his wife. They already had a girl just about my age. So my cousin became my sister, my uncle became my father and my aunt became my mother.

My mother then had one more son by my father before finally leaving him, since he had long proven himself to be completely unfit as a husband, father, and human being. (He made an excellent example of what not to do, and to this day I cannot help but grudgingly admit that it was watching him make my mother cry over and over that instilled in me a deep desire to never ever do that to my wife ever.)

So my mother was now unattached with three kids. This did not bode well for future marriage prospects. Fortunately she met a man at her job who was everything her previous husband was not – he was and is a fantastic human being and provided me with a very nice counter-example to my previous father. They married and eventually had another son.

So my family consists of six people – me, my mom, my stepdad, my sister and my two brothers – three of whom are really my aunt and two cousins, and three of whom I share no blood with at all.

2. I have a buck tooth. This is not anything special; what’s special is how I got it. See, when I was about five or six, I started feeling a hard lump in the roof of my mouth. Having never lived before I was unaware that this was anything abnormal. Then one day my mother was dressing me and suddenly forced my mouth open. After looking inside and ascertaining that I indeed had a misplaced tooth growing out of the center of the roof of my mouth, she took me straight to the dentist, who pulled it out. No worries. Except that it had grown out far enough to push one of my front teeth out of place and as I got older it just got worse. So no acting career for me!

3.
I placed second in a state-wide programming competition when I was in High School. This was probably in 1988 or so, back when I was living in Georgia where I grew up. The competition consisted of writing several programs that exhibited certain behaviors (including one that, now that I look back on it, was very much like a linked list) in a certain amount of time. The machines were all Apple IIs and the language was Integer BASIC. While I was disappointed with second, I observed that the guy who placed first was the trademark “brilliant programmer with zero social skills and no hope of ever getting any more”, so I figured that placing second and still being able to carry on a conversation with another human being was probably more desirable.

4.
I once lived in a crack house. This was pretty soon after I got to Austin. I had been living in a rented house with another roommate. I got suspicious when I started seeing him less and less and then finally I got a note from him saying we had to be out of the house. Turns out he’d taken my last month’s rent money and kept it for himself. He was a real bastard – he had an absolutely gorgeous girlfriend (and I’m not exaggerating here – she was on a local fitness program on TV) but he cheated on her every weekend.

So, anyway. Me, no place to stay. A friend of mine at work tells me he has a friend with a room. I’m desperate so I go. Now, I could tell right away what kind of place this was, but there I was, suitcase in hand, nowhere else to go and the guy tells me that $50 a week will be fine. So, I figure what the heck.

Thus started several months of gunshots outside, wild partying and screams of “He won’t give me my junk!” I can quote an entire Body Count album to you; I certainly did not learn those lyrics of my own volition. I never felt like I was in any real danger – the guy who owned the house really liked getting $50 a week for basically doing nothing and I didn’t make any trouble so I was pretty much untouchable. And I learned how to play dominoes really well.

5.
In my senior year in high school, I tried out for the school’s production of The Wizard of Oz. I really wanted to be the Cowardly Lion since he was my favorite character from the movie. So I went in and read for the Lion.

Then the director had me read for the Scarecrow. Then she had me read for the Tin Woodsman.

Then she cast me as the Wizard because I could do a bunch of different voices and the play used the concept from the book that the Wizard appears in a different form for each character.

The play was a hit, making more money for the school than any other in its history. This peeved my sister who had been in the previous record-breaker just a year earlier.


Woohoo for Wynne!

My friend Wynne McLaughlin got mentioned in our local paper! You might remember Wynne as the Source of All Snark in Hit & Myth; now he’s a writer/designer for NCSoft, working on Tabula Rasa.

Go, Wynne! Go, Wynne!


Video Blogs On Hiatus

Rather than just let them fade away, I’m going to officially put the video blogs on hiatus. There are a couple reasons for this.

First, since I got sick about two weeks ago my energy level has been kind of low and I’ve had this chronic cough…not good for talking.

Second, WonderMellon recently commented that when I started doing my video blogs it felt like my other projects were beginning to suffer. That’s true…it’s just amazing how much time it takes to do a video blog. It’ll take me three to four hours just to get fifteen minutes up on the web, and that’s time I could have spent much more effectively on a One-Page Game or Planitia.

Third…well, it’s getting kind of forced. The video blog I was planning to do this weekend was going to talk about high-level versus low-level story, which is something everybody is probably already familiar with…and I’m not really sure what my point was going to be.

The video blogs (or some other video feature) will return when I feel like I’ve got something to say and I’m well enough to say it (cough) without coughing (cough) all the way through (cough) it.

(cough)


First Character

Last night my older daughter made her first D&D character, a female human chaotic good cleric named Yue.

They grow up so fast…sniff…I promised myself I wouldn’t cry…

Actually, she expressed interest in trying out “real” D&D recently (although this technically isn’t her first experience with the D&D system since she’s a huge Neverwinter Nights fan). Since I didn’t have a copy of the most recent rules I opted for the D&D Basic Game, which I purchased at a local Toys R Us.

We played through the first very short programmed adventure with a precreated character and she really enjoyed it. Wizards of the Coast went ahead and integrated the D&D miniatures game into the basic rules, so the basic game we bought came with a whole bunch of plastic miniatures and mapboards. She had no trouble picking up the rules and she thoroughly enjoyed bashing some kobold brains out.

Ah, kobolds…I remember when I…sniff…no, must be strong!

But she didn’t like any of the pregenerated characters and wanted to make her own, so she cracked open the advanced rulebook, which has character creation rules for the four basic classes (fighter, rogue, cleric and sorceror) and the four basic races (human, elf, dwarf and halfling).

Then she sat at the table for about two hours voluntarily reading and doing math. God I love paper and pencil RPGs!

Now, overall the quality of the D&D Basic Game is quite high, but in the player section of the advanced rulebook there is one vital omission…nowhere does it tell you what your starting Armor Class is! There are tons of rules about how to modify your starting AC based on your race, your Dexterity score and your armor, but nowhere in the book do they tell you that your base AC is 10! That seems like a weird omission. That one stymied us for a bit…I knew in previous versions that the starting AC was 10 but I didn’t know if it was still the case. I was able to look at the pregenerated characters and figure out from them that base AC was still 10, and she was finally able to finish her character.

Who will probably go on her first adventure tonight!

For the record:

Name: Yue
Race: Human
Class: Cleric
Alignment: Chaotic Good
Deity: Pelor

Ability Scores:

STR: 16 +3
DEX: 14 +2
CON: 15 +2
INT: 12 +1
WIS: 17 +3
CHA: 16 +3

Saving Throws:
Fortitude: 14
Reflex: 16
Will: 18

Skills:
Diplomacy: d20
Hide: d20
Listen: d20
Move Silently: d20
Search: d20
Spot: d20+2

Combat Stats:
HP: 13
AC: 14
To-Hit: d20+3
Damage: d8+3
Initiative: 12

Feats:
Iron Will
Toughness

Spells:
Detect Magic
Light
Read Magic
Bless
Cure Light Wounds (heals d8+2)
Cure Light Wounds (heals d8+2)

Equipment:
Holy Symbol
Morningstar
Leather Armor


One Page Game #3: Quad Force!

Well, not exactly one-page. Tom’s game turned out to be about 2.5 pages in length, but you will not believe how cool it is. It’s basically a little Zelda clone in 3D, with an overworld and four (count them, FOUR!) dungeons to explore, each one with its own tricks and traps.

Head on over to his site for the code and the executable. Be sure to read the readme, or you’ll probably have trouble figuring out what is going on.