Categories
Game Development Personal Development

Thousander Club Update

Besides attempting to work on game development for 1,000 hours this year, I also wanted to come up with 1,000 new game ideas. The Thousander Club is definitely a great way to raise your game.

As a reminder, I should have about three hours or ideas per day. Below I list my actual numbers versus the numbers I should be at:

Game Hours: 1 / 83
Game Ideas: 11 / 83

Ahem. Not so good, but I didn’t join until the second week of January. Still, it doesn’t justify the majority of the missing numbers.

If I notice that I am getting down on myself too much for not hitting the right numbers, I might start displaying them differently. Until then, I think it is good to know what progress I am making as well as how far along I should be. I will try to post these updates regularly on Monday.

Categories
Game Development

Oracle’s Eye Development: Taking an Hour

Thanks to a comment from a previous post, I decided to follow the advice on GameProducer.net specified in the article 1 hour solution to any problem.

… decide that you won’t check email before you have done that one daily hour. Don’t watch tv, don’t visit those nice discussion forums you usually do, don’t allow yourself to do any nice thing you usually do – until you have took action for at least one hour.

So I did it. I set an alarm for an hour and started planning my next steps with Oracle’s Eye. Before I get to the results of that hour, let me just say that I couldn’t believe how easily distracted I could get. I’d want to check my email to see if someone responded to a message I sent the day before. I wanted to see if a question I asked on the Indie Gamer forums was answered. I even wanted to start a blog post! There were a number of smaller things that I refused to do during that hour as well. Still, I didn’t think that hour would be so difficult. Perhaps with practice it will get easier.

So how did I productively spend that hour? I started by trying to picture what I wanted Oracle’s Eye to be like when it was completed. I then worked backwards by trying to list each “accomplishment” I would need to complete the entire project. Among the subprojects: defining a level structure, creating a level editor, selecting a level, loading a level, playing background music, and playing sound effects. I also wanted to add animation to a number of objects, fix the collision detection, improve the frame-rate independent movement, and create a menu system. I want to be able to build the project for Gnu/Linux and Win32 from a single codebase.

Having all of these specific subprojects is a bit less unwieldy than simply wanting to “complete the game project”.

I then needed to manage what actions will be involved in actually trying to finish a subproject. I picked frame-rate independent movement first. Here is a portion of my next actions list:

Frame-Rate Independent Movement:
    - To get game time to run at regular intervals
        - find/read FRIM references
        - define # of milliseconds in interval
        - verify that the code already in place will run updates at interval
        - change/update code so that it does, if needed

That doesn’t seem so hard, right? Perhaps I’m leaving out some details, but the very next action is good enough to get me going when I do sit down to work on this part of the code. It might be all I need to keep myself going, filling in the gaps as I go. Otherwise, I’ll just run this exercise again to get a better next actions list.

I’m still surprised at how easily distracted I was. I’ll need to work on that issue. I have a sign on top of my monitor that says, “What is the best use of my time right now?” that I apparently ignore now. I do so many things from one moment to the next without consciously thinking about whether it is the best thing I could be doing at that moment. In the future, I think during the hour it should be ok for me to at least write down those things I think to do. I can remember to do them later when it is more appropriate. It won’t really serve as a distraction in that case since I can get it down on paper and get it out of my head. We’ll see.

In any case, forcing myself to work within the hour actually made me more efficient with the time I utilized. When I needed to look up something for my list, I noticed that I was much quicker about searching than I would have been if the hour deadline wasn’t approaching. It would take me less than a minute to get the information I would need. Normally I might take five minutes or more because I would check if there are any comments on my blog or check for interesting new posts on the forums. I had a feeling that each second counted, and for the most part I treated them that way.

The next time you have a project that is sticking around on your list for too long, try to take at least some of it out in one hour. Even if you get somewhat distracted as I did, you might find that the time you do focus on the project will be incredibly productive. For another example, I dedicated an hour to catching up on magazines and got through a few of them before stopping to make dinner. I might catch up on the last few Escapist issues if I dedicate another hour tonight. B-)

Categories
Game Development

Oracle’s Eye Development: Halted Development

My last documented development session was mid December. It’s now about a month later, and I haven’t worked on Oracle’s Eye.

I could list a bunch of reasons why I haven’t been able to work on it. Christmas took up a lot of my time. I was out of town for a week at the end of December, and I don’t have a laptop I could have used to work on the project. I moved during the first week of January, and only now do I feel that my computer area is mostly distraction free.

