The Game Plan: Minimum Viable Product

Leave a comment Standard

In the previous posts we talked about how to create a budget for your game, some helpful tips if you’re not a programmer and finally we went over the best ways to help you in getting started. Now it’s time to talk about actually making something you can actually call the game.

What is a Minimum Viable Product (MVP)?

The idea of a MVP is to take the core mechanics of your game without any thrills or bells and whistles and put them to the test. This helps you get a working product and make iterations on it if you notice something doesn’t work the way you intended or just isn’t fun to play. This is also a huge way to save time and energy if say, that feature you spent months making graphics and 3D models and sounds for isn’t actually all that fun and you end up just tossing it out later.

How do I decide what is MVP?

First let’s take time to look at the features you wrote down when you were getting started. Now go through your list and take everything out that isn’t 100% essential to a base line working game. This usually includes things like, energy booster packs or power ups or multiple levels, or more advanced variations on a more basic feature. This also includes most graphics and 3D models and sounds and sound effects. While those are nice to have most times they are not actually essential to a working, playable game. Take pong for instance, you can play the core mechanics of the game with square pixel art just as well as you can with a 3D soccer ball with trail effects and a flashy background of a soccer field with soccer goals and kicking sounds every type you hit the ball. The core mechanics of the game remain the same despite the addition of the graphics and sounds and sound effects.

Prioritize speed and working game mechanics over quality

Since your MVP is essentially your playground to test out your game ideas we don’t want to spend thousands of hours perfecting something before we can even figure out if it’s going to work well enough or not. That means your super special spin kick with high quality physics computations isn’t all that important when you realize enemies are too hard to kill or the level isn’t playable or your character can die too easily.

Instead use this time to make something ugly, crappy, and even glitchy as long as the core game mechanics are in place and working. This will start to give you a feel for how what you’re making will actually play. It will tell you right away if something is too hard, or a level is too short, or your character is jumping too high or not high enough, or that your quest system is impossible to complete.

For a lot of people this kind of thing makes them feel “icky” and instead they strive right away for the “perfect, glitch free” game right from the start. This will lead you down the rabbit hole of not good enoughs. The character’s movement isn’t good enough, or the colors aren’t good enough, or the music, etc, etc. Striving for perfection at this stage is a totally moot point when you don’t even know if your base line is even worth putting the time and effort into it.

MVP done? Now it’s time for feedback!

Once you have some semblance of an MVP it’s time for you to get feedback. I like to get feedback as soon as possible that what it’s easier to change things that I may have missed earlier in the process when there are fewer things to take into account in the big picture of the gameplay.

Feedback is also a great way to find issues you hadn’t considered such as the speed of this level gives me a headache or I can’t tell the difference between an ally or enemy. It will also help you figure out what other people think about the game and if they find it fun to play or not. After all, no one wants to spend time playing a game if they don’t think it’s fun, or it’s too hard to learn, or it’s too slow/fast to keep their attention. That

Word of Advice on MVP Feedback

Don’t ignore constructive criticism even if it’s not what you want to hear. That doesn’t mean you have to change or add anything anyone has ever asks you for — it means you need to take those things into consideration going forward. Ignore the feedback that focus on your aesthetics — at least initially — because you can always change and fix those later and an MVP really shouldn’t focus on graphics at this point. Core mechanics and gameplay are much harder to tackle and fix once you’ve invested lots of time and energy into them.

Why Making A Game Takes the Fun Out of It (and how to fix this)

Comments 4 Standard

I see it all the time, people coming into forums and online communities for games and game developers asking how to make a game or how to get their ultra cool idea that everyone will love and has never been done before off the ground and make it a tangible reality. Let’s get things straight, we love games because they’re fun and entertaining. It drives our creative vision and imagination and offers an escape from the mundane and the boring reality that is our lives. This passion, this drive to express ourselves and have fun is often what leads people to try their hand at making their own games. Many will start this journey but very few will finish it and even fewer will finish it with a successful and positive outcome (and let’s face it, money in your pockets). So why does this happen? Why do so many people start down this path of learning and creativity and adventure for fun that ends up leaving them broken, frustrated and depressed? The reality is that games are a lot of work and the very nature of making a game isn’t even a little bit fun. In many ways it’s the exact opposite of what we’re trying to achieve. So how does this happen and what can we do to fix it? Let’s break it down from the point of view of an Indie game developer whose a one man shop (or small shop) trying to make a game.

