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
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
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?

Categories
Game Design Game Development Games

Not at the GDC Again

While a number of people will be writing their coming blog posts from the Game Developers Conference, I will be reporting the action from Chicago. Again.

I would love to see Will Wright talk about what’s next in game design, but I’ll have to be content with seeing it on GDCTV when they release it later in the year. It would also be great to be there when they announce the winners of the Independent Games Festival, but I’ll just have to read about it at Game Tunnel.

Since I’m not going, I can treat this week as any other. I’ll work on game development and might get more accomplished since I won’t have as many blogs to distract me. B-) Since the GDC is generally about sharing what we know, this week I’ll try to post about what I have been doing with game development and design.

To everyone at the GDC, have fun, and good luck to the IGF finalists! My favorites for the Seumas McNally Grand Prize are Professor Fizzwizzle, Darwinia, and Weird Worlds, but I haven’t played Dofus or Wildlife Tycoon: Venture Africa yet.

Categories
Game Development Personal Development

Thousander Club Update: March 20th

For this week’s Thousander Club update:

Game Hours: 53 / 1000
Game Ideas: 156 / 1000

Target: 168

I worked a few hours, but spent quite a bit of time writing a game review and managing other responsibilities. I broke the 5% mark, however, and it feels good.

I’m falling behind in game ideas. I’ll need to catch up this week.

EDIT: You know, I should also add that I was sick for a couple of days. I try not to let myself make excuses, and sometimes I forget that some things aren’t actually my fault.

Categories
Game Development Games Geek / Technical Marketing/Business Politics/Government

Draconian Copy Protection Not Necessary for Games

Stardock, creator of Galactic Civilizations 2, released a news item recently about the reasoning behind the lack of copy protection on its latest game. In it, Avatar Frogboy writes about better ways to combat piracy, namely by making it more attractive to be a paying customer than to download a copy illegally. It’s a refreshing viewpoint since most developers these days seem to believe that copy protection is a “vital” part of game development.

We realize that some people or companies might feel threatened at any evidence that implies that draconian DRM schemes or CD copy protection may not make that big of a difference in sales.

For example, we were quite disturbed to discover that the company that makes Starforce provided a working URL to a list of pirated GalCiv II torrents. I’m not sure whether what they did was illegal or not, but it’s troubling nevertheless and was totally unnecessary

Way to go, Starforce. Not only do you have a bad reputation for leaving behind junk on PCs when a person installs a game, but you go ahead and make yourself into quite a nuisance for companies that don’t fall for your marketing. Good job! You will continue to earn the scorn of gamers. Stardock should be commended for doing right by its customers and for keeping the moral high ground on this issue.

And look at the responses on that news item!

I bought the game for the sole reason you dont treat me like a criminal.

If anything knowing you can easily create a working backup of your games is what made me become a devout follower of Stardock in the first place.

Well Stardock I can tell you that ‘not’ putting DRM on your product is the reason I bought this game. I didnt buy ‘just’ because there is no copy protection, I also enjoy 4x games and GC2 is a good game. There are alot of games to choose from and I can only buy a few, so when it came time to decide what my next game was going to be I saw no copy protection for GC2 and my decisoin was made.

looks like I have to take might and magic 5 off my list too, I didn’t buy silent hunter 3 and X3 either just because
of that dreaded starforce

In some cases, the lack of draconian copy protection on a game made the purchasing decision easier for people. If you have a choice between buying two great games, one with DRM and one without, which would you choose? And isn’t it eye-opening that people are refusing to completely buy some games because of the type of DRM being used? If you want to increase sales, you make your product more valuable than a competitor’s offering. I haven never bought much music, but I have bought music at Audio Lunch Box because they promise me .ogg or .mp3 files without DRM. I don’t have to worry about copying my music to a second machine and having my music player accuse me of piracy. Why would I use anything with the misnamed FairPlay on it?

One poster referenced Rip Rowan of ProRec.com who wrote about the frustrations of so-called Digital Rights Management in Waves Native Gold Bundle 3.2 Featuring PACE Interlok. It’s sad how common a practice it is to purchase licenses and then use cracked versions for convenience.

