Categories
Games Linux Game Development Marketing/Business

Linux Gamers Demonstrate Demand & Support Suppliers

I like calling attention to the reasons why you should support Mac OS X and GNU/Linux as a game developer, especially since so many people still ignore these markets at their peril.

Recently, Koen Witters of Koonsolo Games wrote about how surprised he was to find that Linux users show their love for the company’s indie game. He posted Mystic Mine‘s downloads and conversions stats, and the results demonstrate that GNU/Linux users are a gaming market that is relatively easy to target and is willing to purchase quality games.

Mystic Mine is an action-puzzle game with simple controls. You basically switch tracks for mine carts to use as they collect coins, diamonds, and other items. As more and more carts run around, you’ll find yourself switching tracks just to keep them from running into each other, and the action can get frantic.

This game is available for GNU/Linux as a native client, and the customers are buying. I downloaded the demo, and the game runs right out of the box. It’s a fantastic user experience.

Contrast that experience with EVE Online. Back in February, EVE Online‘s official GNU/Linux support ended. The reasoning? Not enough GNU/Linux users to make it worth the complexity of supporting three operating systems.

If you read the comments of that news item, you’ll see that everyone agreed the native client was horrible. One person said that using Wine to emulate the Windows version worked better than the native client. People even left the game because the native client was so painful to use.

No wonder there weren’t many GNU/Linux users. Based on the feedback I’ve seen, they were treated as if they were second-class customers, given an inferior experience and expected to act like it was good enough.

Again, contrast that experience with 2D Boy’s World of Goo. GNU/Linux users had to wait for that game to be released long after the Windows version was. When the port was finally released, more games were sold on that day than any other day.

This day beat the previous record by 40%. There is a market for Linux games after all 🙂

If you’ve played World of Goo on GNU/Linux, you know that the native client is great. It’s not buggy. It’s not frustrating to use. It just works.

So Mystic Mine and World of Good are both games that treat GNU/Linux users as first-class customer, and the creators are rewarded with good conversion rates and sales. EVE Online produces an inferior experience for GNU/Linux users, and then the creators cite the low number of customers as the reason to drop the poor support they were providing.

If you want to argue that EVE Online is an MMO and has different support costs, keep in mind that A Tale in the Desert is also an MMO, and when it first came out, 38% of GNU/Linux users converted to paying customers while only 20% of Windows users did.

In terms of absolute numbers, there are more Windows users than GNU/Linux users, but there are other benefits besides sales and subscribers. Publicity is a huge one. With websites dedicated to Mac and Linux games, you’ll easily make a name for yourself if your game is well-made. Of course, if you half-ass it, you’ll make a different name for yourself.

I’ve asked before: why aren’t there more Linux-using gamers? But the market exists. It has a significant user base. And they pay money.

As an indie, you can afford to provide a quality experience for these people and reap the benefits, especially since, by and large, the mainstream game industry ignores them.

Categories
Game Design Games Geek / Technical

Randomness in Game Design

Greg Costikyan gave a presentation at GDC Austin ’09 titled “Randomness: Blight or Bane?”.

It’s a long post to read, but I like how this one is actually readable. Most presentations end up online as slideshows only. Without the speaker there, the context of a slide is also missing, and it is hard to know what you’re expected to take away from the presentation. In this case, it seems he took his presentation, put it into blog post form, and used the slides as images to break up the text nicely.

He opens it up by explaining how our sense of accomplishment requires that we feel we used skill to win. If you press a button that has a 50/50 chance of declaring “YOU WIN”, it’s not really compelling by itself. We won’t feel we earned anything. It was blind luck that resulted in a victory.

So naturally you would think that if you want compelling, interesting games, you need to eliminate randomness, right? Well, that’s a tall order, something I wish someone would have told me when I was designing early games in the Game Design Concepts course.

And yet, lots of popular, long-standing, “stood-the-test-of-time” games have random elements in them. Some are more random than others. For instance, a game I’ve been enjoying with my friends these days is Farkle. It has many different names and various implementations, so if you want to know how to play, you can read the rules yourself on the Wikipedia page. The point is that Farkle is a dice game, and as such relies heavily on the results of dice throws. It’s pretty random, and nothing about the result of your roll is impacted by your skill. And my friends and I are enjoying it.

Fun fact: Sierra Games put out a Hoyle-series game with a version of Farkle.

