A New Project

Above is the results of several weeks of work. It has one fatal flaw, however. Allow me to explain.

I am a gamer.  I play video games, board games, role-playing games, and some sports.  My taste in games is very eclectic, but also somewhat mercurial.  I will love a game–obsess even–for a week or two, and then move on to something else.  I have always had a problem with attention span when it comes to games.  I do not believe this is a character defect.  There are simply some absolutely brilliant games that have managed to suck me in for more than 40-60 hours (the flexible benchmark in my mind for a brilliant game), and some that don’t.

The upshot of this is that I have played many, many games.  My Steam library is only about three years old, and yet it’s about 130 games long (some of which I’ve never played, of course).  Through it all, there has always been this little thing in the back of my mind.  This notion that if I had been working on this game, I might have considered doing something differently.  I do not have the slightest notion how difficult it is to make a game.  I can only understand intellectually, by watching the credits roll by at the end of a game, how many people and how much time is involved.  I understand that a big budget game takes many people many, many, many person-hours over several years to complete.  But I don’t actually understand this any more than I understand that the sun is 98 million miles away.

And so, it is with a sort of naive enthusiasm and confidence that I embark on a new personal project.  I have been calling it my “self-education project” with my wife and friends.  For the past month, I have been reading, in true obsessive fashion, everything I can find on Java programming (more on my choice of Java in a moment).  I have been reading articles on game design, AI, terrain generation, pathfinding, data structures, isometric perspectives, sprites, and more.  I’ve written stupid little programs in Java and OpenGL. A blackjack game, a little-ship-that-shoots-at-aliens game, and a few others.

Let me back up. I quit my job last spring. I was teaching at a community college in rural North Dakota. Both my wife and I did. The reason for this is convoluted. The job was fun and rewarding. But the pay was pretty abysmal and we had few friends there and no family. Not to mention, there is nothing to do out there. In the end, the reason we took the chance and quit was simply the fact that the thought of staying for another year (after two years already) was a deeply depressing thought. So we quit.

And we didn’t manage to find brilliant replacement jobs before our summertime paychecks ran out.

This means that I’m back to substitute teaching and my wife (who is far more aggressive than I at job searching) is back to bartending. This is fine for now. However, I need something to work on. And one day, two months ago maybe, I was reading a book in a hammock (this was my indolent summer after quitting a teaching job which pro-rated paychecks throughout the summer–yay!), I got an idea. It was nebulous then, and it continues to be nebulous, but it is an idea.

I haven’t been able to write fiction all summer. There has just been a part of me that refused to do it. This is purely my own lack of self-control, but it is also the fact that I simply do not have a good idea to run with (excuses, excuses). I now have an idea that I want to run with. However, I do not know much about computer programming (or at least I didn’t). I took a few computer science classes in college and learned some basic C++ and even a little Lisp, but that’s it. I knew some syntax, but I did not know “how to program.”

And so I got it in my head that I wanted to do a feasibility study. I wanted to discover just how difficult it would be for an expert-level user (someone who understands at an intuitive level the current conventions about how to use a computer, and currently operates his own, self-constructed Windows box) with almost no real knowledge of actual computer programming to make a video game of real quality. How long would such a project take? What language should I learn? What books/articles should I read? Will I, as I often do, get bored and give up?

So that’s the experiment, and so far so good. It has been two months, give or take, and from here on out, I will make an attempt to regularly post about it here on the Spin.

And so I’ll share a few of my thoughts here. First: Java.

I chose Java because it’s portable. There is some concern that it’s not as fast a language as it could be. This is true. The JRE, from what I understand, makes it a very high level language. Not as high as, say, a scripting language, but certainly not as close to the machine as C++. But machines are faster and stronger these days. Some very sophisticated software is programmed in Java, especially in gaming. Minecraft, for instance, is programmed in Java using the Lightweight Java Games Library (LWJGL), an OpenGL interface for graphics acceleration. I’m not looking to make Minecraft or even come close to its success (Marcus Persson was a professional programmer before he made Minecraft), but I’m interested in using some of the same technology. Knowing how robust and tight Minecraft is, gives me hope that a simple 2D isolinear game will also run well using the same language.

So I started reading a text on Java. This one, to be exact. And it’s…just truly marvelous. And I had some great success with it. I did get impatient before finishing the text (c’est la vie), but I got through the essential stuff. I have a good idea of how to navigate the Java API, I understand variables and pointers, I have a working understanding of how Java handles exceptions, I think I know enough about data structures, recursion, searching, sorting, and all that other good stuff, that I just started looking up some stuff that would be useful for my project.

I’m starting with something really hard. Perlin noise. I want to make a heightmap so I can generate the terrain of an alien world so that everyone who plays the game will play on a different world. This has been a nightmare. I’ve read many articles about Perlin noise and I’ve read lots of forum posts by people who are doing or have done exactly what I am trying to do. People who are all like, “I be learning how 2 program for 2 weeks now, and I ned a good tut on perlin noise.” And that was me, too. I wanted a good tut. I needed it. In my brain. But there isn’t one. At least, not one for someone with my incomplete knowledge base.

Oh sure, there’s a lot of truly great literature. This is something I have struggled with all my career when it comes to mathematics. I was able to construct a pretty solid intuitive understanding of how the math works, but there was a barrier between that intuitive understanding of what it was and how to actually…just…do maths. Same here. I get how Perlin noise works, I just don’t understand how to implement it in java and just make it fucking happen on my monitor.