Lack of skills

You want to make a game but you’ve never programmed before, you don’t know anything about what’s required to make the type of game you want to create and even if you have those things covered you may not have all the skills you need to make it happen. Just because you can program doesn’t mean you can draw or compose artwork or market your finished product if you ever get that far. As an indie game developer you really have to be a jack of all trades. Think about trying to build a house if you’ve never built a house before. What happens if you only know how to frame the house but not how to do plumbing and electrical and tile work and all the other things that are required to finish the house? You end up with just the shell of a house that is lacking in so many ways you can hardly call it a house. This is one of the biggest problems I see with indie game devs — they lack the skills to accomplish what they’ve set out to do and they’re not prepared to outsource when they need to, which brings me to my next point.

Budget constraints

Making games is inherently expensive. Even if you create your own game framework and develop your own models/artwork, sounds and music you still have to — at a minimum — invest in a computer and dedicate hundreds of hours towards the development of your game. Those hours add up and while you’re developing your game you’re not earning a living that you need to support yourself and/or your family. Yes, that’s right, you still need to eat and buy necessities and support yourself and/or your family which is why even if you do have the funds outsource some of the work you lack the skills for you’re still fighting a losing battle towards my next point.

Time constraints and distractions

Supporting yourself and your family means that you’ll still need a full time job even as you chase the ethereal dream of creating your own game. Your time is precious and what little of it you have left after your regular day job has to be split between your other financial and personal commitments. Your kids need their parents and your house and car need to be maintained and you’ll struggle to find the proper work/life balance amidst all of the chaos that you juggle on a daily basis without adding the complexities of your game into the mix.

Technical problems, bugs, new frameworks and advances

So even if you can overcome all these odds so far you’ll still find yourself stuck hitting roadblocks as your game progresses. Technical problems you didn’t predict or forsee early on (and how could you, you’re still just learning yourself) end up being the bane of your game’s existence. Now you have to go back and re-write and re-factor and debug until you’re so frustrated you could pull all of your hair out and go bald. New frameworks and technological advances will make your second guess yourself or roll back to square one because you really do want to upgrade your SDK and add in the new dynamic system and better bump map texturing because who doesn’t want their game to be using the newest, latest and greatest technology available? No one wants to play a game that doesn’t have the same bells and whistles that their competition does because they took the the extra time/budget/testing cycle hits to go with the greater tech.

Slow progress and scope creep

Ultimately these things combined will drag your game down. What may have started off well and progressing quickly has suddenly slowed to a snail’s pace. Things suddenly feel like they’re never getting done or you have so many issues on your plate that it feels like there’s never an end in sight. Your game has hit a standstill and isn’t advancing like it was in the beginning and this is awfully discouraging and frustrating. The scope of your project has suddenly tripled and your todo list is a never-ending tally of bug fixes and re-factors and speed optimizations that need to be addressed for any chances of your game seeming like it’s something worth playing.

Early demo failures and monotonous repetition

If you’ve made it far enough to put together early demos and alpha access then pat yourself on the back — most people will never make it this far and you’ve just become a member of an elite club that deserves a badge of honor. The only problem is your demo gets horrible reviews, you realize your controls are too hard to use and this puts you into a crazy monotonous cycle of playing a particular part of your game over and over again as you attempt to fine tune it and make it more playable and more fun.

Never good enough

Unfortunately the truth is that your game will never be good enough. Someone will always find something to complain about even if you see some great feedback and helpful critiques that, if implemented, could really take your game to the next level and set you apart from your competition. Your controls will never be 100% perfect, your menu system may be too hard to read or too complex to navigate and you’ll never quash all the bugs that have been reported partly because you can’t re-create them all because your game is being run and tested under hundreds of different environments and hardware and operating systems that you didn’t have access to (and probably never will) as you were developing. If you’ve made it here this might just be the time for you to throw in the towel and say goodbye to all the blood, sweat and tears you succumbed to in order to make it this far.

