Categories
Game Development Personal Development

Thousander Club Update: January 22nd

For this week’s Thousander Club update:

Game Hours: 262.25 (previous year) + 7.75 (current year) = 270 / 1000
Game Ideas: 616 (previous year) + 0 (current year) = 616 / 1000

I am coming up on 300 total hours, but I am not pleased at the rate I am getting there. My routine has been disrupted this past week, but I believe I did prove that I can dedicate myself to some task for many hours. If I can just focus on doing the things a game developer would do, I could make some real progress.

I’m still optimistic about this year. I just haven’t been putting forth the effort I need.

Categories
Game Design Game Development Games

First Ever Carnival of Game Production Has Started

Juuso at GameProducer.net has posted the first edition of the Carnival of Game Production. One of my posts is featured, and many of the other authors provided practical tips.

The featured articles:

  • How one man made an MMO: an interview with Gene Endrody
  • Interview with Georgina Bensley, Creator of Cute Knight
  • Automating Build and Test Systems < ---- I liked it. B-)
  • How many polygons in a piece of string?
  • Multithreaded Game Scripting with Stackless Python
  • Learn to love your level designers!
  • Wii design elements: Wii’ve Been Played!
  • The 10 reasons you will never finish your game
  • A Great Time to Be an Independent Developer
Categories
Game Development Personal Development

Thousander Club Update: January 15th

For this week’s Thousander Club update:

Game Hours: 262.25 (previous year) + 4.5 (current year) = 266.75 / 1000
Game Ideas: 616 (previous year) + 0 (current year) = 616 / 1000

Another slow week of development. I spent the little time I did work on figuring out how to handle the explosion effects. I studied a few bits of source code, and I am now rolling my own set of effect classes. It’s not as complicated as I may make it sound, but it isn’t trivial either.

The main reason why I am not working so hard on game development is because I am spending way too much time trying to get MythTV installed using Knoppmyth. So far, I have narrowed it down to a weird-hardware-configuration problem when booting after the install. Basically, it could be anything that a newbie MythTV installer like me would think should just work.

Categories
Game Development Personal Development

Becoming a Game Developer

Steve Pavlina recently wrote about becoming a millionaire by thinking like one. One of the things he mentions is the identity shift needed, which ties into the topic of his recent podcast on faster goal achievement.

When I first heard the podcast, I realized that I am not going to finish making games so long as I continue on the poor results I’ve been posting. I need to change how I act. I need to act more like an actual game developer and less like someone who is hoping to make games in the spare time I can squeeze. I need to be a game developer if I am going to do game development.

In the Thousander Club, I have managed to pull together over 250 hours of spare-time game development. If I was actually acting like a game developer in the past year, though, I imagine that I would have put up stronger results. I shouldn’t be satisfied with only 25% of my goal for the year, and practically speaking, I shouldn’t be satisfied with not having an actual, complete, professional-quality game in all that time. And if I am honest with myself, I know that I am not satisfied.

Maybe a year or two ago, 250 hours working on an ambitious-yet-unfinished component-based game engine, a poorly designed-and-unfinished puzzle game, and a mostly-finished Pong clone would have been fine, but I can’t be satisfied with similar results at the end of this year. It’s not like I don’t appreciate the real-life experience that the past year has given me. I just want to be serious about being a game developer, and I realized that I was being half-hearted about my efforts.

Bottom line: if I want to change anything, I have to change how I identify myself.

It’s going to be hard changing my habits. Even though I’ve identified this problem before, I am still treating game development as a lower priority task, and it is usually the first thing I put on the back-burner when my schedule gets disrupted. How can I expect to make games for a living if I can’t even consider them important enough to make in the first place?
When people ask me what I do, I tell them about my day job, and I sometimes mention that I started my own shareware video game business. I mention my blog, I mention that I reviewed games for Game Tunnel, and I might say that I am slowly programming some simple games. How can I expect to make GBGames into a success when I won’t even acknowledge what I want to do? Did DaVinci say, “Oh, by the way, I also sort of paint”? Did Einstein say, “I work at a patent office. Oh, and sometimes I like to think about physics”?

I am a game developer. Once I can think like one, I can act like one.

Categories
Game Development Games Geek / Technical Linux Game Development Politics/Government

Second Life Client Source Code Released as Open Source

I found this bit of news on LinuxGames.com. Second Life, the virtual world created by the players, has had its client code open sourced. Linden Labs released the client code under the GPL.

I’m excited by this news because it means that progress on the GNU/Linux client might actually move forward, putting it on par with the Windows and Mac clients.

Categories
Game Development Personal Development

Thousander Club Update: January 8th

For this week’s Thousander Club update:

Game Hours: 262.25 + 1 = 263.25 / 1000
Game Ideas: 616 + 0 = 616 / 1000

On Wednesday, I wrote down an entry in my todo list: Create 384 game ideas.

Months ago, I entered into crunch mode at my day job and neglected a number of things in the rest of my life. I had a ritual of coming up with three game ideas per day, but once I hit crunch, my routine was destroyed, and I never did get back into it.

I thought I could catch up before December was through. After all, coming up with ideas is fairly easy, especially since my game ideas are just one-liners that indicate a concept or theme. It is not as if I am coming up with 500+ page game design documents or anything. In one sitting, I threw together over 100 ideas at once. I figure if I do it a few times this week, I can hit my 1,000 ideas goal and be done with it. Actually, I could probably dedicate an entire afternoon to creating all 384 ideas. Afterwards, I can post the entire list, along with the 161 ideas I had before I started the Thousander Club last year.

