Categories
Game Development

Indie Game Podcasts

Action decided to be a party-pooper and do something beneficial for April 1st instead of playing pranks. He’s renamed it April Enlightenment Day. He started the first April Enlightenment Day with a new podcast show: Indie Game Developer’s Podcast.

The first podcast was with Tom Robertson of Aggressivegames.com. It’s a 16MB download and a little over 30 minutes long.

In this podcast, Tom talked about the obstacles that faced him when choosing to leave the mainstream game industry and go indie. I liked hearing his opinion on the difference between “revolutionary” and “innovative”.

I’m sure I’m not the only one looking forward to more indie game podcasts! Thanks, Action!

Categories
Game Development Personal Development

Thousander Club Update: April 3rd

For this week’s Thousander Club update:

Game Hours: 60.75 / 1000
Game Ideas: 212 / 1000

Target: 210

I didn’t get much work done this week, but it wasn’t as if I slacked off. I just didn’t get much time on the computer this week in general, let alone time to work on game development. I helped a friend move this weekend, which was when I was originally planning on making up for the week. Oh, well. I still made 6%. B-)

Categories
General

GBGames Blog License

Since some legal issues have come up, I thought now would be a good time to make it clear what the the end user license agreement for GBGames’ Blog actually says. This EULA outlines what rights you and I have when you read this blog and has been in effect since I started it over a year ago. Apparently some of you do not read the EULA and so are not aware of your rights and responsibilities. I am republishing the EULA as a service to you.

By reading GBGames’ Blog, hereby known as The Blog, you, hereby known as The Reader, must agree to the following terms and conditions. Failure to do so is copyright infringement and The Reader will be prosecuted to the fullest extent of the law.

  1. The Reader is allowed to read, peruse, skim, and/or view The Blog, so long as the Reader does so under the terms of this license.
  2. The Reader may make comments in The Blog about specific posts of The Blog using the mechanisms provided by The Blog. The Reader may post about The Blog in his/her own blog, hereby known as an External Blog, and may use a trackback to allow its existence to be acknowledged in The Blog. The Reader may also post about or read about The Blog in other media, including but not limited to web forums, mailing lists, or email. Doing any of the above requires The Reader’s External Blog to be likewise licensed under the GBGames’ Blog License.
  3. The Reader agrees to relicense any source code he/she controls, whether owned by The Reader or another party, under the General Public License, and all copyright shall be immediately transferred to Gianfranco Berardi, owner of GBGames.
  4. Reading this license implies acceptance of the terms.
  5. No, seriously.
  6. THERE IS NO WARRANTY FOR THE BLOG, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE BLOG “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE BLOG IS WITH YOU. SHOULD THE BLOG PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  7. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE BLOG (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE BLOG TO OPERATE WITH ANY OTHER BLOGS OR SOME OTHER WAY YOU MESSED UP), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

As I said, there have been some legal issues, and so appropriate and
proper steps have been taken. I basically hoped to inform and
reeducate my readers as to exactly what rights they may have
implicitly or explicitly been given or restricted in very clear, yet
legal terms.

Further developments may not be completely disclosed in the interest
of privacy, but anything I can provide will be made publicly available
on this blog. It’s been very, VERY trying for me in this time, but hey,
legal issues almost always are, right? I just try to think of my many
supporters. Without you, I don’t know where GBGames would be. B-)

Categories
Game Development

New Game Design: Yellow Graphics

So I’m working on a new game design. I found that a lot of the most popular games in the casual game portals are making use of the color yellow at some point. I’ve decided that I will make a Yellow-based game.

Yellow-based gaming is apparently all the rage, and I want to make sure I get in on the action before it becomes a saturated market, such as underwater-themed puzzle games. There’s a lot of money to be made in yellow-based games. In fact, I’ve been doing so much research on it that I will be giving a talk at the next GDC entitled “Being Yellow Ain’t Cowardly”.

It’s exciting to be on the bleeding edge of game development.

Categories
Game Development Games Marketing/Business Personal Development

Independence, Money, and Great Games

Joe Indie referred to Dan McDonald’s Sustaining Independence at Game Tunnel. Previously, McDonald had written on the topic of independence, stating that financial pursuits necessarily makes a developer less independent. His latest article continues this line of thinking:

An independent developer that wishes to sustain their independence must pursue their own interests in game design and development and give them preeminence over their interests in business and profit.

At first I was inclined to disagree. How can you expect all people to starve for their art? Can’t people be considered indie while simultaneously earning an income from their work?

Of course, how you define an indie is important. Many would argue that indie simply means you are not financially dependent on a publisher or other entity. If you extrapolate this definition, technically most people who call themselves “indie” are in fact financially dependent on their customers.

What is your goal? Are you simply trying to make money? If so, game development is just one of many activities to achieve those goals. “The pursuit of money is inherently an ambition devoid of any value or meaning. If the only value one derives from an activity is monetary, then the activity itself is of very little consequence.” You could replace game development with database programming or bartending or painting or blogging, and in the end you’ll still have your money. What’s game development to you other than a job? Whether it is for someone else or for yourself, its a job, and creative control is in some way not completely yours. Change something about your game for the sake of pleasing the customer, and you’ve given up some control over the direction of your game development.

