Categories
Games Geek / Technical

Great Gaming Moments: Lock ‘n’ Chase

My first exposure to video games was through the Atari 2600. I was probably around five or six years old when I started playing Berzerk and Asteroids. It was before I learned that these games were ports from the original arcade versions which talked to you or used vector graphics. I still have the Atari and most of the games. Lock ‘n’ Chase stands out in my mind.

If you haven’t heard of this game, think of Pac-man, only instead of ghosts there are police officers, and instead of a yellow circle, you play as a thief. The dots are gold bricks. You can close and lock up to two of the many doors in the maze to hinder the officers chasing you. The doors reopen after a short time. Collect all of the treasure, and you unlock the door to the next level. Rinse, and repeat.

It was not unusual to narrowly avoid capture by a police officer. I’ve been chased without a pixel of difference between me and my pursuer and waiting for a door to open back up so I can lock another one. I’ve laughed when the thief’s hat looked like it was being worn by an officer who was a little too close for comfort. In either case, locking a door was a great way to get the officer off of my tail. Since the officers were always moving, locking yourself between two doors was a good way to delay until the officers chasing you moved safely away again.

One day I discovered a new trick. It was probably one of the first times I had learned a new way to play a game. I was being chased, and I closed a door to avoid the first officer. A second officer turned a corner and I disappeared down a teleporter. Well, the officer turned toward the door I just closed, so I went back through the teleporter. It thought that it was a risky maneuver for me to try, but I chased the officer and placed a wall on the other side of him.

And I did it! I trapped an officer between two walls! I either yelled “Whoa!”, “Cooool!”, or “Awesome!”, but I don’t remember. I received bonus money for doing it, and the game sang out in that always-different-yet-always-satisfying Bonus Noise.

I didn’t even know it was possible to do it, and I played this game a lot. All of a sudden, there was a entirely new way to play the game. Instead of just collecting money and avoiding the Law, I could try to trap the officers. Can I trap two? How about all four? Is there anything else I can discover?

Maybe it was in the manual for the game. Maybe it was on the side of an arcade cabinet somewhere. But I was a child, and all I had at the time was the game. I felt amazing for discovering something cool on my own. It was a great gaming moment for me.

Categories
Marketing/Business

Why Most Businesses Fail

Oh, hey! MarkTaw.com updated! Why Most Businesses Fail (A Theoretical Model) was an interesting article analyzing the reasons for the high failure rate of new businesses.

Business owners can find that income fails to cover expenses. New owners might not realize that profits come many years down the road, and I believe most of them are in the high percentage of first-year failures. For those owners that do appreciate how difficult it can be to meet expenses and start saving, it is possible that the expenses accumulate much too quickly compared to revenues. Mark suggests that there are only three options: reduce expenses, increase income, or quit your business. Reducing expenses might results in less debt, but it is still debt. Increasing your income is obviously important, but it can be frustrating when your margins are terrible. Quitting the business adds another notch to the statistics about failed businesses. What he says about each is insightful about the thought processes new business owners need.

He ends the article with 12 tips for people who still want to go through the trials of starting and running their own businesses. #8 and #9 go well together. #8 says to try multiple things. Get multiple streams of income. Don’t depend on one product or service. You need a backup in case one aspect of your business fails.

#9, however, says that you need to start somewhere. You can’t always jump into multiple endeavors. Start somewhere, take action, and get something out there. You need to make one product before you make your second. If I had stuck with my deadlines for game development, Oracle’s Eye development would have slowed down incredibly, and if you have been reading for the past month, you know I can’t afford to lose the few hours I do get to work on it. According to my old deadlines list, I am supposed to have a prototype for IGF 2007 by the end of March. I am also thinking about topics for a book or newspaper article series. I haven’t finished my first game yet, and there is a temptation to work on a different project to give myself a break. I need to ignore everything else and focus on my game project. I need to take as much action as I can to finish it.

Otherwise, I’m just another wannabe game developer who couldn’t finish what he started. So long as I am making progress, no one can say that I didn’t finish. I just haven’t crossed the finish line yet. I’ve been floundering because there were a handful of finish lines, which caused me to lose my focus. Once I made the conscious choice to concentrate on one goal and ignore the rest, it was easier to breathe. Taking action was a choice between doing something productive or not doing something productive, which is a lot easier than trying to decide which of a handful of productive actions to take.

Categories
Game Development Personal Development

Thousander Club Update: March 6th

For this week’s Thousander Club update:

