Track Other Players and Enemies with the New Player Reticle

Solaroids has a large playing area, and as such it is easy to lose track of your friends when trying to coordinate an attack on the more difficult bosses or for those times when your “friends” have gone rogue and they need a little justified payback.

When bosses first enter the playing area, often it isn’t till they are on screen, or you start seeing a barrage of incoming missiles headed your way, that you realize where they are attacking from. While sometimes the surprise is warranted, with a resulting spike in adrenaline as you attempt to quickly maneuver to evade sudden destruction, sometime it just feels unfair, and a way to anticipate the interaction better would really streamline things.

I’ve had it on my radar, so to speak, for some time to create a basic way to indicate player positions and other threats or items of interest. It is the current #1 requested game feature that comes up during local multiplayer sessions.

So, without further ado I introduce the new Player Reticle feature. Currently, a Player Reticle will show three types of information:

First, small triangles arranged around your ship indicate the direction to distant players using their respective colors. The current orientation of the other players are also show, as well as relative distance indicated by size. As another player gets close enough to come into view, the indicator fades out.

Demonstration of Player Reticle when tracking other local players.

Second, the locations of active enemies are similarly indicated with small red squares.

Finally, enemy missiles that are currently locked onto you are indicated with smaller red triangles, and the reticle ring will change to red to indicate the incoming threat.

Demonstration of Player Reticle for tracking enemies and detecting incoming missiles.

This feature will be ready in time for the Early Access release of Solaroids: Prologue on Steam this spring.


Solaroids: Prologue – Trailer 1

As a solo developer, my ultimate vision for Solaroids far outweighed my production capacity.  Perhaps to a fault, I have a keen aversion to releasing inferior product, and want everything to be as close to perfect as I can. I have a list a mile long of potential things to include in the game, and they run the gamut from additional power-ups, characters, environments, backstory, engine enhancements, and multiplayer possibilities. Some of them are in the unreleased game waiting idle till I can wrap them up to my satisfaction.  I guess you could say that my eyes definitely have been bigger than my belly so to speak. Even the software I used for project management no longer works on modern iOS devices and I have to use my old iPod 4th generation to manage the project!

To focus my efforts on actually completing a version of the project, I decided some time ago to hone in on a much simpler game.  Something that is still in the spirit of Solaroids, and still fun to play for Asteroid fans whether it be alone or with friends.  I’ve given it the name Solaroids: Prologue, and development has been wrapping up over the summer culminating in a undesired mad rush to iron out any kinks on the Xbox 360 version of the build.

The game is currently being reviewed for inclusion in the Xbox Live Indie Games catalog for the Xbox 360.  It may very well be the absolute last game to be published to the service as submissions have been closed.  Not exactly the claim to fame I originally intended, more like a booby prize.  It will still be an achievement for me personally, as I have slowly inched closer towards a releasable title.  Those that keep asking, when is it going to come out, can finally have an answer other than, when it’s done.

So without further ado here is the first and probably only trailer for Solaroids: Prologue:


More Nebulas

A while back (was it really over a year ago) I started collecting some real nebula photos to start adding some more variety to my backgrounds.  The technique I use is to take a real nebula photo and process the photo, sometimes completely by hand, to extract all the clutter/stars so that I can later re-composite them back into my scenes.  I’ve got a technique that works pretty well now for many images.  Specifically, so I don’t have to hand edit as much with the clone tool.  I do all my bitmap work in GIMP, which is a wonderful open source graphics package.

Solaroids 2013-02-16 12-46-05-36

Solaroids 2013-02-16 13-08-46-55

Solaroids 2013-02-16 13-09-11-55

Solaroids 2013-02-16 13-09-56-56

OK, so the last one isn’t a nebula, but same technique.


XNA Quick Tip – XNA SpriteBatch and Garbage

The XNA SpriteBatch class maintains an internal array to hold sprites to be drawn between calls to Begin() and End() if a sort mode is used. This array will grow as necessary, however, the reallocation will inevitably result in extra garbage that will eventually need to be collected.  On the XBox 360 this is quite expensive and so in general it is recommended to limit garbage wherever possible.

If you know the upper bound on the number of sprites to be drawn in a single batch, you can force the draw before the game begins.  This is pretty easy to do, however to make it even easier when you have multiple SpriteBatch instances for different purposes I use the following simple wrapper class in Solaroids that has a new constructor that takes an extra argument for the expected number of active sprites:

/// <summary>
/// Wrapper around a SpriteBatch that pre-allocates internal sorting buffers by drawing a set of sprites thus forcing the buffers to be expanded.
/// </summary>
public class PreallocatingSpriteBatch : SpriteBatch
{
  /// <summary>
  /// Initializes a new instance of the <see cref="PreallocatingSpriteBatch"/> class.
  /// </summary>
  /// <param name="graphicsDevice">The graphics device.</param>
  /// <param name="expectedActiveSprites">The expected number of active sprites.</param>
  public PreallocatingSpriteBatch(GraphicsDevice graphicsDevice, int expectedActiveSprites)
    : base(graphicsDevice)
  {
    ForceBufferAllocation(expectedActiveSprites);
  }

  /// <summary>
  /// Forces the buffer allocation.
  /// </summary>
  /// <param name="expectedActiveSprites">The expected number of active sprites.</param>
  private void ForceBufferAllocation(int expectedActiveSprites)
  {
    Texture2D tex = new Texture2D(GraphicsDevice, 16, 16);

    Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);

    for (int i = 0; i < expectedActiveSprites; i++)
    {
      Draw(tex, Vector2.Zero, Color.White);
    }

    End();
  }
}

Solaroids Teaser 1

It’s getting to the point where I had probably start making some teaser trailers…  So here is the first one made in the simple, but seems to work pretty well, Windows Live Movie Maker.  The music was made on my 4th Gen iTouch using Music Studio. What a sweet little App.  It’s like having Sonar X1 at your fingertips — well not quite, but still pretty cool, and did I say portable!


Audio positioning and a new boss

Wow it’s been awhile.  I haven’t had any free time to work on Solaroids since last June.  With a big work commitment out of the way and a much needed holiday break, I had a chance to work on it for a few days.  The results are a new boss ship, some newly done sound effects, and positional audio complete with Doppler effects on the missiles.  XNA sure makes it easy to put this stuff together, and after this update I’m a lot more confident with the XACT audio software.

Here’s a couple of screen shots and a video showing off the new features.

Solaroids 2010-01-07 22-54-35-33

Mean enough?

Coming in for the kill

Coming in for the kill

Surprise!

Surprise!