McDonald’s indie, on the other hand, would have a goal of perfecting his/her craft. Game development for the sake of game development. Making games to learn how to make better games.

A lot of business gurus will tell you that to be successful, you have to realize that making money is not only good, but it is the main goal. It makes sense. How can you hope to make a living from your business if you don’t accept the idea that you should be making a living from it? You can’t make a million dollars until you accept that it is a possibility. Most people don’t think they can. Some people do. Who is more likely to actually make the money? The purpose of a business is to make money.

The purpose of an indie, on the other hand, is to be independent. An indie experiments with making great games. An indie can make money, of course, but making money was never the main goal. His/Her overriding goal was never about making more money so much as making better games.

Are the business and the indie in perpetual conflict? How can an indie survive? If trying to make money taints the notion of independence, are all indies doomed to working odd jobs or doing other things to make a living? Are most indie’s forced to relegate game development to a hobby? I’d like to say no. Making better games, you will undoubtedly hit upon something that other people also like. Making better games, you will create a world that other people believe in enough to pay money for the right to participate in it.

Is it wrong to try to make money from your game? No. I also don’t think that the general definition of “indie” will change to exclude those developers who make games on their own for the purposes of making a living. Is it possible that a game created for the purpose of making money can also be a great game? Perhaps, but if your main goal is to make great games, wouldn’t you be more likely to actually make one? And if the game is truly great, won’t a lot of other people want to play it?

Categories
Geek / Technical Personal Development

Using the Computer Purposefully

I took a walk instead of going home immediately after my train ride yesterday. I originally wanted to get some exercise, but I took advantage of the time to think. One of the questions I was grappling with was “How can I stop wasting time when I am at the computer?”

I was thinking about it because I noticed that I could sit at my computer for hours, only to find that I had maybe 15 minutes of productive work. What was I doing with my time? What could I do to change it?

I realized that I would start using the computer without giving much thought to what I would do. Sometimes I could start working on game development right away, but other times I would start checking my email or recording my receipts in my accounting program. Sometimes I would remember to look something up, and it can be very easy to aimlessly browse the web. Sometimes I’d write a blog post. Sometimes I’d visit a forum.

In all of these cases, however, I didn’t have a plan of action. I just sat down and started doing random things. I might be able to focus on an important task, and doing so would account for the productive work, but I could do better.

Thinking about it, I concluded that it might be best to force myself to think before using my computer. I should ask myself, “What do I want to accomplish?” before taking control of the keyboard and mouse. No matter what I decide, I should also make sure to set a time limit. Whether I am programming, updating my accounting books, or checking email, I will give myself a set amount of time to do it in. I should also make sure to give myself time to goof off.

I wrote up some categories of activities:

  • programming
  • email
  • blogging
  • gaming
  • accounting
  • listening to music
  • researching
  • reading the news
  • leisure

I might add to or change this list in the future, but for now it gives me a good indication of the kinds of reasons for using the computer. Restricting the time for each task is helpful because I currently have a problem with task-switching too much. If I can focus on one task, I can get it done quicker and better than if I am keeping track of multiple tasks at once. Some people say that they can multitask, but the human brain has been shown to work best when it is not distracted. It is a key idea behind books like “Getting Things Done”.

Anyway, I hope that by determining my purpose for using the computer, I can use it in more productive ways. If I use it in an unproductive manner, it will still be a conscious decision. It will also be restricted to a specific time period. Today if I get distracted, I might think that I’ll stop in ten minutes, but in reality an hour can go by without notice. I just haven’t been good at enforcing it. I let a distraction change my focus rather than make the decision myself.

Asking myself why I want to use the computer should be a good habit. I should be able to increase the ratio of productive hours to total hours if I can remind myself that I have a purpose and that I can always do something else later. The most distraction I should tolerate is to allow myself to write down what I want to do so that I can remember it later.

Categories
Games

Addiction a Bad Word

I meant to write about this article when I first read it, but Are Games Addictive? The State of the Science at Gamasutra asks if games are addictive. The answer: We don’t actually know.

The article presents an overview of psychology to help a game developer understand the nature of addiction and how it relates to games. Interestingly enough, even though there have been documented cases of people dying while playing online games, there hasn’t been enough definitive research to say whether or not games are addictive. People can become addicted to games, but no one has proven or disproven that games are themselves addictive. It’s a distinction that politicians and journalists have ignored.

Categories
Game Design Game Development

Object-Oriented Game Design

Hi, you’ve probably come here from some of the sites that link to this article. This post is an old one, though, and I’ve written a more up-to-date post called State of the Art Game Objects that you probably want to check out that has a lot more research links and info.

I’ve mentioned Object-Oriented Game Design by Britt L. Hannah before, but I wanted to write a bit more about it.

The article is not named very well. Game Design and Software Engineering are two different things entirely. The article isn’t actually about object-oriented game design, whatever that means, so much as object-oriented software development for games. It doesn’t make the information any less valid, however.

