Thursday, June 23, 2011

Our First Game Is Out For the iPad. Hooray!

Last week, Avadon: The Black Fortress HD for the iPad went live in the iTunes App Store. The reaction to it so far has left us stunned. Literally. Like, jaws dropped, walking around in a daze.

The genesis of the iPad version was a few months ago, when I said, "Hmmm. I have a few weeks free on my schedule. I think I'll port Avadon to the iPad. That'll be good for a laugh!" I've long known that there was a demand on the device for old school gaming, free of ads, in-game purchases, cute animals, zombies, and farming.

But, it turns out, the demand was far greater than I'd ever guessed. My fan mail since the release has been very instructive. Gamers weren't just disappointed by the lack of deeper games on the device. They were downright irked.

But that is the Magic Power of the Indie developer. Find an underserved market and serve it.

Writing and releasing my first device for iOS has been very instructive. In case anyone is interested, here's a few comments on Spiderweb Software's first game for portables.

Learning To Code For a New Platform.

Apple has done an amazing job of making developing for iPhones and iPads accessible. The sets of commands to program the device (i.e. the API, called Cocoa) are very clear and not too trying to learn. The development environment, XCode, is free. There are several good, free game engines for the devices. (I used a heavily modified version of the open source engine iPTK.)

There are also excellent books available on the topic. I leaned most heavily on Beginning iPhone 4 Development. I found iPad Application Development For Dummies to be unusually poor for a Dummies book, but its chapter on Provisioning (a tricky, vital, and neglected topic) is easily worth the cost of the book.

A Decent Port. But Just Decent.

Avadon originally came out for Windows and Mac. I was really determined not to half-ass the port to the iPad. I put a lot of thought into how to best adapt an old school, Western-style RPG to a touch screen. It's not something people have spent a lot of time doing. I think I came up with good answers to a lot of the questions, and the game overall plays really well.

However, there are a number of places where the UI could be better. This isn't because I was lazy or wanted to dump shoddy work on the market, but simply because this was my first iOS application. So have mercy. Our next game for the iPad (out, let's say, next April) will be better. It'll take some doing to modify the engine, but it'll get done.

Avadon HD is also a fairly demanding app. All of those icons eat up RAM, and the first generation iPad doesn't have a lot. It's playable, but it will be pokey from time to time. It runs great on the iPad 2, but I don't take a lot of satisfaction in that. The inconsistent performance on the iPad 1 is, simply, a failing on my part.

The Apple Approval Process.

Took a week to get my app approved. No rejections. No hassles. No complaints.

The Eternal Pain of Pricing.

It hasn't all been love and group hugs. Some of my fans have been seriously furious that we sell Avadon for Mac and Windows for $25 and the iPad version is $10. Like, "I will never be your customer again. Die in a fire." furious. I don't normally explain my decisions about pricing, but this merits a few words.

The same game is almost always priced differently on different devices. If you look at the prices charged for, say, Peggle, Plants vs. Zombies, or Angry Birds on different platforms, you'll find a huge variety. Angry Birds on the iPhone? One dollar. On the Macintosh? Five dollars. That's a five times difference!

There are a variety of reasons, all of them out of my control, for why I feel it is appropriate to charge less for the iPad version:

1. It has fewer features, due to the limitations of the device. Most notably, it is stuck at 1024x768 resolution and there are no keyboard shortcuts.
2. Since it is being sold by Apple, it is subject to the rules of their system. Most notably, there is DRM, and we can't give refunds through iTunes. Games bought directly from Spiderweb have no DRM and a Money Back Guarantee.
3. When you buy Mac/PC Avadon from us, you get a registration key that can be used to unlock an unlimited number of copies, over both Mac and Windows. A registration over iTunes isn't quite so liberal.
4. There is no ability to mod the game. This matters to more people than you might think.

But the main reason Avadon HD is $10 is, to be honest, that is the only possible price. Any more expensive, and it will cost way too much for an app. Any cheaper, and we're charging too little for what is still an old school niche product with a limited audience. If you try to look at it from our perspective, I think you will see that we didn't have a lot of options here.

One More Disappointment.

We are going to release all of our new games on the iPad. No question.

However, we currently have no plans to write games for the iPhone. After long thought, I came to realize that we just can't figure out how to write the sort of in-depth games we like to do on that screen size. Again, this is a failing on our part. I'm sure some intrepid developer will find a way to make it work. (Hear that, young Indies? That is the siren song of a market for you, all wrapped up with a big, red bow.)