But those are just excuses. Clearly I didn’t give my project the priority it deserves. Still, I think there was something more to it.

I would decline invitations to events and say, “No, I really need to get some work done.” Then, during the time I should have been working on game development, I would get too easily distracted. Email would get checked way more often than it should have. I’d shuffle through papers on my desk. I would handle other tasks in my list of things to do. Then it would be incredibly late, and I would have to go to sleep to go to my day job in the morning.

It would be another evening wasted. I could argue that I at least got to cross some things off of my list. “The day wasn’t a total loss!” Of course, that’s not a useful justification when I haven’t done what I should have been doing for a month. If I keep this up, December 2006 will show up and I still won’t have a game to show for it.

So why haven’t I been able to even look at my project for so long? I finally identified it as fear. I’ve gotten the project to a point where I don’t have clear specifications and so it is hard to know exactly what to do next. I had the same problem when I started the project. I didn’t know what to do, and so I didn’t do anything. I didn’t want to do anything wrong! I’ve since learned that it is better that I do something rather than nothing. By hacking at my code until I have something useful, I now have a base to work with. Now, when I have to decide on my next task, I can more easily see if it will make the project better or worse.

So I sat down and wrote down all the things that would need to be accomplished in order for Oracle’s Eye to be considered really finished. For each of those accomplishments, I can then write down a plan of action. Afterwards, it should be a simple matter of just following the plan. Once the plan is completed, I can repeat the process with another accomplishment. It won’t always be easy to list out exact actions, of course. After all, I’m still learning about the problem domain. Still, it should get me out of this slump.

While I was writing this post, I realized I was referring to my lack of progress as a slump, which reminded me of Steve Pavlina’s article From Slump to Supercharged. Rereading it, I see that I was able to diagnose the problem correctly.

So let’s dive right into the heart of the problem. Why are you in a slump? You’re in a slump because you’re afraid. And you’re expending a lot of energy avoiding what you fear. It may not even be the subject of your work. It could be something totally unrelated, but it’s something that’s very important to you.

Near the end of the article, he talks about how fear and love are opposites. When you get rid of the fear of a challenge, you replace it with the love of the challenge. I noticed that when I was able to get past the fear of doing the wrong thing and could jump into development on Oracle’s Eye, I was loving it.

This week, I’m tracking my development time very closely. I’ve joined The Thousander Club at the beginning of January, but I haven’t done anything to show for it yet. Essentially that means that I am almost 85 hours behind for 1,000 hours of development time this year. I intend to catch up, which means that I’ll need to work on a plan to do so.

In the meantime, I just want to get out of my slump and start loving my game development again.

Categories
Game Development Marketing/Business

Freedom and Independence

Freedom and Independence is an essay by Dan McDonald on the Game Tunnel website about the reasons so many people have been going indie.

With so many people becoming independent game developers, the question is, “Why?” What makes it so appealing?

McDonald thinks that being able to create a game the way you want to make it without worrying about appeasing Marketing or some third party investor should be the big reason. Being indie because you want to be indie.

He then argues that the goal of financial independence actually constrains you and makes you less indie. By allowing your game design and creation to be dictated by the bottom line, you necessarily restrict what you might develop. Perhaps, but there is no denying that worrying about the Marketing Department is completely different from worrying about marketing. When you’re indie AND trying to make a living, your customers matter most rather than a checklist provided by a separate group in your company.

On the other hand, maybe the definition of “indie” has been stretched. Is the freeware developer who makes whatever he wants any more indie than the shareware developer who makes what his customers want? It’s one way of looking at it.

McDonald finishes the essay with the following plea:

So to new independent developers, I encourage you to enjoy your freedom and make something you are passionate about. Like most things in life, if you follow your passion you will eventually find financial success. It’s not a valid business plan, but there is enjoyment and significance to be found in creating games with passion. The potential for those kinds of games is why sites like this exist. Do you think they really want to review another game packed full of casual mechanics and themes (or whatever else is the hot selling trend of the day)? No, they exist because they want to support developers who are free to create games that are expressions of their own appreciations and personality instead of what everyone else who’s bound to the almighty dollar is doing.

When I was younger, I wanted to make video games, but I never thought it would be to specifically make clones and derivative works. I’m sure most people wanted to make the “best-RPG-ever!!!!”, or some incredibly involved simulation game. Some people have gone on to make such games. Others might have forgotten to even think about what their dream game would be…

/me adds “Decide on dream game idea” to New Year’s Resolutions.

Categories
Game Development General

Rescheduled: January Chicago Indie Game Developer Meeting

