Project Good Robot 17: The Next Stage

By Shamus Posted Monday Sep 23, 2013

Filed under: Good Robot 216 comments

Tomorrow will mark the 8 week point of this project. I’ve been coy about where I’m going with this all along. Am I going to sell this game? Will it be on Steam? Linux? Will it support [esoteric thing]? Will I do a Kickstarter? Humble bundle? Mobile port?

So far I haven’t answered these questions because I don’t know myself. Eating is good, which means money is useful, which means selling the game would be really nice. But I have no idea what’s involved with that. I haven’t worked on commercial software in several years, and even when I did I had a company handling all the messy product-marketing, money-collecting, customer-servicing, tax-paying, digital-distributing crap. All I had to do was program and some mysterious process converted the code into paychecks.

But now I’m more or less working alone. I need to do all that crap if I want to ship this thing.

Oh, I also need to finish it.

Someone suggested moving the shield and energy bars so they fill outward, so your eyes don’t need to be in as many places at once. Your avatar also offers some cues. The laser arm dims as you run low of power. The missile arm goes dark when you’re out. The circle in the torso fades with your shields. It’s usually subtle, but when all three go dark it really drives home how screwed you are.
Someone suggested moving the shield and energy bars so they fill outward, so your eyes don’t need to be in as many places at once. Your avatar also offers some cues. The laser arm dims as you run low of power. The missile arm goes dark when you’re out. The circle in the torso fades with your shields. It’s usually subtle, but when all three go dark it really drives home how screwed you are.

The problem with working on a video game like this is that there’s no upper limit on how much time I could put into it. I could keep adding features forever, but at some point those features will no longer help the product sell. At some further point adding more features won’t even make the game better. I’ve passed on a bit of paying work in the last couple of months, so it’s costing me money to work on this.

I’m okay with that because I’m basically obsessed and I can’t think about anything else anyway, but in order to keep up the pretense of being a responsible adult I should at least acknowledge the costs as I’m incurring them. I’ve found that being irresponsible is a lot more tolerable to people if you just point out that you’re doing it.

But fine. I can just look at the opportunity costs of not writing prose while I finish the game and use that to figure out how much time I should put into the project. I’ll just compare how much I’m missing now with how much I can expect to make and use that to budget my time.

Except… I have no idea how much I can expect to make from this. None at all. I don’t even have a reasonable guess. A thousand? Twenty thousand? A hundred bucks?

I don’t know how much an “average” indie game sells, I don’t know what the after-tax, after-distro net is, and I don’t have any idea if my game will be above or below average. We have multiple layers of unknowns. Our margin for error is as large as the thing we’re trying to measure, which is just a fancy way of saying we’re making numbers up.

Worse, I also don’t know the numbers on the other side of the balance sheet. How long does it take to bring an indie game to market? Sod if I know. Headliners like Braid and Fez took a couple of years. My project is less ambitious than those, but I don’t know how much time that lack of ambition will save me.

What features are needed? How long will it take to write those features?

So basically I have to write an unknown number of features that will take an unknown amount of time so I can sell an unknowable number of copies for an unknown amount of money over an unknown period of time. I plugged those numbers into a spreadsheet and they formed a graph in the shape of a middle finger.

I am amazed any indie games get made at all. I suppose this explains why most indie games are made by adventurous unmarried twenty-somethings.

I’m surprised at how many insect and worm robots are in the game. I keep adding more because they’re visually striking compared to the static sprites I used to have flying all over the place.
I’m surprised at how many insect and worm robots are in the game. I keep adding more because they’re visually striking compared to the static sprites I used to have flying all over the place.

But let’s try to cobble together some sort of to-do list:

  1. More playtesting. And I mean really play testing, not bug testing. I’ve already gone through two rounds of this with the Spoiler Warning cast, and the resulting feedback had a large impact on how the game plays. I should probably loop through these tests until the feedback stops changing the design. Basically, I need to keep this up until I fix the broken mechanics or decide they’re broken on purpose.

    Example: Originally your weapon would stop firing when you didn’t have enough murder juice to fire at your current power level. You then had to wait a couple of frustrating seconds for the next shot. Chris suggested that the weapon should automatically step down to whatever power level you can support. So instead of having your gun stop firing, it just starts pumping out lower and lower power bullets. That small change had a huge impact on how protracted battles play out. The player can still defend themselves, which means less running away and sucking their thumb. There are probably a lot of these types of adjustments that I can discover if I spend enough time shoving people through the game and taking notes.

  2. More art. Right now there are only 2 tilesets and some of the robot graphics are a little dodgy.
  3. I need to buy music. I’ve been putting this off because I don’t want to sink money into this thing if I’m not going to finish it. On the other hand, I can’t expand my pool of testers until I have real music. The stuff I’m using now is Creative Commons and stuff ripped from Descent, which means distributing the game to testers could technically qualify as music piracy or violations of Creative Commons terms.
  4. I need to write the “story”, such as it is. It’s really just little boxes of flavor text (that also dispense XP) scattered around each level. It’s a place to shove two or three sentences of text to give players a slight breather and give some sort of lighthearted context to the action. No big deal, but I probably need 50-ish of the things.
  5. Need to make a tutorial.
  6. Some kind of save system. The game saves automatically on exit and just dumps you back into the game when you launch it. (It’s like Diablo, where it saves your character state and puts you at the most recent waypoint.) There’s only one slot and there’s no way to backtrack to previous areas once you reload. Maybe players will want to be able to re-visit previous areas. Maybe they’ll want to be able to jump back to old chapters, like the chapter select in Half-Life 2.

    More testing needed to figure out what makes sense and is fun.

  7. Need an options screen. Fullscreen options, sound and music volume, mouse sensitivity, resolution, etc.
  8. Multi-threading. The game is lightweight enough that I don’t need to juggle constant concurrent threads. I don’t have to put AI in one thread, physics in another, and rendering in a third. However, there are a couple of annoying processes that cause hitching. Loading a new level is something like a quarter second to procedurally generate the whole thing, and it takes about three quarters of a second to load in one of the ogg vorbis music files. It’s ugly to have the game stutter when you fly over an invisible line and trigger one of these events, so they need to be put into some background thread.
  9. I Should probably add a feature to let the player remap their controls, although something like that can take as long as the rest of the interface combined. The game then needs to “know” what all keys are called on every possible keyboard and joystick, and must allow you to change any of them to any other while recognizing collisions, confirming changes, and gracefully handling people who switch between keyboard and joystick. None of this is difficult in a technical sense, but it’s CRAZY time consuming to get it just right.

    Worse, it’s a really time-consuming feature that will only be used by a minority of players. This isn’t System Shock 2, where you have complex inventory screens and weapon selection and powersets. You move and you shoot. That shouldn’t need to be re-mapped. Except that many people are using (say) AZERTY keyboards where WASD aren’t arranged in a gameplay-friendly inverted T. It would save me days of work if I could detect keyboards and select reasonable presets, but I’m not sure how to do it or how reliable it would be. I could also support the arrow keys as a way of avoiding this problem, but then what about laptops?

    Basically, the costs and benefits are all over the place. There’s no way it’s worth days and days of fussy interface-building work to make key-mapping available for the one potential customer who is using an AZERTY laptop with no arrow keys who doesn’t own a USB dual analog controller. But I have no idea what other kinds of esoteric usability issues might be out there.

  10. Translations. I need to round up all the in-game text, yank out the lazily hard-coded messages, and stuff those into a text file that can be translated into those jibber-jabber languages they have in foreign lands. This might mean messing with Unicode. Unicode is a pain in the ass.

    Joel Spolsky insists that “It’s not that hard.” but then he writes 3,600 words just outlining the problem. It’s hard. I don’t mean “This is too complex for the brains of mere mortals!” I mean it takes a lot of reading docs, digging through forums for answers, and doing extended testing cycles with people in foreign lands who are many time zones out of sync with you.

    I might do another post outlining why Unicode is a pain, but the short version is that (at least using Microsoft dev tools) you can’t just make a couple of user-exposed bits Unicode. Every stupid string in your program ends up being Unicode, which adds a lot of really ugly clutter to the code and requires an insane number of trivial edits over over the place.

    (Actually, maybe not. Back in my Activeworlds days we had to put ugly casting around almost every single string literal in code, and the development environment couldn’t display the contents of Unicode strings. So code was verbose, ugly, and you couldn’t see what you were doing when debugging. But I’m using SDL to talk to windows, my tools are 10 years newer, and I’m not actually shuffling that many strings around. So maybe it won’t be a nightmare this time around.)

    And now that I’m thinking about it, do you need Unicode if you just want European languages? Do Dutch, French, German, and Portuguese require Unicode? Or is it only needed for stuff like Arabic or Chinese? I honestly don’t know.

    See what I mean about needing research? I need to study just to figure out what to study.

    Having said that: Is this step needed? If the game is going to reach some wider audience then I’ll need multi-language support. But if the sales end up limited to people who already read the blog, then it’s pointless. I mean, you people already read English.

  11. Need to do some profiling. How fast is the game? Need to figure out what system specs are required to hit the 60fps target. None of my testers have reported problems, even with my un-optimized alpha version. That’s encouraging because it means the system specs should be fairly broad. But I still have to grope around and figure out what the limits are.
  12. Maybe Linux.
  13. Maybe Steam / Steamworks / achievements / high score lists / Greenlight.
  14. Just so you don’t think I’m forgetting: Bug hunting. The thing is amazingly stable and polished for an alpha, but Josh did manage to crash it and find a bug nobody else is getting because he’s Josh.

Here’s an example of the player running out of energy. The rainbow coloring is due to the way it’s stepping down through the power levels.
Here’s an example of the player running out of energy. The rainbow coloring is due to the way it’s stepping down through the power levels.

The takeaway from all of this is that once you’ve got a playable, stable, fun game, you’re only halfway done. The difference between “this is offered as-is” and “this is a thing people will pay for” is pretty drastic.

 


From The Archives:
 