It basically discusses a component-based design for game objects. In a recent issue of Game Developer magazine, Mick West wrote “Evolve Your Hierarchy” which gives an overview of the topic. Some references listed in the article:

To summarize, there is a tendency to use object-oriented languages to create deep hiearchies. Scott Bila’s slides #7 and #8 show how inflexible and unwieldy these hierarchies can be. So if you can’t just have objects inherit from Drawable, Collidable, Shootable, or similar abstractions, what can you do?

You give an entity states in the form of objects. But rather than give a class private members to hold state like you usually would, you create a separate class for each state you would like to store. So instead of the following:


class Ship
{
int hitPoints;
string name;
}

you would do:


class Ship
{
State hitPoints;
State name;
}

What’s the difference? What happens if you need a new type of ship? Or an asteroid? Or a base? Or an alien? It is conceivable that you might have different types of entities that need to track the state of their hit points or names. It is also conceivable that those entities might not need to inherit the behaviors of a ship. So the states are placed into their own objects and assigned to Entity objects. You don’t really need to create a Ship class since a Ship is really nothing more than an entity that has the states that belong to a Ship.

Now the part that was a real eye-opener to me. It is very intuitive to create classes for things we think of as objects. In computer science class, we’re taught that classes have state and functions to manipulate that state. A class is created for a noun, and the functions in the class are the verbs.

Well, it turns out that the verbs can be encapsulated in classes. If we use the first example of a Ship above, actions would be functions defined in Ship:

class Ship
{
void setName( string);
string getName( );
void setHitPoints( int );
void adjustHitPoints( int );
int getHitPoints( );
}

Each time you add some state to a class, you need to add functionality to access such state. It can get really messy, really fast.

If you separate State into its own classes, however, then you can create Action objects to interact between entities. In the second Ship example, you can create an Action called AdjustHitPoints:

class Action
{
void doAction( ) = 0;
}


class AdjustHitPoints : public Action
{
void doAction() { entity.hasState( HIT_POINTS)->hp += amount; }
}

An Entity needs some way for the Action objects to grab state, so hasState() fills that role. Action objects have a function called doAction() that manipuates the states from an Entity.

Can you see how powerful this design is? Instead of hard-coding state into entity classes, you can construct entities at run-time. Instead of giving individual entities the methods to manipulate the state, you separate the events into their own classes. You can add a bunch of Actions to an Entity’s queue. The Entity can then pop the Actions off one-by-one and run doAction(). You don’t call adjustHitPoints(). You just activate the AdjustHitPoints Action object for the entity.

Normally if you have an abstract class called Human, you might derive Man and Woman classes from it. Let’s say you have a pointer to a Human, human, and it points to a PoliceOfficer object. You can’t say human->catchCriminal() because a Human doesn’t have the functionality of a PoliceOfficer. It is sometimes difficult and/or dangerous to dynamic_cast to the proper object type, so it seems overly difficult to get a PoliceOfficer to catch a crook since you don’t know who the PoliceOfficer is. If you change the code so that you know who the PoliceOfficer is, what was the point of needing to use a pointer to Human? Or inheritance, for that matter?

However, if you use the separate components to handle state, you can say human->activateAction( CATCH_CRIMINAL ). If it isn’t a PoliceOfficer, then it won’t have that Action. Nothing happens, just as we would expect. A PoliceOfficer, on the other hand, will have that Action object in its repertoire, and so the CatchCriminal Action will be activated. Eventually some code will run when the PoliceOfficer object updates that will look something like:

action->doActions();

Even better than the above example is that you could create a different type of Human-derived object: a Deputy. A Deputy isn’t a PoliceOfficer, but it should also have the ability to catch criminals. There’s no need to duplicate code. You just give it its own instance of the Action.

Separating state into components and encapsulating events into their own objects allows for more flexibility in your game code. I’ve already found that this design was both easy to implement and fun to use. I have been writing a text-based board game, and I was surprised with how easy it was to construct entities. I sometimes find myself writing code that resembles the deep game entity hierarchy, but whenever I do it is a source of pain. Refactoring the code so that it resembles the component-based model has always made it easier to work with.

Categories
Game Development Personal Development

Thousander Club Update: March 27th

For this week’s Thousander Club update:

Game Hours: 59.5 / 1000
Game Ideas: 172 / 1000

Target: 189

Almost made it to 6%! I’m still behind in game ideas, but I’ll be sure to fix that today. If I sit down for 20 minutes, I’m sure I can come up with the remaining 17 ideas for this past week plus the 3 ideas for today.

Categories
Game Development Games Geek / Technical

IGF 2006 Awards

I can’t find too much information on it yet, but Gamasutra reported the winners of the Independent Games Festival for 2006.

Darwinia received awards for Technical Excellence and Innovation In Visual Arts as well as the Seumas McNally Grand Prize. Congratulations to the people at Introversion Software as well as all of the winners for each category!

Joe Indie has some pics of the event. I want a small, green Darwinian. Anyone at GDC from the Chicagoland area manage to get one of those?