Games Geek / Technical General presents The Essential 50

The Essential 50 is’s compilation of the 50 most influential games in video game history. I feel bad because some of the games I’ve only read about, such as Battlezone or Prince of Persia. Others bring back good memories, such as Super Mario Bros and Pac-man. I am making a point to go back and play the games I own that I haven’t gotten a chance to play yet, such as Final Fantasy 7. I was a Nintendo fanboy when it came out so I refused to touch it, but sometime last year I saw a PC version of it for under $20. I still haven’t played it.

It’s sad when you look back on the highlights of gaming and realize that you weren’t there for even half of it. Still, I have some good memories of some good gaming, and there is no reason for me to miss out on what’s to come. B-)

Personal Development

Getting Things Done: Next Actions

I am currently reading David Allen’s book Getting Things Done: The Art of Stress Free Productivity. I am not even half way through it, and yet I am already increasing my productivity by applying what I am learning.

The beginning of the book gives a general overview of the Getting Things Done (GTD) system. I managed to pick up a few ideas, like the idea that everything that takes more than a few two minute actions should be considered a Project, or the idea of the Next Actions list. Up until recently, I simply made todo lists. I found that it helped me to remember important tasks. I was always forgetting things, and todo lists were a great tool to overcome that problem.

Of course, it didn’t take me too long to add a due date to some tasks. A game review needed for Game Tunnel? It wasn’t enough to say that I had to do it. I had to also say that it was due in two weeks. Homework #3 needs to get done? I need to know when, or else it might get put off.

This past week I started listing the next action needed on the different tasks. At work I keep a todo list of projects, but I started listing a Next Action next to each one. If a project involves building a server for someone, it might be held up because I need to learn more details about the build needed. The next action for that project is to call the person and ask about it. If I am waiting for more information about hard drives from a colleague, my next action is “Wait for colleague to get back to me.”

Before supplementing my todo lists with Next Actions, I had a vague sense of what I needed to do. Make a command line Tic-Tac-Toe game. Do the homework for my Tuesday night class. Items like this were somewhat high level, which is still good to know, but left me feeling stuck when I wanted to actually start any one of these projects.

Now, for each project I have on my list, I know exactly what I need to do in order to make some progress. And some progress is better than none. As Steve Pavlina said in his article Overcoming Procrastination “If you simply start a task enough times, you will eventually finish it.”

My current system isn’t very efficient, but it is definitely better than only a year ago when I was drifting through life. While I don’t want to get caught saying that it is “good enough” I don’t want to put off doing anything just because it isn’t perfect.


Sharpening the Saw Too Much

Stephen Covey’s The Seven Habits of Highly Effective People discusses sharpening the saw. The classic story is of a lumberjack working hard cutting some wood, and the foreman comes up and asks him why he doesn’t sharpen the saw he’s using to help speed up his work. The answer: “I’m too busy cutting wood to do so!”

The moral is clear: you can’t be effective at a task continuosly if you don’t sharpen your saw, usually by improving your skills or knowledge in some area. You should always supplement what you know with more knowledge. You should always be willing to learn new things.

Unfortunately I realized that my problem is that I spend way too much time sharpening the saw and not enough time practicing how to use it. I can learn all I want about test driven development or game design, but if I don’t apply what I am learning, if I don’t practice, then I just become a very knowledgable amateur. Being knowledgable means I have potential, but potential isn’t something I can directly leverage into be productive.

I’m going to set more concrete goals regarding the time I put in practicing what I learn. I don’t code nearly enough, so I can’t make any useful programs. I don’t flesh out game ideas often enough, so I can’t create useful game concepts.

At the same time, I don’t want to forget to sharpen the saw completely. I just need to start using it more.

Game Development Linux Game Development

C++ Unit Testing and Game APIs

This past week I decided to look into CxxTest. I was attracted to it since what I’ve read was that it was easy to use and highly portable. Unfortunately I found that there was no documentation on how to set it up on your system. It took me way too long to find out that this “Production/Stable” project doesn’t have installation instructions or packages to do so. Also, the Source Forge project page is very quiet. The developer apparently isn’t very active. This is disconcerting, but I think I have figured out how to setup CxxTest on my Debian system. I haven’t actually been able to use it yet, but I hope to rectify that within the next week. Hopefully it is going to be useful.