216 thoughts on “Project Good Robot 17: The Next Stage

  1. Ozy says:

    Regarding translations, I know that the way another popular indie shooter handled it was to just get so popular overseas that fans translated it and distributed translation patches on their own. But then, Touhou Project may be something of an exception case, what with having its own conventions and more fan-made art and music that has been produced over the rise and fall of most historic civilizations, but hey, you have to aim high, right?

    Although, it’s probably worth mentioning, that despite all of the above, the creator does still work a day job, and has done so since the beginning. So I guess the lesson there is not to go into this sort of thing for the money.

    1. Klay F. says:

      One thing to also mention, though this probably goes without saying when talking about Touhou project: Every Touhou game the creator has ever released has been completely free.

        1. Klay F. says:

          Huh, well thats weird, I’ve looked forever for a place to buy them. Does the money from those sales actually go to ZUN or to some third-party distributor? Maybe that’s why he still has to work a day job, nobody outside Japan can easily find a way to pay him for his games.

    2. rofltehcat says:

      I could help with a German (fan) translation but I think you don’t need to force translations.
      Is the game based on lots of dialogues, choices etc.? Then it’d probably be nice but for now I suspect the first few hundred customers will be from the tiny corner of the English-speaking internet that is your website and maybe a few escapists.

      And I suspect special characters might be a pain to get working correctly. So many games had problems with that in the past… but it got better in the last few years, I think.
      äà„à¶à–à¼àœàŸ can be substituted as “ae, oe, ue, ss” though. It isn’t pretty but people normally understand it.

      1. Kai says:

        And as an Austrian, I think most people who are willing to pay for a game like this would have enough proficiency in English to enjoy the game without a translation into German if the text ist not an integral part of the gameplay and/or too demanding.

        Because those who don’t know enough English are either too young to have had enough education at school and don’t have much money to spend anyway (or are at least not willing to spend it on indie games, apart from Minecraft maybe) – or they are too old to have had proper English lessons at school in their time and aren’t generally interested in video games anyway.

        Most people here in Austria (and I suppose also in Germany) from teenagers up to people in their fifties know at least enough English to go through basic menues and simple instructions. So I wouldn’t worry too much about translating the game into German. I can’t speak for other countries and languages, of course.

  2. Ian says:

    Unicode in C++ is messy. Microsoft went some way to mitigating it with their t_char macros but if you didn’t start out using them it will be as you say messy.

    All the major European languages are in ASCII. Chinese is the big Unicode one. Interestingly Thai is ASCII (in a strange extended page set but it’s there). The big follow up question is which font are you using which has all the necessary characters? Is it free or will it be on everyones machine already?

    1. DrMcCoy says:

      wchar_t is quite unportable, though, since its size is compiler-specific, so you never know which unicode transformation you’ll get.

      On Windows, it’s generally UTF-16LE, on Unixoid systems generally UTF-32.

      Basically, you should write your own string class that does Unicode. Using this as a basis, for example: http://utfcpp.sourceforge.net/ . Or use UTF-32 internally if you don’t want to lose easy random access.

      For translations, one option would be https://en.wikipedia.org/wiki/Gettext .

      1. “Basically, you should write your own string class”

        This is why we can’t have nice things.

      2. Volfram says:

        I love D. wchar is a 16-bit value, always, and arrays already have most of the features of String built in.

        No, I am NOT suggesting Shamus scrap everything and re-write Good Robot in D. That would be a terrible waste of time. The type definitions and built-in array utilities, however, are one of the really nice features. A given type is defined as a particular bytewidth across all compiler platforms, with a couple of well-defined exceptions.(pointers on 64-bit systems are, of course, 64 bits wide.) Note that this does solve a problem I have not yet encountered in my project.

      3. Nick Powell says:

        Basically, you should write your own string class that does Unicode

        *Hissss*

    2. Phill says:

      You can do unicode quite happily with ordinary char types. Unicode is an abstract(ish) system that assigns a unique code point to each symbol. That can then be encoded in software in various ways (sauch as UTF-8 or UTF-16). But you can represent unicode happily with zero terminated char* C++ variables. You just need to have the code that actually renders stuff on the screen understand that it is interpreting the data as UTF-8.

      1. Alan says:

        That’s the key in my mind. A plain old char *, or std::string if you’re into C++, will hold UTF-8 just fine. UTF-8 promises that 0x00 will never appear in your stream, meaning that null terminated string work just fine. Indeed, a lot of Unix/Linux command line programs handle Unicode just fine with absolutely no changes, because they literally just pass the strings through.

        Simple concatenation or sprintf is fine, but things get weird when you start wanting general purpose editing. Fortunately a typical game doesn’t need to worry about them.

        The magic needs to happen at the last step, when you hand the string off to your renderer. It either needs to take UTF-8, or you need to convert into whatever it wants.

        Whatever you do, don’t try rolling your own Unicode solutions. There are a pile of weird edge cases. The is likely a standard library to manipulating Unicode strings for your system.

    3. Zak McKracken says:

      Sorry, I’ll have to disagree. Most European languages have a few extra accents and the like, and there’s quite a number of them (`´°~^, and some more that I don’t find on my keyboard without character attached — like these: ăț). Most of those accents are contained in the ASCII set, though, and it might be possible to combine them together… But then there’s the Danish ঠand à¸, the German àŸ (which is actually a medieval s and a z welded together), and at this point it becomes a problem…

      I’ve never tried to code in UTF-8, and would have thought that it shouldn’t be a big deal right now, but that’s probably naive (and I can’t even find the i with two points here…).
      Wikipedia says:”ASCII can be considered a 7-bit encoding scheme for a very small subset of Unicode/UCS, and ASCII (when prefixed with 0 as the eighth bit) is valid UTF-8.”
      This would seem to mean that going top UTF-8 will only affect the parts of the text that actually use the additional characters.

      That said: I learned English back in the day when computer games were usually not translated, and when I finally had English lessons at school, I was some way ahead of most. Meaning: Okay, there will be some part of the world’s population that will have problems, but if the game doesn’t rely on people understanding nuances in the text, it won’t be a big problem. Especially since translating would also mean losing some part of the message. Especially since you won’t like to pay professional translators, you’ll never be sure about the quality of the translated prose, so … ah, I don’t think that’s really worth it. My little brothers played English-only games from German game makers when they were 7 or younger.

      … the keyboard mapping thing seems more important to me, though, given that the majority of keyboards in France are AZERT keyboards, and then there are Kyrillic ones and so on… but shouldn’t that be doable by having the user press whichever key he/she wants to assign to a function and then mapping whatever that is to whatever it is supposed to do? You would not need to know anything about keyboard layout for that.

      1. Nathon says:

        On the key mapping thing: seconded.

        If you just store the keysym in a variable (I forget what the type of the enum is for SDL keys) and have a “press the button you want” mode that takes the first keyboard event it gets, it shouldn’t be too hard. You can even do fancy stuff like assuming there’s an escape key and cancel if the user presses that.

      2. Zak McKracken says:

        Why do my posts always become so long?
        TL,DR:
        European Languages can’t all be done with ASCII, but translating and all the associatied stuff is probably not even worth the effort.
        Also, remapping keys is nice, even if it’s a simple implementation that will probably increase the reach a lot more for a lot less effort than translations.

      3. postinternetsyndrome says:

        Yeah, we may use mostly the ordinary latin alphabet, but pretty much all european languages has got a couple of odd bits and bobs that may or may not be standard. I really like my ॒s, ä’s and ඒs for example.

        But like above poster, I’m not really interested in a translated version anyway. Translations are always worse than the original, even if they are good. Also, with such a story-light game, even people having trouble with English should be able to play it by ear, just like many of us did when we were kids and didn’t know English.

    4. tranquil_madman says:

      Most European languages are not strictly ASCII, they have their own code pages, which is slightly more messy than Unicode. Apart from the most popular Chinese languages (Mandarin, Cantonese), there are many Asian and African languages that are also Unicode.

    5. some random dood says:

      Re Ian’s assertion that “All the major European languages are in ASCII” – that is SO not true! Wikipedia’s ISO-8859 page actually has a useful table indicating which single-byte encodings are covered by the various standards (1 through 16). Annoyingly, most are very similar with generally a few accented characters (or currency symbols) difference.
      UTF-8 pretty much allows all possible encodings – but has variable length character encodings (so a single character can take 1 to 4 bytes to represent it).
      UTF-16 always takes 2 bytes – but you still need to be aware of “code pages” as 16 bits just ain’t enough to represent all characters in all character schemes. (Plus you have the “fun” of little-endian and big-endian encodings – F* Intel.)
      UTF-32. At last, a scheme that can hold all the characters in one code page (I think). Pity it takes 4 bytes per character, when most just need the one…
      Um, have I wished you “good luck” with this project yet?
      Still, once worked out once, should be able to take the solution to other projects.
      Related: the keyboard/controller theme. Once solved once, it is again something that you can take to other projects.
      Very noteworthy within this series of articles are the times where you mention havingto “throw away” ideas as they would feel like another game. Guess this means that once this game (framework) is done, then some of those other possibilities (main character being a “walker” say) should be able to take advantage of a lot of the code from this game, and with appropriate art assets (be very nice to Heather!) you could well be close to another release. So when you come to costing your time, you may want to think about the other games that can follow on from this using the ideas discarded because they do not fit the theme for this game.

      1. WillRiker says:

        It’s also worth noting that “ASCII” is not actually a character encoding that is used on modern systems. If you are working with 8 bits (i.e. the C char type) you are almost certainly using Latin-1 (ISO 8859-1, of which ASCII is a *subset*), which covers diacritics used by most (NOT all) European languages and very little else.

        I will refrain from providing suggestions on using Unicode in C/++, because I have exactly 0 experience doing so, but I suspect there are 3rd party libraries that make it less painful. I mostly live in languages that provide native support for Unicode.

        At any rate Shamus, the Unicode issue notwithstanding, translations are an extreme expense for a project as small as yours; they’re very probably not worth it.

      2. Eskel says:

        Not to mention that Windows use by default different encoding than ISO-8859-x. That makes porting a little more complicated.

        I must say I’m glad that I can work in languages that have Unicode support included out of the box. It is some time now that I have programmed anything in C.

      3. lethal_guitar says:

        Actually, UTF-16 can take up to 4 bytes per character as well. Few people know this, but it is in fact a variable-width encoding just like UTF-8.

        See this and this for more details.

        1. Alan says:

          The Stackoverflow answer is perhaps the best summary of why UTF-8 I’ve seen. (Just started the utf8everywhere page). And it confirmed my belief that Windows decision to go with UTF-16 was a mistake.

    6. kdansky says:

      As someone who spends a significant time with encodings, let me give clear advice:

      – Use UTF-8

      It is only marginally bigger for multibyte characters, is just as small as ASCII on the same subset, and is supported by std::string with a bit of massaging the code, but you can just pass it ascii strings when you don’t need to write Japanese, and it will work just fine.

      Do not use UTF-16 (or CString in Windows), because that will be a pain much more often than sticking with UTF-8. You gain the ability to count characters from memory layout, but you lose the ability to interact with any ASCII code, which is an irrelevant advantage (how often do you count bytes when you could count code-points just as well?) but a huge liability, such no debugging messages in ascii without annoying _T(“”) macros everywhere, and you need to take care of byte order. Do not use UTF-32 because it’s like UTF-16 in all regards, except worse when it comes to memory footprint.

  3. GiantRaven says:

    I make music. Have a listen to the stuff on my soundcloud. If you like it/you think it will be a good fit for your game, I’d be happy to write some stuff for you.

    1. Volfram says:

      Overall not bad. Do you have any “non-Chiptune” samples? I might want to keep you in mind as a backup if the friend I want to compose music for my game ends up not working out.

      1. Fawstoar says:

        I do other sorts of cinematic/orchestral stuff. Soundcloud link is in the name; I would be happy to do some free tracks for Shamus/anyone who’s interested, provided that I can work on my own time.

        1. GiantRaven says:

          Damn man. Listening to this is a humbling experience. You really blow me out of the water as a composer.

          1. Fawstoar says:

            Branching out is honestly the best way to improve, and I consider myself especially guilty of NOT doing that. My Soundcloud is the meagre cream of the crop in that regard.

            Also: Wow, 36 plays today. Thanks guys!

            1. Fawstoar says:

              Sorry to double post here, but I thought I should mention that since posting – as there seems to be some interest judging from the traffic I’ve received this afternoon (or it’s my egocentric imagination) – I’ve whipped up a demo of a track for Good Robot this afternoon. Enjoy; link is in the post name.

              1. Klay F. says:

                As one random internet person to another, that is some extremely good stuff. Also I’m glad you put that track up on youtube cause soundcloud is borked for me right now. May I ask you to do a completely unreasonable thing and upload your tracks to youtube as well?

                1. Fawstoar says:

                  Soundcloud is kind of this repository of unfinished experiments. I’ve got a few songs that are nearly done, but need just a little tweaking. I’ll throw them up on YouTube as soon as possible. For now, however, I’ve added one more! Link is in the post name.

              2. GiantRaven says:

                You wrote, recorded and mixed that in, what, four hours? That’s absolutely amazing.

                1. Volfram says:

                  Yeah… sorry dude, Fawstoar gets your spot. No hard feelings?

                  That’s some good stuff.

      2. GiantRaven says:

        Not really I’m afraid. I do what I do. Branching out into other stuff isn’t really my strong point.

    2. Rosseloh says:

      Something like this is exactly what I expected to see in the comments. I don’t know about the rest of you, but for the purposes of exposure I’d even make some music for free.

      …That is, if I was a proper composer. I have the knowledge, but I don’t have the tools and I don’t have the spare time. So I’ll just let these other guys handle it.

      1. Klay F. says:

        Thats the kind of boat I’m in. I learned metric buttloads of theory when I was young (comes with having a band director for a father). Now I’m older and have no use for it, and its just taking up space in my brain and not doing anyone any good.

  4. DrMcCoy says:

    3. There is Creative Commons music without the Non-Commercial clause. Though of course, musicians should eat too

    10. See above, but also: European languages should workable without unicode, but you will need to juggle different encodings, which is always a hassle. And once you move to Asian languages… In short: Don’t. Embrace Unicode, it’s the future (well, it should actually be the present already)

    12. +1. Also, do Mac OS X, portability is important. Also, also, make sure your game compiles and runs on both 32- and 64-bit. No casting pointers to ints and vice versa. :P

    13. I’d add Desura to that list

    1. Strangeite says:

      OS X support would be great and the Mac App Store would be a logical avenue for distributing the game. The competition would not be as fierce as on Steam and OS X users are more likely to pay for apps.

      1. methermeneus says:

        Frankly, an OSX port is probably a better idea than a Linux one. Aside from the fact that OS popularity is pretty much Windows > OSX > Linux, there’s a good chance that if you open-source it someone else will do the Linux work for you. Well, unless you want to make it a mobile game, in which case you’d have to port to Linux (sort of) for the Android market. Since you’re working in OpenGL and SDL, it shouldn’t be too horribly difficult, though; NeHe doesn’t have porting tutorials, but it does have Linux and OSX translations of all its example code.

      2. Tyler says:

        If you release this for Mac I will totally buy it I promise. This is good stuff.

  5. 10. … do you need Unicode if you just want European languages?

    ISO-8859-15 will do ok (even ISO-8859-1 will probably do), but not ASCII. But if you’re going to support ISO-8859 variants, you might as well just support Unicode and get all that for free.

    SDL has proper Unicode support from SDL 2.0 onwards, though I am not sure if they still suggest using ICU for Unicode text layout. Oh btw, text layout and wrapping becomes a whole different story once you enter Unicode land…

    11. Need to do some profiling. How fast is the game? Need to figure out what system specs are required to hit the 60fps target. …
    12. Maybe Linux.

    For both of those, http://virtualbox.org/ to the rescue! For the performance, set up a VBox with limited resources and see how it plays. You can enable/disable 2D and 3D acceleration, set amount of CPU and RAM to allow, and see how the FPS drops or not.

    And for Linux testing and development, VirtualBox + Ubuntu is great. No need to dual-boot, and if you mess up it’s trivial to reinstall.

  6. Blake says:

    Those screenshots are getting very pretty.

    1. postinternetsyndrome says:

      Quite! I’d like some larger sizes though!

  7. MichaelG says:

    I’ve bought music tracks off http://www.audionetwork.com/ for my YouTube videos. They don’t list a video game rate, but you could ask. Huge number of tracks classified by mood/style, etc. Fun to browse, even if you don’t buy.

    1. JustMe says:

      That site is indeed very interesting to explore, even if you won’t need any of the music. Also, I’m going to remember it for future usage, as I’m currently working on a project of my own. Thanks.

      And actually, they do give a video game rate, under “Online / Corporate / Charity productions”.
      “Covers music for synchronisation use in a single corporate, charity or brand film, computer game, app or multimedia presentation. This covers distribution on websites …”

  8. Cordance says:

    12.5 Just to add to the different platform coding you should consider mobile phones/tablets as a platform specially if your coding for linux. Although that would probably require a different level of difficulty as touch screens are different.
    Difficulty levels is another one of those features that could or could not make it a more sale able game people like a challenge but have a lot of different levels of skill. Its also a hard one to play test as most of your testers probably fall into the skilled at gaming group.
    Perhaps more plans for future once you see how popular it is with the PC.

    1. Nathon says:

      Linux and phones/tablets are vastly different platforms. Aside from the control scheme, most phones and tablets run on ARM processors and have much more limited resources than a typical desktop. Then there’s the fact that most Android software is written in Java and most iOS software is written in Objective C. Neither of those has too much in common with C++.

      A Linux port, on the other hand, means taking all the same source code and coming up with a Makefile and possibly making some small tweaks to the code (something that I and I’m sure several other readers would be happy to do). Then you just have to list the dependencies with the distribution. You can go all out and make RPMs and debs if you want to get fancy, but most Linux users are happy just to get a native port of the binary.

      1. Kian says:

        Actually, more resource intensive games on phones use native C/C++ code, and only need Java or Objective-C to launch it and interact with the OS. Which is actually handy for porting from Android to iPhone, since the core source code is mostly blind to the platform.

        A bigger problem is moving to OpenGL ES, which has no immediate mode (meaning, you need to provide shaders and handle all matrix transformation, lighting and such yourself).

  9. lethal_guitar says:

    I’d also suggest gettext for translations. Let’s say you have something like the following:

    showMsgToPlayer(“You have found a mighty item!”);

    Now using gettext, that would turn into (Note the enclosing _()):

    showMsgToPlayer(_(“You have found a mighty item!”));

    As soon as all your strings are wrapped with _(), you can run a utility which extracts all those strings and creates a translation catalog from it. Then it’s just a matter of adding code to load the correct translation and you’re basically done.

    Regarding Unicode: std::string supports Utf-8 content perfectly fine. You lose the ability to do direct indexing, changing/testing case etc., but I’d say if the only thing you ever do with your strings is display them, you should be good by just having all the translation catalogs in Utf-8 encoding. Otherwise, you could use a library like Boost.Locale. Finally, C++ 11 introduced support for Unicode literals and some very basic conversion features.

    1. Mephane says:

      I second that. UTF8 in std::string works perfectly fine with little hassle*. And in any case, use Unicode. Do it. For all the flaws it may have, the alternatives (codepages *shudder*) are worse.

      *The good thing about (not only) UTF8 is that when you original strings are all English only, they shouldn’t contain anything that is not identical to their UTF8 representation, meaning that existing string data does not even need to be changed.

  10. f says:

    Please don’t translate this game into Dutch. Almost everyone over here speaks or at least understands English. Especially people interested in playing indie games about robots fighting robot insect worms.

    Translating a game into Dutch never works. Our language has evolved for discussing the prices of fish and potatoes and for insulting foreigners. If you try to use it for anything awesome, it just ends up sounding silly.

    1. sab says:

      Seconded.
      The only time I’ve actually enjoyed a Dutch translation of a game was in Destruction Derby after a long night of drinking and other locally legal sedatives, where the terrible translations just added to the hilarity. Otherwise, just don’t do it.
      And especially don’t make the translation mandatory with no option to switch without consulting regedit or *shiver* changing your OS settings. (I’m looking at you EA).

      1. Jarenth says:

        I remember how both Dungeon Keeper 1 and Black and White 1 would auto-install to Dutch. Dungeon Keeper you could bypass by going into the extended installation options — which taught eleven-year-old me a couple of valuable lessons about messing with computer settings — but I never found any way of making Black and White 1 play ball from the installation.

        Remember back when video games magazines came with CDs, with demos and stuff? I once bought one of those magazines just for the CD, just because it had a Dutch-to-English modifier patch on it. That CD was one of my most prized possessions for a good while.

        1. postinternetsyndrome says:

          My store-bought copy of B&W didn’t even have English lanugage files on the disc. I had to physically mail the disc to EA Sweden and get a replacement with the English version. This wasn’t even an error, it was the official policy – there was a polite little note in the box detailing the process. The mind boggles.

          1. Vipermagi says:

            Both my copies of Black and White (one was bundled with Creature Isle and it wasn’t sold separately – worth it!) install in English just fine; never even thought to check for language options. Many minds boggle.

            ———
            Something I’ve wondered about translating: do other people naturally translate words to their native language? It’s exceedingly rare for me. Especially during Warhammer sessions, there’s just tons and tons of English being thrown around because we don’t translate anything. Most in-jokes and commonly used phrases (‘big stompy robot’) are English too.

            So yeah, how’s that with other people?

            1. 4th Dimension says:

              Generally it depends on how acquainted are you with English source material. If you learned about this stuff using translated material (and IF the translation was good, which it rarely is) you might use more often translated phrases.

              Also there is the problem of English understanding. Some people that do not have high enough knowledge of English will still use English terms, albeit in their more bastardized form by changing the pronunciation to suit their native language more. Worse is when they only interact with English in written form while having no idea (other than what is known popularly) how to read it. So they mostly read the words how they are written according to the rules of reading their own tongue. And such word mutants become the part of their vocabulary. Aggghhhh. But mostly they’ll use them if the majority of the players they are playing with use them also. If the majority if the player base is from the same country and they don’t have much in a way of interfacing with other player bases, they’ll develop their own lingo based on an almagmation of their language and some bastardized terms found in game.

              Those better at English can have a problem where they get so used to English forms that they have problems switching to their native forms because they can not remember them. Also you can start thinking in English when thinking about things learned in English, and switching between the two can be a bit annoying.

            2. Jarenth says:

              Can’t talk for other people, of course, but like f initially said, it looks like almost all Dutch people (of ‘our’ generation) are really pretty fluent in English. I’m putting it down to the perfect storm of increasing globalization and interest in the English language and a rise of English-language media types when we were kids: all cartoons and music videos I watched and all video games I played in my formative years were English with Dutch subtittles.

              As a side-note: one of the thing I hear from foreign colleagues a lot is that naturalizing into Dutch society is made so much harder by the fact that everyone here is willing and able to switch to English at the drop of a hat. Turns out it can be pretty difficult to learn a language in-vivo when nobody’s willing to use it when you’re around.

              1. Ringwraith says:

                Also, we’re lazy, and refuse to learn anyone else’s language.
                We just wait for others to crack first at our ineptitude and learn it.

                1. Volfram says:

                  I find it incredibly convenient that if I were to go anywhere in the world, it would be easy to find someone who can speak English.

                  Even so, I would still make an effort to at least become basically conversant in the native language or hire an interpreter. At very least, I have a goal of learning how to say “I do not speak this language, do you speak English?” in as many languages as I can.

            3. Zukhramm says:

              Depends on the words, but most with words with special meaning inside the game rules (or in whatever are commonly dominated by English) I and the people I play with usually end up with some kind of hybrid form. English roots with Swedish endings to fit them into sentences.

    2. Peter says:

      I’d say there’s SOME decent stuff in dutch. There’s a few decent songs, and plenty of poems. Translated works aren’t nearly as pretty though.
      Still, if Shamus goes the fan-translation route, i could see making dutch an option, it wouldn’t require much on his end, and there’s plenty of fans that would be willing to assist.
      The problem with many dutch translations is that they seem to be made by the english. The few decent translations i’ve read (be they from german or english or even old italian to dutch) have all been done by dutch people with more than the usual amount of feel for language.
      That said, i’m sure a lot of people would claim all this about their own language, and probably be just as right.
      Translation is easy. PROPER translation is hard.

      1. Chargone says:

        As i understand it, wherever possible, you should always have translators translating Into their native language. Even if it’s not perfect, at least the result will make sense and not sound awkward or moronic.
        If you can’t manage that, you need a native writer going over the raw translation and rewriting it so that it works properly in their language.

        ….

        If it helps any, dutch printers were responsible for a significant fraction of the weirdness in English spelling :p (the rest being down to sound change over time, odd handling of loan words, and a period of obsession with making english more like latin in accidenic circles (often by people with no idea what the were on about))

        1. Raygereio says:

          As i understand it, wherever possible, you should always have translators translating Into their native language.

          Translators who know their languages can translate something to their non-native language just fine.

          What’s really important is for the translator to work with the original material and not with the translation of a translation of a translation.
          And if you’re going to use a program to translate it for you, you really need to go over the result.

          1. Alan says:

            I’m sure there are translators who are great at translating into languages other than their native language. But there are also translators who generate technically valid but weirdly non-idiomatic translations. And if you’re hiring someone to do the translation you probably don’t know the language in question, at least not fluently, so you’re in a poor position to tell. Choosing someone whose native language is unfair other skilled translators, but seems like a safe way of handling the problem.

            1. Zukhramm says:

              I consider myself fairly good at English, yet comparing my writing in English and in Swedish my English is just a bit duller. Mostly it’s not bad or incorrect but just blander. It’s not as if it’s some feature of the language that I miss or do not understand, I read texts just fine, I just don’t choose them as well in English.

          2. Deadfast says:

            What’s more important is that the translator has context. This is rarely the case. Usually the translators are just given a text file and told to translate with very little knowledge of what they’re actually translating. Just recently I’ve come across a menu that offered (in its Czech translation) “Continue”, “Continue” and “Cancel”. Needless to say it was supposed to be “Register”, “Continue” and “Cancel”.

    3. Humanoid says:

      So have a Dutch language option in the game that instead of being a translation of the original text, is just some rambling about fish and potatoes and fried fish and fried potatoes. And some random insults.

      Could even hire Jarenth to voice it.

      1. Jarenth says:

        This is a worse idea than you might think, for many different reasons.

        1. Humanoid says:

          We might need to find a Belgian for the frites part?

          1. broken says:

            present if you are

            seriously though: I agree that there has never been a dutch translation of a game that didn’t suck. There must be a flaw in our language that makes it suck.

            English: I’M GOING TO KILL YOU
            Dutch: IK GA JE VERMOORDEN

            it just sounds lame as hell.

            fakeedit: did shamus intend to have voice as well? I thought it was text only with background music? File size’ll skyrocket if we go AA voice acting, I think. That Josh guy may be a fine voice actor but man his fees are steep

            1. Volfram says:

              I find it amusing and just a little scary that the consensus given by the Dutch people in this thread is that their preferred language to play a game in is “anything but our native tongue.”

              I need to meet more Dutch people. The ones I’ve seen so far have by and large been fun, pleasant, and very smart.

              1. broken says:

                video game characters usually want to sound badass. For whatever reason, writing badass sounding text is harder than english.

                A pet theory of mine is that we have A LOT of common multisyllabic (3+) words. That alone makes it more difficult to be concise.

              2. 4th Dimension says:

                Probably it’s a problem of translation, plus you subconsciously associate some English phrase with “COOL” because of movies and games.

                To translate anything properly you need to be very knowledgeable about the source material. Also one of the key things that must be done when translating is that you do not translate sentence for sentence. You need to translate the meaning of the game and the feeling. And to do that you MUST make some alterations in the script itself.

                Unfortunately in this day and age, there is simply no time to translate an entire game that way since it would be a yearlong effort. Today the translation is probably done in under a month after the game goes Gold. And results are thus shitty.

                1. Volfram says:

                  “Also one of the key things that must be done when translating is that you do not translate sentence for sentence.”

                  I’ve noticed this reading some of the fan translations on Baka-Tsuki. Japanese is a very flowery language where certain verbal constructs are used a lot, and as a result, word-for-word translation from Japanese into English comes off sounding very purple and stilted.

                  A roommate and I considered attempting to rewrite the Sword Art Online books into more colloquial English. We got through about the first chapter of the first book, and it’s really good, but it took most of a day. Probably better to leave it to the people who are paid for it.

                  Still a good experience. I would encourage anybody who wants to to give it a shot.

          2. I just realized something. (Prelude: I’m a native English speaker, but I actually spoke French before I spoke English because my mother is a Quebecois immigrant).

            In French, “pomme de terre” is “apple of the earth”, or potato.

            What do Belgians and French think of “apple fries?”

            “I know they’re pomme frites! Just give me them!” “Sir, they’re not pomme frites, they’re POMME frites”.

        2. Zak McKracken says:

          I don’t really understand Dutch but I might just run that game for the hilarity. Although maybe it’d need voice acting for that.
          To German ears Dutch is just wonderfully funny. You could probably insult me badly in Dutch and I’d still think you made a joke.

          … which makes me wonder how German sounds to Dutch ears — probably not very friendly …

          1. Dovius says:

            It sounds kind of angry, really. not quite as angry as it does to native English speakers, but still definitely annoyed by something.

            1. swenson says:

              That is so true… German sounds very interesting to my native-English-speaking ears, but man does it always sound angry.

          2. Rodyle says:

            Most of us speak good enough German to actually understand most of what you’re saying. Be aware of this!

    4. KingJosh says:

      If you DO make a Dutch translation, be sure to re-translate it back to English and include THAT in the options list!

      1. Ryan says:

        IIRC that worked pretty well for The Persuaders. But we should also include a British option that replaces most of the lines with u wot m8 i bash ur fookin head in i swear on me mum or something like that.

      2. Hitchmeister says:

        My suggestion for any language that Shamus isn’t fluent in is that he should have at least two translators, blinded from each other. Send the first one the English files to be translated, then send the results to the second with no information about what they’re supposed to say to translate them back to English. If the re-translation to English makes sense and means what Shamus wanted to say, you’re probably good. But don’t be surprised if you get a few misses that need to be smoothed out.

        1. 4th Dimension says:

          Proper translation that would pass that test would take too long I think. Also you must know something abou the premise, because a good part of the meaning is the game itself.

    5. Rodyle says:

      That’s not true. You may not remember it, but stuff like Freddy Fish, Pyjama Sam and Put-put were translated to Dutch as well, and most of those were fine.

      But yeah. Don’t bother with translating it to Dutch. Those of us who do not have a reasonable grasp of English generally do not play videogames. Hell, even if they don’t know English, it’s still fine. I learned most of my English by watching cartoons and playing games.

  11. Since you didn’t ask for advice, here are some unsolicited ramblings that might be useful.

    A thought about pricing and volume: certainly in the short term, if you took the easiest solution and put up a PayPal button going to a download link, I would expect you would get about the same number of sales as your books have, just from readers of the blog.

    That might be a way to get quick cash, and give a minimum level of sales to budget with.

    About features / game length, Extra Credits said that for your first game, worry about making it polished and making the experience feel go so that you can build up a following for when you release ‘Good Robot2: The Robotening’, because people remember the experience more than the length.

    From a personal point of view, I would look for about 6-10 hours gameplay from a low budget game, but then I am quite stingy.

    About point 9, rather than automatically detecting keyboards, couldn’t you have the presets, and on the options menu, let people pick which keyboard arrangement they have? This wouldn’t be as flexible as a full remapping, but would probably be much easier?

    About translations – since the first people to buy the game are probably going to be English speakers, I wouldn’t worry about it. Most games I have seen don’t have the option for other languages so don’t worry about it until you have got the game on the market, then re-release it.

    A final thing: that last screenshot of the rainbow weapons made me think of the dubstep gun.

    Looks good. Can’t wait until it comes out on Kickstarter / Steam / Linux / Humble bundle / break into your house and steal a copy.

    1. Humanoid says:

      Yeah, payment ought to be easy enough (if Rutskarn can do it for Hobospy…), but no idea how distribution would work.

      In hindsight you should have hired the kids to film you working to make some “making of” bonus content. :D

      As for translation, how critical is the presence of text anyway? Could some emoting with vocalisations for mood, and maybe some symbols in text bubbles, Sims-style, remove the need to do most of it?

  12. Karthik says:

    Speaking of the difference between a game offered as-is and a game people pay for, I notice you don’t have plans to add more “core content” to the game in the list above: More kinds of levels, bosses, etc. Does this mean Good Robot is feature complete?*

    I ask because I was listening to Tom Francis talk to Giantbomb about making Gunpoint. Tom says creating content, not playtesting mechanics, coding a save system or squashing bugs, was the most time consuming task. This included art, like you mention on your list, but also just making the levels and setting up the scripting.

    One other thing: Whether it becomes a game or not, the thing I’m most curious about is actually the flavor text you plan to write. I’m always intrigued by how much worldbuilding one can cram into little snippets of text, like World Of Goo’s sign painter did, and I want to see where you take it.

    (* “feature complete” is probably better used to describe a state where all the game mechanics, not content, is in. I couldn’t think of a better term.)

    1. Thomas says:

      It’s a difference in game types though. Tom was trying to make a Deus Ex style puzzle game and he’d originally thought that all that would take is giving the player a lot of tools and slapping together a level.

      But then he realised the way Deus Ex actually works is they create one interesting puzzle solution in an interesting environment and then go back and do that again over and over for different ways you make the encounter. In a puzzle game the puzzle _is_ the fun so the mechanics aren’t nearly as vital as actually creating a puzzle

      Whereas in a shooter the actual moment to moment gameplay and the enemy types are probably much more responsible for the enjoyment. Mixing that in with great level design is what elevates the game and makes a Mario a Mario but I reckon the balance of difficulty will be switched a bit more into getting the core stuff right

      1. Kian says:

        Also important, Good Robot’s levels are procedurally generated. The game has effectively infinite levels, all Shamus had to do was create the rules to build them once. He could tweak those rules in response to play testing, but he doesn’t need to go patching fifty level’s worth of static data every time he decides something should work differently. So content generation time is cut way down compared to a normal game.

    2. Zak McKracken says:

      Oh yes, World of Goo! Wonderful storytelling there.

  13. Neko says:

    I agree that “proper” Unicode support can be quite a pain, certainly with C++. But you’re making a game, not a text editor, and you might be able to get away with taking more shortcuts.

    As lethal_guitar says, you could just assume that all your std::strings are UTF-8 internally. UTF-8 is great because the lower bits are just mapped to ASCII. You can then try to implement more Unicode support in the game piecemeal, instead of hunting down and replacing certain std::strings with My::UnicodeSubclass and so on.

    You’d want to catch any std::strings going to the screen and interpret them as UTF-8 before you render them. With your current ASCII strings, this should essentially be a no-op; you should get the same behaviour as you already get.

    Then, depending on what encoding your source files use, what your IDE can handle, etc., you can try hard-coding some of your strings to use Unicode literals, or just add some code to append the appropriate UTF-8 byte sequence. Then check that they’re getting displayed correctly.

    Oh damn, they’re not? You might need something like ICU to help you do text layout and wrapping. You might have to refactor out any presentation code that assumes it can directly access a character in a std::string by ‘character’ (really ‘byte’ since your strings are UTF-8) offset.

    You might also have to deal with fonts and crap like that, which I can’t offer much advice on.

    Once the hard-coded strings work, then I’d move on to using maybe gettext or some hand-rolled solution to pulling these strings from a text file based on an ID shared between translations.

    Figuring out when to load these translations and how to set up the UI to let the poor user choose their language is an exercise left to the poor reader ;)

    1. Mephane says:

      Figuring out when to load these translations and how to set up the UI to let the poor user choose their language is an exercise left to the poor reader ;)

      As long as the user gets to choose, the details don’t even really matter. One of the few sins that a game can commit which I won’t forgive, is enforcing system language as the game language with no way to manually set it.

  14. Simon Buchan says:

    Multi-threading in the sense of going and calling CreateThread() is pretty close to always the wrong answer, it is both somewhat harder and less scalable that queuing work to a thread pool. For the specific case of loading content from a file, asynchronous IO will queue a completion on a work pool for you (CreateFile(…, FILE_FLAG_OVERLAPPED) on Windows, or boost::asio for a generalized portable wrapper) but it can be a little tough to keep track of what’s going on, when the completion for two loads can run in a different order, or even at the same time.

    You probably know this already, but if you’re using any library that doesn’t explicitly go out of it’s way to document that it is thread-safe *and how*, it’s pretty safe to assume that it’s not thread-safe (and you now need to mutex all access to that library, or even queue all work back to the UI thread in the worst case, like for any OpenGL calls.). This sucks.

    Unicode: Whoo boy. Joel is explicitly talking about what assumptions about text you can’t make when processing, that you basically have to process text as opaque blobs of data (except for security, when you have to normalize in one way and not another or have to not normalize at all, and you never know which until it’s too late). In short, so long as you’re just carting data around, don’t do anything smart with text.

    But you’re not just carting it around, you’re displaying it on screen through a 3D API, and perhaps even taking input! Basically, you’re completely screwed. Find someone that does it well enough, and use theirs, or sit on top of OS APIs (DirectWrite, Cocoa) to render the text (*not* each character!) to a bitmap, and draw that. You probably won’t get transparency very easily either. And text color can change the rendering.

    Watch out for:
    – None of the following are equivalent: byte, code unit, code point, glyph, key press and character.
    – You can’t substring or truncate unknown text safely.
    – Text is not always left-to-right.
    – Text is not even always in the same direction in one line. Most RTL languages display numbers and foreign text (names, etc…) embedded LTR, just as LTR text must display embedded RTL text as such. And they can nest. And some characters (Like ‘(‘) get flipped depending on what context they are in.
    – Text is not always horizontal. Chinese, Japanese, Korean (CJK) at least have vertical forms, Japanese at least can even have horizontal text within a vertical line!
    – Words don’t always break on spaces. I think it’s Thai that requires dictionary support to recognize word boundaries, but there are also a whole class of punctuation characters, like ‘-‘, that *must* or *must not* be broken after.
    – For some languages the OS must display full UI (called “IME”s) – in a DirectX or OpenGL context, that doesn’t work, and you have to support a whole complicated API for it to show up. (Has anyone ever seen someone do this?)

  15. Halceon says:

    There are probably way too many differences between Good Robot and Dustforce, but Hitbox did put up a very good writeup of their sales figures over time.
    http://hitboxteam.com/dustforce-sales-figures

    As for translations. On the one hand, I’m up for making a Latvian translation. On the other hand, I don’t think people will care for it existing.

    1. I was just about to post this – that document was very enlightening to me. The document about the game blue oil that was linked as well is even more so – it shows it from the perspective of someone who hasn’t made all that much money, and also highlights the major issue – the majority of sales are going to come from steam and/or humble bundle sales.
      The most important thing about indie games sales is, however, the marketing. Lot’s of indie developers assume that their game will just get the sales through word of mouth – an you will, but only if you have mouths in the first place. And giving review copies and releasing videos to places like rock, paper, shotgun means that you get to harness a couple of people’s mouths – people who talk to thousands of others.

      1. Thomas says:

        I’m naturally negative and a little worried about sharing this article because it’s not the most optimistic thing in the world, but I guess information is more useful than feelings here.

        So here’s an indie developer outlining their sales experience for a game they made
        http://flippfly.com/news/race-the-sun-a-month-after-launch-losing-steam/

        And basically it means that unless you can get onto something like Steam you’re going to really struggle to sell a whole bunch of anything.

        You’re probably in a slightly better position though because of your blog. It’s a similar situation to the Gunpoint guy who ran a popular blog describing the process of making the game over a long period of time. (Although, whilst I imagine you have fairly good contacts in terms of game journalists, his were probably slightly better because he was an actual staff member of PC Gamer)

        1. I feel like it’s possible (but unlikely) to get a really popular game outside of steam – minecraft is a big example, but there are lot’s of examples of non-steam games being released (shelter, cave story, etc).
          One big thing you can do is get on gog I don’t know how difficult that is, but that opens a quite large audience to you.
          Also, if you write posts and media releases on a site like indieDB, you’ve got a large community that will want to share and spread your stuff around.
          Steam, basically, is an advertising platform, as well as a distribution platform. Without it, you need to do a lot more PR yourself.
          But you should be doing this PR anyway – trying to get your numbers up, regardless of steam presence.

          1. Something else related to the article about Race the Sun:
            If you can’t get on steam, you must get onto other distribution platforms – they are basically free PR – not as good as steam, but better than nothing.

    2. Volfram says:

      Yeah, Steam doesn’t post purchase statistics because “There’s no reason anybody but the publisher needs them,” but that makes risk estimation incredibly frustrating. The only numbers we have to go by are the big-name ones(like Minecraft), and if you think you even *might* be one of those, you should give up now.

      Without reading the articles, I’m hoping to sell 1000-10,000 copies and give away 100-500. Getting into the Humble Indie Bundle also looks like a good bet(shotgun estimate of $30-100k take per developer), but only about a dozen games can do that per year.

  16. Ingvar M says:

    For your #10, you cannot support “European languages” with a single non-unicode character set. Latin-1 supports most western European languages, but excludes Icelandic (either a thorn or an eth is missing and I don’t recall which one). You cannot do Greek with it, so that would require a third. You may be in luck for Turkish.

    Caveat, I have never written code that supported translations, but I was kinda-sorta involved with the “support multiple character sets” effort for SBCL that eventually turned into full-fledged Unicode support.

    1. DrMcCoy says:

      Turkish is also pretty fun since it introduces ambiguity in folding uppercase to lowercase (and vice versa) with its dotless-i and dotted-i.

    2. viggih says:

      Speaking of Icelandic, I would be up to handling the Icelandic translation of the game. Just throwing it out there

    3. WillRiker says:

      Looking at the Wikipedia page for Latin-1, and both Eth and Thorn are there. (à° is 0xF0, ྠis 0xFE, à is 0xD0 àž is 0xDE)

  17. Thomas says:

    “AZERTY keyboards where WASD aren't arranged in a gameplay-friendly inverted T”. Understatement of the century. WASD on azerty keboard is one of the most infuriating thing on earth. Even Clippy become your best friend after playing 10 minutes like this. For people with US standard qwerty keyboard just imagine that Q is left, S is backward, D is right and Z is forward. Try to put your hand in a typical rest position with a finger on left, one on forward and one on right and you will quickly see the horror.

    So Shamus thanks for at least considering it. (and I totally understand if you decide that the benefits are not worth the effort, it will probably impact very few people)

    I’m also a bit skeptical on the “halfway done”. When looking at post-mortem of famous indie game like braid, antichamber, stuff from nifflas it seems that all of them had very quickly a playable, quite good looking and fun prototype(like in a month or couple of month) but it actually took them *years* after that to craft a complete, polished, high-quality game. In your case since the level are procedural, I suppose that’s a big chunk of work spare, but even with that just looking at your list of stuff remaining is quite daunting.

    1. DrMcCoy says:

      I also always hate when a game assumes z and x are next to each other without providing a means to remap keys. I’m on QWERTZ, you insensitive clod! :P

      1. Mephane says:

        In retrospect, I think it was a bad idea to swap Z and Y in the German keyboard layout. Every single time a game has a function that can be performed by pressing Z, I can but try out out whether the Z-key on my keyboard does it, or the Y-key.

        Final Fantasy 14 is one of the latest offenders of such shenanigans, though of a different kind:
        Depending on the selected language for the game (which can be changed easily at start-up), any new character gets a language-adjusted keyboard control scheme. Suddenly, reply to chat whisper is Alt+A (“antworten”) when the character was created while the game was set to German, and Alt+R (“reply”) when it was created while set to English. The same goes for many other buttons, and there is no way to synchronize key bindings (or any settings that is) between characters, the only thing you can do is manually set these the same across all you characters.

        (That game also forbids binding only a single key, like ‘R’, to chat reply. Apparently that is not a bug, because it contains an error message specific for this case, which basically says that the function must be bound to a combination of at least two keys containing either Shift, Control or Alt.
        Facepalm.)

        1. kdansky says:

          The reason is that the letter z is really common in German (zu = to in English), while y is super-rare, while in English, it’s the opposite.

          You can actually just interpret any keyboard as a QWERTY and ignore the letters that are printed on it. Then WASD works just fine everywhere, people just can’t chat because their keyboard now behaves like a US-keyboard, but that isn’t so important in a single-player game.

    2. anaphysik says:

      “For people with US standard qwerty keyboard just imagine that Q is left, S is backward, D is right and Z is forward. Try to put your hand in a typical rest position with a finger on left, one on forward and one on right and you will quickly see the horror.”

      Actually, that’s not that bad. It’s not good, mind you, but that definitely seems /usable/, at least for my fingers. The biggest annoyance for me would be the weirdness of having ‘forward’ be behind ‘backward’ (and even that’s really only because of how the arrow keys were set up (heh, maybe a Quechuan speaker would even find it easier XD (#LinguisticsJokeJustIgnoreIt))).

    3. Nathon says:

      Dvorak mapping of wasd:

      , is forward
      a is left
      ; is back
      . is right

      Good luck doing that with a mouse in one hand.

      Of course, I prefer FEDS (mapped to dvorak, the keys are u.eo) because moving my hand out of position just to play a video game is silly. Games that hard code certain keys or key combinations to fixed functions are my nemeses. Sure, you can remap all of the movement keys to whatever you want, but the reload-UI shortcut is always ctrl+U and any time you want to go to the right while holding the control key you get to sit through a 3 second stutter. Brilliant.

  18. anaphysik says:

    A different MacLeod track for every level. ;P

    (Hm… if you develop a means to procedurally generate music…)

  19. Robert Conley says:

    Sounds like the perfect Kickstarter to me.

    1. Bropocalypse says:

      The “I’m spending time that I could be using at my payroll job” problem is basically why Kickstarter exists, yeah.

      1. Phantom Hoover says:

        Shamus doesn’t have a payroll job, though.

    2. ET says:

      Yeah, I’d do a kickstarter for a year or two’s salary.
      If it works, take the time off from your day job, and work on Good Robot.
      Otherwise, I’d release it as-is, or mostly as-is.

      Honestly, a lot of the things you listed are things that I personally wouldn’t even waste time on, unless you already know that you’ll be making money on the game.
      – Key mapping: there’s projects like GlovePie to remap keys onto fake joypad buttons and vise versa.
      – Music: find music whose licence allows you to release it in your game without any problems. Spend money on it if you make Good Robot 2: The Robotening, but not for the first game.
      – Translations/unicode: nope nope nope. Look at games like Teleglitch; AFAIK, that game is English-only, and it’s doing fairly well. Translate after you have a budget for it. (And let’s be honest here: how important is the story in a SHMUP anyways? Even in Jamestown, which has an amazing story, it wasn’t really something to pay much attention to.)
      Basically, wait until you have a budget, or are planning a sequel, for like, 90% of your proposed features.

      IMHO, today’s post should be titled “Good Robot: Feature Creep Edition”.
      Don’t give in to feature creep, Shamus! :)

      1. Paul Spooner says:

        I second this. Run a KickStarter with some video footage of the current game to show off and the bare minimum of features in the core. Most of what you list isn’t necessary in order for people to have fun with it. It’s polish, but not everyone needs polish.

        So put translations and/or other difficult stuff as stretch goals! More art? Stretch goal! Sound track? Why not just let people play their own music over the game? Main menu? Just make a copy of the whole game if you want multiple play-thrus!

        Just put them in some order of “how I think the game should be completed” and then see how much money people are willing to give you for it. The beauty of crowd funding is that you don’t have to make these decisions yourself, you can let your audience vote with their cash.

      2. Steve C says:

        Pretty sure Shamus doesn’t have “a day job.” He has a series of tasks that may or may not result in money that he completes in the 168 hours that comprise a week. This website is one of those tasks, as is the Diecast, as is the writing he does for other sites (Escapist) etc.

        It’s like Shamus is this robot with various points he can put into energy, or Escapist, or novel, or shot speed, or website, or sleep, or you get the idea. But any points he doesn’t put into a skill will atrophy that skill and make it harder to build up later. So it’s not that simple and any major undertaking has a significant opportunity cost.

        Kickstarter is great but I definitely get why this is more than “just do a Kickstart” kind of decision.

        1. silver Harloe says:

          As is working on his next book and/or a sequel to his last book. Sigh. Wish he could clone(*) himself so he could write while coding.

          (*) in the scifi “instant copy with all your same memories and motivations” way, not in the real way where he’d just have a somewhat similar(**) baby him to raise, which would eat more of his time.

          (**) but still remarkably different since it would’ve been raised in a different womb at a different time and so many things we consider hereditary are really environmental effects before the child is old enough to remember the environment as a separate thing and answer surveys about it accurately. The cloned child wouldn’t even look as close as to him as an identical twin would have.

    3. Thomas says:

      And if you feel bad about kickstartering it, then just make it super cheap and don’t offer/discourage reward tiers. The updates alone are probably honestly worth $5 by themselves and if you stop working on the project then the updates stop. (Even though it’s not a genre or game type I’m interested in, even I’d support a kickstarter for those reasons. Plus the screenshots look really pretty)

      It might mean you use up your Twentysided readership so that you can’t get as much hype for a later release but then you’ll already have made some money and if the game is good then you’ve got some instant fans to spread the word.

      A kickstarter can also solve your accounting problem, because you can work out the minimum time you’d like to keep on working on this, figure out how much money you could make during that period if you did something else, and then add on a little bit (and then add on the admin costs of kickstarter!). And it would be a great feeler to find out what interest levels in this game are like and what sort of level of release you can hope to gain

  20. Sorry if this post runs overly long, I have a smattering of knowledge in the area and I’d love it if it was of actual benefit to someone.

    Actual sales numbers for indies are an absolute pain to get hold of. http://www.swordandsworcery.com/news/2013/7/26/sworcery-sales-infographic.html , http://hitboxteam.com/dustforce-sales-figures and http://www.gamasutra.com/view/feature/186940/defenders_quest_by_the_numbers_.php should at least give you a good idea the importance of steam and bundles if you want to make actual money. Potentially more relevant to you is http://www.gamasutra.com/blogs/HugoCardoso/20130614/194343/Realistic_sales_numbers_for_an_unknown_PC_title.php

    Right off, I’d suggest looking into the humble store (and their marvelous widget). You’ll lose a percentage of every sale, but gain all the finance handling, hosting, and are more likely to be offered to be included in a future bundle. This also gives you the ability to do an alpha buy-in for your readers and solve your playtesting problem in the same move.

    3.) See if you have an indie meet-up locally. You may find someone willing to work for a percentage and the shipped product credit as opposed to an outright financial outlay, or at least for significantly cheaper.

    5.) Save the tutorial for last. You don’t know what changes may happen after a few rounds of playtesting and polish. You may find that a tutorial is unnecessary, and at the very least you’ll save yourself from doing work multiple times.

    7.) Yup. Mouse sensitivity in SDL is a bit of a pain though. You have to do some arcane nonsense with relative mouse movement and custom (mouse)pointers. P.S. Please start windowed mode, nothing annoys me more than a game starting out 800×600 fullscreen.

    8.) SDL’s threading is, as it says on the tin, simple. The only downside that it is simple and if you need it to do something super tricky you’ll have to fight with it. http://sdl.beuc.net/sdl.wiki/SDL_CreateThread . I basically use them for music and networking handling.

    9.) I was going to say this is dead simple, but then I remembered that was unity ><. http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlgetkeyname.html and utilizing key structures and key events is still extremely reasonable, and you can do similar things with mouse and joystick events.

    You save yourself a lot of work by cutting the edge cases. As you said its move and shoot, which means you don't need a super complex key binding system. Don't support using a joystick and a keyboard at the same time, don't confirm key changes, just do it. Only check and warn for double bound and unbound keys when the user tries to leave the menu.

    10.) No. With such an action based game and very little text, there's never going to be a point where translations are going to be profitable, barring popularity so large that you can hire someone to solve the problem for you. I'm not even talking about the costs of getting the text translated, the likelihood of translating the game into other languages generating sales that balance against the time you spend working on the problem is slim.

    13.) Avoid greenlight. The system is inherently broken and you are essentially entering into a popularity contest with people with a factor of ten/hundred more diehard fans. Getting onto steam the normal way is a bit nebulous, and a whole heck of a lot of work. Having concrete sales is a definite help, which is part of why I suggested the humble store.

    Hopefully at least something there was helpful and or informative to someone.

    1. Steve C says:

      Really great catch on those links! Seriously. That could be a post in and of itself.

  21. Tim Keating says:

    Here’s another guy talking about how well his tiny indie game sold: http://www.tasharen.com/?p=4664

    1. Thomas says:

      Wow, 80% piracy on a game which only 2500 people own anyway. That’s awful, no wonder people get so pissed off and self-destructive about it

      1. Steve C says:

        I think you came away with the exact opposite point the article was making. The author sums up his true feelings:

        “Don't concern yourself with the players who will obtain your game for free. Instead, think of all the players that will follow and will buy your game based on the attention it will receive and the word-of-mouth talk that will follow.”

        While he says 80% piracy and it’s normal (but not rational) to be pissed off about that, how many of those were actual possible sales? How many were a sale to one person who then installed it to their 2+ devices? How many of those pirates were people who tried it for 5mins and then deleted it? (Because trying it for 5mins is easier than spending 5mins researching it.) How many were people who would have returned it to the store if it has been a physical purchase?

        He viewed whatever piracy as advertising and was happy.

        1. Alan says:

          I took Thomas’s point more as that it’s understandable that some developers get to angry about it, even if that reaction isn’t necessarily productive.

        2. Thomas says:

          I wasn’t saying it’s rational, I was saying I can understand why and I’m pretty disgusted that even people who hear about a tiny little game that pretty much no-one plays are still happy to pirate it. We can actually answer a few of your questions, it’s a small percentage of the pirates who were trying to install onto multiple devices because if it were a large percentage we’re talking about 50% of everyone who bought the game each going to pirate it to download it onto their 9 separate devices. Or to be more reasonable 100% of people with 5 devices each all with different OS’ or unaware of the ability to redownload apps

          1. Thomas says:

            And whilst Alan is right that I wasn’t intending to make any comment on the effectiveness of lashing out against piracy (I did call it ‘self-destructive’), if we were to get into that discussion, the facts he present us are the opposite of his conclusion. He had small static sales with no significant growth or increase. There’s no sign word of mouth was selling his game. And then he got promoted on an app store by a major brand and people saw that promotion and bought the game. After that period where a significant number of people bought the game because of an Amazon promotion, his product had more visibility and sales increased.

            There’s no space in that narrative to draw a conclusion about piracy because it’s very clearly that it was the deal and the sales encouraged by the deal creating a higher profile on the app stores that were the factors in selling his game.

            If this were about the effectiveness of piracy as a promotion then we’d need to see data where he had small sales and then they grew over time without outsider influence as pirates promoted his game

            1. Steve C says:

              Saw that promotion and people bought the game… for zero dollars. That last part is super important.

              The promo was free app day. Then he started getting significantly more $ sales per day after it was no longer free. That it was free means all his facts support his argument.

              His goal was “to experiment with the different platforms, methods of monetization, cross-promotion, etc.” His well supported narrative was that obscurity is far worse than piracy or giving it away for free.

      2. 4th Dimension says:

        Excellet. Next Shamus post should be him making his own annoying DRM. :)

        1. Jeff says:

          If the game detects you didn’t pay for it, at some point you get attacked by swarms of bees. You can shoot the bees and they die, but they’re tiny and don’t stop spawning. >:)

          1. silver Harloe says:

            So instead of writing DRM, he’s just going to hire Mumbles to hit pirates? Fair enough.

            1. MrGuy says:

              Best. DRM. Ever.

  22. Skuvnar says:

    If it’s any sort of synthesized music you’re after I’d be happy to make some for you. If you want to send me tracks for what you had in mind.

  23. MrGuy says:

    OK, so market research time. Are there enough people out there who want this game made? Here’s how I propose to find out.

    What I’m going to do is donate exactly $9.99 via the “Donate” link (it’s right there on the right side of the page). I’m doing this with NO EXPECTATION that I will get a “free” copy, but because a.) I really enjoy Shamus’ programming series and it’s worth it to me, and b.) I will buy this game if it ever sees the light of day, and I want to provide some level of financial incentive for Shaums to keep working on the list of issues.

    I won’t get mad if the game gets shelved. It’s a donation, not a pre-order. But I do want to indicate how much I enjoy this series and want to see the actual game.

    Join me and donate!

    1. Retsam says:

      I like this idea. I’m in.

      1. Bryan says:

        Sounds like a plan; I’m in too.

        (And Shamus, if you want help porting to Linux, let me know and I will, if I can find time. Probably mostly on weekends. You have a machine or two running Ubuntu if I remember right, but they might be rather too new to build distributable binaries on. On the other hand, having the sources — but paying for the data, the way id has done all the Quakes and Dooms — would fix that issue too. Although now that I write that, I realize that most of the data comes from the code, since it’s procedural. Hmm. That’s an interesting issue. :-/ )

      2. lethal_guitar says:

        Me too!

  24. I might be betraying newbie instincts here, but is it possible to create a generic “detect whatever input is being inputted” bit and then have the player show you what they want to use? Basically start out with them getting off a launch pad and past a few barriers, capturing what inputs they use along the way. So even if they use YGHJ instead of WASD, you don't have to make them type it all in or know what keyboard layout they use. Or do you? Like I said, kind of a newbie here.

    1. Volfram says:

      That’s easy enough if you’ve activated a key remap and are telling the player “Press new key for Left,” but if you just start the game up with “Press new key for Left,” you will probably confuse most beginning players.

      With SDL, you can simply wait for an event that looks like a keypress, mouse movement, joystick position, or whatever else you’re willing to accept as “movement input.” For analog inputs, check the direction and you can differentiate X and Y, positive and negative.

  25. tranquil_madman says:

    You don’t really need to make all those features at the beginning. Just release it English only with fixed keyboard mapping. If the game seems to be popular and there are enough requests you can release a patch for it later. I know big evil corporations do a similar thing with their games and it’s annoying, but no one would be angry with an indie developer for this behaviour.

  26. Rax says:

    Ah, the second post in a row crushing my dreams of this becoming a Binding of Isaac / Spelunky type game. Too bad (Hey Shamus, I’d pay more if it was! Please make yourself hours upon hours of extra work, ditch already developed features and change your entire plan for a few extra bucks from one person).
    On a more serious note, have yet another indie developer talking about his (less than stellar) sales: http://flippfly.com/news/race-the-sun-a-month-after-launch-losing-steam/

    Also, if you decide to do translations I’d be happy to help translate it to German for free.

    Edit: Reading some of the comments about input problems. I’ve seen a lot of games in the past solving this in a strange way.
    Most noteable example is probably opening the ingame console in many games. “~” seems to be the standard key for this in most games which is “^” on German keyboards and just pressing that often works, same with things bound to “[“, “;” or similar (“༔ or “ඔ respectivly).
    It displays the QWERTY Keys in the menu, but still works with the “same” keys on QWERTZ.
    Needless to say there’d be just as many examples (if I had given any) in which this doesn’t work.
    Always seemed to be a mess, being confirmed by what I’m reading in these comments by people more knowledgeable in programming than myself.

    1. Strangeite says:

      That was a fascinating article. Depressing but fascinating.

  27. Nidokoenig says:

    Procedural music idea: See what the conditions for using that audibilisation of sorting algorithm’s program from part 15 are. Base the tempo on the number of enemies the player has a visual on, pick synths to fit the environments you set and play around with seeds for random number generation until you have a bunch of music that sounds passable. Though I may be suggesting this because I’m one of the lunatics who likes Lou Reed’s Metal Machine Music for its ambience, the electronic/metallic chaos could fit very well. Bubble Sort seems to come out sounding a bit like an alarm, so that could be cool for a boss warning or escape segment. Maybe have different algorithms for different situations, working on the same number set until it’s sorted and needs reshuffling.

    Is there any fundamental problem with storing all player-facing text as images rather than words? It’s more work for translators and working on the text generally, but provided you have enough resolution it can support any language regardless of its weirdness, even down to ones that use different colours of text to convey various things. And you can get NERRRRDS to translate it into stuff like Klingon and Al Bhed for shits, giggles and free publicity. More work in best case scenarios, but far, far less in the worst cases. You could even support animated gifs for sign language if someone decides it needs to happen. And it can be implemented as a back up to whatever you have running now. So I guess the fundamental problem is that it’s a fair bit of work for a back-up most people who learn about the game won’t ever need.

    The powering down weapons to what the Good Robot can support sounds like something that would drive a lot of people batty. Probably best if it’s togglable. Even, or especially, if one way is clearly better, so people can at least toggle it on or off and make an informed decision rather than argue endless without data.

  28. Eldiran says:

    A game like this I’d expect anywhere between one and ten thousand within a year (assuming you charge between 10 and 20 bucks). That’s not terribly optimistic, I know, but regardless of quality, this particular genre means it’s not going to take hold of any niche markets or anything. That said, if you can I absolutely think you should go for it. If it doesn’t sell well you can always bundle it with your next game :D Just don’t get too deep into making it a perfect masterpiece.

    And yeah, I would really not worry about translating until after your initial release. Especially since I imagine most of the game holds up just fine considering it’s an action shooter. If you’re really concerned, try adding icons where possible (such as an icon to represent each type of upgrade); that benefits all languages and is quite easy.

    I would also not worry about a Linux version until after the initial release. One version at a time is hard enough :P

    As for distribution, Steam is probably not something you’d get right off the bat. Instead you can sell it from your own site using something like Fastspring or E-junkie, which take about a 10% cut (note: I haven’t had experience with either so I can’t vouch for them, but others have used ’em with success). And maybe submit to GOG or Desura or the like too? If you do get it on any such service it’ll probably be a 30% cut for them.

    Oh, and if you need any playtesting or bugtesting, let me know! :D Doesn’t need any music for basic playtesting and such. You could always rip out all the unusable stuff, or put in placeholder creative commons commercial-use music.

    P.S. don’t take my word for all the above! I’m just another in-development game dev, and an adventurous unmarried twenty-something to boot :P My only sales knowledge is from obsessively reading articles about the process.

  29. broken says:

    regarding stores: what about GOG they claim they’ll give feedback regardless and it’s a platform with a reasonable amount of exposure…

    1. Irridium says:

      I was going to suggest GoG as well. Though since they’re more internationally focused, Shamus would probably need to do at least European transaltions…

      Also, Sony has been on an indie kick as of late, scooping up titles left and right. I know I’d love to play this on my Vita. Though that’d mean getting the game to work on the Vita and/or PS3. Maybe PS4. Could be quite a bit of work though… Still, worth keeping it in mind.

  30. Yerushalmi says:

    I can’t stand chapter-style saving. It meant my wife and I couldn’t play any of the Orange Box games at the same time without destroying each other’s saves.

    1. Dev Null says:

      Yeah; if it has to be checkpoints, pleasepleaseplease support multiple games running at once.

  31. Elec0 says:

    As for remapping, you said it would be so much easier if you could detect what keyboard layout people were using, but why not put in a scrolling setting in the options menu for the different keyboard layouts? Then you can have it hardcoded, and support the most used keyboard setups.

  32. Hal says:

    I mean, you people already read English.

    ¿Qué?

    1. MrGuy says:

      Lo siento, Dave. Me temo que no puedo hacer eso.

      1. tengokujin says:

        何と言いますか?それは英語のブロッグでしょ?

  33. krellen says:

    Though I’m probably biased based on nationality, I’ll chime in with the others saying that translation probably isn’t necessary, unless you think this game would be huge in Japan (but in that case, you’d probably need to port it to PS3/4 anyway). I think the category of people for whom “would hear about and like to buy this game” and “will not buy a game in English” are both true is vanishingly small.

    1. Paul Spooner says:

      Yeah, it seems like, for a game this straightforward, you shouldn’t have to translate it at all.
      On the other hand, it’s good discipline to sequester all your plaintext in an easily translated location, and support unicode for all on-screen text display.
      So, you shouldn’t have to, but it’s a good idea. No idea how hard it’s going to be though. I do all my programming in Python, which is Unicode native.

  34. Shinan says:

    On remapping I just want to give a shout out to us left-handed people who use the right side of the keyboard for the movement. Remapping of controls is an absolute must have for me for any game that doesn’t consist of only using the mouse or only using the keyboard.

    I have a feeling I don’t like RTSes because their shortcuts are always for wasd people and who in their right mind goes around rebinding rts keys. So I only use the mouse in rtses (and the arrow keys to scroll the map. Though in some games that functionality has also been removed) and then I lose because I can’t do nearly as much as everyone else can.

    If there is one good thing about games being controller-friendly it is that there are not hundreds of keys to rebind, instead there are only as many keys as there are keys on a controller :)

    But yeah. As a left-handed player remapping keys is a make or break feature in any game for me. (and also I’ve found that unreal engine doesn’t like scandinavian left-handed people since the key that is next to L it interprets as ~ and it opens the console. I tend to use that button as my sprint button in shooters. But in Unreal Engine games I’m just not sprinting…)

    1. Paul Spooner says:

      This makes me wonder if maybe it isn’t a good idea to just map a whole slew of keys to the “virtual keys” that he’s already got implemented. Have movement be controlled by WASD and arrow keys, and IJKL, and whatever else. Give people a lot of options, and then they won’t have to re-map the inputs… probably.

      You could even have a bunch of other keys bring up a display showing “the key you pressed is not mapped, but here are all the keys that ARE mapped” or something like that. I don’t know if that makes sense though. It certainly is a sticky problem.

  35. EricF says:

    Don’t forget #15: how to up-sell your players with in-game upgrades for a few extra $$

  36. Jeff says:

    Tell you what: As a first step in the right direction, let anyone who wants to pay you $10.00 right now via paypal in exchange for the promise of getting our hands on a copy of the game either when you release it, or when you decide that the project is as done as it’s getting.

    Gives us a chance to support you in what you’re doing, gives you a bit of money for food while you’re doing it.

  37. Phantos says:

    Need to make a tutorial.

    No. You. Do. Not.

    What you need is to make sure the player knows the controls. This isn’t an epic RTS game. If people can’t learn how to play your game through playing it, that’s not a sign that you need a tutorial. That’s a sign that you need clearer game mechanics and objectives.

    1. Raygereio says:

      What you need is to make sure the player knows the controls.

      That’s what a tutorial is supposed to do: teach the player the controls and mechanics.

    2. Shamus says:

      Echoing what Raygereio said above: Yeah, that’s what I mean by “tutorial”. I’m not talking about some special thing with popups, tacking heads, and cutscenes. I’m just talking about a prompt that says, “press [thing] to fire missiles”, which disappears once they fire a missile. That sort of thing. I’m content with people groping around figuring out mechanics for themselves, but I don’t want someone going through the game not knowing they HAVE a level up screen, or not knowing how to shoot missiles.

      1. Phantos says:

        Alright then, just making sure.

        It’s one thing to make fun of the AAA developers for not knowing this stuff, but the indie scene has its’ share of unnecessary hand-holding as well. For my money, tutorials are more harm than good, but I’m sure you know what you’re doing.

      2. Alexander The 1st says:

        Well, as a counterpoint to this; why not have a manual?

        I say this, because PS All-Stars: Battle Royale *does* have a tutorial area of the game, but you also can learn 90% of the controls (Short of character specific movesets and combos) via the digital manual that comes with the game.

        One of the major reasons Egoraptor made a big deal with the Megaman X tutorial is that the presentation given is for people who haven’t read the manual; for everyone else, there’s the manual. :p

        In the case of the level up screen…a small prompt next to the rest of the UI when you have un-spent points that says “Press to level up!” – ala Bleed’s “P2 Press Start to Join” prompt – you can even do what Bleed did and provide an option in the menu to disable that prompt.

        1. Matt Downie says:

          First rule of interface design: nobody reads the manual.

          If the only purpose of the tutorial is to teach the controls, maybe a prominent keyboard setup screen could be the tutorial?

          1. Raygereio says:

            If the only purpose of the tutorial is to teach the controls, maybe a prominent keyboard setup screen could be the tutorial?

            Remember the start of Spoiler Warning’s Dishonered season and how Josh just skipped through the setup screen that asked him to set his gamma correctly for his setup and then spend several episodes complaining about how the game was too dark?
            Well, Josh is not unique in that.

            I read the manual if there is one. And I go over all options before clicking New Game. But people like me appear to be in the minority. Generally people just want to click New Game, jump in the game and start playing. This actually presents quite the problem for developers, because they have to balance teaching both the players who are new to their game the controls and mechanics, and the players who are new to videogames in general and also make sure their tutorial isn’t boring people, isn’t too intrusive, etc, etc.
            There’s a whole science to making good tutorials and it’s no wonder a lot of developers screw it up a little

            This is also the reason why developers often feel the need to setup a system that auto-detects the “best” graphical settings for your system. Because again: people often ignore the options menu.

            1. Nidokoenig says:

              One way around this would be to have controls set up in-game as the first thing you do. “Control protocols corrupted, attempting to recover. Input command for upwards motion.” and go through the whole control scheme quickly before asking for the command to open the door. For joysticks it’d just be setting the axis when it asks for direction, in case someone point their analogue stick up at an odd angle accidentally. You probably skip this if someone’s played the game before or gone into options menu already.

          2. Anachronist says:

            Yup. Notice that iPhones don’t come with a manual? To Apple’s credit, when my son was only a year old, he figured out my wife’s iPod touch enough to unlock it and find his recently-played Elmo videos on YouTube.

    3. Cybron says:

      A game with 4-8 inputs != a game with full keyboard inputs.

    4. krellen says:

      I think that guy might like MegaMan X, just a bit.

    5. Zukhramm says:

      Yet he spends a large time of the video looking at the tutorial of Mega Man X.

  38. Cass says:

    You could kill two birds with one stone, test the saleability of this thing and get playability feedback by doing some sort of Minecraft-like alpha-testing discounted presale thing, where people can buy the game as-is and get automatic updates to whatever it ends up being. I’d happily give you, say, seven dollars right now to play the game in whatever bug-ridden experimental state it’s in now, and I’d be glad to provide feedback on how it works for me. (I don’t need music, either, as long as the weapons make some sort of sound.)

    And since people would buy it knowing they’re alpha-testers, no one’s gonna mind a couple crashes or a lack of a perfect saves system, and support for azerty can wait, too. I just really, really want to play this, like, RIGHT NOW, okay. :(

    1. Van Tuber says:

      However, if most of Shamus’ sales come from his readership, then he will lose a pretty good percentage of his profits.

    2. Kevin C. says:

      I think that a Minecraft way of doing this is a good option. It also allows you to do authentication (at least once like Minecraft)so it’s not a pirated copy without being obnoxious about the DRM in any real way.

      It will mean an authentication server, but it also allows for high-score tracking/sharing, Facebook related connecting, etc.

      You could also do a KickStarter now (remember, there are taxes to be paid on that too), but you could offer bonuses to people who contribute, etc…and I would guess easily have the funds to be responsible and spend as much time on it as you want (in the near future). Hiring someone for the music could be a stretch goal as well.

      Then kick it over to the Minecraft model (or contract with them for the authentication).

  39. Atle says:

    T-shirts, coffee mugs, socks!

  40. cory says:

    A few indie developers have written about the economics of it. Here’s one, by the makers of Defender’s Quest:

    http://www.gamasutra.com/view/feature/186940/

    Short version: Steam > Direct > GOG > Flash Portal

    Here is another, by the the maker of a 2D shooter called Gunman Clive:

    http://www.neogaf.com/forum/showthread.php?t=509260

    Short version: 3DS supplied most sales, followed by phones/tablets, PC negligible. Did very well on the 3DS in Japan.

    I think Jeff Vogel has written some too.

  41. Bruce says:

    One more thing on internationalization that is often overlooked: the length of phrases in various languages. In my own job I’ve been bitten by the discovery that the Finnish phrase for something won’t fit at all in the (screen) space I’ve allotted based upon the English phrase.

    If one-byte-per-character is a big deal, ISO-8859-15 is probably the way to go (but rules out Hungarian, Polish, etc.); if not, Unicode encoded as UTF-8 covers all bases.

  42. Steve C says:

    In regards to #9 Remapping controls

    Why is this still an issue for any game? Every game has this issue! Even the ones that decide you can’t on purpose for some stupid reason (Diablo 3). I remember that the original Star Control in 1990 allowed you to pick your controls. It even allowed you to test for key conflicts (which was new and amazing tech!) since simultaneously pressing multiple keys tended to screw up most keyboards of the day.

    Point is the issue of players picking their own controls has always been there and was solved in the 90s before many of today’s programmers were even born. Why is this still an issue? There are things like OpenGL for graphics. There should be a software package for player generated control schema that is robust and common as OpenGL is for graphics.

    1. BenD says:

      Well, yeah, but cake should also be nutritionally valuable and low-calorie while tasting fabulous.

    2. Phantom Hoover says:

      The thing is, OpenGL implements functionality that developers cannot practically implement themselves. Control schemes… don’t.

  43. Sacae says:

    As much as there are many unknowns, hard realities, and trouble involved in releasing your own game – clearly shown in your post – there is a end result that makes it so worth it.

    As a gamer who has the skill of a programmer, there is some inner desire I’m sure. A ‘that’d be awesome’ thought in a way, for creating and releasing your own game for other’s enjoyment.

    To achieve that, on a game that you are clearly so passionate about, would be a feeling that I can’t even really put into words.

    I hope sometime down the road there will be a post, and hopefully you would have better words than I can’t think up. I hope at least, it would be awesome to see this come to fruition.

    You have 10 bucks from me if it gets to that point.

  44. topazwolf says:

    If you want you can get some of your posters to send you a few pieces you might need, or help in other manners. I for one would not be against making up some art assets for you since I find making such simplistic art very relaxing and enjoyable (yet I am prone not to do art because I rarely have a reason to do so and helping out in your project would give me a valid reason to do so). All I would need is a list of criteria and what you want as well as a place to send such resources. I would actually greatly enjoy making up some little robot sprites.

    It would not be a fix all solution, but most of us like you enough that we would be happy to help. Though I would suggest having them agree (preferably on email and if better scan in a signed document) to some basic terms if you go this route.

  45. ChrisTheGamer says:

    As for translations: I bet you could find most, if not all, of the languages you need here in the comments. I for one would gladly translate some stuff into German, should you need it.

    1. Phantos says:

      Good idea.

      I’ll get started on the Esperanto version.

    2. MrGuy says:

      I think this is the wrong approach entirely. Use Google Translate (or better, Bad Translator).

      How often do you have the chance to become the source of the “All your base”/”Do not want!” meme for multiple languages at the same time?

      1. Volfram says:

        This thing is awesome!

        “I have no problem man, but that five points is a way of life, you can’t go back.”
        -Apologies to Kathleen DeVeere

  46. Groboclown says:

    I put all my music under the Creative Commons Attribution license (my music), and it sounds like, with the amount of help offered here, you might have a good selection to choose from.

  47. Quentin says:

    Hi Shamus ! I’ve been reading your blog for a good while now, and it’s one of my favorite places on the Internet. Let’s post my first comment now ! :D

    Someone probably answered already, but I’ll drop it here anyway : Europe uses the ISO-8859-1 (a.k.a latin-1) charset (http://fr.wikipedia.org/wiki/ISO_8859-1), and it will be all you need from Spanish to French to Swedish. Russian, Arabic and eastern languages will need UTF-8…

    As for the translations, I’d be glad to help ! I’m a native French speaker (and have a better speech than many French people), and quite a good grasp of English. Feel free to contact me by e-mail if you are interested !

    Anyway, thanks for this blog and all the work you put into it. I’m learning a lot, and you’re a wonderful writer !

  48. Rick says:

    Sorry to add to your list but what about auto-updates?

    This new generation that no-longer likes editing INI files to map their keys also isn’t too fond of manually checking for patches, let alone downloading them and installing them.

    p.s. I can’t wait to play, even if that means I’ve got to find my Windows disc.

  49. 6b64 says:

    I think making translations isn’t worth it. I’m from Hungary, I can tell how people relate to translated stuff here. English is the language of computer games, the internet, and gradually pop culture in general. Unless the game is really story-heavy or technical, language doesn’t matter much. Younger guys often learn basic english from games (I understood stuff like ‘save’, ‘load’, ‘game over’ when I was five). Lot of people are actually used to not understanding stuff and just going by intuition (I don’t know if this is a feeling a native english-speaker will ever have). And english is really good for computer and video game related stuff. It’s short, concise and has a good technical vocabulary. Simple things like ‘close’ or ‘cancel’ can’t be put in hungarian in a good way. I don’t know how it works with other languages, but if it is similar to my experiences, making translations isn’t really worth the investment. It looks like you have enough work on your hands anyway.

    1. Groboclown says:

      I’ve had to go on instinct on some of the other languages. For instance, I learned a bit of French this way (Telecharger!). Because the UI layouts use the same styles, I can guess when the Polish game is asking me to select the install directory, and if I want to cancel.

  50. SAJ14SAJ says:

    I don’t understand the need for music… Perhaps I am alone in this, but the first thing I do in every single game is turn off the music.

    I have never met a game where the music didn’t become unbearably repetitive before the game wore out its welcome.

    I want to watch TV on the other screen (not so much for an action game), or listen to my own music, or just have peace and quiet.

    1. Cinebeast says:

      I think you’re alone in this, or just in the minority. (Or I could be wrong.)

      I’m pretty much in the opposite group — I have a hard time focusing if the game I’m playing has no music, and I often crank down the other sounds (SFX, voice acting, etc.) so I can better hear the score.

      If I had any musical skill, Shamus, I’d write you up some tracks for free, but I’m a clod.

      1. Volfram says:

        Music helps set the mood. Or at least, music SHOULD help set the mood, like color tone, character design, level theme, and sound design. They’re all seasonings on top of the baked potato intended to direct the player towards a given experience.

        Even “no music” is technically a choice for music design, and it produces its own emotional flavor.

        This isn’t to say that you should accept whatever music I may happen to put in a game. It is perfectly reasonable for you to say “I don’t like salt on my baked potato,” and use your own seasonings instead. I’m just saying “I’d like to put salt on your potato, because I think it contributes to the experience I’m aiming for.”

    2. MaxEd says:

      You’re not alone. I usually turn off game music at the first opportunity for exactly the same reasons: it’s repetitive and I begin to hate even the best melodies after I have heard them 3 or 5 times in a row!

      Also, despite my broad music tastes, game industry seems to use exactly those genres of music I don’t dig at all: it’s either string-y classic-like, or electronic, or metal or (god forbid) rap. It’s like everything good that was created from 1920 to 1980 does not exist for purposes of gaming! On the other hand, I find it hard to imagine a game with rockabilly, boogie or blues soundtrack…

      The only game where I found music well-done and did not turn it off was BioShock: Infinite. There was no background music, it only played when you were near something that REALLY could play music, like a radio or a live band. You could listen to a song once, enjoy it and move on. THAT was good.

    3. Groboclown says:

      I think that Half Life 2 did a great job with the music. They start up the music right before a big set piece, like a big fight or a creepy scene. Just a touch to keep the energy right.

      For the most part, I like music in games. I never grew tired of the Star Control 2 music, and it was almost continuously played for the many, many hours I played that game. Part of that was the variety in songs, as well as the quality.

      There are times where the game has limited music and just loops the same thing over and over, and I get tired of it, forcing me to turn off that music.

      That tells me that games MUST have the music volume controls, or, at the very least, an on/off option for it.

    4. Zukhramm says:

      I think, finding out a game has no music, unless it was a very specific point of the design, I’d be hesitant to buy that game.

  51. MaxEd says:

    On question of translation: we have recently had to implement support for unicode fonts and texts in our mobile game at work, including complex scripts like Arabic. It took our lead about two weeks to implement high-level interface for this and Windows implementation for test purposes, and another week for iOS implementation. We still do not have Android or Flash version, but I suppose it will be 1-1.5 more weeks at least.

    We could have used a ready-made platform-independent library like Pango, of course, but it has more dependencies than a rocks star drug addict, including some that are hard to justify.

  52. Norah Arendt says:

    I would be more than happy to make music for your game. Most of my works are high tempo electronic dance music, though I have a fair bit of experience with other stuff if that isn’t what you’re looking for.

  53. Talby says:

    AZERTY keyboards exist? Did they cross over from an alternate dimension?

    1. Zukhramm says:

      A dimension called France.

      1. Volfram says:

        “STOP BEING FRENCH!”
        -my Canadian roommate

  54. Enjolras says:

    Shamus, I think you’re worrying about a bunch of marginal stuff that doesn’t matter for the first release.

    Nonstandard keyboards?
    Languages other than English?
    Tutorial?

    That’s going to affect, like, 5% of your audience.

    Just squash the bugs and release the game. (That in and of itself will require ample work.) Once you get it out there, then you can work on “nice to have” stuff like the above.

    1. Zukhramm says:

      The keyboard issue will affect more than 5% of the audience unless you’re not releasing outside the US.

  55. Factoid says:

    Having not played the game or even seen video of it being played, I can say that while it does need an art pass, this could definitely work as a commercial game. My observation of the industry is that the really successful indie games go cross platform very early on. The fact that so many of them do it must mean that there are decent sales to be captured in such a way.

    So BEFORE you go down the road of heavily optimizing, polishing gameplay,making the game friendly for localization, etc… do a proof of concept on multi-platform stuff. See if you can get it going on linux and mac. See what it takes to get onto the XBox Indie platform on PSN.

    Consoles are the hardest and the part that a lot of indie guys skip at least at first. The certification requirements suck, and it takes a long time to get approval to launch the game. I always hear horror stories about how bad microsoft is to work with as an indie, because they only give slots on XBLA to major publishers and the “indie game” section is a wasteland of color-matching games and stuff that never gets any traction because Microsoft only ever promotes their prime-slot XLBA titles.

    But I would at least do the homework on multiplatform as it seems to be a key ingredient to success as an indie game.

    1. Matt Downie says:

      I would advise getting something you can sell before worrying much about other formats. If only a hundred people buy it on PC, it’s probably not going to be worth the effort of making it run on a console.
      Alternatively, make other formats a stretch goal for a Kickstarter.

  56. Benjamin says:

    This was a fun post to read, as I’m working on a game myself (also a 2D shoot-stuff-er). It’s pretty daunting the more you realize how much needs to be done when it’s just you. You know you can do it all (or at least the parts you don’t pay someone else for, like music in your case), but there’s the issue of time and missed opportunities.

    I’m looking forward to seeing what you end up with, as well as your thoughts as you go through the process.

  57. tengokujin says:

    I’m curious, how difficult would it be to set the engine up so that a fan can simply make a translation of the game’s script, put it in some folder, and the game can automatically replace the script with its translation?

    1. Alan says:

      That’s pretty much how most translations are done, except instead of fans offering the files, translators are paid to do it. Depending on the specific system used, it varies from zero additional programming work to a little bit of programming work. The real challenge is in being able to support more than one language in the first place.

  58. Chris Robertson says:

    Have you heard of Positech Games? It’s a one man shop (Cliff Harris) responsible for Gratuitous Space Battles, Democracy 2 (and now 3) and publishing RedShirt (developed by The Tiniest Shark). He’s got some advice for first time indies (find a small sample at http://positech.co.uk/cliffsblog/2013/09/05/learn-from-the-veterans/ and another at http://www.positech.co.uk/content/analytics/analytics.html, though he seems to be a bit less enamored with GA these days: http://positech.co.uk/cliffsblog/2013/09/22/analyzing-advert-effectiveness-where-did-all-my-clicks-go/) and might be willing to give you some one-on-one pointers. Additionally, I imagine he would be willing to work as a publisher.

    At least that would be a little less research you would need to do.

    Yeah. A lot of links to another site. Feel free to not let this reach the public audience. It was meant for the eyes of Shamoose (am I doing this right?) anyway.

  59. Shamus here’s me opinion/suggestion on a few things mentioned in your post…

    On Testing
    A limited/closed beta offered to a some of the folks reading your blog (first come/first server for example), how many I have no idea, depends on how solid or not you feel the game. But from experience IO can tell you there is always another “josh” out there that will stumble on that one thing nobody else did, and they tend to do it after release as well.

    On Art
    I actually think your art is pretty good, higher rez is obviously always good. But by the looks of the screenshots so far, you are more than capable of doing the graphics yourself.

    On Music
    If your not selling the game commercially then you can find tons of music on Jamendo.com you can use.
    If you are going to sell the game and you find any of my music ( I’m “Rescator” on jamendo) suitable at all, then let me know and I’ll make a deal with your directly for free provided I get credited somewhere. (PS! I can provide lossless quality FLAC if this is desired).
    I also believe that Kevin MacLoud has a similar deal (free for commercial use if you credit him), there’s bound to be something in his catalog somewhere.

    On Story
    Awesome, and it doesn’t have to be a story, just a simple plot with some narration/comments here and there. Maybe Good Robot need to retrieve something important from the depths of whatever to save the humans (robot) race. Or maybe he is looking for/rescuing his (her/it’s) friend. Maybe it is escaping from someplace. Or maybe it is on a quest to find the meaning of life, the universe, everything (are there 42 levels in the game?)

    On Saves
    Manual Save + Auto Save (checkpoints and game exit etc.) is something most expect, the actual save point being at a “last checkpoint” should work fine in this type of game. You you let the manual save be named by the player and also store some kind of level/checkpoint indicator then the player can easily manage stuff themselves.

    On Options screen
    Nothing to add to what you said there.

    On Input controls
    You can simplify this by letting the re-configuration be a sensible default (should work fine in most “western” countries.
    A few things to avoid/check tough. I think Z and Y are swapped on German keyboard.
    So if you define the controls by the thing the keys represent you might get some issues. There is some API stuff to simplify this though. Not sure how SDL present this to you though (never used SDL).
    The re-configiration itself can be as simple as clicking on a “Set Up” button then let the user just click on whatever key/button they want to use as up, you can accept the raw keyboard or input with this even. If all controls for the game are on/off (aka digital rather than analog) then you can accept pretty much anything really. If a player wish to use footpedals why stop them.
    However if SDL does not let you accept any input as input then you can’t do this obviously.

    On Translations
    On things like the savepath and player name you really must support Unicode (you could use UTF8 when saving/storing unicode strings though, like i the save file or settings file etc.)
    Also, having the entire program in/as unicode (if SDL support that) is highly advised, as from Windows 2000 (aka NT5.0) and later, ASCII API calls need to be translated to Unicode calls as all Microsoft OS from Windows 2000 and up are Unicode. So ASCII is a tiny performance loss.
    As to language itself. Screw it. If you really must then put the strings in a xml or ini file or something to be a tad future proof. But go with just English, however allow for the manual to be in any language, just make it a folder with a index html and other html and lower rez screenshots with explanations.
    If a translated manual explains what menu option, or what a dialog box means,
    even a non-english speaker should quickly grasp how things work.

    On Profiling / Linux / Steaming etc.
    Nothing to add to what you said really so far.

    On Joshing
    …a little Joshing never hurt anyone…or….

    I’d like to suggest something i how you release the game though.
    Ever ponder donationware?
    I.e. Where folks can download the game they can also make a donation. Obviously this means that folks will donate 0, but others will not. Some people can be surprisingly generous out there.
    You should also get some interesting statistics from this.
    And maybe at the end of the game ask if people want to submit their stats from the save file?

    Now depending on how well this goes, you could consider this v1 of the game. If all goes well enough and you might look into making a v2 and get it greenlit/seamed/kickstarted/ (and how about GOG?)

    Also, while I’m unsure on the specifics, I think you can accept donations tax free or for a lower tax at least. (somebody else here in the comments might now for sure I hope)

    Anyway, the point is that it will let you get some money in (to cover costs so far or help fund future work on it). And it will let you test the interest.
    And people will not mind if this is a v1 and that if things go well then a much better v2 will be available (for sale) later some day.

    For lack of a better way to describe this: It’s kind of a open ended kickstarter with a free playable beta. (that sentence makes sense I hope?)

    And I’m sure that “The Legion of Shamus” (your blog readers) will be happy to help with marketing/spreading the word on things.

  60. D-Frame says:

    Is there any reason why this series didn’t make it to the programming section yet?

  61. ryanlb says:

    I have been following this series with GREAT interest. It’s been very fascinating.

    Put me in the group of people that would pay for this game as is, and would also pay for it again once there is a finished version.

    But after all the discussions and screenshots, I really wish this was something I could play right now.

  62. Galad says:

    A bit of a late comment, but .. the rainbow coloring is actually real pretty and even if for all intents and purposes it’s a bug, it looks more like one of those “too good to pass on” bugs that were left intentionally in Skyrim and other games :)

  63. Neil Roy says:

    In my own game I created and distributed for free, I didn’t translate the text to foreign languages, although I wish I had now. But I did change it so it supported Unicode for my High score screens. I had requests from people from all parts of the world; in fact, I think MOST of the people I have heard from have been from some unexpected countries, like Tunisia, a LOT of different countries in South America, so much so that one of the first languages I want to add in my next version is Spanish. You don’t expect your game to be seen outside English circles but in this day and age, it will be, almost guaranteed. I had no problem with unicode, but then, I used the Allegro library which handles everything, graphics, sound, music, text (Unicode etc), you name it all very well and I suspect SDL will have similar support. I don’t recall all that much work involved honestly, but people were able to use their own text styles. You’ll need to make sure you have the appropriate fonts available as well (as opposed to perhaps, simple bitmap style fonts, I don’t know what you’re using).

    I think allowing the keys to be remapped is a must and shouldn’t be all that difficult. It will be good practice for you. You don’t want to leave it out and then find out later on that you should have. I know I was surprised at how many foreign countries I hear from. It’s a global market these days, plan accordingly.

Thanks for joining the discussion. Be nice, don't post angry, and enjoy yourself. This is supposed to be fun. Your email address will not be published. Required fields are marked*

You can enclose spoilers in <strike> tags like so:
<strike>Darth Vader is Luke's father!</strike>

You can make things italics like this:
Can you imagine having Darth Vader as your <i>father</i>?

You can make things bold like this:
I'm <b>very</b> glad Darth Vader isn't my father.

You can make links like this:
I'm reading about <a href="http://en.wikipedia.org/wiki/Darth_Vader">Darth Vader</a> on Wikipedia!

You can quote someone like this:
Darth Vader said <blockquote>Luke, I am your father.</blockquote>

Leave a Reply to Groboclown Cancel reply

Your email address will not be published.