In the best case, copy protection can be a mild annoyance for the customer. He also documents some worst case issues with PACE Interlok, including instances where uninstalling one “protected” package on a machine can invalidate the authorization to use another unrelated package, or installation reboots the system spontaneously, or the inability to use software due to downtime with the company you need to “phone home” to.

But the very worst part:

Within weeks of the commercial release of Native Gold Bundle 3.0, pirated versions of the software were available everywhere!

So all of my pain and suffering was for NOTHING! NOTHING! That’s what makes me so unbelievably ANGRY! It was all for NOTHING!

Now, why would you want your paying customers to feel this way? Why force them to jump through hoops, making cracked copies of your game all the more attractive? When you release your second game, or your fifth, what could you possibly offer to your customer to make him/her deal with your DRM crap rather than download a copy that can be played without effort? Why should I buy a music CD and risk having it ruin my computer when I can download the MP3s and know that they will just play?

I don’t like this sentiment, however:

Finally, I implore everyone who reads this article: do not steal software. That is why we are in this mess in the first place.

I’ve already written about how copyright infringement isn’t stealing, but that last sentence is what bothers me the most. Are you really supposed to believe that it isn’t the company putting you through painful copy protection? You’re supposed to just assume that it is the person who infringes the copyright that is at fault? Let’s take some responsibility here. Stardock isn’t forcing draconian copy protection on its customers. It’s game is not always legally acquired. If those darn pirates are the reason we’re “in this mess”, how does Stardock manage to take the high road?

Let’s put the blame for overbearing copy protection where it belongs. Yes, someone “stole” your game. That person shouldn’t do it, but he/she did it. At the same time, we already know that two wrongs don’t make a right, so don’t tell me that copy protection that punishes the paying customer is out of your hands. You have a choice, so when your customers complain, you can’t just say, “Well, if it weren’t for those pirates, we would make it easier for you, but we can’t.” Aren’t you supposed to please your customer? You know, the person who actually buys your projects? Increases your sales numbers? Improves your cash flow situation? If not, then who are you trying to please?

Categories
Game Development

Game Developers on IRC

When you’re a lone wolf indie game developer, it’s easy to slack off. No one is there to tell you that you should be working on your games instead of watching television or checking your email for the one millionth time today. You’re on your own to motivate yourself and make sure that you’re making progress.

Which is why communicating with other indies can be so great. Each of you may work independently, but collectively you can keep each other on track. If you’re wasting time, someone can point it out to you. If you’re floundering, someone might be able to shed some light on why. If you’re family isn’t enthusiastic with the idea that you’re “playing on the computer” when you should be doing something “productive” with your life, the encouragement from other indies can be the oxygen you need to breathe. It’s that important.

It’s why I really enjoy the #gamedevelopers channel on Starchat. Just point your preferred IRC client, like Gaim, mIRC, or my personal favorite, bitchx, to irc.starchat.net and /join #gamedevelopers. While I enjoy going to ##C++ on freenode for programming assistance, #gamedevelopers was great for keeping game development at the front of my mind. Like I said, when you’re on your own, it can be really easy to let laundry, dishes, dinner, and bills force development time to tomorrow.

Stay on topic, anything game development related, this includes no religious/political discussions and nothing that could cause a flame war. Keep in mind that programming chat is allowed but we’d really like to keep it game-specific, or at least something related to something that’s related to games (for example, website authoring for your shareware games business). And you can keep it on any games topic, board games, crossword puzzles, console (video) games, pc games, mac games, pen and paper rpg’s, if it’s a game, you can discuss it!

People in the channel have shown screenshots of works in progress, announced new major projects, or discussed game design. I’ve made it part of my game development presession checklist to connect to #gamedevelopers. While you would think that the last thing a person needs is an IRC channel to distract from work, I’ve found that it helps motivate me. I don’t want to go to the channel and admit to the people there that I’ve wasted time.

If you’re an indie working either alone or with a small team, you would do well to come to #gamedevelopers. Say hello. If no one responds right away, we’re probably being productive at that moment. B-)