Also, since most Android devices don't have a screen big enough to support our games, we are very unsure how soon we'll be supporting that platform. We are in wait-and-see mode.

Thank You.

And finally, many thanks to everyone who reads this who has supported our games. At the end of the day, I'm just a guy in a basement trying to earn a living and feed the kids. I am grateful for every sale. Plus, they make it possible for me to write more games. Lord knows, by this point, I'm too old and cranky to learn how to do real work.

Soon, we will release the first screenshots and information for Avernum: Escape From the Pit. For Windows and Macintosh. And the iPad!

Thursday, June 16, 2011

The Ultimate Fix Your Broken Game Checklist.

(This is the third of three articles about providing tech support as a small business. The previous chapters are here and here.)

I get two sorts of requests for tech support for my games. First, there's the familiar problems, the things that are my fault or that I know how to fix. I love these. I tell the victims how to get out from under their burden, they get on with their lives (dazed that an actual human read and processed their request for help), and everyone is happy.

And then there are the gremlins. The weird problems. The sorts of issues that are reported by exactly one person out of many thousands. Problems whose cause and fix are a total mystery. These are, alas, most of the problems reported to me. Most of these problems will be caused by incompatible software, hard drive corruptions, wonky graphics cards, or free-floating evil spirit manifestations. Sadly, as the hardware industry seeks out ways to cut corners and make computers ever cheaper, these sorts of afflictions only grow more common.

(Of course, some people say that every problem with a game, ever, is the result of the programmer's sloppiness and error. As if video cards never break and Windows is a flawless piece of software. These people want you to spend limitless time chasing bugs that don't exist. For a sample of this line of thinking, read the comments for my last post. While I acknowledge that some problems end up my fault, wasting energy trying to fix problems you didn't cause and can't fix is a Bad Thing.)

When I get one of these weird problems, I send out a standard list of troubleshooting steps. I have spent years assembling and perfecting it, and it honestly fixes the vast majority of problems. If you are a small developer, I invite you to steal and adapt it. If you are suffering from misbehaving software, I suggest trying these steps. At the risk of sounding slightly arrogant, if everyone would just drop everything, listen to what I have to say, and follow it without question, the world would be a much better place.

Spiderweb Software Tech Support Checklist

1. Restart your machine and try the game again. Run the game when no other applications are running. A lot of glitches and crashes are one-time things and don't happen again.

When someone runs one of my games, it is far from the only moving part in their system. There is the OS. The drivers. The many background processes. The other programs that are running. Any one of these programs might have a bug that messes up sections of memory. (Not to mention the fact that RAM can be corrupted on its own.) The longer a computer runs without a reboot, the more likely that things might get messed up. Then the system goes down and comes back up, and everything is nice and clean again.

Most problems only happen once, due to weird and unreproducible effects, and never happen again. If you get a crash, don't immediately freak out. Take a deep breath, reboot your machine, and try again.

2. Sometimes, game files can become corrupted. Try uninstalling, redownloading and reinstalling the game. This fixes a surprising number of odd problems.

The key step. Any program can become corrupted while being downloaded, installed, or just existing on the hard drive. This step is a surefire way to fix any such flaws. I am constantly amazed by how often I can fix a catastrophic, recurring problem by simply telling the user to uninstall and reinstall. No other mucking about with settings, saved games, or whatever.

This step also has the bonus of making sure the user has the newest version of the software.

One warning note. This step has three parts. Uninstall. Download clean copy. Reinstall. Be sure the user doesn't skip a step, or the beneficial effects are lost. For example, if you install without uninstalling first, the installer might leave the existing (corrupted) files alone instead of copying over them.

3. (Windows Users) Your video card driver files might be out of date or damaged. Get the latest versions of video card drivers and reinstall them. Even if you are currently running the newest version, the files or settings might be corrupted or damaged. Reinstalling might fix the problem.

I always hate telling users to install new drivers, for two reasons. First, they often think that I'm just doing it to blow them off. After all, this is what ALL developers tell them to do. Second, unlike the previous steps, identifying your video card, finding the manufacturer's web site, locating the newest driver, downloading it, and installing it requires a reasonable amount of technical skill. Odds are, your grandmother won't be able to figure out how to reinstall drivers.

And yet, I tell people to do it for one reason. It works. Weird, glitchy graphics? This is probably the answer. If new drivers don't do it, a flaw in the actual video card is probably the answer.

Lately, many of my users running 64-bit Windows 7 have had tons of problems that were solved completely by getting the new drivers. Several of them swore up and down that they were using the newest drivers. They weren't.