Ok, but when you win in Farkle, why aren’t you bored? It’s probably because the player is choosing when to rely on luck. If I have 1200 points, and only one die left, there is a 1 in 3 chance of rolling well and continuing with all six dice for even more points. If I take the chance and win, that’s a huge win, enabling me to increase my score greatly. If I lose, I lose the 1200 points I racked up. On the other hand, if I want to play conservatively, I can pass the die to another player and keep the 1200 points on my score sheet. Now the next player might roll that one die and try to build on my score, essentially riding on my success, or he/she can roll all six and start over.

Another way I impact the game is in how I choose which dice to keep. If I roll six dice and get a 1 and two 5s, I can keep all three of them, but I could also keep only one of them so when I roll the remaining dice, I have a chance of getting better results.

Without the randomness, however, what would Farkle be? Part of the game is essentially gambling. I sometimes take high-risk rolls on the off-chance that I will leap ahead in scoring. I sometimes fail. If I couldn’t fail, it wouldn’t be fun. I’m basing my decisions on my understanding of the odds of scoring with the remaining dice in my hand.

I would highly suggest reading the article, but here is a quick summary of the role of randomness in game design:

  • to heighten the realism of a simulation.
  • to break up symmetry.
  • to ensure variety of play, preventing players from predicting what happens next.
  • to offset the vast differences in skill levels between players to allow everyone a chance of winning.
  • to generate algorithmic content.

There is a point where Costikyan talks about why games like Chess and Go, which have no random elements and players in symmetrical starting positions, are able to remain interesting while games such as Hex and Twixt are “solvable”.

Games in which all players pursue the same strategy result in a win by the player who makes the fewest mistakes — or, if none, by the player who has the player-order advantage.

This is dull.

Chess and Go have strategic depth, and the symmetry is broken soon enough. Hex and Twixt have an optimum strategy. In Chess, each player isn’t using the same strategy. There are many that can be pursued, especially as the game develops. This reasoning is why my early attempts at those game designs sans random elements were so hard to make interesting. Especially because it was an early, rough design, there was no strategic depth! Whoever went first would win, and if someone was mathematically inclined, they would find a way to solve my games. One of the things I did in an attempt to fix this problem in my High School Reunion board game design was make it possible for each player to pursue different paths to victory. Apparently I was on the right path in attempting this, but as Costikyan points out, Chess was developed and refined over thousands of years, whereas I was designing my game part-time for a class. I’m not going to easily create a great game design if I am trying to avoid using luck to play a role. B-)

The article also mentions a few uses of random elements which seem pointless. For instance, weapon damage in Quake was random, but never enough to impact the game in a meaningful way. Most people wouldn’t know that it was random at all. So why include it at all?

His explanation of how randomness regresses to the mean, allowing strategic elements to dominate if both randomness and strategy is possible, is also fascinating stuff.

In game design, randomness is a tool. Like any mechanic, having a deep understanding of it can only help you apply it better.

Categories
Games Geek / Technical Marketing/Business

The American Gamer

People like to analyze NPD statistics on console ownership, so feel free to pop on over to The Great American Gaming Landscape if you want to see what this past year can tell you about the American gamer.

Or I can spoil it for you. B-)

Over half of the population plays video games, yet only a quarter of households own a next-gen console. Unless you count my Nintendo DS, I fit into these stats. My gaming takes place mostly on my computer, and I still have GameCube games I haven’t finished. Heck, I still have N64 games I haven’t finished. And SNES. And NES. And I have a few Atari 2600 games to go through. I should add that if you follow me on Twitter, you would know that I also play next-gen games at my day job’s employee lounge at lunch. My coworkers and I would play Metal Gear Solid games together, then N+ (yay, indie!), and now we’re on a Boom Blox kick. It seems lots of people who play next-gen games do so somewhere other than home.

Those people who insist that they needed to get every next-gen console so they don’t miss out on any great games? There are almost 3.4 million of them. Sounds like a lot, but that’s only a little over 1% of the population. Those people are elite.

Almost half of all households with a next-gen console have a Wii, which dominates. Most likely if you have a Wii, though, you won’t have a PS3 or a 360.

And with the Wii price drop coming, even though there is a dearth of quality games, it’s likely that the Wii will only get more popular, even in the face of new offerings from Sony and Microsoft.

Again, if you want more details, visit the link above. It’s fun to pore over the numbers. Just think: 75% of households who play games don’t own a modern-day console. If you make browser-based games or downloadable games for PCs, my interpretation of the data suggests you are a force to be reckoned with.

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development Post-mortem

