Wednesday, April 25, 2007

Proper Notice

Attention all headhunters:

Please kindly stop calling me on my work phone, during work hours, to recruit me. I will not engage in a discussion about leaving my company to join your incredibly vague and "exciting" project when I am on company time. Do not talk about how you "saw your information on Linked In"; we both know that my phone number is not in my profile. I will not discuss this exciting opportunity with you. I will not refer you to other qualified candidates. There is a time and a place for these discussions and it is known as "email". Please join the rest of us in the 21st century and learn how to use it. If you do not have my address, then you have no reason whatsoever to be contacting me.

Thank you. Have a nice day.

Thursday, April 19, 2007

Noooooooooo! Yes!

Agh, Soren Johnson left Firaxis! Hooray, Soren Johnson will be working on Spore!

Completely unrelated: I now feel relieved that I did not experiment with high-tech Japanese toilets.

Cirion the Bard Sings a Song of Wonder

I laughed out loud when I saw the latest Penny Arcade comic, Delusions of Gondor, because I've done exactly the same thing. When I first started playing through the original Baldur's Gate game I chose the Bard as my character class. This was, to be kind, an odd choice. Almost everyone chooses to be a Fighter (fun hack and slash play style) or a Mage (the most power of all characters at the highest levels), and even I usually opt for a Thief class (some cool and unusual play choices). I'd never before played a computer RPG that let me play as a musician, though, and I was curious what it'd be like.

It was interesting. One advantage is that Bards have very high Charisma, so I was a natural leader for my party (very important when you have losers like Khalid to inspire). On the other hand, I had no real skills at all. Couldn't fight, couldn't wear strong armor, could only cast a few of the weakest spells, and while I got Thief skill points, I could only spend them on the most useless skill, Pick Pockets.

So, here is how I would play the game: in the town, I would go around and talk with EVERYONE, and [Persuade] them that they wanted to help me, give me quests, and give me money. Then we would head out into the wilderness or the dungeons, where my intrepid party would be attacked by gnolls, trolls, zombies, whatever was handy. My bruisers (Minsc, Khalid, Jaheira, Keldorn, etc.) would jump to the front; my magic users (Xan, Aerie) would hang back and prepare powerful magic; Imoen would turn invisible and try to backstab someone. And the fearless leader Cirion? I would run way to the back, even behind my defenseless mages, and, with all eyes turned upon me, start to sing.

Sure, some people would say that I might be more "useful" if I were swinging a sword, or causing lightning to rain down from the sky. But I like to think that the sound of my voice was the greater gift, in inspiring people to do their very best.

Almost by accident, I think I stumbled into a viable strategy for the game. Like most computer RPGs, death in Baldur's Gate isn't permanent. If someone gets killed, you can usually resurrect them with no ill effects at all, merely the inconvenience of lugging their stuff around. Over the course of all the Baldur's Gate games I played, Minsc probably died dozens of times, and he was cheerful to the very end. The one exception to this leniency, though, is your main character: if your hero's hit points ever drop to 0, the game instantly ends, with no chance at resurrection. One fireball, one trapped chest, one thief with a poisoned dagger, and it's all over. Therefore, while my play style was undoubtedly cowardly, it also involved a lot less saving and restoring than it would have if I was closer to the action.

I say that I "think" this is a viable strategy, because if it is, I seem to be the only person who knows it. After beating the game I looked through a lot of strategy guides and FAQs for the game, and not a single one thought highly of the Bard class. They're probably right... I just know that I had fun.

Wednesday, April 18, 2007

Success!

As previously noted, I probably won't do a proper review of Made to Stick, even though I should. However, I've found myself thinking about it a lot this week, and now I'll try and make you think about it, too.

Made to Stick was partially inspired by Gladwell's excellent The Tipping Point, and one aspect it shares with that book is the way it focuses on practical applications. TTP was useful to marketers, inventors, salesmen, political activists, anyone who wanted to change the behavior of people, whether by making them buy Hush Puppies or embracing a new political party. Similarly, MTS focuses on how to present ideas to people in a way that will make an impact: if you apply the six principles the book describes, people will remember your message for years.

