Getting DPad Input from Thumbsticks in XNA – The Right Way

If you want to simulate 4-way DPad movement with the left or right analog thumbstick in XNA, my advice is to never use Buttons.LeftThumbStickUp, etc. This is because the default behavior doesn’t take into account the dead zone for the stick, which varies from controller to controller.  (The dead zone is the location near the center of the stick position, where it won’t send any movement value to the Xbox.)

You might test on a controller with a large dead zone and have no problem, then someone else will play your game with a very small dead zone, and they will find the control “sticking” in that direction.  I’ve had some controllers where the dead zone was so precise, I could have my thumb off the joystick and it would still be transmitting a tiny movement value.

I suggest adding a large dead zone, to make sure you only get simulated DPad input for large, deliberate movements of the analog stick.  Here’s some code that works for me, adjust as necessary to fit your control scheme:

static Buttons GetThumbstickDirection(PlayerIndex player, bool leftStick)
{
    float thumbstickTolerance = 0.35f;

    GamePadState gs = GamePad.GetState(player);
    Vector2 direction = (leftStick) ? 
        gs.ThumbSticks.Left : gs.ThumbSticks.Right;

    float absX = Math.Abs(direction.X);
    float absY = Math.Abs(direction.Y);

    if (absX > absY && absX > thumbstickTolerance)
    {
        return (direction.X > 0) ? Buttons.DPadRight : Buttons.DPadLeft;
    }
    else if (absX < absY && absY > thumbstickTolerance)
    {
        return (direction.Y > 0) ? Buttons.DPadUp : Buttons.DPadDown;
    }
    return (Buttons)0;
}

Magic Seal Pelts Follow-up: First Week After Price Drop

One week ago, on December 13, I dropped the prices of my first two games, Soulcaster and Soulcaster II, to coincide with an article I wrote for IndieGamerChick (later picked up by Gamasutra).  The short story is that Escape Goat wasn’t selling as well as I hoped, and my hypothesis was that it was because it was priced at 240 MSP instead of 80 MSP.  The sales figures are finally in, so I can report what’s happened so far.

Bottom line: the price drop resulted in a staggering increase in revenue. Let’s take a closer look, starting with how things were selling in November to establish a baseline.

November 1-30 2011 Sales (30 days):

Game Trials Sales Conversion Daily Net
Soulcaster 115 39 34% $2.73
Soulcaster II 76 18 23% $1.26
Escape Goat* 2686 515 19% $37.29

*Escape Goat has much stronger numbers because November was its release month. Take a look at how the daily revenue has tapered off in its second month:

As you can see, the revenue from the Soulcaster games was barely covering my rent at the coffee shop.  So let’s see what happened in the week since the price drop:

December 13-19 2011 Sales (7 days):

Game Trials Sales Conversion Daily Net Net Change
Soulcaster 63 142 225% $14.20 +520%
Soulcaster II 80 86 107% $8.60 +680%
Escape Goat 117 52 44% $15.60 -237%

The numbers speak for themselves.  I also brought in some charts to give this post a bit more visual impact:

Escape Goat:

Soulcaster:

Soulcaster II:

The most shocking stat for me is the conversion rate.  For both games it jumped above 100%.  This means more people are buying the full version than are trying the demo first.  One explanation for this is that fans of one game buy the second one sight-unseen, perhaps through the new “related games” links.  The games are similar enough that if you like one, you’ll probably like the other.  But outside of those purchases, I think it really speaks to the power of the 80 MSP in terms of impulse buying.  Customers are grabbing the full version without trying it out first, because, “hey, it’s only 80 MSP.”

Edit: As pointed out to me by Ben Kane, Alex Macfarlane Smith, and Paul Thomas, the “over 100%” conversion might be from customers who had previously downloaded the trial, rather than trying the game on the purchase date.  Thanks guys for noting this.

I know, it’s early to call.  Just one week of data, and who knows, it could all collapse over the next couple weeks.  Maybe a chunk of these sales are the result of the publicity my price drop got.  To know for sure, we’ll just have to wait.

To summarize:

  1. After dropping the price, sales went up 12-fold, driving daily revenue up five-fold.
  2. I’m making nearly as much off Soulcaster, a game that’s been out over 20 months, as I am off Escape Goat, which is only in its second month and should be in its prime for sales.
  3. The dashboard update seemed to have little effect, since it went into effect a few days before the price drop.  And notice how it did not impact the sales or downloads of Escape Goat.

I’ll post another update after some more figures come in.  But so far, 80 MSP seems like the right price for these games.  It’s great to be making money with them again.  I can’t wait until February when I can drop the price on Escape Goat as well.

How To Contact the Press About Your Indie Game

My favorite talk from IndieCade last week was Sue Bohle’s PR Clinic.  I could hardly take notes fast enough.  When I mentioned this talk on Twitter, I got some interest from people who couldn’t attend and wanted to know the basics.  So here’s my distillation of Sue’s PR principles.

This is all based on the notes I took, some of which became illegible scrawls, with missing pieces filled in from memory.  My apologies to Sue if I end up misrepresenting anything she said.  I think this is pretty close though.

How to Get The Press Interested

  1. Describe what is unique and distinctive about your game. What stands out about its production, team, concept, to create an interesting story?
  2. A fun event such as a contest related to your game could generate interest
  3. Always respond to emails from editors promptly, and assume their time is very precious
  4. Don’t use attachments!  Put the press release in the body of the email, and use links to your screenshots.  (Would you open an email with an attachment from someone you don’t know?)
  5. Gather 12 great screenshots.  Pick 3 sites you want to get coverage on more than the others, and send them two exclusive screenshots apiece.  Send the others to the remaining sites as non-exclusive.
  6. Two movies are better than one… but one is essential.  Make a trailer.  Need an idea for a second movie?  Behind the scenes, developer interview, stuff like that.
  7. Look at the recipient’s website before you blindly send a PR… would they even be interested?

Elements of a Press Release

  1. Header (and email subject) should be a grabber.  This may be your only chance to get the writer interested in your game.
  2. First paragraph: Location & Date (like a news story), then answer who-what-when-where about your game in 35-50 words.  Imagine you have ten seconds to describe your game.
  3. Second paragraph: What amazing, interesting and unique features does your game have? Use a bullet point list. Not too many items, maybe 4-8.
  4. Third paragraph: quote from the developer (you) “in quotes.”  This is the personal touch.  Interview yourself.
  5. End with a call to action. Do you want them to check out your review copy? Set up an interview? Figure out what the whole point of the email was.
  6. Write the whole thing like a journalist would. A well-crafted press release could be copy-pasted verbatim and look like a news story.
I found this talk extremely informative, since I definitely violated many of these principles in the past.  I hope you find it useful as well.
Have anything to add?  Please comment!