Since a number of people couldn’t make it to the meeting this past Tuesday, including myself, I’ve rescheduled it:

Where: The Starbucks at
Streets of Woodfield
601 North Martingale Road
Schaumburg IL, 60173

When: Monday, January 30th, at 7PM.

Same place, same time, just a different date.

Next month’s meeting will be in Chicago, but we can discuss where and when at the meeting and on the Indiegamer forums or the Chicago IGDA forums. Hope to see you there!

Categories
Game Development Personal Development

The Thousander Club

Scott Hsu-Storaker of Low Ply Cooperative has created a challenge for indie game artists and developers by creating the Thousander Club. The inspiration for it came from the idea that to become an expert, you need to practice. A lot.

The challenge: work for 1000 hours on your project this year. It comes out to 20 hours a week, which is almost three hours a day if you include weekends or four hours a day if you don’t.

Right now, the Thousander Club is a club of one — just me. But, I would love to have some company. C’mon, join up with me, there’s a certain comfort in doing things together. Pledge to devote yourself to working on your own project for 1000 hours this year. Keep track, I will. Give progress reports, I will . In a year, we can all look back and count ourselves as experienced experts. Think of the Christmas present you will be giving yourself in 2006 — confident assurance that your skills can take you where you want to go.

There are some specific challenges for the Low Poly community, but I think it sounds like a great “club” to join this year. Can you always dedicate 3-4 hours a day? I know that I was thinking, “Yeah, I could probably do it, but at what cost?” Then I thought vague thoughts about how difficult it would be, and almost put it out of my mind. Then I remembered the law of inertia. So I asked a specific question to help dispel any fears I had: if I didn’t join this club and try to dedicate myself to 1000 hours, what would I be doing instead? Would I be working on game development as haphazardly as I did the previous year? That idea didn’t sound too good. I wanted to improve.

I was thinking that I might try something smaller. What about 500 hours? That seemed a bit more doable. That’s about two hours a day. How about 100 hours? 100 hours still helps, according to my post. At this point, I realized I was wavering again. Tony Robbins talked about taking massive action. The idea is that if you want to improve yourself from being mediocre to being great, massive action helps you get there much more quickly than small steps. I know that I have been getting impatient with how slow I’ve been gaining game development experience. Doing it purposely slow, even if I was more focused than I was last year, didn’t seem nearly as attractive.

Now, obviously I will not be creating art for the Low Poly Cooperative since I am not trying to be an artist. I am dedicating 1000 hours to game development this year. It’s aggressive, and even if I fail, I know that the push this year will result in a huge improvement for myself. Can I still join your club, Scott? B-)

Categories
Game Development

January Chicago Indie Game Developer Meeting

I posted the date of the next Chicago Indie Game Developer Meeting on the Indiegamer forums:

Where: The Starbucks at
Streets of Woodfield
601 North Martingale Road
Schaumburg IL, 60173

When: Tuesday, January 17th, at 7PM.

This post is just to provide a little over a week’s notice to those who can make it to the meeting. We’ll alternate between Chicago and the western suburbs each month, so February’s meeting will be in Chicago.

I was also experimenting with an About Us item:

The Chicago Indie Game Developer Club is an informal group of indie game developers who meet every month to talk shop with likeminded people. It’s generally good to keep in touch with your industry; no one wants to become obsolete. This club is just one way to make and keep contacts, learn about developments in the industry, and provide personal feedback to other developers.

It’s one way to help improve the CIGDC. I think a dedicated domain and website would be another. These are some of the things I would like to discuss at the meeting.

Categories
Game Development

Oracle’s Eye Development: Gameplay Tweaks, Planning Next Steps

Oracle’s Eye is really shaping up as a game. I’m awfully close to the project, of course, so there could be lots of things wrong with it, but it’s definitely much more playable than when I called it “technically completed” a few weeks ago.

The links from December 9th still reflect the game’s current state, which means I haven’t done too much to update it. I made the Player’s sprite smaller and haven’t been able to walk through walls so far. Some of the small tweaks I’ve made with the code have made drastic changes in the resulting gameplay. For example, I combined two sections of code knowing that it wasn’t exactly what I wanted. I just wanted to get closer to whatever it was I was doing. The result: now instead of just pushing the Ball, you can push against the Walls, and depending on the direction you are facing, the Ball moves. Psychic powers?! Maybe I could make some Walls into switches that create a gravitational pull on the Ball? It might be an interesting gameplay development.