I strongly believe that the ugly situation with video cards and drivers is one of the key reasons for the huge shift in gaming from PCs to consoles. It's really not good.

4. (Windows users.) If random crashes happen during gameplay, try turning the sound off. If this helps, reinstall your sound card drivers too.

We're getting to the bottom of the barrel now, and this step isn't near as necessary as it used to be. As sound engines have improved, most of my weird crashes from sound card/engine issues faded away.

However, it does eliminate one more set of drivers to work with, and not using sound reduces the amount of memory the game needs. Every once in a while, this fixes a problem.

5. (Windows users.) Sometimes, reinstalling DirectX solves unexplained crashes.

And it does. Very, very rarely. It happens, but seldom enough that I'm considering removing this step from the list. Also, all of our newest games use OpenGL.

And That's It

If it's a problem or crash nobody has reported before and the user goes through these steps (or claims to have done so) and the issue isn't fixed, I give a refund. I'm out of answers.

I do hang onto the e-mails, though, in case other people pop up with the same problem later on. Sometimes a working program gets bushwhacked by another, poorly-written program. For example, on the Mac side, there was once a version of Quicken Scheduler that caused games to stop being able to see the keyboard. When I got the second report of keyboard failures, I sprung into action. Having the earlier report around helped a lot in figuring out the problem.

Steps I Don't Suggest

There are two steps for fixing mysterious problems that I almost never suggest. I feel that they are very extreme, involving too much work (and perhaps expense) to be worth it just to play my little game.

1. Reinstall the Operating System

This is the nuclear bomb, the way to purge your system of all manner of corrupted files. It's also a huge pain in the neck. I generally only suggest this if the user mentions he or she is seeing a lot of nasty problems while using a number of different applications.

2. Get a New Video Card

Video cards break. Seriously. It's happened to me. Sometimes they fail and you need to get a new one. However, I only recommend looking into this if the user mentions having similar problems over a wide range of games and swears up and down that fresh, up-to-date drivers are installed.

In Summary

Tech support is necessary, time-consuming, and aggravating. It tests my patience more than anything else I do. And yet, doing it well will, in the long run, make your customers love you and earn you money.

Be as patient and kind as you can possibly manage. Only fight battles when you have a chance of winning. Consider, with humility, that a problem might be caused by a bug. Also remember that, very often, it won't be your fault. Respect how shoddy and cheap and poorly maintained computers frequently are. And, always, try to treat your customers they way you would want to be treated.

You will always be amazed at how messed up things can get. Good luck.

Wednesday, June 8, 2011

Everything Breaks, All the Time.

(This is the second of a three part series about the black art of doing tech support. The first part is here.)

Anyone who ever has to do tech support (or who is trying to get a broken program to function) must first internalize one key, vastly important fact:

You can take a flawlessly written program, install it on a new, factory-fresh, basically functional computer, run it, and find that it doesn't work.

When you understand why this is, tech support, giving and receiving, becomes ever so much easier.

Computers Are Mechanical Devices

Computers are so close to magic that it is easy to forget that they are machines. Incredibly, brain-breakingly complex machines, that record and recover millions of bits of information a second (in RAM or on your hard drive), etching down those details in the magnetic fields of microscopically small bits of matter. So much is done, so quickly, on such a small scale that quantum mechanics becomes relevant, that I'm amazed any computer ever manages to work at all, ever.