Categories
Game Development

The Carnival of Game Production

Juuso announced the creation of the Carnival of Game Production.

What is this Carnival of Game Production?
Simply put: a monthly gathering of game developers and producers at a central location. The idea is similar to those other “Blog Carnivals” – but here we present quality articles dedicated to game production. Anyone wishing to participate in the Carnival is welcome. The Carnival is hosted by a different blog each time.

If you have an article related to game production or game development, go ahead and submit it. If you want to host the carnival one month, contact Juuso.

Categories
Game Development Personal Development

Thousander Club Update: December 25th

For this week’s Thousander Club update:

Game Hours: 262.25 / 1000
Game Ideas: 616 / 1000

Target: 1008

Merry Christmas! Apparently I was off a bit in my calculations, as there is almost another week to go before the year’s end…hmm…

In any case, I managed to hit over 25% of my goal for the year, which isn’t too bad. It’s not very good compared to actually doing 1,000 hours, but it wasn’t bad.

Space Invaders is playable as a real game, but I am amazed at the long list of things I have left to do! There is no real animation to speak of, there are no menus or text, there is no way to get to a game over state, and you can’t restart from in-game.

Still, you can continue to shoot enemies for as long as you have ships left. There is no indicator, but you start with the standard three ships. If you lose them all, you need to shutdown the game and start it over if you want to continue playing.

Categories
Game Development Geek / Technical

The Best Random Number Generation Explanation Ever

Thanks go to Uhfgood in #gamedevelopers for finding the article Using rand(). I thought I already knew about the problems with using rand(). This article was great at clarifying the actual problems people have with using rand() as well as faults with “good” solutions people use. It also documents a simpler way to use rand() that actually produces better results! It turns out that rand() is better than many programmers thought.

For those of you who don’t know, the classic way people are taught to use rand() to get a random number between 0 and maxRange is as follows:


int picked = rand() % maxRange;

The problem with the above is that the value you get in picked will not be as random as it could be. Something about lower order bits repeating too often. So usually the “better” way to solve the problem is through some slightly more complicated code:


int picked = lowerBound + rand() / ( RAND_MAX / ( maxRange - lowerBound ) + 1 );

The article explains that this example also has problems!

So what do you do? Stop fighting rand()! I wasn’t happy with the example given as I don’t understand why simple variables have to be used with simple examples since they only make it more confusing. The following is my own code:


int highest = 100;
int randDivisor = RAND_MAX / highest;
int pickedValue;
do
{
pickedValue = rand() / randDivisor;
}
while ( pickedValue >= highest );

It may seem like you would waste too many cycles waiting for pickedValue to be within the range you desire, but it really doesn’t take long at all. It is more pseudorandom than the other examples and needs less complex code, too!

The document also explains the problem with the usual code to seed the random number generator:


srand(time(NULL));

The problem seems to come from the fact that changes from one time to another aren’t usually enough to change the first randomly generated number. The article explains a way to use time() in a portable manner by hashing the bytes of its return value.

The entire article is a good read, and I believe any game programmer will find it useful.

Categories
Game Development

Space Invaders Clone Progress: Finding My Way

I’ve been reading through the source code of a number of games, and I’ve been picking up some good ideas.

Specifically, I had been struggling with the idea of retrofitting a menu system to a finished game. I hadn’t been focused on the task (as I need a finished game first), but I had a vague idea that I would need to design the menu system and run it separately from the game loop. Interestingly enough, I found that a number of games have the menu system as part of the main loop! I was a bit confused by it at first, but apparently the game is paused for one reason or another, and the menu system has its own update() function that gets called if it is active. It seems fairly easy to implement, and there are plenty of code examples for menu system implementations out there.

I now feel more confident that I can leave the menu system to a later time, allowing me to focus on finishing Space Invaders. I have since added functionality to allow the aliens to move down the screen in formation, and once an alien hits the player’s ship, the alien is destroyed, and the player’s ship becomes invisible.

It becomes invisible because I have yet to actually define what it means for the ship to be destroyed. Technically you can still shoot and move the ship. You just can’t see it. To really destroy it, I will need a way to disable the player’s input, and I will also need a way to restore the ship after a few seconds.

Explosion effects would help, too. B-) Currently, the alien and the ship simply disappear when “destroyed”, although the alien sprite really does disappear for all intents and purposes. I am still making small changes, and being very careful with new ideas I come up with. I write them down and put them away, ready for v2.0’s development. I just want to finish v1.0 as quickly as I can.

At one point, I felt stuck. I didn’t know how to proceed, and I found myself sitting in front of the code without any real reason. I stopped, took out some notecards, and came up with a few scenarios. I basically wanted to determine what should happen in specific situations.

For example, what happens when an alien touches the player’s ship? Well, the alien and the player’s ship both get destroyed.

What happens when the alien gets destroyed? Well, some explosion animation should occur, the alien should be removed from the list of active aliens, and if it was the last alien, then the next level should start.

What happens when the player’s ship gets destroyed? What should happen when the game starts up for the first time? What happens if there is no player ship on the screen? What happens if the player has no ships left? What happens if the alien reaches the ground?

Answering each of these questions helps me to see what functionality is missing. I still need animations for the explosions, I think I may make use of a timer for the player’s ship to get restored, and I still need to add some font to display text such as “Game Over” and “Start Game”.

It is amazing how clear everything becomes when you stop and think, “What will happen in this specific circumstance?”