Of course, I haven’t exactly created or updated a detailed design, so how can I know when something is progress or the introduction of a bug? This project is starting to become a bit more concrete, so I think it is appropriate to list specific implementation goals. Since I’ve gotten this far, I really think it would be appropriate to turn it into a commercial quality game. Besides having a game to sell, it would also allow me to have the experience of finishing a game that doesn’t look and feel like a newbie’s first project.

It’s clear that Oracle’s Eye is becoming more like a puzzle game than anything else. The basic premise: maneuver the Ball through the Room to get to the Exit. Maybe that’s all a player needs to know, but what about me? I’m still making it!

  • The Player should not be able to occupy the same space as a Ball. If the Ball hits a Wall, the Player should find that he/she needs to push at the Ball from a direction that isn’t towards the Wall in question. The point is to force the Player to use the level layout to find the best way to move the Ball. Allowing the Player to move the Ball through him/her would break the game since the Player would not need to worry about where certain Walls are.
  • Graphics: the Ball should rotate when it is moving and in a way that implies rolling. As it stands,the Ball rotates in only one direction, and while it might not be too noticeable, it is incorrect. Similarly, the Player should have images from multiple angles and various key frames. The static Player image is fine for placeholder art, but it will need to be replaced by someone that looks alive and breathing. The Ball and the Wall and Floor tiles should also be updated with higher quality art. The graphic style should be cartoonish but not exaggerated.
  • Sound: the game is silent currently. I should work on getting at least one piece of music for the background. The music should be upbeat and fun. There should also be sound effects for the Player when he/she kicks the Ball or hits a Wall. There should also be sound effects for the Ball hitting a Wall or getting to the Exit.
  • Levels: each level will consist of a Room with Floor and Wall tiles, an Exit, and a starting location for the Ball and Player. Rooms should be able to have different dimensions. One Room might be 10×10, another might be 5×15, and another might have varying widths. The purpose is to allow vastly different level designs as well as varying visuals. The maximum limit is related to the screen dimensions and the Tile lengths. 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 imagine that the game would require the ability to restart a level if the Ball gets stuck in a corner or gets in some other situation that prevents Player progress.

I was about to add that I wanted extra items, like angled banks for the Ball to bounce in new directions, but I already decided to cut out such features. It’s a nice-to-have, and maybe I’ll find that it will be easy to add, but the above listing is what I want to concentrate on. I think that focusing on these things will greatly improve the game, and I can always write down the gameplay elements I come across that don’t fit this design but might be useful elsewhere. I will keep an offline version of what I have here. It should be easy to update as I gain more insight into the project and its needs. I already know that this isn’t nearly detailed enough, but it should be good enough to show you (and me!) what I’ll be working on.

Categories
Game Development Linux Game Development

Oracle’s Eye Development: Graphical Enhancements

To continue with the improvements necessary for Oracle’s Eye, I decided I would focus on simple and quick things. On my list:

  • Shrink the Ball images to half size.
  • Create an actual sprite for the Player.

No coding for tonight, mostly. And there really isn’t too much to describe for the Ball, either.

The Ball

I just took the Ball image and scaled it so that it was 32×32 instead of 64×64. The tough part was rotating it 45 degrees at a time and putting it in the graphics collection for the Kyra Encoder. I could use the Kyra Sprite Editor to create the animation, but I found it much easier to manually edit the XML file. I already had the larger Ball, so I just changed the numbers. It was really easy, and I only had to fix a problem once. When I ran the game, the top of the Ball was cropped so it looked flat on top.

I even added some more Walls to the level. Eventually I’ll be able to dynamically load the level from a file so I don’t need to recompile for each change. For now I’m still working on the mechanics. The new Walls actually make the level a slight challenge. You can’t just kick the Ball three times and win anymore, although it isn’t all that more difficult either. Still, it is definitely a nice improvement. What is especially nice is that the Ball only spins if it is moving now. Once it stops, it stops spinning as well. Eventually I’ll change the rotation depending on which way it goes, which means more frames of animation to handle movement up and down.

I also decided to change the movement of the Ball. Instead of bouncing perpetually between the Walls, it now stops upon collision. I think handling the Ball movement will be more interesting this way, and levels can be created that take advantage of the fact that the Ball stops once it hits a Wall. We’ll see how it works out. It’s actually more of a puzzle now, so I think it might stick.

The Player

Next, I wanted to change the image of the Player. A white stick figure isn’t all that exciting. A non-animating stick figure is even more so. If he can’t move between two Walls, that would be a problem. I needed to provide a better Player.