LD#15: Mineral Miner Post-mortem

Ludum Dare #15 is over, and I already wrote that the results are in. Aside from placing well in Community, which shows how much I love participating in LD48, I also saw my overall ranking come in at around the 40 percentile. I was ranked #63, which sounds good, but there were a number of ties for previous rankings. Out of 144 entries, Mineral Miner was 87th. It’s much better than coming in almost dead last in the previous Ludum Dare (and not completely last only by virtue of two other entries not getting rated at all), but I’ve done better.

Let’s look back on this project and see what happened. First, let’s go over a summary of the game. Mineral Miner turned out to be a puzzle game in which you drive around a cavern in a tank, getting out to collect minerals. You can only collect one mineral at a time, so you need to drop off collected minerals in your tank to collect more. If you are near a monster lair and not inside the safety of your tank, a monster will come out and chase you. If a monster catches you, you lose. If you collect all the minerals, you can leave the level and win.

What Went Right:

  • Rapid Prototyping on Paper I took a free, online game design course at GameDesignConcepts.wordpress.com, and I was able to put use those skills to great effect. During the competition, I posted about my prototypes. With only 48 hours, it can feel painfully slow, but I iterated through the design, adding a new mechanic, trying it out, and deciding whether to keep or remove it, and then repeating until I had something I thought might be fun. Painfully slow? It took me almost no time at all. In previous LD48s, I’ve been known to add mechanics at the last minute in an attempt to make a game out of the code I was writing. This time, I knew exactly what mechanics I needed, and there were no real surprises here. The finished game ended up playing exactly how I hoped it would. Prototyping!
  • Quick ‘n Dirty Graphics I’m not terribly familiar with art tools, such as The Gimp, and so every LD48 I find myself looking up how to use it to create what ends up being ugly art for my games anyway. I decided that this time, I wouldn’t try to make anything fancy. If I have any images that need text, I will use the basic text tool instead of the script-fu that creates cool looking logos if you tweak parameters just right. The tank? A square with a dot to let you know which way is the front. The driver? A yellow circle. Hey, it worked for Pac-man. I was able to focus more of my time on making the game because I wasn’t frustrating myself with trying to create halfway decent artwork.

    Screenshot-Cavern Game

    CavernGameCollisionDetection

  • I Made Sound Effects This is my fifth Ludum Dare, and only the second time that a game I made had sound effects. Because I had a game that pretty much worked the way I expected it to, I had time for some polish. I made a list of sound effects I thought I would need, used sfxr to create the beeps and boops, and wrote the code to tie it all together. Adding sound really makes a big difference to a game, and I was glad that I could do so for this one.
  • Faster Build Times and Lighter Distributables Because I had been doing some work on my Vampire Game, work that involves using TDD from the first line of code, I also did some work on my build scripts. Going from a 10 minute build time with a distributable that is already 10+MB due to including source libraries to a build that finishes in seconds and is less than 2MB is amazing for productivity, especially as it comes down to the final hour of the competition. Everything happened so much faster, keeping me focused on game development instead of getting distracted as I waited for a build to finish. Now, it isn’t as if my builds always took 10 minutes, but going from checked out source code to a complete build would. Once the libraries were built with my old system, compiling and linking would still take some time, much longer than the time it took with my new build scripts. Plus, one of the complaints I would get from previous competitions is that my game package was so large, so that’s one complaint I did not see this time around. B-)
  • Simple AI Goes a Long Way I remember taking a few minutes to think about how I wanted the monsters to interact with the level. Should they obey the walls and other obstacles, like the player has to? If so, that would take a bit of AI programming. I don’t have much experience with AI, and I didn’t want to take the time to learn it for this LD48, so what did I do? I made the monster head towards the player every step, ignoring the environment. I could explain it away. It’s a monster. Maybe it climbs walls like crazy? The big surprise was how well it looked. Besides making it move towards the player, I also made the monster randomly move horizontally or vertically to do so. Combined with the sound effect when it comes out of its lair, the twitchy looking monster moving really fast at the player actually feels scary.