Game Hours: 24.5 / 1000
Game Ideas: 126 / 1000

Target: 126

I failed the challenge of hitting 10 hours in less than a week. I wasted entire evenings. I’ve been beating myself up over it, which isn’t very productive or helpful. I will take specific steps to make sure I don’t squander great opportunities for making progress. It’s definitely more productive to ask what you can do to improve rather than worry about how much time you’ve lost.

I cleaned up some code, corrected possible bugs, and started working on the non-game parts of the game. I’m making slow progress. I am currently focusing on the introduction and menu states. I used to have the game immediately start in the PlayState. Now, the IntroState changes to the MenuState, and the MenuState changes to the PlayState. I’ll add functionality to those two states so that they do more than transition immediately. I’m actually not sure if I want to keep the IntroState. Some developers complain about intro movies, and I’ve played more than a few mainstream games that require about four or five clicks to get to the game menu. I’ve been looking at games like Tribal Trouble and Professor Fizzwizzle to see how they handle their introductions. Grubby Games doesn’t do much before getting to the Fizzwizzle menu, and Tribal Trouble hits it upon loading. Perhaps I can use it to setup the Kyra engine and the game window instead of doing anything fancy to declare, “Yes, this is a game by GBGames!” I can probably use it in the demos of my games to give incentives to buy.

I’m writing down some ideas for what I will want each state to do. For instance, do I just need the ability to load and display images, or should I add the ability to render text? Do I want particle effects? Fades? Do I want to be able to render the game in the intro screen, or should I not worry about how I am going to get the PlayState functionality out to some third class? For that matter, I see that I’ll need an abstraction of the Kyra sprite engine object since a number of game states will need to make use of it. I’m not sure how to do so without making it effectively a global variable. I’m questioning if my design is as solid as it could be.

Categories
Game Development Politics/Government

More Copy Protection Questions

At Joe Indie, Dicto Simpliciter, Narcissism and Piracy warns developers about being overzealous with copy protection. I think it goes well with my DRM post from yesterday.

Regarding the stats some large companies and organizations throw around about “lost sales” due to piracy:

Regardless, the conversion rate demonstrates the basic idea that most of the people who look at a piece of software don’t buy it.

So, with that in mind, making the assumption that every download of a cracked version of your software/game is a lost sale is simply narcissism. Egomania, even. What else would you call the belief that your software/game is so good that everyone everywhere (even if they don’t speak the same native language you do) is going to just love it and spend hours upon hours enjoying it and cheating you out of your money?

Narcissism and egomania sounds about right. It’s a weird trick to know that you need to work on marketing or make a better quality game in order to increase sales while simultaneously convincing yourself that every pirated copy would have otherwise been a sale. A person who makes a copy of every mainstream game doesn’t magically have the hundreds or thousands of dollars to pay for it all, so how can you believe that every illegal copy of your game would have been a sale if you had better copy protection in place?

He essentially argues that you should aim to “keep the honest people honest”. Taking the time to make the copy protection stronger means that you can’t use that time to make your game better. Your game demo will be less effective, people won’t want to talk about your game as much, but hey, those darn pirates won’t “steal your livelihood”, right?

Categories
Game Development Linux Game Development

Oracle’s Eye Development: March Goals

In mid-December, I wrote Oracle’s Eye Development: Gameplay Tweaks, Planning Next Steps. I will summarize the list of next steps below:

  • The Player should not be able to occupy the same space as a Ball.
  • Graphics: the quality of the images and the animations need to be improved greatly.
  • Sound: need to add music and sound effects
  • Levels: Rooms should be able to have different dimensions. The Player should be able to choose levels from a menu, and finishing one level should allow him/her to continue to the next one.

I’ve accomplished the first item. The Ball and the Player feel more solid since they don’t overlap each other.

I have managed to implement level loading using TinyXml. The player can’t choose levels yet. The level to load is hardcoded currently, which means that if I want to test different levels, I will need to recompile each time.

1.5 out of 4 ain’t bad, right?

Since I wrote that original article, I’ve added a few more items to the list:

  • Cross-platform builds: I want to have a Gnu/Linux and Win32 binary built from the same source.
  • Installers: I want Gnu/Linux and Win32 installers.
  • Reintroduce banked walls: otherwise, having to reset the level if the Ball gets into a corner would be annoying.