What I ended up doing was reading every article I could and realizing that, as a math enthusiast, but not a math expert, I was never going to completely understand the algorithms involved in generating any kind of coherent noise. But I persevered. I looked for algorithms Read some pseudocode, found it very difficult to translate to Java, gave up, looked for something else, finally found complete source code in C# for a Perlin noise algorithm with lots of options. This was last night. I stayed up way too late. I am so tired today at work. But I am satisfied that I have finally found it. I generated my first, very rough heightmap last night. And boy…did it feel good. I even managed to write some of the code myself.

And so, the image at the top of the post is the first output that my algorithm pumped out. But what in the hell is up with that slash through it? I have no idea what in the code caused it and I can see the next few weeks will be spent trying to figure out how to get rid of it. Wish me luck.

Ciao.

Scrolls, Scrolls, Scrolls

So, I just finished the main quest for Elder Scrolls V: Skyrim.  I’m a little surprised, honestly.  Not about the ending.  There were no surprises to be had there.  In many ways the story is quite standard.  This is not a criticism, just a fact.  Anyway, what surprises me is the fact that I actually finished the game.

All told, I have logged an astonishing 93 hours on the game.  I think I spent less than 6 hours on the main quest.

I have some problems with it.  If you had asked me three weeks ago whether I was likely to finish the game it would have been an enthusiastic “yes.”  I was enjoying the hell out of the game and I was hitting it hard for hours every night.  The problem is, it soured for me somewhere around hour 50.  As stunning and well-designed as the dungeons are, they started to feel repetitive.  After a while, I even stopped looting these dungeons.  There was nothing in them that I wanted.  Nothing in there for me.  I was the uber Dovakhiin who could shout a fucking dragon into submission and destroy it with nary a thought.  When fighting a dragon is nothing more than a nuisance, there is something wrong.

Even Alduin was a trivial encounter.

Bethesda, in the months leading up release, was bragging about how the game would have so much content.  The problem with having that much content is that when a player spends that much time in a world, he begins to see its flaws. I suppose it is a monumental feat that the major flaws did not become evident until so many hours had gone by. I spent far fewer hours on, say, Deus Ex: Human Revolution, and I was entertained the entire time, but it was by no means a perfect experience.

To contrast, I have spent far more hours on Minecraft. Hundreds probably. But Minecraft still hasn’t lost its allure.

My experience with Skyrim is something like my experience with Family Guy in one important respect.  It’s essentially the same exact show that it was in season one but where it was interesting and new and fresh back then, it is now stale, boring, and its structure is showing.  It can get a few more yuks by making fun of its own formula to a certain extent, but that will only take it so far.  Then again, the Simpsons has been doing that for years.

I feel the same about Skyrim.  Unlike a TV show, there isn’t really a “jump the shark” moment. Just as there wasn’t a specific one for Family Guy.  Rather, it was a gradual realization that everything is the same no matter where you are in the world or what you are doing.  The sameness is palpable, oppressive after a while.  Many of the small quests and stories are clever; don’t get me wrong.  But almost all of them have you doing the exact same thing.  Travel to a location, fight some fuckers, recover an artifact, return it for money. It doesn’t vary much.

An example of what I’m talking about is the flow of a dungeon.  Almost every dungeon that you encounter in Skryim follows a pattern.  I don’t care if its a mine, a bear cave, or a centuries old Dwemer ruin.  You kill a few mobs outside and then enter the dungeon. As you pass a certain threshold, you may or may not notice a sealed door that would take you directly to the end of the dungeon.  But it is inaccessible.  Instead, you follow a more or less linear rail to the terminus of the dungeon where you fight some sort of boss, get some sort of quest item, learn some dragon shout, and/or complete some objective.  There’s a door behind the blasphemous altar or ancient sarcophogus.  Behind that door is a chest with some really sweet loot and some shelves with potions or soul gems or alchemy reagents.

You will then find that barred door or hidden passageway that spits you out at the beginning of the cavern or poops you out at the top of a mountain that would be inaccessible from outside.  The structure is apparent.  It’s a convenience, a mercy for the gamer, not to have to slog back through a now empty and desolate cavern, but when you iterate it sixty odd times or more, the game begins to feel engineered, rather than organic.

My understanding is that Bethesda had an entire *team* of dudes just designing dungeons.

Don’t get me wrong, the game is good.  It might even be great.  And it’s beautiful.  My god, is it beautiful.  But I’ve played it.  I’ve done it before.  It was like Oblivion (without the annoying Oblivion Gates) and Morrowind before it.  But where Morrowind was unlike anything I had ever played before (think Season 1 of Family Guy), Oblivion was an iteration of Morrowind and Skyrim is an iteration of Oblivion.  There is nothing inherently new.  In fact, I might even go so far as to say that by streamlining the level-ups and the various crafting and combat systems, they actually managed to make the problems more apparent.  There isn’t a whole lot of min-maxing to be done, which takes some of the fun out of it for me.

In fact, for the first two hours of the game, I was waiting for some stat assignment or detailed character creation screen to pop up.  It never did.  Maybe I’m still waiting for it.

In the end, I enjoyed my romp through Skyrim.  I will probably even play it again someday.  Perhaps even someday soon.  But I will never finish the game again.  I won’t ever be able to recapture the magic of it again.  It just isn’t in me for this one anymore.  It’s been exhausted.

Lastly, I would like to point out that Skyrim is not a sandbox game. A sandbox should have more options, more paths, a more vibrant world. Skyrim just has a lot of dungeons. There’s nothing wrong with that, but you can’t call it a sandbox. Your options are too limited. You can’t open a store. You can’t build a house. You can’t create a trade network. You can’t rule a nation. X3: Terran Conflict is a sandbox. Minecraft is a sandbox. Skyrim is not.

I sold the Elder Scroll to the librarian at the Winterhold College for 2,000 pieces of gold.  I should have haggled.

Ein Freund der Teufel ist ein Freund von mir.