What Went Wrong:

  • Distractions I have two cats, and both of them have been featured in previous LD48s, so I won’t focus on their antics too much. My home office wasn’t in a usable state, so I was out in the kitchen or living room. The cats love distracting me from productivity, and LD#15 was no exception. The one thing I did my hardest to control was external obligations. Anytime someone wanted to make plans with me for the weekend of LD48, I would politely tell them that I was busy. And it worked! I was able to focus almost entirely on eating, sleeping, and LD48ing…except for the Chicago Fire game.

    Chicago Fire vs D.C. United

    I won tickets to the Fire vs D.C. United game, which happened to be the same weekend. They were really good tickets, too, and so I made an exception. In practical terms, I lost a good chunk of Saturday. I was able to get the game finished, but having an extra hour or two would have been good for tightening up the graphics and audio. On top of knowing that, the Fire lost, so it wasn’t even as fun a game to watch from the 2nd row as it could have been.

  • The Sound Effects Were Very Rough By far the biggest complaint from people playing my game is that the audio hurts. I was able to get audio in within the last hour of the competition, but I didn’t have time to adjust it. I knew that some of the sound effects were loud and obnoxious, especially the one that plays when you bump into walls, but I couldn’t dedicate the time to tweaking it. The deadline was looming, and I still had a few more programming tasks to complete.
  • There’s Only One Level Right before the end, I realized that I did not have a victory condition. I had programmed a way to lose if a monster caught you and also if you tried to leave the level without collecting all of the minerals, but someone will eventually collect all of them. What then? Ideally, I would have added code to load the next level, created that level, and kept going. In fact, Level 2 is in the distributed game, although it is a copy of Level 1 and there is no code that knows about it. I was thinking about taking Level 1 and breaking it up into at least three levels, with each level introducing new puzzles and getting progressively more difficult. Three doesn’t sound much better than one, but it would have made a big difference. The player would have felt that progress was being made, and the later levels could introduce the trickier ways to deal with monster lairs.
  • Level Loading Bug I could not figure it out in time for the deadline, and I still haven’t looked at it since, but every so often, the level loading code would choke on the data, bringing the game to a halt. Sometimes shutting down the game and rerunning it would work. The data came from a text file, and my code is supposed to load a single character at a time, mapping the value to a tile. Sometimes, however, it would choke because a single character variable would have a value that is two characters long. For a time, I was dedicated to fixing it, but with only 48 hours, a good chunk of which I couldn’t make use of, I decided that since it wasn’t a show-stopper, I would keep going. I really wish I could have figured out why that bug was there. Besides ruining the perceived integrity of the game, I know at least one person didn’t review it due to this crash.
  • Making a Puzzle Game I didn’t set out to make a puzzle game. I didn’t want to worry about creating a lot of content. One level might not be such a problem if the level was varied and fresh each time you played. I could have created a procedural level generator, but I never built one before. I didn’t want to spend time learning how to do so, nor did I want to spend the time tweaking the algorithm to make nicer levels even if I did end up accomplishing it. Out of all of the ideas I came up with, the game I liked the most ended up being a puzzle game, which unfortunately meant I was either going to spend a lot of time making clever levels or finish a game with hardly any levels. It ended up being the latter.

What I Learned:

  • Rapid Paper Prototypes Work My game design skills are sorely lacking, but I’ve been able to practice what I learned in the game design concepts course, and it really paid off with Mineral Miner. I’m not claiming that it’s a fantastic game, but it did rank #45 in the Fun category, putting it in the top 50%, and #27 in the Innovation category, which puts it in the top quarter! It feels good to know that the game design I prototyped early on before writing a single line of code came together, and the comments for my entry showed that people saw a lot of potential in my game. Everything I wanted to put into the game, I learned from minutes of drawing on paper and messing around with tokens. I didn’t need to have a game engine coded up to explore, discard, and introduce mechanics, which means I saved a lot of time that would otherwise have been wasted on code that would get thrown away and changed needlessly.
  • Quick ‘n Dirty Graphics and Audio Can’t Be Permanent My art and audio work was minimal and saved me a lot of time, allowing me to work quickly at getting the game play up and running. Unfortunately, my overall rating got hurt here. I was near the bottom in the Graphics category at #104 and surprisingly a little better in the Audio category at #77. I was hoping for time near the end to replace crude art and sounds with better ones, but it didn’t happen. On that note, even if it did happen, it wouldn’t be more than marginally better since I don’t have the practice and skill with my art tools. One suggestion was to use images of my prototype work, and I agree, the drawings look much nicer.
  • My Pacing Still Needs Work I felt much more confident about my entry this time around, but I still found myself finishing the game at the last minute. There’s very little time for polish when the complete game forms only an hour before the deadline! It’s especially a concern since I decided to go with quick and low-quality art in order to get the game running as quickly as possible. I probably could have set mini-deadlines for myself. 48 hours sounds like an incredibly compressed period of time to make a game, and it is, but it’s still enough time to flounder. Early on, I have two whole days to worry about everything. In the last 5 hours, I’m in crunch mode. I could stand to manage my time and prioritize my tasks much better.