I want to be able to compile and build packages to provide people a way to try the game. It’s hard to get feedback when the only people who can immediately check out my progress are Gnu/Linux users who don’t mind unpacking a tar.gz file and finding the binary. I’ve improved the Makefile so that it is easier to compile the program, but I’d like to be able to provide an installer. I think providing RPMs and .deb files would be a good start. As for Win32, I’m sure there is some installer setup that I can get scripted to run on my Gnu/Linux system. I just need to find one.

I had eliminated extra items like banked walls and pipes because I thought doing so would help me to focus on making the game. They became nice-to-haves instead of necessary components of my game. Now that I’ve had a chance to play the game, I can see that certain items are going to be a bit more necessary than I originally thought. It is easy to kick the Ball into a corner. The only way to continue is to restart the level. I’d prefer for it to be impossible for the Player to kick the Ball into a dead-end.

I’d be optimistic about finishing the game by the end of March, but I have a feeling that I will push back the date again. We’ll see.

Categories
Games Geek / Technical Linux Game Development

Total Annihilation Hawesomeness!

I believe I reported on TA Spring last year. TA Spring is a project to make a new RTS, but its current goal is to get a game running with the Total Annihilation data. The most exciting news for me is that the developers ported the project to Gnu/Linux. Now I can play Total Annihilation on my Gnu/Linux system AND play it in 3D!

Categories
Game Development Geek / Technical Politics/Government

Why DRM?

Charlie “Flayra” Cleveland wrote Want to Make a Game? Here’s How. He notes that making a mod of an existing game isn’t as easy as it was years ago. To break into game development, he suggests the PopCap Games Framework or Torque. Both make game development much easier than having to learn how to program the low-level bits yourself for years.

But then he says the following:

One vital feature that both of these engines are missing is some sort of digital rights management (DRM) and/or e-commerce system.

Now, there are two problems I have with this statement. The first is that this post was supposed to be about making games, not selling them. A person trying to learn how to create his/her first game shouldn’t worry about marketing and sales. You’ll find that deciding between Plimus or Regnow is less important than figuring out how the standard game loop works. This issue is a minor one, so I won’t spend too much time on it.

The second problem, the one that I think is more important, is that I don’t think DRM is a “vital” feature. It’s weird how it keeps popping up. DRM & Unlock Codes at Greg Costikyan’s blog asks about DRM solutions. People are debating whether DRM should even be addressed by GPLv3. PC Gamer’s latest issue has an entire article on how to deal with Starforce and other stupid copyprotection schemes. Maybe it is a vital feature if your goal is to make playing your game a nuisance to potential and current customers. Maybe it is important if you intend to say to your customers, “I don’t trust you” while simultaneously claiming, “Our customers are incredibly important to us”. Maybe you can’t live without it if you have enough time to stop making games and to start playing with the trust of your customers.

I believe that so-called digital rights management is more about restricting the rights of customers and end-users than guaranteeing the rights of authors and artists. If new game developers are supposed to learn how to make the customer’s life difficult, then by all means consider DRM to be a “vital” aspect of a game development curriculum. I will continue to question why we’re supposed to assume that the customer is untrustworthy without any real evidence to suggest it.

Categories
Game Development Geek / Technical

How Can I Design Code Better?

In Getter Eradicator, Martin Fowler argues that there are cases when using getters and setters is entirely appropriate. There is the argument that using getters violates encapsulation, but Fowler argues that you shouldn’t think about hiding data so much as design decisions. The real case for avoiding getters is to discourage procedural design in object-oriented languages. Pulling data out of an object to decide what to do is just procedural programming, whereas telling the object to do something and letting it figure out for itself how to do so would be more appropriate. He referenced a few other articles, among them Tell, Don’t Ask which describes the principle above.

It made for great reading, but it made me a bit concerned. I know and have known beyond a doubt that I must be doing something wrong; there is no way that I can claim 100% accuracy and correctness with the code I write. What I don’t know is what exactly would be wrong. I might write some code that seems perfectly fine to me but would make someone more experienced roll his/her eyes.

Now, if I write code, and it works, and I manage to finish whatever project I am working on, someone might argue, “Hey! Who cares how ‘correct’ it is? It works, so it is good enough!” If my goal was to just finish a project and be done with it, yes, I would agree. If it works, it is correct enough.

But one of my goals is to improve my ability to create, and that includes improving my coding as well as my designing skills. It isn’t enough to be able to get something working, although doing so would be a great first step. I want to be able to write great code and know it. It may take years of practice, and the Thousander Club will certainly help, but I want to design and write better code.