When data is recorded on the hard drive, errors can happen. There are guards in place (called checksums, for what it's worth) to help keep the errors under control, but there are still many, many ways that incomplete and incorrect chunks of data can be recorded. The longer you operate your computer, the more errors there will be.

Most of the time, when these errors occur, you never find out. They happen in bits of the operating system or in programs that you don't use or the error introduced is so minor you just ignore it. But sometimes the error happens in a graphics driver, or your saved game, or the bit of my RPG that determines whether your characters get experience or not, and suddenly there is a problem.

So What Does This Mean?

It means that even the best-written program will have a ton of problems out in the field that aren't the developer's fault. Problems that need to be fixed by rebooting the computer and relaunching the program (to fix any error in memory) or by reinstalling whatever part of the software (the game, the drivers, the operating system) that have become broken.

If the problem is in the game, your characters might stop doing damage, or you might lose the ability to enter new places, or the game just might start crashing like crazy. Corrupted file in the display drivers? The graphics might be drawn funny, or the screen might always be black, or the game just might start crashing like crazy. Corrupted file in the operating system? The game might stop being able to save, or the settings file (that contains the registration) might disappear, or the game just might start crashing like crazy.

I'm not just blowing smoke to distract from my own errors. These problems happen all the time.

Of course, when users report these problems, they will pretty much always assume that it is your fault and you are an idiot. I have gotten multitudes of bug reports along the lines of, "Whenever I try to start a new game, the program crashes. This is a terrible bug and you should fix it right away!" When I get these messages, what I want to respond (but don't) is, "If my game had a problem this serious, don't you think I would drop everything this instant to fix it? You think I want to sell games that are never usable by anyone? What turnip truck do you think I just rolled off of?"

That's what I don't say. What I do is send them my standard list of tech support steps, and, 99% of the time, problem solved.

My Rule For When I Start To Hunt For a Bug

It's a simple one.

I never even consider that a problem someone reports is a bug in my code until two people report the exact same problem.

Sometimes, if the report is vague enough, I wait for three people. It can be maddening to get reports of catastrophic problems and not act on them, but it's worse to waste your limited, precious time hunting for gremlins.

We Live In a World Of Frustrations

I know that, every time I release a new game, thousands of people will get the demo, run it, and it won't work because of the reasons outlined above. They delete the game, write me off as a bonehead, and never send me teh moneyz. This is hugely frustrating. Nobody wants to be thought an idiot, and everyone wants the aforementioned moneyz. It's sad, but it's part of the business of writing games for computers.

It's even worse when they then go online and write about what a bonehead you are. Recently, a site called Platform Nation reviewed our newest game, Avadon. The reviewer got stuck with a horrible glitch that teleported his character into nothingness. He proceeds to excoriate me for writing such a terribly buggy game. Please believe me when I say that nobody, and I mean nobody, besides the reviewer has ever reported this problem. Don't believe me? Our support and Avadon forums have never had a mention of it. But the reviewer still called the game "wrong or broken" and "unforgivable " and gave it 1/10.

(Interestingly, the review has disappeared from the main site, and the only remaining copy is on their forums. I can therefore neglect expressing any other opinions about the reviewer's level of professionalism.)

Of course, if this sort of horrible game-breaking behavior was a bug, I would do everything I could to fix it. But that's not how things work.

Game Development Isn't For Wimps

Many people will get a game that breaks, and most of them will simply disappear and never try your product again. But some of them, happily, will come to you for help. When they do, you should smile, take a deep breath, and do what you can to make them happy. When the problem is a weird one I've never heard of, I will first send them my magic troubleshooting checklist that solves all problems. I'll post that next week, and everything will be better for everyone forever and always.

Wednesday, June 1, 2011

Seven Tips For Giving Good Tech Support.

When you try to start a business selling indie games (or any software product, really), writing and releasing the game is only half the battle. You then have to market and support it. Marketing is difficult, but there are lots of good resources to advise you on how to do it. Providing tech support to confused users is a much more arcane task, and I know of few resources to teach the hapless young developer how to do it well.

As a small developer, you have to provide timely, personal tech support. The ability to do so is one of your best Magic Powers as a small developer. Large companies are horrible at providing support, and people are used to that. As a result, a single personal e-mail to someone having a problem with your product can make you a fan for life.

But at the same time, as a small developer, you have very little time to spare for support. Time spent getting the game working for one person is time not spent making a new game for everyone. You will need to develop a sense of when the time lost helping a person is not worth it, either because you won't be able to solve their problem or because they will not able to implement the fix you provide.

It's Not a Simple Job

Supporting a game is hard. You will get complaints from people with the most amazing jury-rigged computers: motley assemblies of shoddy parts, duct tape, components bought at the cheapest possible price, and video cards found at the bottom of boxes of cereal. Machines that should, if there was any justice in the world, evaporate into a cloud of flame and self-disgust the moment they are turned on.

And while dealing with the infinite configurations of computers in the world is challenging, dealing with their owners can be worse. No matter how perversely disobedient a machine can be, humans are more difficult. People will report problems to you in only the vaguest possible terms, have no idea how their computers work, or outright lie to you about what they have been doing.

If you want to stay in business, you have no choice but to support your game. So here, based on my experience, is some advice and observations from someone running a small company who needs to do tech support.

Tip 1 - Be Patient

Dealing with other humans is frustrating, but you have to do it. You want, whenever possible, for them to go away satisfied. Be prepared, especially when dealing with a customer on the phone, to take a deep breath, count to three, and be as friendly and professional as possible. I know. You want to get back to working on your game. Time is short, and this person doesn't even know whether he's using Windows or Mac. Do your best to talk him through it. Remember, you can make a fan for life.

Tip 2 - Don't Be a Pushover

Some people will want you to teach them on the phone every detail about how their computer works. Some people are desperately lonely and want someone to talk to. Some people will have a machine so old or messed up that your game will never work. Politely and firmly cut these people off.

Remember: It's only worth the time to do tech support if you have the chance to, in a reasonable amount of time, fix a problem and make a loyal customer. If you realize that, at the end of the road, you aren't going to end with a happy person and a working product, end the conversation as quickly and pleasantly as possible.

Tip 3 - Be Ready To Ask Questions

The people who use your product are not generally tech experts, nor should they have to be. They will have no idea what information they need to provide to help you troubleshoot their problem. If I had a dime for every time an eight-year old (or a sixty-year old) sent me a bug report saying only, "The game crashed. What should I do?" then I would have, well, a lot of dimes.

Prepare a list of information people need to provide to help you solve their problem. Windows, Mac, or Linux? What version of the operating system? What brand of computer? Exactly what went wrong? Was it the installer that went funny or the game itself? Did rebooting the machine help? When you get a tech support request that doesn't give you enough information to have a clue what's going on, one option is to send the list of questions.

Generally, when you do this, one of three things will happen. One: They'll answer the questions, and you'll have enough info to start to help them. Two: They will resolve the problem on their own. Yay! Three: They will be unable to answer them and you'll never hear from them again. This is unfortunate, but, honestly, if the user isn't technically apt enough to answer a handful of basic questions, they will likely be unable to enact any fixes you suggest.

Happily, the list of questions is not something I send out very often. I deal with most problems by sending out my list of generic things to do to solve any problem. This takes care of the vast majority of issues, and I will share my list with you in detail in an upcoming post.

Tip 4 - Computers Are Delicate Mechanical Devices

I'm going to go into this in much more detail in the next installment, but this point is so very important that I have to bring it up now. Computers are incredibly complicated and delicate machines. Sometimes they go wrong. Sometimes files get corrupted. Sometimes RAM gets corrupted. Even a flawlessly bug-free program running on a perfectly maintained computer can break.

A huge chunk of your support will just involve having people reboot their machines and reinstall their programs (and drivers). This will fix 90% of reported problems, if you can get the user to do it ...

Tip 5 - The Users Will Lie To You

I blame this one on the horrible state of tech support in the industry in general. Much of tech support involves giving bad or time-consuming advice in the hope that the user will just go away. When I am asked for help, the person asking is generally angry, frustrated, and full of mistrust. This leads, alas, to lots of e-mail conversations like this one:

User: "I have this problem." (That I know is fixed in the newest version of my game.)
Me: "OK. Uninstall your copy, download the newest version, and install it."
User: "I did that. The problem is still there."
Me: "I see. Now what you need to do is uninstall your copy, download the newest version, and install it."
User: "OK. Done. I still have the problem."
Me: "Unfortunate. Now, please, I beg of you, in the name of God and all that is holy, uninstall your copy, download the newest version, and install it."
User: "I did that. It fixed the problem."
Me: "I can taste colors."

To hear users tell it, their computers are flawlessly-maintained, their drivers are all up-to-date, and every program in the world works but yours. They aren't necessarily intentionally lying. They might just not know that, say, newer drivers have come out. Just don't take anything you are told as gospel, especially if you know they're wrong.

Tip 6 - Know When To Give Up

There are some problems that I just give up on. If the machine is too old or too underpowered. If the problem is with the mouse cursor not moving right. (I get this sometimes, and, beyond suggesting trying a different mouse, I really don't know what to say here.) If the keyboard starts to not be recognized. (This happens sometimes too, and it's an OS/Program Incompatibility problem that I can't really handle.) If the graphics aren't working and the drivers for their freaky, off-brand video card aren't being updated anymore.

It sucks, but sometimes all you can do is apologize and offer a refund. The point of tech support is to fix the problem. If you have no capability to fix the problem, all you can do is give their money back and hope for their business in a future life. If you treat people fairly, when they get a new computer, they may very well come back to try again.

Tip 7 - Have a Standard List of Troubleshooting Steps

Once you have helped people long enough, you will come up with a list of steps that fix the bulk of their problems. Once you have this list and someone says they have a weird problem that definitely isn't a bug, you can send this list and most of the time that's enough to close the ticket. The items on the list will vary depending on the game and the platform. In a future post, I'll share Spiderweb's list. You might find it helpful.

That's a rough guide and a good start. In the next post, I will go off on a philosophical treatise about the nature of computers as physical machines. Then I will reveal my standard tech support checklist. Say tuned!