The reason why I've been thinking of this, other than because it's a good book, is because this week I've been attending a training course. This isn't the first training I've been in; it isn't the best or the worst class I've taken, either. However, since it's the first course I've taken since reading the book, I've found that I'm a lot more attuned to what is and isn't working, and consciously thinking about ways in which the instructor could improve his presentation.

The authors describe a tendency called "The Curse of Knowledge." The people who are most likely to teach a subject or argue a point are those who already know the most about it; however, because they know so much about it, it's difficult for them to understand the perspective of someone who isn't familiar with it. Someone with a PhD in anthropology knows a great deal about the field, but will make assumptions about what his students already know, presume that they are already interested in the topic, and otherwise is naturally inclined to orient his lecture in a manner that makes sense for other anthropologists but may be confusing and frustrating for incoming freshmen who know next to nothing about the subject.

I was thinking about this a lot yesterday. Most of our training takes place using a particular software program that the instructor and several students are extremely familiar with, most likely using it every day, but which I and several other students have hardly ever used before. The instructor will say something like, "And now we need to import the shape as a symbol," and will rapidly execute a series of maneuvers. Because he is an expert user, this really is one action to him: of course importing the shape as a symbol implies all these other steps. However, for the new learner like me, I need to have it broken down more patiently: "First click on the Actions menu, then select Import, then choose As Symbol from the submenu. On the next screen, highlight this radio button..." The instructor doesn't think that he is skipping information or going too fast, because he naturally views this operation through the lens of his own experience, not through the eyes of someone who hasn't used this program before.