I didn’t exactly want hyper-realistic graphics, but I realized that I hadn’t thought of an art style to use. I was thinking about making it simple for now and using a cartoon blob, but I felt it would be cheap and would make it look too much like Lolo. I wanted something that showed character but was also mine. I still wanted a cartoon feel to it, but I thought I would do well to make up a nifty character. Beetles? Snails? Pigeons?

I made a quick drawing of a corporate cubicle dweller. No reason, really. Yeah, this is all very temporary, but it is easier on the eyes, as you can see:

Image of updated Player and Ball

The Player still floats around the Room, but I figure that animating him would be premature. I would prefer something a bit more adorable than this guy. B-)

Downloads:

codenameOraclesEye-r97.tar.gz, 8.0 MB
codenameOraclesEye-r97.zip 8.5 MB

To build, you will need libsdl1.2 and libsdl_image. Go into source/kyra_2_1_1/kyra/engine/ and run ./make. Then, you go back to source/ and run ./make. To run, ./oracles-eye.

Only available for Gnu/Linux currently, but apparently it doesn’t take much to get it to run on Windows. Thanks, Scott!

Categories
Game Development

Oracle’s Eye Development: Kicking the Ball Some More

Working off of the list of improvements for Oracle’s Eye, I managed to improve the hit detection somewhat.

I was originally thinking about changing the movement code completely. Instead of freely moving about, the Player and Ball would move in a tile-based manner. I spent a bit of time thinking and writing about how I would go about implementing a tile-based game, and I still believe that it might make some things easier. I could also start adding different objects easily.

But when I sat down to code, I decided to continue to do what seems to work for me: mold the existing project until it works.

A major problem with the movement is that the Ball can get stuck in Walls. It can bounce back out normally, but if the Player is too close, it will get stuck in the Wall. Unfortunately, one of the ways I tried to avoid problems with movement causes a very annoying bug. If the Ball moves into the Wall, it is supposed to move back out at twice the distance. It looks like it bounces back out. But if the Player is touching the Ball, it stops moving. Well, if it stops moving, it won’t bounce back because the reverse of stationary doesn’t exist! The next update through, if the Player moves, the Ball wants to move with the Player; however, because it is stuck in the Wall, it “bounces back”. The result is that the Ball looks like it is going the exact opposite way that the Player would expect, which makes the game feel buggy. And not the good, on-purpose buggy, either.

I’m not a fan of guessing with my code. If X = X + 1 doesn’t seem to work, I don’t just automatically turn it into X = X – 1. I prefer to analyze my code and try to determine what exactly is going wrong. In this case, I found that each update, the Player moves, then the Ball moves. Then the Kyra engine’s tree is walked, which allows me to accurately handle collision detection. The next step is to check if the Player collided with a Wall. No problem there. I just reverse the direction of the Player, move him, then change his direction to STOPPED. Then I check if the Player collided with the Ball. If it does, then the Ball will take on the direction of the Player. It makes sense in most cases. If the Player touches a stationary Ball, the Ball should act as if it had been kicked in the same direction that the Player was moving.

When the Ball is near a Wall, however, the Player can kick a Ball, and the Ball can bounce off the Wall. Now the Player and the Ball overlap. Again, it is not a big problem. If the Player moves, the Ball follows the Player. The problem occurs when the two overlap AND the Ball is overlapping the Wall. The Player moves, makes the Ball move, but then the Ball wants to reverse itself.

I found that most of the Ball/Wall overlap can be avoided by changing the order of the collision checking code. The Ball will check for collisions first, then the Player will do the same. The Ball might still get stuck in the Wall, but I’ve found that it is a quite a bit more rare and not as dire a situation. It is a lot harder to reproduce the issue, but of course, right when I was about to say that the problem was completely solved, it occurred.

In any case, it was a quick fix and didn’t require any new code. I’ll probably continue to work on this same issue, but for now it has been vastly improved. I think I will also want to change the size of the Ball. The diameter of the Ball is the width of a Tile, which makes it very difficult to maneuver. If there is a single Tile opening between two Walls, a player might find it incredibly frustrating to try to get the Ball in between. It is part of the reason why I was thinking about using Tile based movement. I should eliminate this problem entirely. Of course, Duke Nukem Forever has had its engine gutted and replaced a number of times, and I would actually like to complete this game soon. B-)

Download files: EDIT: I decided to take down this set of downloads. For both tar.gz and .zip files, it comes to about 16.5MB, and I’m running out of space on my server apparently. This update doesn’t exactly merit its own release, so I will remove it and allow space for better uploads.