I also decided to take a closer look at two C++ Game APIs: GameBlade and Kyra. GameBlade seems to be suffering an even worse fate that CxxTest: it’s project page hasn’t been updated since January of last year, and it’s considered in Beta state! I might look at it later, but I didn’t see much in the way of documentation.

The Sprite Engine Kyra, on the other hand, looks great. It works on Win32 and GNU/Linux platforms, and the demo showed off some cool capabilities. It’s possible to have multiple views of the same scenes, with some views at different zoom levels! Scaling, color transformations, and alpha blending at per-image or per-pixel levels are just some of the other features. I’m really excited about using this engine, although I am thrown off by the sprite editor requiring hot spots and alignment since I would think these are things that I need to control within the program.

I may look into more cross-platform Game APIs, but Kyra looks to be a lot of fun and is very mature. It looks like I’ll need to put in some time to learn how to use it effectively, time that is tough to find these days, but it should be worth it if it will allow me to create games that much easier.

Geek / Technical Marketing/Business

Marketing for DLC Results

The DePaul Linux Community had the technical presentation last week on Thursday. Before I reveal how well marketing did, I’ll note some general data regarding our previous presentations:

  • there are usually only a few people who show up (between two and six non-members is normal)
  • we usually only post fliers and tell people in our own classes

The difference in marketing this time around: I sent out an email to over 20 professors.

The difference in attendence this time around: we had over 15 non-members.

Only one of them could be directly linked to an email I sent to a professor. The rest said they found out about the event through the website (a marketing tool which I will need to make sure is working to its full potential) and through other friends. I don’t know how many of those friends knew about it from my letter to a professor. Still, this is very encouraging.

Also, we found a lot of people were very happy with the event, titled “Developing for the Modern Web”. Larry Garfield did a great job talking about the wonders of CSS. Many, myself included, were surprised at the number of things that you could do with it. My favorite comment on the feedback forms we had: “Excellent presentation. Thanks for sharing this ‘untaught’ knowledge!”

Geek / Technical Marketing/Business

Marketing for DLC

I’m a member of the DePaul Linux Community. We usually hold events each quarter, and this quarter is no different.

Last year we determined that we need to do more marketing. All we’ve ever done is post fliers up around campus, and the results have been decent. Unfortunately no one wanted to be the main person responsible for marketing. Since that time, I have learned quite a bit about running a business, and I know that marketing is definitely something I’ll need to get better at if I want to do well. I volunteered this quarter, partly to help the group and partly to practice my marketing skills.

I recently finished Jay Abraham‘s Getting Everything You Can Out of All You’ve Got. At one point he describes direct mail. When I thought of direct mail before, I thought of junk mail, or snail mail spam. It still is for the most part, but I also see that it can be a valid marketing too. It’s still unsolicited, but the marketing message is in its entirety, allowing the reader to get the full message. It’s supposed to have a higher response rate, and it makes sense that it should, especially over fliers.

Today I wrote an email and sent it to a number of faculty members in the CTI school of DePaul. It basically provided the information about the different events, a link to the website, and a blurb about the mailing list we have. It suggested actions to take, explicitly asking for them to post a section of the email on the announcements page of their class websites and making in-class announcements as well.

Unfortunately our first event is only a few days away, but hopefully the turnout will still be improved by this email alone. And it also sets the stage for the next few events.

Geek / Technical

Confusion about the GPL’s Purpose

While googling for open source game development to see what was out there, I came across Jeff Dillon’s blog. In his entry on June 18th, 2004, he argues that the GPL needs to be updated because software is not being run on the localhost anymore. The example he mentions is Google. It uses Gnu/Linux but they don’t have to provide any of the changes they might make to the end user. He thinks this goes against the purpose of the GPL:

The GPL Needs Updating

This means that any online services company can use all the Open Source work they want without ever giving anything back. This was not the original intent of the GPL. The original intent was to bring progress to software by sharing innovations. Google or any other online service company can now use all open source code without ever showing anyone what they have done.

Copyright law is frequently misunderstood, and the GPL is no exception. The purpose of the GPL is not to spread innovation. The purpose was to secure freedom for the user. Google is able to do what it does because the GPL says they can. The moment they release the modifications to some other party, that’s when they will have to distribute the source (or promise to provide it upon request) as well. Does Google get to exercise the freedoms provided by the GPL? Yes. Does the end user of Google’s services lose any freedoms? No. They have the same freedoms that Google has to use the same software. If Google doesn’t release the changes they made, the end user doesn’t get to use those changes and so hasn’t lost any freedom.