Of course, practice doesn’t help when there is no one to look over your work except yourself. I might be doing something that works well enough that I don’t realize that I’ve done it completely backwards. It may be the source of some trouble, but if I am not aware that the trouble is optional, how can I do anything about it?

In the past, I’ve asked other game programmers to look over my work and provide some feedback. It is definitely enlightening to get an analysis on a real project and not just a grade in class for writing a function. I’ve asked questions on forums and IRC, but it usually depends on who is around to answer and if they feel the question is good enough. Otherwise, I’m on my own.

I’m sure I am not the only lone wolf out there, so please let me know: how do you improve your own abilities when you’re basically the only one to provide a “peer review”?

Categories
Game Development

Putting Off Procrastination

Fighting Procrastination: The Local Maxima Problem describes how procrastination might be a symptom of a project that has hit a standstill and can’t easily move forward without taking a few steps back. The Local Maxima is best illustrated by the example of the robot that wanted to go to the moon:

The Moon is way up there. That tree is higher than the ground. I must climb to the top of the tree to get to the Moon.

So the robot climbs up the tree and sits. Yes, it may be closer to the moon than it was when it was standing on the ground, but it won’t actually reach the moon. To actually reach the moon, it would need to climb down the tree and get inside a space shuttle or rocket ship; however, the robot might not want to go down the tree. After all, if the moon is higher, why would going back down the tree, going lower, help?

Jay Barnson experienced this same problem with his own project. He had created a working prototype, but to make progress he would need to tear out functionality and replace it with something else. I’ve experienced this same problem myself, and the fear he refers to is real. Who wants to work productively only to have to say, “Ok, those results were nice, but now they don’t matter, and I’ll need to do it over”? So procrastination becomes a real problem.

I use Subversion for my projects, and I think that it has helped alleviate this problem quite a bit. I could experiment with code, go in different directions, delete and change functionality, and if I fall into despair with no hope of returning with a better product, I can essentially hit the reset button. My last working build is returned to me in pristine condition, and I can start again, only now I know what not to do. The worst case is that I am back where I started with more knowledge of the problem domain. The best case is that I now have an improved code base.

It is probably easy to think that a project’s progress is simply a linear series of accomplishments. Maybe people who have tons of experience can do it based off of a perfect design document, but I can’t. For instance, I had hardcoded variables to get certain functionality up and running in Oracle’s Eye. Originally those variables helped move the project forward. Otherwise, I would be writing abstractions before I know what abstractions are needed. Trying to write code that works in more than just your specific case is great and all, but it is also a great way to stall what you are specifically trying to do. And in my case, I didn’t even know what I was specifically trying to do, so how could I hope to write code that will work for all cases as well as mine?

Later, as I gained an understanding of what I was doing, I had to tear out the old hardcoded variables and analogous functions to replace them with something better. Essentially, I would need to break my project to make a better project. It isn’t so bad when you can change a small function or change a variable, but if your change impacts three classes and fifteen functions, you might be a bit wary. I was. There was the temptation to think, “But why should I go lower when I need to go higher?” Even with the safety net that Subversion provides, it was scary to dive into my code and change it so fundamentally. Even scarier was not being able to compile it for hours.

I did go through it, however, and came out the other side with great progress on Oracle’s Eye. When I hit the next local maximum, I hope I can remember Barnson’s post.

Categories
Game Development Personal Development

Thousander Club Update: February 27th

For this week’s Thousander Club update:

Game Hours: 23 / 1000
Game Ideas: 111/ 1000

Target: 105

Last Monday was President’s Day, and it helped a lot with regards to providing me with some coding time since I had the day off from my job. That day I managed to get some huge bugs fixed and created the ability to load levels from a file. I also added six hours of work. I just had to do four hours of work to add up to the 10 I hoped to do for the week. While I was able to work a few mornings before going to my day job, I found that I was not able to accomplish as much as I thought I could. During the week there were any number of things that came up. A friend of mine was leaving the state, and so we threw a party on Friday evening. I was at an all-day event on Saturday. Sunday was a day for errands.

It is clear to me that I am not doing as good a job as I could be doing regarding my game development schedule. This coming weekend I will be leaving town, so any work I do will have to take place between today and Friday morning. I would need to work two hours a day in order to get to 10 hours. Since I couldn’t do 10 hours in a full week, I am not sure if I can expect to do so with a few days missing.

Of course, it sounds like a challenge to me. B-)