Overcoming It All

If this has discouraged you against making your own game — good. Making a game isn’t easy and it’s not something for everyone so don’t waste your time early on if you’re not prepared to go through everything I’ve already mentioned and be able to walk away without anything to show for it. However that doesn’t mean you shouldn’t make a game or that it’s impossible to do it either. Where there is a will there’s a way and let me show you how.

  • Map out your game design, features, characters and how the game works. Now create lots of small, easy tasks you can accomplish in order to see your core game mechanics to completion enough that you could play a simple version of your game without any extra bells and whistles. Set yourself up to do as little as you have to but as much as you need to in order to get a completed version of your game.
  • If you lack the skill to do something you have two options. The first is that you resign yourself to taking the time to learn this new skill and the next is that you can outsource the skill to someone who’s already achieved it. You don’t have to be an expert programmer to make a game, just an adequate one. If you’re going to invest time into learning a new skill don’t dwell on it for too long, learn enough that you feel confident you can accomplish the task at hand and then move on. Investing too much time in learning a skill will start you down a path that walks further and further away from working on your game.
  • Sit down and map out all of the expenses you foresee as being necessary to complete your game. Now triple it. If you can’t afford to spend this amount of money into your game then you need to go back to your concept and re-work it until you get a budget that you can work with. If you’re really determined you can look for some outside investors but don’t count on this — ever. Most investors want to see a fully working demo before they’ll even consider opening their pocketbooks and investors will demand more than 50% of whatever profits you make from your game when it’s done.
  • Your time is precious when you have so little of it to devote to your game. Start by mapping out a timeline of your game features/assets and how long you think it will take you to accomplish them. Now double that. Now compare that to how much free time you really have to devote to your game. Will this game take you more than a year to complete? Do you have the dedication to spend more than a year working on a single project? If the answer is no then you need to go back to the drawing board until you’ve come up with a reasonable timeline that you can work with. Keep your game as small as you possibly can by focusing on the core mechanics and leaving out any fluff that you could add at a later date. Now stick to your timeline. If you budget 2 weeks to work on a character and by the end of the second week the character isn’t done don’t dwell on it — either move on to the next item in your list. Don’t adjust your timeline and don’t spend more time that you budgeted on this part of it. Sure, your ultimate goal is to have a working character with great animation but if you can’t ever get a game working with a broken character then who cares if your character’s animation is jerky or unrealistic? Think about the big picture because you can always circle back later.
  • Invest in a good debugger and testing tools. Do whatever you can to automate this process as much as possible because it will give you more time to work on trivial issues when you can quickly address and fix the larger ones. If you run into a bug that makes your game do something funky but it doesn’t prevent the gameplay from continuing table it and work on something else. Try not to get caught up in the more minute issues and focus more on the big picture. You can always circle back and fix bugs later but if you spend all your time bug quashing you’ll end up with a pretty interface or character or scene that doesn’t let interact and play with it. Pick a version of a framework and stick with it, don’t upgrade it unless you absolutely have to. The more you upgrade and update to the latest and greatest the more issues you’ll run into and the more refactoring and scope creep you’ll run into. It’s okay to build a game that isn’t using the latest and greatest version of your frameworks or 3rd party integrations. This will also give you a chance to work with and around the quirks in the version of the framework/software you chose to use instead of having to re-work around these every time you upgrade and re-factor.
  • Get the core mechanics working version of your game finished as early as possible no matter what it looks like or how bad it is. A crappy, ugly, glitching yet working version of your game is better than a pretty, perfectionist, bug free version of your game that isn’t at all playable. Don’t wait until the last minute or the week before it opens to get feedback on what you’re doing. Feedback is a great way to find issues you hadn’t considered and it will give you an idea of what other people think about your game. After all, no one wants to play a game they don’t think is fun. Don’t ignore constructive criticism even if it’s not what you want to hear. That doesn’t mean you have to change or add anything anyone has ever asked you for — it means that you need to take those things into consideration going forward. See past the reviews that focus on your aesthetics — at least initially — because you can always change and fix those later, core mechanics and gameplay are much harder to tackle once you’ve invested lots of time and energy into them.
  • Your game will NEVER be perfect. You will always be tweaking, adding, adjusting and fine tuning it. Instead of wasting your time doing this early on and ending up with something that isn’t a viable product devote that time to your game after you have something you can put out there. Don’t be a perfectionist, no matter how many bugs you quash and features you add or tweak there will always be another bug or problem coming down the pipeline. Try to prioritize the most important ones and tackle those first. Ultimately you want to get something up and working no matter how good or bad it is and then build upon it from there. Rome wasn’t built in a day so don’t expect your game to be. Get a working version up first and foremost and then add on to it and enhance it over time, your customer base won’t hate you for that, rather the opposite — they’ll appreciate your continued efforts to improve upon what you’ve done so far.