If the GPL needs to be updated, it isn’t because of a need to foster innovation.

Game Development

Chicago Indie Game Developer Meeting

Yesterday I went to the monthly Chicago Indie Game Developer meeting. Basically we discuss what we’re doing regarding game development and make goals for the next meeting.

Part of me was disappointed since I didn’t really accomplish my goals. I wanted to have a command line Tic-Tac-Toe game ready, primarily since it would simultaneously improve my coding skill and provide me with a completed game, no matter how simple. The game compiles cleanly, which is good, but it is causing strange errors. I firmly believe it is “strange” only because I must not understand the code thoroughly, but what I find weird is that I have a string, say “First: throwing exception”. Why would the program output “rst: throwing exception” and “rowing exception”, and even weirder, why would it do so when I don’t catch an exception?! I’ll figure it out. In any case, there is some logic error that prevents me from saying that I completed the game. On the other hand, it still counts as experience, and I believe that I learned at least a little bit from the project so far. Just not as much as I wanted to.

Also, I was supposed to look up tools I could use for game development. Primarily I was being urged to look into BlitzMax since it is supposed to ease development and also be portable to multiple operating systems. It’s currently available for the only platform I don’t own. gcc on the other hand isn’t limited, and I’m already getting quite familiar with it.

Still, I pressed on. I have to be able to use some tools, and I realized that this was my fundamental problem with how I was going about learning. Java programmers don’t program in Java. They use the Java API. And yet, here I was trying to learn how to use C++ by building up the basic components. So I finally googled and found found a few C++ game APIs, all in various stages of development. GameBlade looks promising, as does Kyra. The latter apparently works on Gnu/Linux, Win32, Mac OSX, and BSD.

My goals for next month include giving myself more time to practice coding and learning how to use one of the game APIs I found. I need to make those goals less abstract by specifying numbers such as how many hours per week I’ll practice or how many small demos or techniques I want to try to master. Still, at least I know what direction I need to go in if I want to accomplish something. B-)

Game Development Games Linux Game Development

How I Want to Make Games

I want to make games. I don’t want to make them just as a hobby, but I also want to have fun while I do this. What’s the point of going into business for yourself if you aren’t having fun?

I want to use Free and Open Source Software. People tend to get confused about the concept of Free Software. To make sure you, the reader, understands, I suggest you read some articles about it:

Regarding that last article: people think “Software Should Be Free” means giving away your hard work for no compensation. It doesn’t. If up until now you thought this was the case, I again urge you to read those articles. Free Software is about Freedom, not about getting a free lunch. You may be surprised to find that Free Software isn’t the evil you heard it was. If you don’t care to actually learn about the Free Software concept, that’s fine, but please don’t start arguing against it because you can’t be taken seriously. How can you argue against something you don’t know or understand? Question it, be skeptical about it, but don’t presume you are an authority on it when you aren’t.

I also want to focus on making games for the Gnu/Linux system. I understand that it is likely my main revenue streams will not come from it, so I also want ports to the Win32 and Mac platforms. But I’m tired of seeing games ported to Gnu/Linux months after the fact. So when I say I am focusing on Gnu/Linux, I mean that it won’t be an afterthought. Ideally, using open standards and a solid code base, I can release for the three platforms at the same time, with minor tweaking at the most.

Some people think that there is no money here. I don’t believe that is the case. For example, I read that A Tale in the Desert 2 does very well among Gnu/Linux users. The conversion rate is incredibly higher than for Windows or Mac users. Granted, it is a MMO game, but still. Loki apparently didn’t go out of business for lack of sales so much as bad management. There are no stats that say that Gnu/Linux games will sell well, but no stats that suggest they won’t either. I’m willing to find out how well sales could be for the platform.

Game Development

My Ability to Create

Within the past year, I realized that I could not only start my own game development business but also be quite successful at it. I was partly inspired by Steve Pavlina and partly by other people who have already gone into similar businesses for themselves. It’s a lot easier to see where you can be when you receive a souvenir from someone who has been there. In this case, Steve has written a number of articles on subjects ranging from running a successful indie business to marketing to product development. My favorites are the personal productivity articles, the ones that let me know that I can do so much more than I was letting myself believe.