If I could do LD#15 over again, I would try to manage my time better. I could have had the prototype work done much earlier on, leaving me with more time to do the actual programming and arting. I might have been able to get more levels and variety in if I didn’t waste 5 or 10 or 20 minutes at a time wondering what to do. Still, even though Mineral Miner wasn’t a winner of Ludum Dare, I felt it was a success. I designed early on paper instead of designing with hard-to-change code, and I was able to focus on making the game I felt had a chance of being fun. People said they enjoyed the game and wished there were more levels. It was a complete game, meaning that aside from the level loading bug I mentioned above, everything that happens in the game happens because I designed it that way. In 48 hours, a complete game that provided some entertainment for others is a good accomplishment.

Categories
Game Design Game Development Games Geek / Technical Linux Game Development Personal Development

LD#15 Results Are In!

It’s 2 weeks later, and Ludum Dare #15 is officially over. The results are in, and I placed 5th…in the Community category. Unfortunately there was no food category this time around, or I could have gotten the gold in that one. B-)

Seriously, congratulations to the makers of the top ten overall entries! The #1 overall game was Beacon by ChevyRay, which was also featured on IndieGames.com’s Freeware Game Pick not too long ago. Congratulations to ChevyRay for making a splash there!

I’ll have a post-mortem of the Mineral Miner soon, but here’s a summary of how I did: badly in graphics and audio, decent in humor and fun, and well in innovation and theme. A number of people REALLY hated the audio, but they seemed to really like the actual game play. When people are unhappy that there is only one level, it means I left them wanting more in a good way. B-)

My entry ranked #63 overall, being 87th out of 144 entries. There were a number of ties for various placements, so the ranking only goes to #107. I’m a little disappointed in how well my entry did, but there was some great competition. I did much better in LD#13, but I still consider this Ludum Dare to be a success for me. I had a finished game by the end of 48 hours, one that got some great feedback from players. I got to practice skills from the game design concepts course I took this summer, and I would say they really helped me put this game together before a single line of code was written.

Once again, congratulations to the winners! There are some fantastic games in the mix!

Categories
General

I’m Going to Be An Uncle

I learned that my sister is going into labor today, so soon I’ll be Uncle GBGames! B-)

Categories
Game Development Personal Development

Thousander Club Update: September 7th

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 181.75 (current year) = 757.75 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

[tags]game, game design, productivity, personal development, video game development, indie[/tags]

Categories
General

Labor Day Weekend

Normally getting a big weekend means that I dedicate a significant chunk to making games, but this weekend is going to be one of relaxation. I’ll probably play and rate a few Ludum Dare #15 games, but otherwise I’ll be enjoying the weekend.

Ah, who am I kidding? I’ll probably squeeze in some game development here or there, too. It’s not like work or anything. B-)

Also, I’m a big fan of the United States Men’s National Team, and they’ll be continuing their World Cup qualifying as they take on El Salvador tomorrow. I’ll be watching that one with my family.

Have a good Labor Day weekend, American followers, and a good regular ol’ weekend for the rest of you.

Categories
Game Design Game Development Geek / Technical Personal Development

LD#15: Mineral Miner for Windows

If you Windows users were waiting patiently for a version of the game you could play, check out my final entry post. I’ve uploaded a Windows version of Mineral Miner. Just unzip and run caverngame.exe. Make sure to read the instructions first, since I didn’t get a chance to add it in-game:

Controls:
Use the arrow keys to move around.
Press the space bar to jump into and out of the front of your tank.

Collect all the minerals and return to the exit to finish the level.
You can only hold one set of minerals at a time. Return the minerals you collected to your tank to collect more.
Watch out for monsters! If you get too close to a monster lair, a monster will come out and attack you. You’ll have to find a way to stop them from coming out.

Categories
Game Development Personal Development

Thousander Club Update: August 31st

For this week’s Thousander Club update:

Game Hours: 576 (previous three years) + 180.75 (current year) = 756.75 / 1000
Game Ideas: 775 (previous three years) + 10 (current year) = 785 / 1000

The bulk of my time was spent on Ludum Dare. You can see the previous blog posts for updates on how that contest went for me.

[tags]game, game design, productivity, personal development, video game development, indie[/tags]