(This post may come off as critical or upset, but I really don't mean it that way. I myself am guilty of these sins and more, and would be just as bad if I were, say, teaching a class on writing BREW applications in Visual Studio.)

One of the items MTS champions is "Concrete": to help your idea stick in people's minds, you should use specific examples, rather than talk about things generally. Once again, the Curse of Knowledge is at work here: experts in a field are inclined to be interested in abstractions and generalizations, but these don't make sense to someone who doesn't have the background of concrete knowledge to support those higher-level constructs. I realized that most software training classes I've taken have been guilty of being insufficiently concrete. Other programmers will instantly know what I am talking about: variables are given names like "foo", "bar", "myShape", "myFunction", and other purposefully meaningless names. In a sense this is deliberate, because the name really is unimportant as far as the language is concerned; you could give it any name you wanted to. In practice, though, you would never use a variable name like "foo" or "myShape" in a real program, because a real program has a purpose, and to make the program comprehensible to other programmers you need to select names that describe what something is or what it does.

When I'm in the process of taking a programming course, any given exercise will make perfect sense for me. I'll name a variable "myShape" and follow the steps in the description, and at least at that point, understand what it does. However, stepping through this doesn't give my mind many "hooks" into what I just did. Next week, when I'm presenting this material to the rest of my team, the odds that I'll recall any specific exercise are rather low, and as a result I may forget to describe some particular techniques I "learned" in the course. By contrast, if I were creating, say, a calculator application, or a thermometer, then that would give my mind more ways to remember things. "mercuryMeter" is much more memorable than "myShape", and I might recall the way I manipulated the meter, which would prompt me to remember the commands I used to make it grow and shrink.

(Incidentally, THIS VERY POST is guilty of not being sufficiently concrete. I'm always a little uncomfortable writing about work, and you'll notice that I'm not saying exactly what the class is, what I'm learning, or what I hope to do with it. Sorry. If I were to include that information, odds are better that you would remember the post and realize why it's important to me.)

One of the best professors I ever had was Dr. Ken Goldman at Washington University (in St. Louis, natch). Not only was he an excellent teacher, but he did a great job of teaching computer science, which as I've mentioned above is frequently not taught in a way that makes sense for beginners. Looking back at his class, I can see that he nailed all six of the principles given in MTS. On the specific topic of concreteness, all of the labs for his course and the programs he gave in lectures were programs ABOUT something, often something memorable. I remember in particular an algorithm he designed for "the marriage problem", made even more specific by running on a data set that included Ken and Sally Goldman, Bill and Hilary Clinton, and so on. I still remember that lecture eight years later; what are the odds I would if the data set was, say, "Man 1", "Man 2", "Woman 1", "Woman 2", and so on? Again, programmers would tend to think in the latter sense, because the whole purpose of the program is that it's generic enough so it doesn't matter who the people are. While that's accurate, it isn't very sticky, and I'm grateful to Dr. Goldman for recognizing that.

Plenty more I could say on this topic, but then I would run the risk of distracting from the main point. Wait a minute... I don't have a point! I'm free! Free!

Saturday, April 14, 2007

Everything was beautiful, and nothing hurt

Kurt Vonnegut died this week at the age of 84. I've never done an obituary on this blog and doubt I'd be any good, so I'll just be entirely selfish and (briefly) talk about what it means to me.

Although none of his books appear on my Top Five list, Kurt Vonnegut is without a doubt one of my favorite authors, easily in the top three. The consistent strength of his writing and his enormous humanism both endear him to me greatly. He wrote the kind of book that you could read in a weekend and that would change your life for years to come.

I first encountered Vonnegut in high school, more or less randomly picking up Slaughterhouse-Five. It was good, but after reading Cat's Cradle I was hooked. I voraciously devoured everything he wrote, including his early science fiction short stories and recent autobiographical musings. Not everything he wrote was a classic, but everything was good and provoking.

It's impossible to read Vonnegut without the word "pessimism" creeping in. He can be bleak at times, and his stories very rarely have the sort of happy ending we tend to expect from our fiction. And yet, while Vonnegut denies us the easy uplift of transcendent gestures, there is a quiet comfort to be found in the way his characters muddle through their lives. In Jailbird, he repeats one fan's summary of his work's underlying message: "Love may fail but courtesy will prevail."

My personal favorite Vonnegut books are (in order) Cat's Cradle, Breakfast of Champions, and Timequake. Pat's favorite is (was?) Mother Night. Slaughterhouse-Five is also excellent, though I feel it has reached its iconic stature due to the way it spoke to the previous generation's concerns about war more than its (still good) literary merit.

I can't decide whether Vonnegut's death is made easier or harder by his lifelong commitment to atheism. He took such a wry, low-key approach to death that I imagine he would be a little embarrassed at the attention. After all, his books are still here, and the clump of cells that for years we called "Kurt" is still there. Still, I want to echo the words he said about Isaac Asimov, another lifelong atheist, and say, "Kurt is up in Heaven now."

Tuesday, April 10, 2007

The Legacy of Japan: Photographs and Bizarre Dreams

Phew! It's been a marathon task, but I have finished sorting, trimming, and labeling all of the pictures I took during my trip to Japan. The master collection is up on my main Picasa site. Fortunately for me, Google upped the maximum space for free accounts to 1GB, so I was able to upload everything. These are sorted by album, with each album covering a major sight or section in my trip. They are sorted in chronological order, with the newest on top; if you want to see them in order, scroll down to "Leaving on a Jet Plane" and work your way up.

For those of you who don't have time to scan through 1400 photos, I have made available a sort of highlights reel on another Picasa album. I've tried to include the best one or two photos from each album in the full set, so viewing this will give you an overview of what the trip was like. Each photo has the original caption, though in some cases the missing context means the caption doesn't make sense.

In both sets of photos, there are some minor chronological hiccups resulting from the different timestamps - some pictures came from my camera, some from Justin's cell phone - but while these bother me they shouldn't affect you.

In short, enjoy! The trip was amazing, and I'm pleased to share a portion of it with you. Feel free to share the pictures with anyone or use them yourself.

After the first day back I was mostly recovered from the jet lag, but it is still making itself felt in small ways. First of all is that I will generally spontaneously wake up once or twice during the night. It's not a big deal, since I'll see that it's still dark outside and immediately fall back asleep. Related to this, though, I seem to be dreaming a lot more than usual, or at least remembering my dreams more often.

I had a really vivid one last night. I dreamt that I had woken up in bed, and felt something strange on my arm. I turned on the light and saw that the arm had almost entirely been covered with green, bulbous sores. I didn't freak out, but I was a little concerned, pressing in on them gently and wondering how I was going to get a shirt on without ripping them open. When I woke up for real, I had that brief moment of confusion as I tried to remember whether I really did have the sores or not.

What a pleasant note to end this blog post on! I've had more, but that one has a way of sticking in your mind.

Speaking of "sticking", looks like I'll be finishing Made to Stick in just enough time to return it before it becomes overdue. I doubt I'll have time to do a full review, but I've really enjoyed reading this book. I'd highly recommend it to anyone who enjoyed Malcolm Gladwell's The Tipping Point or anyone who (like me) is concerned about their ability to communicate effectively.

UPDATE 4/12/07: Just had another one last night. I've been thinking about getting rid of some of the books and stuff I've been accumulating, and in my dream, I had gone to a department store to see if I could sell them there. It was a mid-scale place, sort of like JC Penney, and since I had gone in the middle of the day, I was the only customer there. As you probably know, I tend to dislike dealing with salespeople, so I was sort of avoiding them while I looked through the departments. As I was walking out of the store, I went through the lobby, where there were a bunch of comfortable chairs and nice tables laid out, each with an SAT-style exam. I noticed that people from the store were sitting down to take the test, and I thought it would be fun to try, so I did the same, trying to fit in. I had initially thought, "This will be fun! I'll get a perfect score, and nobody will know who did so well." But once I started taking it, I realized it wasn't a general-purpose test, it had a lot of department-store-specific terminology and situations in it. I kept on going, though, figuring that in the worst case, I would get a zero, which would help everyone else with the curve. While I was taking it, the CEO of the chain and a bunch of managers came through, and stopped to talk and look at everyone taking the test. I got nervous, since I wasn't supposed to be there. Later parts of the test required a mobile phone, so I opened up a briefcase by my chair and started using one. I switched between different phones for different questions, and at one point I reached in and pulled out a really old, early-90s model. I was powering it up when a young engineer-type person came up and said, "Hey, is that mine?" I realized that the CEO was looking at me and got even more nervous, at which point I woke up.

There's all sorts of stuff I could extract from that - general anxiety, pride in achievement, perhaps even some nostalgia for school. The bit with mobile phones is just funny, though.

Friday, April 06, 2007

Adventure Musings

Those of you who are aware of CKSoft, the forerunner of Fifth Column Software, might be familiar with the "Adventure" series. These were some text adventures I developed, which unfortunately have been lost in a hard drive crash (always back up your data, boys and girls!), but continue to loom large in my mind. By looking back at these games, I can trace the trajectory of my self-taught period of programming.

Even before I started programming, I was interested in it. My family subscribed to 3-2-1-Contact magazine, one of those educational rags with stories on science and whatnot. The back of every issue had a simple BASIC program which you could copy, line by line, and then run to play a very simple game or perform some calculation. I loved the esotericism and mystery of the commands. Although I didn't realize it at the time, it was also an early exposure to the problems with "Write Once Run Everywhere" which has been dangled in front of programmers' noses for decades; I would idly wonder why Apple programmers would need to type "10 HOME" while IBM programmers would write "10 CLS".

My parents bought us a computer when I was in elementary school. It was a grand old thing, an IBM-compatible Epson computer with an 8088 processor. It didn't come with a ton of software, but it did have QBasic, that glorious blue primitive IDE. Early on, I took great pleasure in digging out my old copies of 3-2-1-Contact and patiently copying the programs, line by line, into the computer.

This triggered a few things. First of all, it gave me a huge rush; my present employment can be directly traced back to the pleasure I got from watching the screen light up with the results of the commands I had typed in. The sense of creation and pride of ownership, even if it came via transcription, has been a profound motivator to me. Second, it was a spur to creativity. Once I was brave enough to go off script, I had a lot of fun editing the programs they had provided, seeing how to change and tweak them, or re-using what they taught me in other contexts. Finally, it was a surprisingly accurate introduction to the world of debugging. Few programs would work properly out of the box, since the 1970s-style syntax they provided did not precisely match with what QBasic was expecting. So I came to have an expectation of how software was developed: you wrote something, tried to run it, deciphered error messages, made changes, and continued trying until it worked. Again, this is shockingly close to what I do today.

Along a parallel track, I was enjoying several disks of shareware software that we had gotten with the computer. One of my favorites had a title like "Great Adventures 2", and was a collection of text adventure games. One was set on a mysterious island, another on a nuclear submarine, another in the arctic, another in an arcade... I was fascinated by the games and their puzzles, and seemingly never tired of my attempts to figure out the one magic word that the developer was expecting me to type in.

It seems natural, then, that most of my early development would revolve around creating my own text adventures. My skillset consisted of old magazine articles and the QBasic Help program; my goal was the opaque but fun games which were compiled onto that floppy disk. And so, as best as I knew how, I set about getting from point A to point B.

Looking back, I'm kind of embarrassed at what I did, but in my defense, I was around 10 years old and hadn't programmed before. For starters, because every line in those magazine articles started with a number (10, 20, 30, and so on), every line in my games started with a number too. My one innovation was discovering that the numbers didn't need to be multiples of 10, so if I wanted to do something between 10 and 20, I could insert 15. It would be several years before I learned that this was no longer required in modern BASIC.

Another limitation was that I really didn't understand variables. This makes sense, since I wouldn't take an algebra class for several years. Instead, I looked at patterns of programs and tried to replicate them. I would see that I could write something like this:
50 PRINT "What is your name?"
60 INPUT A$
70 IF A$="Bond" THEN
80 PRINT "Hello James Bond"
90 ELSE
100 PRINT "Hello other person!"
110 END IF

I didn't really grok what A$ was, but I saw how you could use it to make the computer do different things based on what the user typed in. And so, when I did my first ambitious program, an adventure game creatively called "Adventure", I leveraged it as far as I could.

I'd love to still have that program so I could give you concrete examples, but let me describe what the code looked like. The entire game used exactly one variable: A$. Like most text adventures, there was a series of rooms that you would move between by typing "NORTH", "SOUTH", and so on. You could also type in certain commands, like "TALK GUARD" or "LOOK CASTLE". In the code, this was implemented as an incredible collection of GOTO statements that linked together blocks of code. Each block would PRINT out a description of the room, do INPUT A$ to get the command, and then do something based on the input.

This had a couple of repercussions. For starters, there was no real state data for the game. That meant that, for example, if you typed "GET CARD", I could do a PRINT or a GOTO in response, but the game itself wouldn't keep track of the fact that you had the CARD. To simulate the effect of progress, then, I would use the PRINT statements to clue the player in to what they needed to do. In this example, it might say "The CARD looks like something you should SHOW to the GUARD." Then, when you got to the GUARD, you would know to SHOW CARD. My favorite example of this is one point where you pick up some dynamite, at which point the game informs you "You can use this to KABLOOOIE what you want to blow up." I knew that my clever misspelling of KABLOOOIE would keep players from cheating, since they wouldn't know how to spell it without first picking up the dynamite.

Still and all, I have fond memories of the game. I suppose it was more of a tech demo for me than anything, but the game did have some atmosphere, at least for me, and its setting was strongly influenced by my obsession with fantasy (mainly Lone Wolf game novels at that time). Much of the game was set in forests, but you also would need to climb into the mountains, ford a river, and to win the game would ultimately penetrate the castle of the evil king to kill him (with a SWORD, no less).

Time passed, and I learned more and got better. Somewhere along the line I figured out that I could have more than one variable in a game, and even started to understand what they meant, including the difference (in BASIC) between a string and a numeral variable. On the gaming front, I was starting to get more into RPGs, mainly through Sierra's excellent Hero's Quest/Quest for Glory games, but I also had intriguing tastes of Ultima and enjoyed playing Dragon Warrior and the Legend of Zelda on the Nintendo. At some point, I decided I was ready to return to the world of Adventure, and started my very first sequel: Adventure II: The Chasm of Doom.

This might be as good a point of any as saying that I really wasn't very creative when I was young. The Chasm of Doom was the title of one of my favorite Lone Wolf books, and I didn't have any hesitation in taking the title for my game (which, after all WAS about a Chasm of Doom). This was a longstanding thing for me, starting when I named my teddy bear Big Brown Bear and not really ending until they finally taught us about plagiarism in junior high school.

Adventure II was kind of a hybrid game, sort of a combination text adventure and dungeon crawl. The first portion of the game was set in a village perched on the edge of the Chasm. You would wander through the village, talk with the locals to get clues, buy weapons and armor, and generally prepare yourself for the trials ahead.

Technically, this game was lightyears ahead of the first Adventure. Buying a weapon no longer just spat out some text; behind the scenes, it would set a variable which told the game that you had that weapon. I also started to get somewhat intelligent about structuring code. I was still a long way off from functions, but I came to realize that there were some tasks I was performing over and over again, so I would stick all that stuff into one block of code and use GOTO in and out of it.

Adventure II was another fun excursion. To me, it felt a tad darker than the first game; once you entered the chasm, there was no more human help, just a string of monsters to overcome. (Combat was very simplistic: you needed to have the right weapon to use on each monster in order to kill it.) I also started to reference a bit more of a backstory, one which involved a deposed king and the forces of chaos invading the land... typical fantasy potboiler, I suppose, but for me it was terribly exciting and interesting.

Somewhere around this time I first learned C, and while it is far more advanced than BASIC, I had little patience at the time for it because it took longer to get a game up and running. In BASIC, I could just type '10 PRINT "WELCOME TO MY GAME!"', and I already had the startings of a game. Whereas with C - sigh! - I had to import the standard IO library, and define a main function, and do all this other STUFF. It just didn't seem worth it. So I buried that knowledge and stayed focus on BASIC as a platform for games.

I branched out and did all sorts of other games, a few of which I actually finished. Pretty much everything was text based, with the occasional graphical trick tossed in. I'd learned as I was growing older that I had no artistic talent at all, so it was both more fulfilling and more logical to stick with what I was "good" at, storytelling and writing engines. I still remember a few of these games... some of the more interesting included Big Business, where you ran a conglomerate and needed to expand by buying businesses and responding to crises; School Simulator 1000, which cast you as a sixth-grade student progressing through school and uncovering the more unsavory aspects of your surroundings; Robin Hood, a game inspired by The Outlaws of Sherwood Forest by Robin McKinley, which had you recruiting, training, and deploying a rebellious society from the safety of the forest; and Spy, an espionage simulator that ran from WW2 through the present, and was heavily influenced by a book I'd read about the Mossad.

Keep in mind that, for me, programming is fundamentally a recreational activity. When you understand that, it might not seem so strange that almost every time I take a long vacation, I'll design or start work on an ambitious programming project. For me this provides another avenue of relaxation and creativity; it often confounds and angers those around me. Anyways, it came to pass that on one of my family's typical summer vacations, I started work on my most ambitious project to date, Adventure III.

One of the many striking differences for the third game was my approach to it. In almost every other project, I started the game by sitting down and typing; often the title, even genre and format, wouldn't be settled until I was well into it. This time, since I didn't have immediate access to a computer, I satisfied my urges by filling out much of a notebook with... well, I suppose you could call it design. I drew out a map of the overworld, I came up with a list of the characters you could talk with, drew out a timeline for major events in the game, and so on. As often happens for me, this sort of daydreaming snowballed, with good ideas popping out on top of one another and an endless stream of "Oooh, wouldn't it be cool it..." thoughts crowding in as well. It quickly became clear that this would be my largest, most intricate game yet.

Part of the game was inspired by the box art for Final Fantasy, a game which I've never played, but which showed a castle floating in the clouds, an image that for some reason really resonated for me. The main world was divided into two main sections: the world of light, which had a normal day/night cycle, and the world of darkness, which was shrouded in perpetual gloom. They were divided by a massive mountain range, serving much the same purpose as the Misty Mountains in Middle-earth. The reason why the eastern section was always dark was because of the enormous, mysterious castle floating above it, casting its shadow upon the land below. The eastern region had fallen under the sway of various foul beasts who had started to encroach upon the free lands of the west, and the king of that land (who you had rescued in Adventure 2) desperately calls upon you to discover the source of evil in the land and make it whole once more.

As a side note, I find it amazing that so many fantasy authors use this simple "West = Good, East = Bad" formula. I got it from J. R. R. Tolkien and David Eddings, and just automatically set it in place when I did my own great work. I suppose this might be a legacy of Cold War thinking or something.

The game system itself was far ahead of Adventure 2, featuring a robust combat system with a variety of options (fighting, ranged weapons, use of items, and so on), inventory management, a skill-based stat system, day/night cycle in the western lands, and so on. I started actual coding while still on vacation, borrowing the computer of some family friends with whom we were staying, getting as far as I could and copying the results to a floppy disk which I carried home with me. It got bigger and bigger, and visions swirled in my head as those sketches in the notebook turned into reality. This would be a true epic! It would revitalize the world of text gaming! It would take dozens of hours to beat, and tell a gripping story in the process!

Then I discovered that QBasic has an upper limit on the size of the files you can edit.

I should point out that, while Adventure 3 was much more advanced than its predecessors, it was still a game written by a self-taught pubescent. While it had become more complex, the underlying structure wasn't much better than the very first game... I still wasn't using many subroutines, all variables were global, there was just a single file with everything dumped into it. The underlying problem is that I was using a procedural language, but even there, I wasn't really approaching it in a way to optimize the code I was writing. Anyways, there were just far too many lines in there, and for one horrible minute I sat staring at an error message which said "Exceeded Maximum Size."

Needless to say, that sort of took the wind out of my sails. By my own calculations, I had spent a few weeks on it, and had only finished maybe 5-10% of the game. A few weeks later, I did realize that I could squeeze some more space into there... the limit I was running into was the size of the source file, not the executable, so I could get creative (shrink variable names, consolidate multiple commands on a single line, and so on) to free up some space. However, it was painfully clear that I would not be able to realize my ambition, and so I regretfully laid Adventure 3 to rest, with the hope that some day I would be able to use another language to realize my vision.

That day hasn't come.

In seventh grade, I did start to dream of the future of the series. Not having finished the third game didn't stop me from plotting out the future course. I came to decide that the whole Adventure cycle would consist of a total of five games, and wrote plot treatments and drew (horrible) box art for each one. The third game would end, I decided, with a massive confrontation with the Ultimate Evil, and would end in failure, with your character banished from the universe. The fourth game was inspired by the Lone Wolf book The Prisoners of Time, and focused on your efforts to return to the main world. In the process you would travel through various elemental planes, in which everything you encountered was fire or ice or lightning or the like. As long as I was dreaming, I decided that the fourth game would be the first graphical Adventure game; the player would actually navigate through the world using the arrow keys instead of typing commands.

The fifth game would see you return in triumph to the main world, and the world of the text adventure. I wanted to return to the mode of Adventure 3, adding even more features to the game: you would travel with a party, and early on in the game would seize control of the floating castle, which you could fly around from place to place. I deliberately held off on deciding how the series would ultimately end - I tended to believe that I was most creative when I was making stuff up at the keyboard - but five seemed like a nice number to end on.

And that's as far as it went. I did continue to write more text adventures later on, leveraging what I had learned with Adventure to structure things more intelligently. At one point I even took the Sierra route and redid an existing game using more advanced technology, when I rewrote the original Adventure game using graphics. Later highlights included The Project Game, written in 8th grade as a relatively realistic game set in my junior high school and structured as a typical inventory management and quest-solving game (and also featuring incredibly crummy line-drawn graphics), and Something Strange, written in my senior year of high school and probably my magnum opus, a bizarre tale heavily influenced by Robert Anton Wilson and Zak McKracken which combined my high school with conspiracy theories, the Illuminati, government cover-ups, globe-hopping travels, and more inside jokes than you could shake a stick at. Something Strange is something that only half a dozen people in the world can even hope to understand, and it even confounds most of us.

And so it goes. I still love writing games, but the Adventure saga is well behind me. I think of them much as an artist probably considers his childhood scribbles: interesting and humorous, though slightly embarrassing. Still, they're part of my story and part of my life, and I probably wouldn't be the programmer I am today if I hadn't had so much fun writing them in my youth.

Thursday, April 05, 2007

Eating Sushi

One benefit of my excursion abroad is that I got to enjoy a great range of phenomenal Japanese food, including both forms I was already familiar with (sushi, tempura, udon, etc.) and ones which were new to me (nabemono, yudofu, yakiniku, tonkatsu, and more). Another benefit, beyond just tasting the wonderful food, was learning more about it: how the culture approaches its food, the best way to eat certain types of food, what common pairings are, the structure of the meal, and so on.

While I won't claim to be an expert, I now understand a lot more about Japanese food than I did before. However, you don't need to travel all the way to Asia to increase your own knowledge. Justin pointed me to this extremely helpful and informative video on the proper Japanese form for eating sushi, which should help even the worst of us get a head start on better approaching this occasionally intimidating (though generally delicious!) meal.

Wednesday, April 04, 2007

I'm back! I'm sleepy!

Boy oh boy, that was FUN! Going to Japan was definitely one of the best vacations I've ever taken... it's such an overwhelming experience that I hesitate to say anything specific, because once I start I won't be able to stop, and I really do need to sleep soon. For now I'll confine myself to saying that, as I'd hoped, it covered just about all the axes: parts were exciting and others relaxing; I spent time gawking at high-tech Tokyo and ancient Nara, Kyoto and Kamakura; the culture was frequently exotic but unflaggingly polite. It truly feels like a once-in-a-lifetime experience, and I'm glad I had the chance to go.

I did keep a journal while I was there, in the hopes of generating something I could easily convert into insightful and intriguing blog posts. Flipping through it now I see that much of it is inane, more irrelevant, sizable chunks are incomprehensible, and the remainder inadequate. So it makes an entertaining memento, but probably nothing I'll want to inflict on others. I will, however, be subjecting some of you to my photos. I just finished copying them off my camera - I took in the neighborhood of 1400 pictures and videos, which I have helpfully subdivided into about 80 albums. Next comes the fun period of weeding out the (numerous!) bad shots and captioning when appropriate. However, this is mainly for my own benefit; after the whole set is done, I think I'll pull together a more manageable collection of a couple dozen of the most interesting pictures. So even if you see stuff popping up on Timmy's House of Incandescent Sprinkles, you might not want to dive into it yet, lest you perish of boredom.

Ah... it IS good to be back. There's a lot I'll miss about Japan (their amazing emphasis on customer service springs immediately to mind), but there's no place like home. Feels good to be sitting on my comfy chair in front of the old PC again. And let me tell you, the burrito I just ate tasted wonderful.