PHP Functions: Wiggle, Wobble, Squibble & Swipswap

Leave a comment Standard

Here are a few fun functions for word games, word scrambling and just plain word craziness.

<?php
/***********
* Purpose: move a certain letter to a certain position
* Precondition: word, letter to move, position to move it to
* Postcondition: word has been re-arranged
***********/
function wiggle($word, $letter, $position = 0)
{
 $word = str_replace(" ", "_", $word);

 if ($start = strpos($word, $letter))
 {
 $array = array_merge(str_split(substr($word, 0, $start)), str_split(substr($word, $start+1, strlen($word))));

 for ($i = 0; $i < strlen($word); $i++)
 {
 if ($i != $position)
 $final .= $array[$i];
 else
 $final .= $letter . $array[$i];
 }

 return str_replace("_", " ", $final);
 }
 else
 return; //letter wasn't found
}

/***********
* Purpose: move the letter at a certain position to a new position
* Precondition: word, position to move from, position to move to
* Postcondition: letter has moved from start to end position
***********/
function wobble($word, $start, $position = 0)
{
 $word = str_replace(" ", "_", $word);
 $start -= 1;

 $array = array_merge(str_split(substr($word, 0, $start)), str_split(substr($word, $start+1, strlen($word))));

 for ($i = 0; $i < strlen($word); $i++)
 {
 if ($i != $position)
 $final .= $array[$i];
 else
 $final .= substr($word, $start, 1) . $array[$i];
 }

 return str_replace("_", " ", $final);
}

/***********
* Purpose: move letters from this position and on to the beginning of the word
* Precondition: word, position to start from
* Postcondition: words from start to strlen($word) are not at the beginning of the word
***********/
function jiggle($word, $start)
{
 return substr($word, $start, strlen($word)-$start) . substr($word, 0, $start);
}

/***********
* Purpose: replace all $letters in the word with $replace
* Precondition: word, letter you want replaced, letter to replace it with
* Postcondition: word has been re-arranged
***********/
function swipswap($word, $letter, $replace)
{
 return str_replace($letter, $replace, $word);
}

/***********
* Purpose: every $length move the following $number of letters to the beginning of the word
* Precondition: word, lengh between squiggles, number of letters to move
* Postcondition: word has been re-arranged
***********/
function squiggle($word, $length = 1, $number = 2)
{

 if ($length >= strlen($word))
 $word = strrev($word);
 else
 {

 for ($i = 0; $i < strlen($word); $i++)
 {
 if ($i % $length)
 $word = substr($word, $i, $number) . substr($word, 0, $i) . substr($word, $i+$number, strlen($word));

 } //end for

 }//end else

 return $word;
}

//test it out!
echo wiggle("Hey Johnny 21", "e", 6);
echo "<br/>";
echo wobble("Hey Johnny 21", 3, 6);
echo "<br/>";
echo jiggle("Hey Johnny 21", 3);
echo "<br/>";
echo squiggle("Hey Johnny 21", 2, 2);
echo "<br/>";
echo swipswap("Hey Johnny 21", "n", "d");
?>