He wrote about his college experience. He wanted to get through school as quick as he could so he could start on his business, something he knew he wanted to do. So rather than take the average course load, or even just an extra class, he took multiple extra courses. The average college student has problems completing assignments on time for a normal workload, citing a “lack of time” as the main culprit. And here’s Steve Pavlina not only taking multiple course loads at once, but doing extremely well at that! He got amazing grades, a healthy amount of sleep, and a social life to boot.

And so began my study for time management. Eventually I learned that it was also life management. This was an amazing concept for someone who had never thought about how his life has been managed. Looking back, I pretty much coasted from day to day. Sure, some days I had inspiration, but it wasn’t consistent. These days, I am doing much better. I at least have a clearer picture of my future and how I want it to be. I’m still working on it.

Anyway, another of his articles is titled If No Independent Developers Are 100 Times Smarter Than You, Then Why Do Some Get 100 Times the Results?. It outlines the seven critical success factors in shareware. “To the degree to which you fail to master any one of these skills, that is the degree to which you limit your own success.” The factors he writes about are:

  1. Decide
  2. Create
  3. Promote
  4. Sell
  5. Serve
  6. Measure
  7. Improve

I rated myself in each category. Then I rated myself again, this time trying to question whether or not I was being overly optimistic in any area. That’s when I pinpointed my number one issue: my ability to create a product is almost nonexistent.

I can program. I’m not some master hacker, but I can write decent code. At least, I believe I can. Unfortunately I haven’t had much experience working outside of the classroom. It may be that the classroom is totally different and impractical in real life. I’ve read books such as Code Complete and Game Architecture and Design. I just haven’t given myself the opportunity to use what I’ve learned.

For years I’ve studied game development articles and books. I have quite the collection. Still, the last game I successfully created was a Pac-man clone in QBasic. And that was in 1998, before I knew how to code properly. It’s all spaghetti code! I know I can do a better job these days.

I used to think I was way ahead of the average newbie who posts “I WANT TO MAKE TEH BEST RPG EVAH!!” Turns out that I am only one step ahead: I know better than to think I can do something like an RPG with the lack of experience and skill I have. But what made me think that I can do something like a Tetris game right now?

When I asked myself that, I found out that I couldn’t. My ability to create a product I could sell was essentially nonexistent.

So I set myself to work on that issue. I wrote down a number of skills that I would need to learn to improve my ability to create. I needed to learn how to program, and properly. I needed to learn how to use development tools such as Gnu Make, Subversion, and the Gnu Debugger. I needed to become familiar with the STL (I am using C++), SDL, and any other libraries that will help me build programs.

It’s almost a month later. My C++ knowledge has defintely improved, and with it came the use of tools like Make and Subversion. The standard template library is definitely not the mystery they made it seem like when I took C++ at DePaul years ago. I haven’t messed with the debugger much, and I’m finding that there haven’t been many compelling reasons to use it.

Still, I can’t say that my goal of making my ability to create a 5/10 has been accomplished without being a very bold liar. I might be able to say it is a 2/10, but I would have to be a bit generous. The main reason why I have failed to improve much: time. But at least this time I know it isn’t some vague Outside Thing that is acting on me. I know the blame lies squarely on my shoulders. I didn’t give myself the time I knew I needed to work on these skills. I work as an intern for 40 hours a week, go to graduate school full-time (two night classes a week), and I commute about 10-20 hours. I have a social life. I sleep. I know I could make room for my skill development, but I also know that something needs to give. I originally thought I could just time manage my way through it, but it’s more than that. I need to set my priorities.

So now I am questioning the wisdom of my previous decisions: why grad school? why the non-software development internship? I realized that while I had learned how a lot of my situations are the result of my decisions, it hadn’t occurred to me that I found myself in a situation I didn’t want to be in. Robert Tracy had a line that repeated in his books a lot that went something like: if I wasn’t doing it today, knowing what I know now, would I start doing it? If not, don’t do it anymore!

So I’ve given myself some things to think about. I’ve identified some things I could do to help improve my skills, such as reading more source code (open source is great for providing Freedom #1). I’ve identified some things that are slowing me down, such as school. The question is: what’s my next step?