
If you are interested in creating an Xbox LIVE Indie Game, use this guide to understand the expectations of the millions of gamers who will be downloading and playing your game, and the actions you can take to make your game look, feel, and play its very best.
This Guide references features in XNA Game Studio 3.0. If you are developing Xbox LIVE Indie Games, you should be using XNA Game Studio 3.0. Download it here.
A few things to remember:
The sections in this guide are ordered by priority, but everything in it is important! Please be sure to read it all and verify that your game take these issues into account.
Gamers Expect Games to "Just Work" on Any TV
Background: Xbox 360 consoles can be plugged into TV sets of all types, with many different resolutions, aspect ratios, and more. Overscan (edges of the TV screen which don’t draw the entire viewport), stretching of your game's visuals, and even crashes can occur if resolutions are not handled properly.
Actions:
For Reference, See:
Xbox 360 Programming Considerations
Displays, Client Bounds, Viewports, and Back Buffers
Gamers Expect a Good Trial Mode
Background: Many gamers want to try before they buy, and the Xbox LIVE Indie Games system allows players to try a timed trial of your game before they buy. When the time runs out, the player is shown a screen where he or she can either purchase the full game, or exit. The only additional restriction in Trial Mode is that Xbox LIVE matchmaking is disabled. During the trial, you have the opportunity to show off the very best your game has to offer.
Actions:
Check whether the game is in Trial Mode by checking if the Guide.IsTrialMode property is true. This will always start out as true, and can change shortly after game startup, or as part of a new player signing in, or in response to an in-game purchase. Be sure to check this once every frame, as opposed to just once at startup.
For Reference, See:
Gamers Expect a Friendly Menu and Control System
Background: Games are essentially a cycle – from the Main Menu (and alternate menus such as Options and Help), gamers expect to enter a game session, play, and return to the main menu when they are done. Any deviation from this should be intuitive and easy to remember.
For menu navigation, gamers expect to use both the stick and the D-Pad, with A being the "accept" or "go forward" button, and B and Back being the "cancel" or "go back" buttons.
Both successful and unsuccessful menu operations should be reported in some way to the user, in both graphical and audio form. If there are errors, they should be provided to the user in simple, prescriptive language that tells the player what to do.
Actions:
Use a Menu system, such as in the Game State Management sample.
For Reference, See:
How To: Detect Whether a Controller Is Disconnected
Gamers Use One Xbox 360 Controller
Background: This may seem obvious, but it is important. Not only do gamers expect to use an Xbox 360 Controller (not a plugged-in keyboard or Chatpad), but in a single-player game, they are going to expect whichever controller they pick up to be the one the game recognizes throughout their gaming session.
Actions:
Be aware that the player may not be using the controller that is assigned to PlayerIndex.One. To detect which controller the player is using, create a splash screen or initial menu which prompts to the player to press A or Start. Detect which PlayerIndex pressed the button to start the game and use that as the active controller. Here is an example of code to do this:
PlayerIndex controllingPlayer = PlayerIndex.One;
for (PlayerIndex index = PlayerIndex.One; index <= PlayerIndex.Four; index++)
{
if (GamePad.GetState(index).Buttons.Start == ButtonState.Pressed)
{
controllingPlayer = index;
break;
}
}
SignedInGamer gamer = Gamer.SignedInGamers[controllingPlayer];
if (gamer != null)
{
playerName = gamer.Gamertag;
}
else
{
Guide.ShowSignIn(1, false);
}
For Reference, See:
Networked Game State Management Sample
Be Kind With Audio
Background: Audio, at first glance, looks like a very easy technology to get right. Drop in sounds, and play them when asked. However, audio systems are as diverse as TVs. Volume, position, and frequency ranges may be different across the different systems.
Be sure you're not playing sounds with wildly different volumes that force players to turn their TV's volume up or down.
In addition, some gamers don't like music in their games and will want to turn it off - or replace it with their own through the Xbox 360 Guide.
Actions:
Be sure to test your game audio on as many audio configurations as possible (stereo, mono, 5.1, and headphones).
Gamer Profiles Matter
Background: Gamers spend a lot of time and effort on their Xbox 360 Profiles. Even if they are not connected to Xbox LIVE, profiles are used in-game to identify which player is which, to store saved games, to identify a gamer in a high score list, and, in some cases, store game defaults such as controller sensitivity. Use these profiles to identify with your gamer, and do things that personalize the experience.
Actions:
The key to profiles is the GamerServicesComponent. Add it to your Game component list. Then you can track profiles in your game.
For Reference, See:
Network Game State Management Sample
Microsoft.Xna.Framework.GamerServices Reference
Represent Your Game
Background: After doing all the hard work to create your game, make sure you take the steps to represent your game in Xbox LIVE Marketplace. Also, you will want to know when people are playing it! Thumbnails, Box Art, Screenshots, Videos, and Rich Presence are key components to making sure your game shows well on Xbox 360.
Actions:
Make Loading and Saving Seamless
Background: From the time the game starts to the time the gamer quits the game, there should be good interaction between players and the game - or at the very least, there should be something for gamers to look at.
Most games do a great deal of loading at start-up, so be sure to show something interesting during that time. When saving games, do not pause or freeze the gameplay - keep the action moving and the disk operations in the background.
Players might use Memory Units (MUs) and expect to save their game there. You must use the Storage APIs asynchronously to avoid locking up in the case that your users are using a Memory Unit. Be sure to test your game both with and without an MU connected.
Actions:
Use an animated loading screen when loading content in your game. This keeps the player from thinking the game has crashed or locked up.
For Reference, See:
How To: Get a StorageDevice Asynchronously
BeginShowStorageDeviceSelector Reference
Network Game State Management Sample(for a multithreaded loading screen demo)
Xbox LIVE Multiplayer: Make it Full Featured
Background: Multiplayer is a valuable feature to have in your game. It increases replay value and connects gamers all over the world. However, it can be frustrating for customers if the experience is not optimized and made user-friendly. If you are building multiplayer into your game, be sure to go the extra mile and provide the features that make Xbox LIVE gameplay great.
Actions:
if (Gamer.SignedInGamers[activeController].Privileges.AllowOnlineSessions) ...
Gamer.SignedInGamers[activeController].Presence.PresenceMode = GamerPresenceMode.AtMenu;
For Reference, See:
Network Architecture: Peer to Peer
Network Architecture: Client/Server
Shawn Hargreaves' Gamefest 2008: Network Game Optimization
Gamers May Have Special Controllers
Background: Many different types of controllers are supported by the XNA Framework. These controllers, which range from flight sticks to dance pads, all return values inside the GamePadState class. Gamers who have these controllers expect them to work in the types of games for which they are traditionally used.
Regardless of the special types used in your game, you should always support the default Xbox 360 Gamepad, and never require special controllers to be able to play.
Actions:
For Reference, See:
var gDomain='m.webtrends.com'; var gDcsId='dcschd84w10000w4lw9hcqmsz_8n3x'; var gTrackEvents=1; var gFpc='WT_FPC'; /*<\/scr"+"ipt>");} /*]]>*/