Просмотр исходного кода

Added CatapaultNetWars for Linux and Windows
Fixed the Primitives sample on android. It now compiles but does not work.
Change netrumble to have a compile flag for the BloomComponent

Dean Ellis 13 лет назад
Родитель
Сommit
ea867529ba
49 измененных файлов с 4999 добавлено и 434 удалено
  1. 1 0
      Android/CatapultWarsNet/Activity1.cs
  2. 1 1
      Android/CatapultWarsNet/Resources/Resource.designer.cs
  3. 1 1
      Android/ChaseAndEvade/Resources/Resource.Designer.cs
  4. 3 1
      Android/Draw2D/Activity1.cs
  5. 4 1
      Android/Draw2D/MonoGame.Samples.Draw2D.Android.csproj
  6. 1 1
      Android/Draw2D/Resources/Resource.Designer.cs
  7. 1 1
      Android/MonoGame.Samples.AdMob/Resources/Resource.designer.cs
  8. 1 1
      Android/MonoGame.Samples.CatapultWars/Resources/Resource.designer.cs
  9. 1 1
      Android/MonoGame.Samples.Input/Resources/Resource.designer.cs
  10. 3 1
      Android/Orientation/Activity1.cs
  11. 3 3
      Android/Orientation/OrientationSample.cs
  12. 1 1
      Android/Orientation/Resources/Resource.designer.cs
  13. 1 1
      Android/Peer2Peer/Resources/Resource.Designer.cs
  14. 11 4
      Android/Primitives/Activity1.cs
  15. 14 2
      Android/Primitives/MonoGame.Samples.Primitives.Android.csproj
  16. 248 0
      Android/Primitives/PrimitiveBatch.cs
  17. 307 0
      Android/Primitives/PrimitivesSampleGame.cs
  18. 1 1
      Android/Primitives/Resources/Resource.designer.cs
  19. 1 1
      Android/RenderTarget2D/Resources/Resource.designer.cs
  20. 1 1
      Android/Sound/Resources/Resource.Designer.cs
  21. 1 1
      Android/VideoPlayer/Resources/Resource.designer.cs
  22. 304 0
      Linux/CatapaultNetWars/CatapaultNetWars.csproj
  23. 16 0
      Linux/CatapaultNetWars/Program.cs
  24. 36 0
      Linux/CatapaultNetWars/Properties/AssemblyInfo.cs
  25. 514 0
      Linux/CatapaultNetWars/Properties/Resources.Designer.cs
  26. 270 0
      Linux/CatapaultNetWars/Properties/Resources.resx
  27. 594 0
      Linux/CatapaultNetWars/Resources.Designer.cs
  28. BIN
      Linux/CatapaultNetWars/Resources.resources
  29. 250 0
      Linux/CatapaultNetWars/Resources.resx
  30. 5 42
      Linux/NetRumble/MonoGame.Samples.NetRumble.Linux.csproj
  31. 2 1
      Linux/NetRumble/Program.cs
  32. 4 1
      MacOS/CatapultNetWars/CatapultGame.cs
  33. 1 1
      MacOS/CatapultNetWars/Screens/GameplayScreen.cs
  34. 14 9
      MacOS/CatapultNetWars/Screens/InstructionsScreen.cs
  35. 4 0
      MacOS/NetRumble/NetRumbleGame.cs
  36. 2 0
      MacOS/NetRumble/Screens/GameplayScreen.cs
  37. 1 0
      MonoGame.Samples.Android.sln
  38. 340 324
      MonoGame.Samples.Linux.sln
  39. 48 32
      MonoGame.Samples.Windows.sln
  40. 304 0
      Windows/CatapaultNetWars/CatapaultNetWars.csproj
  41. 16 0
      Windows/CatapaultNetWars/Program.cs
  42. 36 0
      Windows/CatapaultNetWars/Properties/AssemblyInfo.cs
  43. 514 0
      Windows/CatapaultNetWars/Properties/Resources.Designer.cs
  44. 270 0
      Windows/CatapaultNetWars/Properties/Resources.resx
  45. 594 0
      Windows/CatapaultNetWars/Resources.Designer.cs
  46. BIN
      Windows/CatapaultNetWars/Resources.resources
  47. 250 0
      Windows/CatapaultNetWars/Resources.resx
  48. BIN
      iOS/Draw2D/Content/monogameicon48x48.png
  49. 4 0
      iOS/Draw2D/Game1.cs

+ 1 - 0
Android/CatapultWarsNet/Activity1.cs

@@ -16,6 +16,7 @@ namespace CatapultWarsNet
 	           , MainLauncher = true
 	           , MainLauncher = true
 	           ,Icon = "@drawable/icon"
 	           ,Icon = "@drawable/icon"
 	           , Theme = "@style/Theme.Splash"
 	           , Theme = "@style/Theme.Splash"
+	           ,ScreenOrientation=ScreenOrientation.Landscape
 	           ,ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden)]
 	           ,ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden)]
 	public class Activity1 : AndroidGameActivity
 	public class Activity1 : AndroidGameActivity
 	{
 	{

+ 1 - 1
Android/CatapultWarsNet/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.239
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/ChaseAndEvade/Resources/Resource.Designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 3 - 1
Android/Draw2D/Activity1.cs

@@ -5,7 +5,9 @@ using Android.Content.PM;
 namespace Microsoft.Xna.Samples.Draw2D
 namespace Microsoft.Xna.Samples.Draw2D
 {
 {
     [Activity(Label = "Draw2D", MainLauncher = true, Icon = "@drawable/icon"
     [Activity(Label = "Draw2D", MainLauncher = true, Icon = "@drawable/icon"
-	          , Theme = "@style/Theme.Splash",ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden)]	
+	          , Theme = "@style/Theme.Splash"
+	          ,ScreenOrientation=ScreenOrientation.Portrait
+	          ,ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden)]	
     public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity
     public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity
     {
     {
         protected override void OnCreate(Bundle bundle)
         protected override void OnCreate(Bundle bundle)

+ 4 - 1
Android/Draw2D/MonoGame.Samples.Draw2D.Android.csproj

@@ -72,6 +72,9 @@
     <AndroidAsset Include="..\..\iOS\Draw2D\Content\spriteFont1.xnb">
     <AndroidAsset Include="..\..\iOS\Draw2D\Content\spriteFont1.xnb">
       <Link>Assets\Content\spriteFont1.xnb</Link>
       <Link>Assets\Content\spriteFont1.xnb</Link>
     </AndroidAsset>
     </AndroidAsset>
+    <AndroidAsset Include="..\..\iOS\Draw2D\Content\monogameicon48x48.png">
+      <Link>Assets\Content\monogameicon48x48.png</Link>
+    </AndroidAsset>
   </ItemGroup>
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
   <Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
@@ -90,4 +93,4 @@
   <ItemGroup>
   <ItemGroup>
     <Folder Include="Resources\Layout\" />
     <Folder Include="Resources\Layout\" />
   </ItemGroup>
   </ItemGroup>
-</Project>
+</Project>

+ 1 - 1
Android/Draw2D/Resources/Resource.Designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/MonoGame.Samples.AdMob/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.239
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/MonoGame.Samples.CatapultWars/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.239
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/MonoGame.Samples.Input/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.239
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 3 - 1
Android/Orientation/Activity1.cs

@@ -14,7 +14,9 @@ namespace Orientation
 	[Activity (Label = "Orientation", MainLauncher = true
 	[Activity (Label = "Orientation", MainLauncher = true
 	           ,Icon = "@drawable/icon"
 	           ,Icon = "@drawable/icon"
 	           , Theme = "@style/Theme.Splash"
 	           , Theme = "@style/Theme.Splash"
-	           ,ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden)]
+	           ,ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden
+	           ,ScreenOrientation=ScreenOrientation.Landscape
+	           )]
 	public class Activity1 : AndroidGameActivity
 	public class Activity1 : AndroidGameActivity
 	{
 	{
 		protected override void OnCreate (Bundle bundle)
 		protected override void OnCreate (Bundle bundle)

+ 3 - 3
Android/Orientation/OrientationSample.cs

@@ -69,8 +69,8 @@ namespace OrientationSample
             // orientations only, but resolution set to half. This makes the hardware scalar work and 
             // orientations only, but resolution set to half. This makes the hardware scalar work and 
             // automatically scales the presentation to the device's physical resolution
             // automatically scales the presentation to the device's physical resolution
             // (Uncomment the following two lines):
             // (Uncomment the following two lines):
-            // graphics.PreferredBackBufferWidth = 400;
-            // graphics.PreferredBackBufferHeight = 240;
+            //graphics.PreferredBackBufferWidth = 400;
+            //graphics.PreferredBackBufferHeight = 240;
 
 
             // Scenario #4: 
             // Scenario #4: 
             // Game supports all possible orientations and enablyes dynamically locking/unlocking the
             // Game supports all possible orientations and enablyes dynamically locking/unlocking the
@@ -79,7 +79,7 @@ namespace OrientationSample
              graphics.SupportedOrientations = DisplayOrientation.Portrait |
              graphics.SupportedOrientations = DisplayOrientation.Portrait |
                                               DisplayOrientation.LandscapeLeft |
                                               DisplayOrientation.LandscapeLeft |
                                               DisplayOrientation.LandscapeRight;
                                               DisplayOrientation.LandscapeRight;
-            enableOrientationLocking = true;
+            //enableOrientationLocking = true;
 
 
             // Switch to full screen mode
             // Switch to full screen mode
             graphics.IsFullScreen = true;
             graphics.IsFullScreen = true;

+ 1 - 1
Android/Orientation/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.239
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/Peer2Peer/Resources/Resource.Designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 11 - 4
Android/Primitives/Activity1.cs

@@ -7,19 +7,26 @@ using Android.Runtime;
 using Android.Views;
 using Android.Views;
 using Android.Widget;
 using Android.Widget;
 using Android.OS;
 using Android.OS;
+using Microsoft.Xna.Framework;
+using PrimitivesSample;
 
 
 namespace MonoGame.Samples.Primitives.Android
 namespace MonoGame.Samples.Primitives.Android
 {
 {
-	[Activity (Label = "MonoGame.Samples.Primitives.Android", MainLauncher = true,ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden)]
-	public class Activity1 : Activity
+	[Activity (Label = "MonoGame.Samples.Primitives.Android", 
+	           MainLauncher = true,
+	           ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.Keyboard|ConfigChanges.KeyboardHidden
+	           ,ScreenOrientation=ScreenOrientation.Landscape)]
+	public class Activity1 : AndroidGameActivity
 	{
 	{
 		protected override void OnCreate (Bundle bundle)
 		protected override void OnCreate (Bundle bundle)
 		{
 		{
 			base.OnCreate (bundle);
 			base.OnCreate (bundle);
 
 
 			// Create our OpenGL view, and display it
 			// Create our OpenGL view, and display it
-			GLView1 view = new GLView1 (this);
-			SetContentView (view);
+			PrimitivesSampleGame.Activity = this;
+			var g = new PrimitivesSampleGame();
+			SetContentView (g.Window);
+			g.Run();
 		}
 		}
 	}
 	}
 }
 }

+ 14 - 2
Android/Primitives/MonoGame.Samples.Primitives.Android.csproj

@@ -22,7 +22,7 @@
     <DebugType>full</DebugType>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <Optimize>false</Optimize>
     <OutputPath>bin\Debug</OutputPath>
     <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG;</DefineConstants>
+    <DefineConstants>DEBUG;ANDROID</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <ConsolePause>false</ConsolePause>
@@ -37,6 +37,7 @@
     <ConsolePause>false</ConsolePause>
     <ConsolePause>false</ConsolePause>
     <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
     <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
     <AndroidLinkMode>SdkOnly</AndroidLinkMode>
     <AndroidLinkMode>SdkOnly</AndroidLinkMode>
+    <DefineConstants>ANDROID</DefineConstants>
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System" />
@@ -47,9 +48,10 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Compile Include="Activity1.cs" />
     <Compile Include="Activity1.cs" />
-    <Compile Include="GLView1.cs" />
     <Compile Include="Resources\Resource.designer.cs" />
     <Compile Include="Resources\Resource.designer.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="PrimitiveBatch.cs" />
+    <Compile Include="PrimitivesSampleGame.cs" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <None Include="Resources\AboutResources.txt" />
     <None Include="Resources\AboutResources.txt" />
@@ -62,4 +64,14 @@
     <AndroidResource Include="Resources\drawable\Icon.png" />
     <AndroidResource Include="Resources\drawable\Icon.png" />
   </ItemGroup>
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
   <Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\MonoGame.Framework\MonoGame.Framework.Android.csproj">
+      <Project>{BA9476CF-99BA-4D03-92F2-73D2C5E58883}</Project>
+      <Name>MonoGame.Framework.Android</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\ThirdParty\Lidgren.Network\Lidgren.Network.Android.csproj">
+      <Project>{565129E0-4EE5-4F6F-B403-C3484C9740BE}</Project>
+      <Name>Lidgren.Network.Android</Name>
+    </ProjectReference>
+  </ItemGroup>
 </Project>
 </Project>

+ 248 - 0
Android/Primitives/PrimitiveBatch.cs

@@ -0,0 +1,248 @@
+#region File Description
+//-----------------------------------------------------------------------------
+// PrimitiveBatch.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+#endregion
+
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Input;
+#endregion
+
+namespace PrimitivesSample
+{
+
+    // PrimitiveBatch is a class that handles efficient rendering automatically for its
+    // users, in a similar way to SpriteBatch. PrimitiveBatch can render lines, points,
+    // and triangles to the screen. In this sample, it is used to draw a spacewars
+    // retro scene.
+    public class PrimitiveBatch : IDisposable
+    {
+        #region Constants and Fields
+
+        // this constant controls how large the vertices buffer is. Larger buffers will
+        // require flushing less often, which can increase performance. However, having
+        // buffer that is unnecessarily large will waste memory.
+        const int DefaultBufferSize = 500;
+
+        // a block of vertices that calling AddVertex will fill. Flush will draw using
+        // this array, and will determine how many primitives to draw from
+        // positionInBuffer.
+        VertexPositionColor[] vertices = new VertexPositionColor[DefaultBufferSize];
+
+        // keeps track of how many vertices have been added. this value increases until
+        // we run out of space in the buffer, at which time Flush is automatically
+        // called.
+        int positionInBuffer = 0;
+
+        // a basic effect, which contains the shaders that we will use to draw our
+        // primitives.
+        BasicEffect basicEffect;
+
+        // the device that we will issue draw calls to.
+        GraphicsDevice device;
+
+        // this value is set by Begin, and is the type of primitives that we are
+        // drawing.
+        PrimitiveType primitiveType;
+
+        // how many verts does each of these primitives take up? points are 1,
+        // lines are 2, and triangles are 3.
+        int numVertsPerPrimitive;
+
+        // hasBegun is flipped to true once Begin is called, and is used to make
+        // sure users don't call End before Begin is called.
+        bool hasBegun = false;
+
+        bool isDisposed = false;
+
+        #endregion
+
+        // the constructor creates a new PrimitiveBatch and sets up all of the internals
+        // that PrimitiveBatch will need.
+        public PrimitiveBatch(GraphicsDevice graphicsDevice)
+        {
+            if (graphicsDevice == null)
+            {
+                throw new ArgumentNullException("graphicsDevice");
+            }
+            device = graphicsDevice;
+
+            // set up a new basic effect, and enable vertex colors.
+            basicEffect = new BasicEffect(graphicsDevice);
+            basicEffect.VertexColorEnabled = true;
+
+            // projection uses CreateOrthographicOffCenter to create 2d projection
+            // matrix with 0,0 in the upper left.
+            basicEffect.Projection = Matrix.CreateOrthographicOffCenter
+                (0, graphicsDevice.Viewport.Width,
+                graphicsDevice.Viewport.Height, 0,
+                0, 1);
+            this.basicEffect.World = Matrix.Identity;
+            this.basicEffect.View = Matrix.CreateLookAt(Vector3.Zero, Vector3.Forward,
+                Vector3.Up);
+        }
+
+        public void Dispose()
+        {
+            this.Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposing && !isDisposed)
+            {
+                if (basicEffect != null)
+                    basicEffect.Dispose();
+
+                isDisposed = true;
+            }
+        }
+
+        // Begin is called to tell the PrimitiveBatch what kind of primitives will be
+        // drawn, and to prepare the graphics card to render those primitives.
+        public void Begin(PrimitiveType primitiveType)
+        {
+            if (hasBegun)
+            {
+                throw new InvalidOperationException
+                    ("End must be called before Begin can be called again.");
+            }
+
+            // these three types reuse vertices, so we can't flush properly without more
+            // complex logic. Since that's a bit too complicated for this sample, we'll
+            // simply disallow them.
+            if (primitiveType == PrimitiveType.LineStrip ||
+                primitiveType == PrimitiveType.TriangleStrip)
+            {
+                throw new NotSupportedException
+                    ("The specified primitiveType is not supported by PrimitiveBatch.");
+            }
+
+            this.primitiveType = primitiveType;
+
+            // how many verts will each of these primitives require?
+            this.numVertsPerPrimitive = NumVertsPerPrimitive(primitiveType);
+
+            //tell our basic effect to begin.
+            basicEffect.CurrentTechnique.Passes[0].Apply();
+
+            // flip the error checking boolean. It's now ok to call AddVertex, Flush,
+            // and End.
+            hasBegun = true;
+        }
+
+        // AddVertex is called to add another vertex to be rendered. To draw a point,
+        // AddVertex must be called once. for lines, twice, and for triangles 3 times.
+        // this function can only be called once begin has been called.
+        // if there is not enough room in the vertices buffer, Flush is called
+        // automatically.
+        public void AddVertex(Vector2 vertex, Color color)
+        {
+            if (!hasBegun)
+            {
+                throw new InvalidOperationException
+                    ("Begin must be called before AddVertex can be called.");
+            }
+
+            // are we starting a new primitive? if so, and there will not be enough room
+            // for a whole primitive, flush.
+            bool newPrimitive = ((positionInBuffer % numVertsPerPrimitive) == 0);
+
+            if (newPrimitive &&
+                (positionInBuffer + numVertsPerPrimitive) >= vertices.Length)
+            {
+                Flush();
+            }
+
+            // once we know there's enough room, set the vertex in the buffer,
+            // and increase position.
+            vertices[positionInBuffer].Position = new Vector3(vertex, 0);
+            vertices[positionInBuffer].Color = color;
+
+            positionInBuffer++;
+        }
+
+        // End is called once all the primitives have been drawn using AddVertex.
+        // it will call Flush to actually submit the draw call to the graphics card, and
+        // then tell the basic effect to end.
+        public void End()
+        {
+            if (!hasBegun)
+            {
+                throw new InvalidOperationException
+                    ("Begin must be called before End can be called.");
+            }
+
+            // Draw whatever the user wanted us to draw
+            Flush();
+
+            hasBegun = false;
+        }
+
+        // Flush is called to issue the draw call to the graphics card. Once the draw
+        // call is made, positionInBuffer is reset, so that AddVertex can start over
+        // at the beginning. End will call this to draw the primitives that the user
+        // requested, and AddVertex will call this if there is not enough room in the
+        // buffer.
+        private void Flush()
+        {
+            if (!hasBegun)
+            {
+                throw new InvalidOperationException
+                    ("Begin must be called before Flush can be called.");
+            }
+
+            // no work to do
+            if (positionInBuffer == 0)
+            {
+                return;
+            }
+
+            // how many primitives will we draw?
+            int primitiveCount = positionInBuffer / numVertsPerPrimitive;
+
+            // submit the draw call to the graphics card
+            device.DrawUserPrimitives<VertexPositionColor>(primitiveType, vertices, 0,
+                primitiveCount);
+
+            // now that we've drawn, it's ok to reset positionInBuffer back to zero,
+            // and write over any vertices that may have been set previously.
+            positionInBuffer = 0;
+        }
+
+        #region Helper functions
+
+        // NumVertsPerPrimitive is a boring helper function that tells how many vertices
+        // it will take to draw each kind of primitive.
+        static private int NumVertsPerPrimitive(PrimitiveType primitive)
+        {
+            int numVertsPerPrimitive;
+            switch (primitive)
+            {
+                case PrimitiveType.LineList:
+                    numVertsPerPrimitive = 2;
+                    break;
+                case PrimitiveType.TriangleList:
+                    numVertsPerPrimitive = 3;
+                    break;
+                default:
+                    throw new InvalidOperationException("primitive is not valid");
+            }
+            return numVertsPerPrimitive;
+        }
+
+        #endregion
+
+
+    }
+}

+ 307 - 0
Android/Primitives/PrimitivesSampleGame.cs

@@ -0,0 +1,307 @@
+#region File Description
+//-----------------------------------------------------------------------------
+// PrimitivesSampleGame.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+#endregion
+
+#region Using Statements
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Input;
+#endregion
+
+namespace PrimitivesSample
+{
+    // This sample illustrates the use of PrimitiveBatch to draw lines and points
+    // on the screen. Lines and points are used to recreate the Spacewars starter kit's
+    // retro mode.
+    public class PrimitivesSampleGame : Microsoft.Xna.Framework.Game
+    {
+        #region Constants
+
+        // this constant controls the number of stars that will be created when the game
+        // starts up.
+        const int NumStars = 500;
+
+        // what percentage of those stars will be "big" stars? the default is 20%.
+        const float PercentBigStars = .2f;
+
+        // how bright will stars be?  somewhere between these two values.
+        const byte MinimumStarBrightness = 56;
+        const byte MaximumStarBrightness = 255;
+
+        // how big is the ship?
+        const float ShipSizeX = 10f;
+        const float ShipSizeY = 15f;
+        const float ShipCutoutSize = 5f;
+
+        // the radius of the sun.
+        const float SunSize = 30f;
+
+        #endregion
+
+        #region Fields
+
+        GraphicsDeviceManager graphics;
+
+        // PrimitiveBatch is the new class introduced in this sample. We'll use it to
+        // draw everything in this sample, including the stars, ships, and sun.
+        PrimitiveBatch primitiveBatch;
+
+        // these two lists, stars, and starColors, keep track of the positions and
+        // colors of all the stars that we will randomly generate during the initialize
+        // phase.
+        List<Vector2> stars = new List<Vector2>();
+        List<Color> starColors = new List<Color>();
+
+        #endregion
+
+        #region Initialization
+        public PrimitivesSampleGame()
+        {
+            graphics = new GraphicsDeviceManager(this);
+            Content.RootDirectory = "Content";
+
+#if WINDOWS_PHONE || IPHONE || ANDROID
+            TargetElapsedTime = TimeSpan.FromTicks(333333);
+
+            graphics.PreferredBackBufferWidth = 480;
+            graphics.PreferredBackBufferHeight = 800;
+            graphics.IsFullScreen = true;
+#else
+            // set the backbuffer size to something that will work well on both xbox
+            // and windows.
+            graphics.PreferredBackBufferWidth = 853;
+            graphics.PreferredBackBufferHeight = 480;
+#endif
+        }
+
+        protected override void Initialize()
+        {
+            base.Initialize();
+
+            // CreateStars needs to know how big the GraphicsDevice's viewport is, so 
+            // once base.Initialize has been called, we can call this.
+            CreateStars();
+        }
+
+        private void CreateStars()
+        {
+            // since every star will be put in a random place and have a random color, 
+            // a random number generator might come in handy.
+            Random random = new Random();
+
+            // where can we put the stars?
+            int screenWidth = graphics.GraphicsDevice.Viewport.Width;
+            int screenHeight = graphics.GraphicsDevice.Viewport.Height;
+
+
+            for (int i = 0; i < NumStars; i++)
+            {
+                // pick a random spot...
+                Vector2 where = new Vector2(
+                    random.Next(0, screenWidth),
+                    random.Next(0, screenHeight));
+
+                // ...and a random color. it's safe to cast random.Next to a byte,
+                // because MinimumStarBrightness and MaximumStarBrightness are both
+                // bytes.
+                byte greyValue =
+                    (byte)random.Next(MinimumStarBrightness, MaximumStarBrightness);
+                Color color = new Color(greyValue, greyValue, greyValue);
+
+                // if the random number was greater than the percentage chance for a big
+                // star, this is just a normal star.
+                if ((float)random.NextDouble() > PercentBigStars)
+                {
+                    starColors.Add(color);
+                    stars.Add(where);
+                }
+                else
+                {
+                    // if this star is randomly selected to be a "big" star, we actually
+                    // add four points and colors to stars and starColors. big stars are
+                    // a block of four points, instead of just one point.
+                    for (int j = 0; j < 4; j++)
+                    {
+                        starColors.Add(color);
+                    }
+
+                    stars.Add(where);
+                    stars.Add(where + Vector2.UnitX);
+                    stars.Add(where + Vector2.UnitY);
+                    stars.Add(where + Vector2.One);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Load your graphics content.
+        /// </summary>
+        protected override void LoadContent()
+        {
+            primitiveBatch = new PrimitiveBatch(graphics.GraphicsDevice);
+        }
+
+        #endregion
+
+        #region Update and Draw
+
+        /// <summary>
+        /// Allows the game to run logic such as updating the world,
+        /// checking for collisions, gathering input and playing audio.
+        /// </summary>
+        /// <param name="gameTime">Provides a snapshot of timing values.</param>
+        protected override void Update(GameTime gameTime)
+        {
+            // Allows the game to exit
+            if ((GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
+                || Keyboard.GetState().IsKeyDown(Keys.Escape))
+                this.Exit();
+
+
+            base.Update(gameTime);
+        }
+
+        /// <summary>
+        /// This is called when the game should draw itself.
+        /// </summary>
+        /// <param name="gameTime">Provides a snapshot of timing values.</param>
+        protected override void Draw(GameTime gameTime)
+        {
+            graphics.GraphicsDevice.Clear(Color.Black);
+
+            // how big is the screen? we'll use that information to center the sun
+            // and place the ships.
+            int screenWidth = graphics.GraphicsDevice.Viewport.Width;
+            int screenHeight = graphics.GraphicsDevice.Viewport.Height;
+
+            // draw the sun in the center
+            DrawSun(new Vector2(screenWidth / 2, screenHeight / 2));
+
+            // draw the left hand ship
+            DrawShip(new Vector2(100, screenHeight / 2));
+
+            // and the right hand ship
+            DrawShip(new Vector2(screenWidth - 100, screenHeight / 2));
+
+            DrawStars();
+
+            base.Draw(gameTime);
+        }
+
+        // DrawStars is called to do exactly what its name says: draw the stars.
+        private void DrawStars()
+        {
+            // stars are drawn as a list of points, so begin the primitiveBatch.
+            primitiveBatch.Begin(PrimitiveType.TriangleList);
+
+            // loop through all of the stars, and tell primitive batch to draw them.
+            // each star is a very small triangle.
+            for (int i = 0; i < stars.Count; i++)
+            {
+                primitiveBatch.AddVertex(stars[i], starColors[i]);
+                primitiveBatch.AddVertex(stars[i] + Vector2.UnitX, starColors[i]);
+                primitiveBatch.AddVertex(stars[i] + Vector2.UnitY, starColors[i]);
+            }
+
+            // and then tell it that we're done.
+            primitiveBatch.End();
+        }
+
+        // called to draw the spacewars ship at a point on the screen.
+        private void DrawShip(Vector2 where)
+        {
+            // tell the primitive batch to start drawing lines
+            primitiveBatch.Begin(PrimitiveType.LineList);
+
+            // from the nose, down the left hand side
+            primitiveBatch.AddVertex(
+                where + new Vector2(0f, -ShipSizeY), Color.White);
+            primitiveBatch.AddVertex(
+                where + new Vector2(-ShipSizeX, ShipSizeY), Color.White);
+
+            // to the right and up, into the cutout
+            primitiveBatch.AddVertex(
+                where + new Vector2(-ShipSizeX, ShipSizeY), Color.White);
+            primitiveBatch.AddVertex(
+                where + new Vector2(0f, ShipSizeY - ShipCutoutSize), Color.White);
+
+            // to the right and down, out of the cutout
+            primitiveBatch.AddVertex(
+                where + new Vector2(0f, ShipSizeY - ShipCutoutSize), Color.White);
+            primitiveBatch.AddVertex(
+                where + new Vector2(ShipSizeX, ShipSizeY), Color.White);
+
+            // and back up to the nose, where we started.
+            primitiveBatch.AddVertex(
+                where + new Vector2(ShipSizeX, ShipSizeY), Color.White);
+            primitiveBatch.AddVertex(
+                where + new Vector2(0f, -ShipSizeY), Color.White);
+
+            // and we're done.
+            primitiveBatch.End();
+        }
+
+        // called to draw the spacewars sun.
+        private void DrawSun(Vector2 where)
+        {
+            // the sun is made from 4 lines in a circle.
+            primitiveBatch.Begin(PrimitiveType.LineList);
+
+            // draw the vertical and horizontal lines
+            primitiveBatch.AddVertex(where + new Vector2(0, SunSize), Color.White);
+            primitiveBatch.AddVertex(where + new Vector2(0, -SunSize), Color.White);
+
+            primitiveBatch.AddVertex(where + new Vector2(SunSize, 0), Color.White);
+            primitiveBatch.AddVertex(where + new Vector2(-SunSize, 0), Color.White);
+
+            // to know where to draw the diagonal lines, we need to use trig.
+            // cosine of pi / 4 tells us what the x coordinate of a circle's radius is
+            // at 45 degrees. the y coordinate normally would come from sin, but sin and
+            // cos 45 are the same, so we can reuse cos for both x and y.
+            float sunSizeDiagonal = (float)Math.Cos(MathHelper.PiOver4);
+
+            // since that trig tells us the x and y for a unit circle, which has a
+            // radius of 1, we need scale that result by the sun's radius.
+            sunSizeDiagonal *= SunSize;
+
+            primitiveBatch.AddVertex(
+                where + new Vector2(-sunSizeDiagonal, sunSizeDiagonal), Color.Gray);
+            primitiveBatch.AddVertex(
+                where + new Vector2(sunSizeDiagonal, -sunSizeDiagonal), Color.Gray);
+
+            primitiveBatch.AddVertex(
+                where + new Vector2(sunSizeDiagonal, sunSizeDiagonal), Color.Gray);
+            primitiveBatch.AddVertex(
+                where + new Vector2(-sunSizeDiagonal, -sunSizeDiagonal), Color.Gray);
+
+            primitiveBatch.End();
+        }
+
+        #endregion
+
+//        #region Entry point
+//
+//        /// <summary>
+//        /// The main entry point for the application.
+//        /// </summary>
+//        static void Main()
+//        {
+//            using (PrimitivesSampleGame game = new PrimitivesSampleGame())
+//            {
+//                game.Run();
+//            }
+//        }
+//
+//        #endregion
+
+    }
+}

+ 1 - 1
Android/Primitives/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/RenderTarget2D/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/Sound/Resources/Resource.Designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 1 - 1
Android/VideoPlayer/Resources/Resource.designer.cs

@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 // <auto-generated>
 // <auto-generated>
 //     This code was generated by a tool.
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.488
+//     Runtime Version:4.0.30319.530
 //
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
 //     the code is regenerated.

+ 304 - 0
Linux/CatapaultNetWars/CatapaultNetWars.csproj

@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0BCF8950-A28D-4688-BA92-85BD49637ED0}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>CatapaultNetWars</RootNamespace>
+    <AssemblyName>CatapaultNetWars</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG;LINUX</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE;LINUX</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="..\..\MacOS\CatapultNetWars\CatapultGame.cs">
+      <Link>CatapultGame.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Utility\Animation.cs">
+      <Link>Utility\Animation.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Utility\AudioManager.cs">
+      <Link>Utility\AudioManager.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\BackgroundScreen.cs">
+      <Link>Screens\BackgroundScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\GameplayScreen.cs">
+      <Link>Screens\GameplayScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\InstructionsScreen.cs">
+      <Link>Screens\InstructionsScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\LoadingScreen.cs">
+      <Link>Screens\LoadingScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\MainMenuScreen.cs">
+      <Link>Screens\MainMenuScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\MessageBoxScreen.cs">
+      <Link>Screens\MessageBoxScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\PauseScreen.cs">
+      <Link>Screens\PauseScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\GameScreen.cs">
+      <Link>ScreenManager\GameScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\InputState.cs">
+      <Link>ScreenManager\InputState.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\MenuEntry.cs">
+      <Link>ScreenManager\MenuEntry.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\MenuScreen.cs">
+      <Link>ScreenManager\MenuScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\MouseGestureType.cs">
+      <Link>ScreenManager\MouseGestureType.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\PlayerIndexEventArgs.cs">
+      <Link>ScreenManager\PlayerIndexEventArgs.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\ScreenManager.cs">
+      <Link>ScreenManager\ScreenManager.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Players\AI.cs">
+      <Link>Players\AI.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Players\Human.cs">
+      <Link>Players\Human.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Players\Player.cs">
+      <Link>Players\Player.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\AvailableSessionMenuEntry.cs">
+      <Link>Networking\AvailableSessionMenuEntry.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\CreateOrFindSessionScreen.cs">
+      <Link>Networking\CreateOrFindSessionScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\JoinSessionScreen.cs">
+      <Link>Networking\JoinSessionScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\LobbyScreen.cs">
+      <Link>Networking\LobbyScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\NetworkBusyScreen.cs">
+      <Link>Networking\NetworkBusyScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\NetworkErrorScreen.cs">
+      <Link>Networking\NetworkErrorScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\NetworkSessionComponent.cs">
+      <Link>Networking\NetworkSessionComponent.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\OperationCompletedEventArgs.cs">
+      <Link>Networking\OperationCompletedEventArgs.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\ProfileSignInScreen.cs">
+      <Link>Networking\ProfileSignInScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Catapult\Catapult.cs">
+      <Link>Catapult\Catapult.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Catapult\Projectile.cs">
+      <Link>Catapult\Projectile.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\IMessageDisplay.cs">
+      <Link>IMessageDisplay.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\MessageDisplayComponent.cs">
+      <Link>MessageDisplayComponent.cs</Link>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Fonts\HUDFont.xnb">
+      <Link>Content\Fonts\HUDFont.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Fonts\MenuFont.xnb">
+      <Link>Content\Fonts\MenuFont.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\BoulderHit.wav">
+      <Link>Content\Sounds\BoulderHit.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\CatapultExplosion.wav">
+      <Link>Content\Sounds\CatapultExplosion.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\CatapultFire.wav">
+      <Link>Content\Sounds\CatapultFire.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\Lose.wav">
+      <Link>Content\Sounds\Lose.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\RopeStretch.wav">
+      <Link>Content\Sounds\RopeStretch.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\Win.wav">
+      <Link>Content\Sounds\Win.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Ammo\rock_ammo.xnb">
+      <Link>Content\Textures\Ammo\rock_ammo.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\blank.xnb">
+      <Link>Content\Textures\Backgrounds\blank.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\cloud1.xnb">
+      <Link>Content\Textures\Backgrounds\cloud1.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\cloud2.xnb">
+      <Link>Content\Textures\Backgrounds\cloud2.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\defeat.xnb">
+      <Link>Content\Textures\Backgrounds\defeat.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\gameplay_screen.xnb">
+      <Link>Content\Textures\Backgrounds\gameplay_screen.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\instructions.xnb">
+      <Link>Content\Textures\Backgrounds\instructions.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\mountain.xnb">
+      <Link>Content\Textures\Backgrounds\mountain.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\sky.xnb">
+      <Link>Content\Textures\Backgrounds\sky.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\title_screen.xnb">
+      <Link>Content\Textures\Backgrounds\title_screen.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\victory.xnb">
+      <Link>Content\Textures\Backgrounds\victory.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\ammoType.xnb">
+      <Link>Content\Textures\HUD\ammoType.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\Arrow.xnb">
+      <Link>Content\Textures\HUD\Arrow.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\hudBackground.xnb">
+      <Link>Content\Textures\HUD\hudBackground.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\windArrow.xnb">
+      <Link>Content\Textures\HUD\windArrow.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\AnimationsDef.xml">
+      <Link>Content\Textures\Catapults\AnimationsDef.xml</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Fire_Miss\fire_miss.xnb">
+      <Link>Content\Textures\Catapults\Fire_Miss\fire_miss.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Hit_Smoke\smoke.xnb">
+      <Link>Content\Textures\Catapults\Hit_Smoke\smoke.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\blueDestroyed\blueCatapult_destroyed.xnb">
+      <Link>Content\Textures\Catapults\Blue\blueDestroyed\blueCatapult_destroyed.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\blueFire\blueCatapult_fire.xnb">
+      <Link>Content\Textures\Catapults\Blue\blueFire\blueCatapult_fire.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\blueIdle\blueIdle.xnb">
+      <Link>Content\Textures\Catapults\Blue\blueIdle\blueIdle.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\bluePullback\blueCatapult_Pullback.xnb">
+      <Link>Content\Textures\Catapults\Blue\bluePullback\blueCatapult_Pullback.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redDestroyed\redCatapult_destroyed.xnb">
+      <Link>Content\Textures\Catapults\Red\redDestroyed\redCatapult_destroyed.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redFire\redCatapult_fire.xnb">
+      <Link>Content\Textures\Catapults\Red\redFire\redCatapult_fire.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redIdle\redIdle.xnb">
+      <Link>Content\Textures\Catapults\Red\redIdle\redIdle.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redPullback\redCatapult_Pullback.xnb">
+      <Link>Content\Textures\Catapults\Red\redPullback\redCatapult_Pullback.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\cat.xnb">
+      <Link>Content\cat.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_able.xnb">
+      <Link>Content\chat_able.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_mute.xnb">
+      <Link>Content\chat_mute.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_ready.xnb">
+      <Link>Content\chat_ready.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_talking.xnb">
+      <Link>Content\chat_talking.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\gradient.xnb">
+      <Link>Content\gradient.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="..\..\MacOS\\CatapultNetWars\Content\Textures\Catapults\AnimationsDef.xml">
+      <Link>Content\Textures\Catapults\AnimationsDef.xml</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\MonoGame.Framework\MonoGame.Framework.Linux.csproj">
+      <Project>{35253CE1-C864-4CD3-8249-4D1319748E8F}</Project>
+      <Name>MonoGame.Framework.Linux</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\ThirdParty\Lidgren.Network\Lidgren.Network.Linux.csproj">
+      <Project>{AE483C29-042E-4226-BA52-D247CE7676DA}</Project>
+      <Name>Lidgren.Network.Linux</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 16 - 0
Linux/CatapaultNetWars/Program.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace CatapaultNetWars
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            var g = new CatapultGame.CatapultGame();
+            g.Run();
+        }
+    }
+}

+ 36 - 0
Linux/CatapaultNetWars/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CatapaultNetWars")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CatapaultNetWars")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+//[assembly: Guid("140b2eea-9d89-4c7f-818b-19003adca060")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 514 - 0
Linux/CatapaultNetWars/Properties/Resources.Designer.cs

@@ -0,0 +1,514 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.488
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CatapultGame
+{
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CatapaultNetWars.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Back.
+        /// </summary>
+        internal static string Back {
+            get {
+                return ResourceManager.GetString("Back", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to end this session?.
+        /// </summary>
+        internal static string ConfirmEndSession {
+            get {
+                return ResourceManager.GetString("ConfirmEndSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to exit this sample?.
+        /// </summary>
+        internal static string ConfirmExitSample {
+            get {
+                return ResourceManager.GetString("ConfirmExitSample", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to start the game,.
+        /// </summary>
+        internal static string ConfirmForceStartGame {
+            get {
+                return ResourceManager.GetString("ConfirmForceStartGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to leave this session?.
+        /// </summary>
+        internal static string ConfirmLeaveSession {
+            get {
+                return ResourceManager.GetString("ConfirmLeaveSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Online gameplay is not available in trial mode..
+        /// </summary>
+        internal static string ConfirmMarketplace {
+            get {
+                return ResourceManager.GetString("ConfirmMarketplace", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to quit this game?.
+        /// </summary>
+        internal static string ConfirmQuitGame {
+            get {
+                return ResourceManager.GetString("ConfirmQuitGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Create Session.
+        /// </summary>
+        internal static string CreateSession {
+            get {
+                return ResourceManager.GetString("CreateSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to End Session.
+        /// </summary>
+        internal static string EndSession {
+            get {
+                return ResourceManager.GetString("EndSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lost connection to the network session.
+        /// </summary>
+        internal static string ErrorDisconnected {
+            get {
+                return ResourceManager.GetString("ErrorDisconnected", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must sign in a suitable gamer profile.
+        /// </summary>
+        internal static string ErrorGamerPrivilege {
+            get {
+                return ResourceManager.GetString("ErrorGamerPrivilege", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host ended the session.
+        /// </summary>
+        internal static string ErrorHostEndedSession {
+            get {
+                return ResourceManager.GetString("ErrorHostEndedSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to There was an error while.
+        /// </summary>
+        internal static string ErrorNetwork {
+            get {
+                return ResourceManager.GetString("ErrorNetwork", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking is turned.
+        /// </summary>
+        internal static string ErrorNetworkNotAvailable {
+            get {
+                return ResourceManager.GetString("ErrorNetworkNotAvailable", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host kicked you out of the session.
+        /// </summary>
+        internal static string ErrorRemovedByHost {
+            get {
+                return ResourceManager.GetString("ErrorRemovedByHost", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This session is already full.
+        /// </summary>
+        internal static string ErrorSessionFull {
+            get {
+                return ResourceManager.GetString("ErrorSessionFull", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Session not found. It may have ended,.
+        /// </summary>
+        internal static string ErrorSessionNotFound {
+            get {
+                return ResourceManager.GetString("ErrorSessionNotFound", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must wait for the host to return to.
+        /// </summary>
+        internal static string ErrorSessionNotJoinable {
+            get {
+                return ResourceManager.GetString("ErrorSessionNotJoinable", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This functionality is not available in trial mode.
+        /// </summary>
+        internal static string ErrorTrialMode {
+            get {
+                return ResourceManager.GetString("ErrorTrialMode", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to An unknown error occurred.
+        /// </summary>
+        internal static string ErrorUnknown {
+            get {
+                return ResourceManager.GetString("ErrorUnknown", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Exit.
+        /// </summary>
+        internal static string Exit {
+            get {
+                return ResourceManager.GetString("Exit", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Find Sessions.
+        /// </summary>
+        internal static string FindSessions {
+            get {
+                return ResourceManager.GetString("FindSessions", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to  (host).
+        /// </summary>
+        internal static string HostSuffix {
+            get {
+                return ResourceManager.GetString("HostSuffix", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Join Session.
+        /// </summary>
+        internal static string JoinSession {
+            get {
+                return ResourceManager.GetString("JoinSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Leave Session.
+        /// </summary>
+        internal static string LeaveSession {
+            get {
+                return ResourceManager.GetString("LeaveSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Loading.
+        /// </summary>
+        internal static string Loading {
+            get {
+                return ResourceManager.GetString("Loading", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lobby.
+        /// </summary>
+        internal static string Lobby {
+            get {
+                return ResourceManager.GetString("Lobby", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Main Menu.
+        /// </summary>
+        internal static string MainMenu {
+            get {
+                return ResourceManager.GetString("MainMenu", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to .
+        /// </summary>
+        internal static string MessageBoxUsage {
+            get {
+                return ResourceManager.GetString("MessageBoxUsage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} joined.
+        /// </summary>
+        internal static string MessageGamerJoined {
+            get {
+                return ResourceManager.GetString("MessageGamerJoined", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} left.
+        /// </summary>
+        internal static string MessageGamerLeft {
+            get {
+                return ResourceManager.GetString("MessageGamerLeft", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking....
+        /// </summary>
+        internal static string NetworkBusy {
+            get {
+                return ResourceManager.GetString("NetworkBusy", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to No sessions found.
+        /// </summary>
+        internal static string NoSessionsFound {
+            get {
+                return ResourceManager.GetString("NoSessionsFound", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Paused.
+        /// </summary>
+        internal static string Paused {
+            get {
+                return ResourceManager.GetString("Paused", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to LIVE.
+        /// </summary>
+        internal static string PlayerMatch {
+            get {
+                return ResourceManager.GetString("PlayerMatch", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Quit Game.
+        /// </summary>
+        internal static string QuitGame {
+            get {
+                return ResourceManager.GetString("QuitGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Resume Game.
+        /// </summary>
+        internal static string ResumeGame {
+            get {
+                return ResourceManager.GetString("ResumeGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Return to Lobby.
+        /// </summary>
+        internal static string ReturnToLobby {
+            get {
+                return ResourceManager.GetString("ReturnToLobby", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Single Player.
+        /// </summary>
+        internal static string SinglePlayer {
+            get {
+                return ResourceManager.GetString("SinglePlayer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to even though not all players are ready?.
+        /// </summary>
+        internal static string String {
+            get {
+                return ResourceManager.GetString("String", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Would you like to purchase this game?.
+        /// </summary>
+        internal static string String1 {
+            get {
+                return ResourceManager.GetString("String1", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to in order to access this functionality.
+        /// </summary>
+        internal static string String2 {
+            get {
+                return ResourceManager.GetString("String2", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to accessing the network.
+        /// </summary>
+        internal static string String3 {
+            get {
+                return ResourceManager.GetString("String3", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to off or not connected.
+        /// </summary>
+        internal static string String4 {
+            get {
+                return ResourceManager.GetString("String4", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to or there may be no network connectivity.
+        /// </summary>
+        internal static string String5 {
+            get {
+                return ResourceManager.GetString("String5", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to between the local machine and session host.
+        /// </summary>
+        internal static string String6 {
+            get {
+                return ResourceManager.GetString("String6", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to the lobby before you can join this session.
+        /// </summary>
+        internal static string String7 {
+            get {
+                return ResourceManager.GetString("String7", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to A button, Space, Enter = ok.
+        /// </summary>
+        internal static string String8 {
+            get {
+                return ResourceManager.GetString("String8", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to B button, Esc = cancel.
+        /// </summary>
+        internal static string String9 {
+            get {
+                return ResourceManager.GetString("String9", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to System Link.
+        /// </summary>
+        internal static string SystemLink {
+            get {
+                return ResourceManager.GetString("SystemLink", resourceCulture);
+            }
+        }
+    }
+}

+ 270 - 0
Linux/CatapaultNetWars/Properties/Resources.resx

@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Back" xml:space="preserve">
+    <value>Back</value>
+  </data>
+  <data name="ConfirmEndSession" xml:space="preserve">
+    <value>Are you sure you want to end this session?</value>
+  </data>
+  <data name="ConfirmExitSample" xml:space="preserve">
+    <value>Are you sure you want to exit this sample?</value>
+  </data>
+  <data name="ConfirmForceStartGame" xml:space="preserve">
+    <value>Are you sure you want to start the game,</value>
+  </data>
+  <data name="ConfirmLeaveSession" xml:space="preserve">
+    <value>Are you sure you want to leave this session?</value>
+  </data>
+  <data name="ConfirmMarketplace" xml:space="preserve">
+    <value>Online gameplay is not available in trial mode.</value>
+  </data>
+  <data name="ConfirmQuitGame" xml:space="preserve">
+    <value>Are you sure you want to quit this game?</value>
+  </data>
+  <data name="CreateSession" xml:space="preserve">
+    <value>Create Session</value>
+  </data>
+  <data name="EndSession" xml:space="preserve">
+    <value>End Session</value>
+  </data>
+  <data name="ErrorDisconnected" xml:space="preserve">
+    <value>Lost connection to the network session</value>
+  </data>
+  <data name="ErrorGamerPrivilege" xml:space="preserve">
+    <value>You must sign in a suitable gamer profile</value>
+  </data>
+  <data name="ErrorHostEndedSession" xml:space="preserve">
+    <value>Host ended the session</value>
+  </data>
+  <data name="ErrorNetwork" xml:space="preserve">
+    <value>There was an error while</value>
+  </data>
+  <data name="ErrorNetworkNotAvailable" xml:space="preserve">
+    <value>Networking is turned</value>
+  </data>
+  <data name="ErrorRemovedByHost" xml:space="preserve">
+    <value>Host kicked you out of the session</value>
+  </data>
+  <data name="ErrorSessionFull" xml:space="preserve">
+    <value>This session is already full</value>
+  </data>
+  <data name="ErrorSessionNotFound" xml:space="preserve">
+    <value>Session not found. It may have ended,</value>
+  </data>
+  <data name="ErrorSessionNotJoinable" xml:space="preserve">
+    <value>You must wait for the host to return to</value>
+  </data>
+  <data name="ErrorTrialMode" xml:space="preserve">
+    <value>This functionality is not available in trial mode</value>
+  </data>
+  <data name="ErrorUnknown" xml:space="preserve">
+    <value>An unknown error occurred</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Exit</value>
+  </data>
+  <data name="FindSessions" xml:space="preserve">
+    <value>Find Sessions</value>
+  </data>
+  <data name="HostSuffix" xml:space="preserve">
+    <value> (host)</value>
+  </data>
+  <data name="JoinSession" xml:space="preserve">
+    <value>Join Session</value>
+  </data>
+  <data name="LeaveSession" xml:space="preserve">
+    <value>Leave Session</value>
+  </data>
+  <data name="Loading" xml:space="preserve">
+    <value>Loading</value>
+  </data>
+  <data name="Lobby" xml:space="preserve">
+    <value>Lobby</value>
+  </data>
+  <data name="MainMenu" xml:space="preserve">
+    <value>Main Menu</value>
+  </data>
+  <data name="MessageBoxUsage" xml:space="preserve">
+    <value />
+  </data>
+  <data name="MessageGamerJoined" xml:space="preserve">
+    <value>{0} joined</value>
+  </data>
+  <data name="MessageGamerLeft" xml:space="preserve">
+    <value>{0} left</value>
+  </data>
+  <data name="NetworkBusy" xml:space="preserve">
+    <value>Networking...</value>
+  </data>
+  <data name="NoSessionsFound" xml:space="preserve">
+    <value>No sessions found</value>
+  </data>
+  <data name="Paused" xml:space="preserve">
+    <value>Paused</value>
+  </data>
+  <data name="PlayerMatch" xml:space="preserve">
+    <value>LIVE</value>
+  </data>
+  <data name="QuitGame" xml:space="preserve">
+    <value>Quit Game</value>
+  </data>
+  <data name="ResumeGame" xml:space="preserve">
+    <value>Resume Game</value>
+  </data>
+  <data name="ReturnToLobby" xml:space="preserve">
+    <value>Return to Lobby</value>
+  </data>
+  <data name="SinglePlayer" xml:space="preserve">
+    <value>Single Player</value>
+  </data>
+  <data name="String" xml:space="preserve">
+    <value>even though not all players are ready?</value>
+  </data>
+  <data name="String1" xml:space="preserve">
+    <value>Would you like to purchase this game?</value>
+  </data>
+  <data name="String2" xml:space="preserve">
+    <value>in order to access this functionality</value>
+  </data>
+  <data name="String3" xml:space="preserve">
+    <value>accessing the network</value>
+  </data>
+  <data name="String4" xml:space="preserve">
+    <value>off or not connected</value>
+  </data>
+  <data name="String5" xml:space="preserve">
+    <value>or there may be no network connectivity</value>
+  </data>
+  <data name="String6" xml:space="preserve">
+    <value>between the local machine and session host</value>
+  </data>
+  <data name="String7" xml:space="preserve">
+    <value>the lobby before you can join this session</value>
+  </data>
+  <data name="String8" xml:space="preserve">
+    <value>A button, Space, Enter = ok</value>
+  </data>
+  <data name="String9" xml:space="preserve">
+    <value>B button, Esc = cancel</value>
+  </data>
+  <data name="SystemLink" xml:space="preserve">
+    <value>System Link</value>
+  </data>
+</root>

+ 594 - 0
Linux/CatapaultNetWars/Resources.Designer.cs

@@ -0,0 +1,594 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CatapultGame {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CatapultGame.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Back.
+        /// </summary>
+        internal static string Back {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Back);
+#else				
+                return ResourceManager.GetString("Back", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to end this session?.
+        /// </summary>
+        internal static string ConfirmEndSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmEndSession);
+#else				
+				
+                return ResourceManager.GetString("ConfirmEndSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to exit this sample?.
+        /// </summary>
+        internal static string ConfirmExitSample {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmExitSample);
+#else								
+                return ResourceManager.GetString("ConfirmExitSample", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to start the game,
+        ///even though not all players are ready?.
+        /// </summary>
+        internal static string ConfirmForceStartGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmForceStartGame);
+#else								
+                return ResourceManager.GetString("ConfirmForceStartGame", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to leave this session?.
+        /// </summary>
+        internal static string ConfirmLeaveSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmLeaveSession);
+#else								
+                return ResourceManager.GetString("ConfirmLeaveSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Online gameplay is not available in trial mode.
+        ///Would you like to purchase this game?.
+        /// </summary>
+        internal static string ConfirmMarketplace {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmMarketplace);
+#else								
+                return ResourceManager.GetString("ConfirmMarketplace", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to quit this game?.
+        /// </summary>
+        internal static string ConfirmQuitGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmQuitGame);
+#else								
+                return ResourceManager.GetString("ConfirmQuitGame", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Create Session.
+        /// </summary>
+        internal static string CreateSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.CreateSession);
+#else								
+                return ResourceManager.GetString("CreateSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to End Session.
+        /// </summary>
+        internal static string EndSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.EndSession);
+#else								
+                return ResourceManager.GetString("EndSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lost connection to the network session.
+        /// </summary>
+        internal static string ErrorDisconnected {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorDisconnected);
+#else								
+                return ResourceManager.GetString("ErrorDisconnected", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must sign in a suitable gamer profile
+        ///in order to access this functionality.
+        /// </summary>
+        internal static string ErrorGamerPrivilege {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorGamerPrivilege);
+#else				
+                return ResourceManager.GetString("ErrorGamerPrivilege", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host ended the session.
+        /// </summary>
+        internal static string ErrorHostEndedSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorHostEndedSession);
+#else								
+                return ResourceManager.GetString("ErrorHostEndedSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to There was an error while
+        ///accessing the network.
+        /// </summary>
+        internal static string ErrorNetwork {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorNetwork);
+#else								
+                return ResourceManager.GetString("ErrorNetwork", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking is turned
+        ///off or not connected.
+        /// </summary>
+        internal static string ErrorNetworkNotAvailable {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorNetworkNotAvailable);
+#else								
+                return ResourceManager.GetString("ErrorNetworkNotAvailable", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host kicked you out of the session.
+        /// </summary>
+        internal static string ErrorRemovedByHost {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorRemovedByHost);
+#else								
+                return ResourceManager.GetString("ErrorRemovedByHost", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This session is already full.
+        /// </summary>
+        internal static string ErrorSessionFull {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorSessionFull);
+#else								
+                return ResourceManager.GetString("ErrorSessionFull", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Session not found. It may have ended,
+        ///or there may be no network connectivity
+        ///between the local machine and session host.
+        /// </summary>
+        internal static string ErrorSessionNotFound {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorSessionNotFound);
+#else								
+                return ResourceManager.GetString("ErrorSessionNotFound", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must wait for the host to return to
+        ///the lobby before you can join this session.
+        /// </summary>
+        internal static string ErrorSessionNotJoinable {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorSessionNotJoinable);
+#else								
+                return ResourceManager.GetString("ErrorSessionNotJoinable", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This functionality is not available in trial mode.
+        /// </summary>
+        internal static string ErrorTrialMode {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorTrialMode);
+#else								
+                return ResourceManager.GetString("ErrorTrialMode", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to An unknown error occurred.
+        /// </summary>
+        internal static string ErrorUnknown {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorUnknown);
+#else								
+                return ResourceManager.GetString("ErrorUnknown", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Exit.
+        /// </summary>
+        internal static string Exit {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Exit);
+#else								
+                return ResourceManager.GetString("Exit", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Find Sessions.
+        /// </summary>
+        internal static string FindSessions {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.FindSessions);
+#else								
+                return ResourceManager.GetString("FindSessions", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to  (host).
+        /// </summary>
+        internal static string HostSuffix {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.HostSuffix);
+#else								
+                return ResourceManager.GetString("HostSuffix", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Join Session.
+        /// </summary>
+        internal static string JoinSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.JoinSession);
+#else								
+                return ResourceManager.GetString("JoinSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Leave Session.
+        /// </summary>
+        internal static string LeaveSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.LeaveSession);
+#else								
+                return ResourceManager.GetString("LeaveSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Loading.
+        /// </summary>
+        internal static string Loading {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Loading);
+#else								
+                return ResourceManager.GetString("Loading", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lobby.
+        /// </summary>
+        internal static string Lobby {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Lobby);
+#else								
+                return ResourceManager.GetString("Lobby", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Main Menu.
+        /// </summary>
+        internal static string MainMenu {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MainMenu);
+#else								
+                return ResourceManager.GetString("MainMenu", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to 
+        ///A button, Space, Enter = ok
+        ///B button, Esc = cancel.
+        /// </summary>
+        internal static string MessageBoxUsage {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MessageBoxUsage);
+#else								
+                return ResourceManager.GetString("MessageBoxUsage", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} joined.
+        /// </summary>
+        internal static string MessageGamerJoined {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MessageGamerJoined);
+#else								
+                return ResourceManager.GetString("MessageGamerJoined", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} left.
+        /// </summary>
+        internal static string MessageGamerLeft {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MessageGamerLeft);
+#else								
+                return ResourceManager.GetString("MessageGamerLeft", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking....
+        /// </summary>
+        internal static string NetworkBusy {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.NetworkBusy);
+#else								
+                return ResourceManager.GetString("NetworkBusy", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to No sessions found.
+        /// </summary>
+        internal static string NoSessionsFound {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.NoSessionsFound);
+#else								
+                return ResourceManager.GetString("NoSessionsFound", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Paused.
+        /// </summary>
+        internal static string Paused {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Paused);
+#else								
+                return ResourceManager.GetString("Paused", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to LIVE.
+        /// </summary>
+        internal static string PlayerMatch {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.PlayerMatch);
+#else								
+                return ResourceManager.GetString("PlayerMatch", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Quit Game.
+        /// </summary>
+        internal static string QuitGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.QuitGame);
+#else								
+                return ResourceManager.GetString("QuitGame", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Resume Game.
+        /// </summary>
+        internal static string ResumeGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ResumeGame);
+#else								
+                return ResourceManager.GetString("ResumeGame", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Return to Lobby.
+        /// </summary>
+        internal static string ReturnToLobby {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ReturnToLobby);
+#else								
+                return ResourceManager.GetString("ReturnToLobby", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Single Player.
+        /// </summary>
+        internal static string SinglePlayer {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.SinglePlayer);
+#else								
+                return ResourceManager.GetString("SinglePlayer", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to System Link.
+        /// </summary>
+        internal static string SystemLink {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.SystemLink);
+#else								
+                return ResourceManager.GetString("SystemLink", resourceCulture);
+#endif
+            }
+        }
+    }
+}

BIN
Linux/CatapaultNetWars/Resources.resources


+ 250 - 0
Linux/CatapaultNetWars/Resources.resx

@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Back" xml:space="preserve">
+    <value>Back</value>
+  </data>
+  <data name="ConfirmEndSession" xml:space="preserve">
+    <value>Are you sure you want to end this session?</value>
+  </data>
+  <data name="ConfirmExitSample" xml:space="preserve">
+    <value>Are you sure you want to exit this sample?</value>
+  </data>
+  <data name="ConfirmForceStartGame" xml:space="preserve">
+    <value>Are you sure you want to start the game,
+even though not all players are ready?</value>
+  </data>
+  <data name="ConfirmLeaveSession" xml:space="preserve">
+    <value>Are you sure you want to leave this session?</value>
+  </data>
+  <data name="ConfirmMarketplace" xml:space="preserve">
+    <value>Online gameplay is not available in trial mode.
+Would you like to purchase this game?</value>
+  </data>
+  <data name="ConfirmQuitGame" xml:space="preserve">
+    <value>Are you sure you want to quit this game?</value>
+  </data>
+  <data name="CreateSession" xml:space="preserve">
+    <value>Create Session</value>
+  </data>
+  <data name="EndSession" xml:space="preserve">
+    <value>End Session</value>
+  </data>
+  <data name="ErrorDisconnected" xml:space="preserve">
+    <value>Lost connection to the network session</value>
+  </data>
+  <data name="ErrorGamerPrivilege" xml:space="preserve">
+    <value>You must sign in a suitable gamer profile
+in order to access this functionality</value>
+  </data>
+  <data name="ErrorHostEndedSession" xml:space="preserve">
+    <value>Host ended the session</value>
+  </data>
+  <data name="ErrorNetwork" xml:space="preserve">
+    <value>There was an error while
+accessing the network</value>
+  </data>
+  <data name="ErrorNetworkNotAvailable" xml:space="preserve">
+    <value>Networking is turned
+off or not connected</value>
+  </data>
+  <data name="ErrorRemovedByHost" xml:space="preserve">
+    <value>Host kicked you out of the session</value>
+  </data>
+  <data name="ErrorSessionFull" xml:space="preserve">
+    <value>This session is already full</value>
+  </data>
+  <data name="ErrorSessionNotFound" xml:space="preserve">
+    <value>Session not found. It may have ended,
+or there may be no network connectivity
+between the local machine and session host</value>
+  </data>
+  <data name="ErrorSessionNotJoinable" xml:space="preserve">
+    <value>You must wait for the host to return to
+the lobby before you can join this session</value>
+  </data>
+  <data name="ErrorTrialMode" xml:space="preserve">
+    <value>This functionality is not available in trial mode</value>
+  </data>
+  <data name="ErrorUnknown" xml:space="preserve">
+    <value>An unknown error occurred</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Exit</value>
+  </data>
+  <data name="FindSessions" xml:space="preserve">
+    <value>Find Sessions</value>
+  </data>
+  <data name="HostSuffix" xml:space="preserve">
+    <value> (host)</value>
+  </data>
+  <data name="JoinSession" xml:space="preserve">
+    <value>Join Session</value>
+  </data>
+  <data name="LeaveSession" xml:space="preserve">
+    <value>Leave Session</value>
+  </data>
+  <data name="Loading" xml:space="preserve">
+    <value>Loading</value>
+  </data>
+  <data name="Lobby" xml:space="preserve">
+    <value>Lobby</value>
+  </data>
+  <data name="MainMenu" xml:space="preserve">
+    <value>Main Menu</value>
+  </data>
+  <data name="MessageBoxUsage" xml:space="preserve">
+    <value>
+A button, Space, Enter = ok
+B button, Esc = cancel</value>
+  </data>
+  <data name="MessageGamerJoined" xml:space="preserve">
+    <value>{0} joined</value>
+  </data>
+  <data name="MessageGamerLeft" xml:space="preserve">
+    <value>{0} left</value>
+  </data>
+  <data name="NetworkBusy" xml:space="preserve">
+    <value>Networking...</value>
+  </data>
+  <data name="NoSessionsFound" xml:space="preserve">
+    <value>No sessions found</value>
+  </data>
+  <data name="Paused" xml:space="preserve">
+    <value>Paused</value>
+  </data>
+  <data name="PlayerMatch" xml:space="preserve">
+    <value>LIVE</value>
+  </data>
+  <data name="QuitGame" xml:space="preserve">
+    <value>Quit Game</value>
+  </data>
+  <data name="ResumeGame" xml:space="preserve">
+    <value>Resume Game</value>
+  </data>
+  <data name="ReturnToLobby" xml:space="preserve">
+    <value>Return to Lobby</value>
+  </data>
+  <data name="SinglePlayer" xml:space="preserve">
+    <value>Single Player</value>
+  </data>
+  <data name="SystemLink" xml:space="preserve">
+    <value>System Link</value>
+  </data>
+</root>

+ 5 - 42
Linux/NetRumble/MonoGame.Samples.NetRumble.Linux.csproj

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -16,7 +16,7 @@
     <DebugType>full</DebugType>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <Optimize>false</Optimize>
     <OutputPath>bin\Debug</OutputPath>
     <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG LINUX</DefineConstants>
+    <DefineConstants>LINUX</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <WarningLevel>4</WarningLevel>
     <PlatformTarget>x86</PlatformTarget>
     <PlatformTarget>x86</PlatformTarget>
@@ -30,14 +30,13 @@
     <WarningLevel>4</WarningLevel>
     <WarningLevel>4</WarningLevel>
     <PlatformTarget>x86</PlatformTarget>
     <PlatformTarget>x86</PlatformTarget>
     <ConsolePause>false</ConsolePause>
     <ConsolePause>false</ConsolePause>
+    <DefineConstants>LINUX</DefineConstants>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System" />
-    <Reference Include="System.Xml" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Drawing" />
     <Reference Include="System.Drawing" />
+    <Reference Include="System.XML" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <None Include="..\..\MacOS\NetRumble\Info.plist">
     <None Include="..\..\MacOS\NetRumble\Info.plist">
@@ -375,42 +374,6 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Folder Include="Effects\" />
     <Folder Include="Effects\" />
-    <Folder Include="BloomPostprocess\" />
-    <Folder Include="Content\Audio\wav\" />
-    <Folder Include="Content\BloomPostprocess\Effects\" />
-    <Folder Include="Content\Effects\" />
-    <Folder Include="Content\Fonts\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Gameplay\Weapons\" />
-    <Folder Include="Gameplay\Projectiles\" />
-    <Folder Include="Gameplay\PowerUps\" />
-    <Folder Include="Rendering\Particles\" />
-    <Folder Include="ScreenManager\" />
-    <Folder Include="Screens\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Content\Textures\Particles\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
-    <Folder Include="Content\BloomPostprocess\" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Content Include="..\..\MacOS\NetRumble\Content\Audio\wav\asteroid_touch.xnb">
     <Content Include="..\..\MacOS\NetRumble\Content\Audio\wav\asteroid_touch.xnb">
@@ -672,4 +635,4 @@
       <Name>Lidgren.Network.Linux</Name>
       <Name>Lidgren.Network.Linux</Name>
     </ProjectReference>
     </ProjectReference>
   </ItemGroup>
   </ItemGroup>
-</Project>
+</Project>

+ 2 - 1
Linux/NetRumble/Program.cs

@@ -67,7 +67,8 @@ namespace NetRumble
 		/// </summary>
 		/// </summary>
 		static void Main (string[] args)
 		static void Main (string[] args)
 		{
 		{
-			using (NetRumbleGame game = new NetRumbleGame ()) {
+            //MonoGameNetworkConfiguration.Broadcast = System.Net.IPAddress.Parse("192.168.83.254");
+            using (NetRumbleGame game = new NetRumbleGame ()) {
 				game.Run ();
 				game.Run ();
 			}
 			}
 		}
 		}

+ 4 - 1
MacOS/CatapultNetWars/CatapultGame.cs

@@ -75,9 +75,12 @@ namespace CatapultGame
 			NetworkSession.InviteAccepted += (sender, e) => NetworkSessionComponent.InviteAccepted (screenManager, e);
 			NetworkSession.InviteAccepted += (sender, e) => NetworkSessionComponent.InviteAccepted (screenManager, e);
 
 
 			IsMouseVisible = true;
 			IsMouseVisible = true;
-#if !WINDOWS && !XBOX && !MACOS
+#if !WINDOWS && !XBOX && !MACOS && !LINUX
 			//Switch to full screen for best game experience
 			//Switch to full screen for best game experience
 			graphics.IsFullScreen = true;
 			graphics.IsFullScreen = true;
+#else
+            graphics.PreferredBackBufferHeight = 480;
+            graphics.PreferredBackBufferWidth = 800;
 #endif
 #endif
 			AudioManager.Initialize (this);
 			AudioManager.Initialize (this);
 		}
 		}

+ 1 - 1
MacOS/CatapultNetWars/Screens/GameplayScreen.cs

@@ -99,7 +99,7 @@ namespace CatapultGame
 		public override void LoadContent ()
 		public override void LoadContent ()
 		{
 		{
 			base.LoadContent ();
 			base.LoadContent ();
-#if ANDROID || IOS
+#if ANDROID || IOS || LINUX || WINDOWS
 			LoadAssets();
 			LoadAssets();
 #endif			
 #endif			
 			// Start the game
 			// Start the game

+ 14 - 9
MacOS/CatapultNetWars/Screens/InstructionsScreen.cs

@@ -82,9 +82,10 @@ namespace CatapultGame
 #region Handle input
 #region Handle input
 		public override void HandleInput (InputState input)
 		public override void HandleInput (InputState input)
 		{
 		{
-			if (isLoading == true) {
-#if ANDROID || IOS
-				// Exit the screen and show the gameplay screen 
+			if (isLoading == true)
+            {
+#if ANDROID || IOS || LINUX || WINDOWS
+                // Exit the screen and show the gameplay screen 
 					// with pre-loaded assets
 					// with pre-loaded assets
 				ExitScreen ();
 				ExitScreen ();
 				ScreenManager.AddScreen (gameplayScreen, null);
 				ScreenManager.AddScreen (gameplayScreen, null);
@@ -101,16 +102,20 @@ namespace CatapultGame
 				gameplayScreen = new GameplayScreen ();
 				gameplayScreen = new GameplayScreen ();
 				gameplayScreen.ScreenManager = ScreenManager;
 				gameplayScreen.ScreenManager = ScreenManager;
 
 
-				// Start loading the resources in additional thread
+                // Start loading the resources in additional thread
+#if !LINUX && !WINDOWS
 #if MACOS
 #if MACOS
 				// create a new thread using BackgroundWorkerThread as method to execute
 				// create a new thread using BackgroundWorkerThread as method to execute
 				thread = new Thread (LoadAssetsWorkerThread as ThreadStart);
 				thread = new Thread (LoadAssetsWorkerThread as ThreadStart);
-#else
-				thread = new System.Threading.Thread (new System.Threading.ThreadStart (gameplayScreen.LoadAssets));
+#else     
+				thread = new System.Threading.Thread (new System.Threading.ThreadStart (gameplayScreen.LoadAssets));    
 #endif
 #endif
 				isLoading = true;
 				isLoading = true;
 				// start it
 				// start it
 				thread.Start ();
 				thread.Start ();
+#else
+                isLoading = true;
+#endif
 			}
 			}
 
 
 			foreach (var gesture in input.Gestures) {
 			foreach (var gesture in input.Gestures) {
@@ -118,9 +123,9 @@ namespace CatapultGame
 					// Create a new instance of the gameplay screen
 					// Create a new instance of the gameplay screen
 					gameplayScreen = new GameplayScreen ();
 					gameplayScreen = new GameplayScreen ();
 					gameplayScreen.ScreenManager = ScreenManager;
 					gameplayScreen.ScreenManager = ScreenManager;
-					
-#if ANDROID || IOS	
-					isLoading = true;									
+
+#if ANDROID || IOS	|| LINUX || WINDOWS
+                    isLoading = true;									
 #else						
 #else						
 					// Start loading the resources in additional thread
 					// Start loading the resources in additional thread
 					thread = new System.Threading.Thread (new System.Threading.ThreadStart (gameplayScreen.LoadAssets));
 					thread = new System.Threading.Thread (new System.Threading.ThreadStart (gameplayScreen.LoadAssets));

+ 4 - 0
MacOS/NetRumble/NetRumbleGame.cs

@@ -73,8 +73,12 @@ namespace NetRumble
             // initialize the graphics device manager
             // initialize the graphics device manager
             graphics = new GraphicsDeviceManager(this);
             graphics = new GraphicsDeviceManager(this);
 
 
+#if !LINUX
             graphics.PreferredBackBufferWidth = 1280;
             graphics.PreferredBackBufferWidth = 1280;
             graphics.PreferredBackBufferHeight = 720;
             graphics.PreferredBackBufferHeight = 720;
+#else
+            graphics.IsFullScreen = true;
+#endif
 
 
             // initialize the content manager
             // initialize the content manager
             Content.RootDirectory = "Content";
             Content.RootDirectory = "Content";

+ 2 - 0
MacOS/NetRumble/Screens/GameplayScreen.cs

@@ -164,11 +164,13 @@ namespace NetRumble
 		// Comment or uncomment from here
 		// Comment or uncomment from here
 		// ***************************	
 		// ***************************	
             // create and add the bloom effect
             // create and add the bloom effect
+#if BLOOM
             bloomComponent = new BloomComponent(ScreenManager.Game);
             bloomComponent = new BloomComponent(ScreenManager.Game);
             bloomComponent.Settings = BloomSettings.PresetSettings[0];
             bloomComponent.Settings = BloomSettings.PresetSettings[0];
             ScreenManager.Game.Components.Add(bloomComponent);
             ScreenManager.Game.Components.Add(bloomComponent);
             bloomComponent.Initialize();
             bloomComponent.Initialize();
             bloomComponent.Visible = false; // we want to control when bloom component is drawn
             bloomComponent.Visible = false; // we want to control when bloom component is drawn
+#endif
 		// ***************************
 		// ***************************
 		// Comment or uncomment to here
 		// Comment or uncomment to here
 		// ***************************	
 		// ***************************	

+ 1 - 0
MonoGame.Samples.Android.sln

@@ -40,6 +40,7 @@ Global
 		{0A5F2E21-0B29-4627-8F06-28BA442B21F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0A5F2E21-0B29-4627-8F06-28BA442B21F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0A5F2E21-0B29-4627-8F06-28BA442B21F7}.Release|Any CPU.Build.0 = Release|Any CPU
 		{0A5F2E21-0B29-4627-8F06-28BA442B21F7}.Release|Any CPU.Build.0 = Release|Any CPU
 		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Release|Any CPU.Build.0 = Release|Any CPU
 		{167741E2-2D8E-474A-8D06-9ACB55F0BA83}.Release|Any CPU.Build.0 = Release|Any CPU
 		{27C3DD7C-5322-4C2D-8EE4-07610390CDAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{27C3DD7C-5322-4C2D-8EE4-07610390CDAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+ 340 - 324
MonoGame.Samples.Linux.sln

@@ -1,6 +1,6 @@
 
 
 Microsoft Visual Studio Solution File, Format Version 11.00
 Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+# Visual C# Express 2010
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Samples.ChaseAndEvade.Linux", "Linux\ChaseAndEvade\MonoGame.Samples.ChaseAndEvade.Linux.csproj", "{86A619E2-C8F0-452B-B764-C69D5BB07C98}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Samples.ChaseAndEvade.Linux", "Linux\ChaseAndEvade\MonoGame.Samples.ChaseAndEvade.Linux.csproj", "{86A619E2-C8F0-452B-B764-C69D5BB07C98}"
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Samples.Draw2D.Linux", "Linux\Draw2D\MonoGame.Samples.Draw2D.Linux.csproj", "{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Samples.Draw2D.Linux", "Linux\Draw2D\MonoGame.Samples.Draw2D.Linux.csproj", "{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}"
@@ -47,6 +47,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InputReporter", "Linux\Inpu
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoneycombRush", "Linux\HoneycombRush\HoneycombRush.csproj", "{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoneycombRush", "Linux\HoneycombRush\HoneycombRush.csproj", "{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}"
 EndProject
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatapaultNetWars", "Linux\CatapaultNetWars\CatapaultNetWars.csproj", "{0BCF8950-A28D-4688-BA92-85BD49637ED0}"
+EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|Any CPU = Debug|Any CPU
@@ -61,26 +63,46 @@ Global
 		Release|x86 = Release|x86
 		Release|x86 = Release|x86
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|x86.Build.0 = Debug|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Any CPU.Build.0 = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhone.Build.0 = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|x86.ActiveCfg = Release|Any CPU
-		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|x86.Build.0 = Release|Any CPU
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.Build.0 = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.ActiveCfg = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.Build.0 = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|x86.ActiveCfg = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|x86.Build.0 = Debug|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.ActiveCfg = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.Build.0 = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.ActiveCfg = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.Build.0 = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.Build.0 = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.ActiveCfg = Release|x86
+		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.Build.0 = Release|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|Any CPU.Build.0 = Debug|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|Any CPU.Build.0 = Debug|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|iPhone.ActiveCfg = Debug|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|iPhone.ActiveCfg = Debug|x86
@@ -101,26 +123,26 @@ Global
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|Mixed Platforms.Build.0 = Release|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|Mixed Platforms.Build.0 = Release|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.ActiveCfg = Release|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.ActiveCfg = Release|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.Build.0 = Release|x86
 		{35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.Build.0 = Release|x86
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|x86.Build.0 = Debug|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Any CPU.Build.0 = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhone.Build.0 = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|x86.ActiveCfg = Release|Any CPU
-		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|x86.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhone.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.Build.0 = Release|Any CPU
 		{52735207-2136-433B-A3E4-4C082728EED8}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Debug|Any CPU.Build.0 = Debug|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Debug|Any CPU.Build.0 = Debug|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Debug|iPhone.ActiveCfg = Debug|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Debug|iPhone.ActiveCfg = Debug|x86
@@ -141,66 +163,46 @@ Global
 		{52735207-2136-433B-A3E4-4C082728EED8}.Release|Mixed Platforms.Build.0 = Release|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Release|Mixed Platforms.Build.0 = Release|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Release|x86.ActiveCfg = Release|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Release|x86.ActiveCfg = Release|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Release|x86.Build.0 = Release|x86
 		{52735207-2136-433B-A3E4-4C082728EED8}.Release|x86.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Any CPU.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhone.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhone.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|x86.ActiveCfg = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|x86.Build.0 = Debug|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Any CPU.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Any CPU.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhone.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhone.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Mixed Platforms.Build.0 = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|x86.ActiveCfg = Release|x86
-		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|x86.Build.0 = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
-		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
+		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Any CPU.Build.0 = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhone.ActiveCfg = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhone.Build.0 = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|x86.ActiveCfg = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|x86.Build.0 = Debug|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Any CPU.ActiveCfg = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Any CPU.Build.0 = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhone.ActiveCfg = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhone.Build.0 = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Mixed Platforms.Build.0 = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|x86.ActiveCfg = Release|x86
+		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|x86.Build.0 = Release|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
@@ -221,6 +223,46 @@ Global
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
 		{86A619E2-C8D0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.Build.0 = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.ActiveCfg = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.Build.0 = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|x86.ActiveCfg = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|x86.Build.0 = Debug|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.ActiveCfg = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.Build.0 = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.ActiveCfg = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.Build.0 = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.Build.0 = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|x86.ActiveCfg = Release|x86
+		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|x86.Build.0 = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
+		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
@@ -241,226 +283,6 @@ Global
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
 		{86A619E2-C8F0-452B-A762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
-		{86A619E2-C8F0-452B-B764-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
-		{86A919E2-D7F0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.Build.0 = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.ActiveCfg = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.Build.0 = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|x86.ActiveCfg = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Debug|x86.Build.0 = Debug|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.ActiveCfg = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.Build.0 = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.ActiveCfg = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.Build.0 = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.Build.0 = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.ActiveCfg = Release|x86
-		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.Build.0 = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Any CPU.Build.0 = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.ActiveCfg = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhone.Build.0 = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|x86.ActiveCfg = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Debug|x86.Build.0 = Debug|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.ActiveCfg = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Any CPU.Build.0 = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.ActiveCfg = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhone.Build.0 = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.Build.0 = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|x86.ActiveCfg = Release|x86
-		{8CFEF2EE-5E32-43EB-A730-EB3AACDC77B1}.Release|x86.Build.0 = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Any CPU.Build.0 = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhone.ActiveCfg = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhone.Build.0 = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|x86.ActiveCfg = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|x86.Build.0 = Debug|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Any CPU.ActiveCfg = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Any CPU.Build.0 = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhone.ActiveCfg = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhone.Build.0 = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Mixed Platforms.Build.0 = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|x86.ActiveCfg = Release|x86
-		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|x86.Build.0 = Release|x86
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhone.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.Build.0 = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|x86.Build.0 = Debug|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhone.Build.0 = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|x86.ActiveCfg = Release|Any CPU
-		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|x86.Build.0 = Release|Any CPU
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Any CPU.Build.0 = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhone.ActiveCfg = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhone.Build.0 = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|iPhoneSimulator.Build.0 = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|x86.ActiveCfg = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Debug|x86.Build.0 = Debug|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Any CPU.ActiveCfg = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Any CPU.Build.0 = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhone.ActiveCfg = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhone.Build.0 = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|iPhoneSimulator.Build.0 = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|Mixed Platforms.Build.0 = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|x86.ActiveCfg = Release|x86
-		{D0E05092-60B2-47FF-B924-D5CDED0C0DD1}.Release|x86.Build.0 = Release|x86
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|x86.Build.0 = Debug|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Any CPU.Build.0 = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhone.Build.0 = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|x86.ActiveCfg = Release|Any CPU
-		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|x86.Build.0 = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|x86.Build.0 = Debug|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhone.Build.0 = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|x86.ActiveCfg = Release|Any CPU
-		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|x86.Build.0 = Release|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -481,6 +303,166 @@ Global
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Release|x86.ActiveCfg = Release|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Release|x86.ActiveCfg = Release|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Release|x86.Build.0 = Release|Any CPU
 		{EB1F36EC-5DB8-41AC-AB99-E9337239A9F9}.Release|x86.Build.0 = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Debug|x86.Build.0 = Debug|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhone.Build.0 = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|x86.ActiveCfg = Release|Any CPU
+		{EA7CF275-795B-4385-80AA-C41DA3B9B0F9}.Release|x86.Build.0 = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Debug|x86.Build.0 = Debug|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhone.Build.0 = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|x86.ActiveCfg = Release|Any CPU
+		{DED4371E-B92B-46FC-B4A3-B56BCAE12477}.Release|x86.Build.0 = Release|Any CPU
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Any CPU.Build.0 = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhone.ActiveCfg = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhone.Build.0 = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|x86.ActiveCfg = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Debug|x86.Build.0 = Debug|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Any CPU.ActiveCfg = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Any CPU.Build.0 = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhone.ActiveCfg = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhone.Build.0 = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|Mixed Platforms.Build.0 = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|x86.ActiveCfg = Release|x86
+		{9522776F-02BA-4BED-B8BB-6BAE580F4068}.Release|x86.Build.0 = Release|x86
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Debug|x86.Build.0 = Debug|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Any CPU.Build.0 = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhone.Build.0 = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|x86.ActiveCfg = Release|Any CPU
+		{521972FD-1A9B-4CFD-A435-EB2224985131}.Release|x86.Build.0 = Release|Any CPU
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Any CPU.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhone.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhone.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|x86.ActiveCfg = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Debug|x86.Build.0 = Debug|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Any CPU.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Any CPU.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhone.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhone.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|Mixed Platforms.Build.0 = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|x86.ActiveCfg = Release|x86
+		{86A219E2-C8F0-452B-B762-C69D5BB07C99}.Release|x86.Build.0 = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Any CPU.Build.0 = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhone.ActiveCfg = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhone.Build.0 = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|iPhoneSimulator.Build.0 = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|x86.ActiveCfg = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Debug|x86.Build.0 = Debug|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Any CPU.ActiveCfg = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Any CPU.Build.0 = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhone.ActiveCfg = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhone.Build.0 = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|iPhoneSimulator.Build.0 = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|Mixed Platforms.Build.0 = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|x86.ActiveCfg = Release|x86
+		{86A219E2-C8F1-422B-C762-C69D5BB07C98}.Release|x86.Build.0 = Release|x86
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Debug|x86.Build.0 = Debug|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhone.Build.0 = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|x86.ActiveCfg = Release|Any CPU
+		{2012F252-E53A-4900-A2C5-9550D008DF8B}.Release|x86.Build.0 = Release|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -501,6 +483,43 @@ Global
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Release|x86.ActiveCfg = Release|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Release|x86.ActiveCfg = Release|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Release|x86.Build.0 = Release|Any CPU
 		{EC1FA46A-41D3-4F6E-8712-70133CCB3C6A}.Release|x86.Build.0 = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Debug|x86.Build.0 = Debug|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhone.Build.0 = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|x86.ActiveCfg = Release|Any CPU
+		{C43ECFB0-CD92-4C17-ACF3-786BC0AE1D15}.Release|x86.Build.0 = Release|Any CPU
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|iPhone.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|x86.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|x86.Build.0 = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|Any CPU.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|iPhone.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|Mixed Platforms.Build.0 = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|x86.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 	GlobalSection(NestedProjects) = preSolution
 		{9522776F-02BA-4BED-B8BB-6BAE580F4068} = {A28FF8DB-5350-4D08-A94D-93C3C67FCB63}
 		{9522776F-02BA-4BED-B8BB-6BAE580F4068} = {A28FF8DB-5350-4D08-A94D-93C3C67FCB63}
@@ -512,7 +531,4 @@ Global
 	GlobalSection(MonoDevelopProperties) = preSolution
 	GlobalSection(MonoDevelopProperties) = preSolution
 		StartupItem = Linux\StarWarrior\StarWarrior.csproj
 		StartupItem = Linux\StarWarrior\StarWarrior.csproj
 	EndGlobalSection
 	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
 EndGlobal
 EndGlobal

+ 48 - 32
MonoGame.Samples.Windows.sln

@@ -1,6 +1,6 @@
 
 
 Microsoft Visual Studio Solution File, Format Version 11.00
 Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+# Visual C# Express 2010
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.Windows", "..\ThirdParty\Lidgren.Network\Lidgren.Network.Windows.csproj", "{AE483C29-042E-4226-BA52-D247CE7676DA}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.Windows", "..\ThirdParty\Lidgren.Network\Lidgren.Network.Windows.csproj", "{AE483C29-042E-4226-BA52-D247CE7676DA}"
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.Windows", "..\MonoGame.Framework\MonoGame.Framework.Windows.csproj", "{7DE47032-A904-4C29-BD22-2D235E8D91BA}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.Windows", "..\MonoGame.Framework\MonoGame.Framework.Windows.csproj", "{7DE47032-A904-4C29-BD22-2D235E8D91BA}"
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetRumble", "Windows\NetRum
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RenderTarget2D", "Windows\RenderTarget2D\RenderTarget2D.csproj", "{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RenderTarget2D", "Windows\RenderTarget2D\RenderTarget2D.csproj", "{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}"
 EndProject
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatapaultNetWars", "Windows\CatapaultNetWars\CatapaultNetWars.csproj", "{0BCF8950-A28D-4688-BA92-85BD49637ED0}"
+EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|Any CPU = Debug|Any CPU
@@ -25,20 +27,20 @@ Global
 		Release|x86 = Release|x86
 		Release|x86 = Release|x86
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|iPhone.ActiveCfg = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|x86.ActiveCfg = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|x86.Build.0 = Debug|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|Any CPU.ActiveCfg = Release|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|iPhone.ActiveCfg = Release|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|iPhoneSimulator.ActiveCfg = Release|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|Mixed Platforms.Build.0 = Release|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|x86.ActiveCfg = Release|x86
-		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|x86.Build.0 = Release|x86
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.ActiveCfg = Release|Any CPU
 		{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
 		{7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
@@ -69,20 +71,20 @@ Global
 		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.Build.0 = Release|x86
 		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|Mixed Platforms.Build.0 = Release|x86
 		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.ActiveCfg = Release|x86
 		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.ActiveCfg = Release|x86
 		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.Build.0 = Release|x86
 		{8CFEF1FE-9E32-43EB-A730-EB3AACDC77B1}.Release|x86.Build.0 = Release|x86
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.ActiveCfg = Release|Any CPU
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|iPhone.ActiveCfg = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|x86.ActiveCfg = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Debug|x86.Build.0 = Debug|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|Any CPU.ActiveCfg = Release|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|iPhone.ActiveCfg = Release|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|Mixed Platforms.Build.0 = Release|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|x86.ActiveCfg = Release|x86
+		{36CDED1D-BE90-4C12-BC0A-F923AB92B98D}.Release|x86.Build.0 = Release|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Debug|Any CPU.ActiveCfg = Debug|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Debug|Any CPU.Build.0 = Debug|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Debug|Any CPU.Build.0 = Debug|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Debug|iPhone.ActiveCfg = Debug|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Debug|iPhone.ActiveCfg = Debug|x86
@@ -103,11 +105,25 @@ Global
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Release|Mixed Platforms.Build.0 = Release|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Release|Mixed Platforms.Build.0 = Release|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Release|x86.ActiveCfg = Release|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Release|x86.ActiveCfg = Release|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Release|x86.Build.0 = Release|x86
 		{B3DD03E0-4DEC-45A0-A481-2CF90A51C516}.Release|x86.Build.0 = Release|x86
-	EndGlobalSection
-	GlobalSection(MonoDevelopProperties) = preSolution
-		StartupItem = Windows\RenderTarget2D\RenderTarget2D.csproj
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|iPhone.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|x86.ActiveCfg = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Debug|x86.Build.0 = Debug|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|Any CPU.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|iPhone.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|Mixed Platforms.Build.0 = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|x86.ActiveCfg = Release|x86
+		{0BCF8950-A28D-4688-BA92-85BD49637ED0}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	EndGlobalSection
+	GlobalSection(MonoDevelopProperties) = preSolution
+		StartupItem = Windows\RenderTarget2D\RenderTarget2D.csproj
+	EndGlobalSection
 EndGlobal
 EndGlobal

+ 304 - 0
Windows/CatapaultNetWars/CatapaultNetWars.csproj

@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0BCF8950-A28D-4688-BA92-85BD49637ED0}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>CatapaultNetWars</RootNamespace>
+    <AssemblyName>CatapaultNetWars</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE;WINDOWS</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="..\..\MacOS\CatapultNetWars\CatapultGame.cs">
+      <Link>CatapultGame.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Utility\Animation.cs">
+      <Link>Utility\Animation.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Utility\AudioManager.cs">
+      <Link>Utility\AudioManager.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\BackgroundScreen.cs">
+      <Link>Screens\BackgroundScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\GameplayScreen.cs">
+      <Link>Screens\GameplayScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\InstructionsScreen.cs">
+      <Link>Screens\InstructionsScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\LoadingScreen.cs">
+      <Link>Screens\LoadingScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\MainMenuScreen.cs">
+      <Link>Screens\MainMenuScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\MessageBoxScreen.cs">
+      <Link>Screens\MessageBoxScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Screens\PauseScreen.cs">
+      <Link>Screens\PauseScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\GameScreen.cs">
+      <Link>ScreenManager\GameScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\InputState.cs">
+      <Link>ScreenManager\InputState.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\MenuEntry.cs">
+      <Link>ScreenManager\MenuEntry.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\MenuScreen.cs">
+      <Link>ScreenManager\MenuScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\MouseGestureType.cs">
+      <Link>ScreenManager\MouseGestureType.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\PlayerIndexEventArgs.cs">
+      <Link>ScreenManager\PlayerIndexEventArgs.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\ScreenManager\ScreenManager.cs">
+      <Link>ScreenManager\ScreenManager.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Players\AI.cs">
+      <Link>Players\AI.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Players\Human.cs">
+      <Link>Players\Human.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Players\Player.cs">
+      <Link>Players\Player.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\AvailableSessionMenuEntry.cs">
+      <Link>Networking\AvailableSessionMenuEntry.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\CreateOrFindSessionScreen.cs">
+      <Link>Networking\CreateOrFindSessionScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\JoinSessionScreen.cs">
+      <Link>Networking\JoinSessionScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\LobbyScreen.cs">
+      <Link>Networking\LobbyScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\NetworkBusyScreen.cs">
+      <Link>Networking\NetworkBusyScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\NetworkErrorScreen.cs">
+      <Link>Networking\NetworkErrorScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\NetworkSessionComponent.cs">
+      <Link>Networking\NetworkSessionComponent.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\OperationCompletedEventArgs.cs">
+      <Link>Networking\OperationCompletedEventArgs.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Networking\ProfileSignInScreen.cs">
+      <Link>Networking\ProfileSignInScreen.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Catapult\Catapult.cs">
+      <Link>Catapult\Catapult.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\Catapult\Projectile.cs">
+      <Link>Catapult\Projectile.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\IMessageDisplay.cs">
+      <Link>IMessageDisplay.cs</Link>
+    </Compile>
+    <Compile Include="..\..\MacOS\CatapultNetWars\MessageDisplayComponent.cs">
+      <Link>MessageDisplayComponent.cs</Link>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\MonoGame\MonoGame.Framework\MonoGame.Framework.Windows.csproj">
+      <Project>{7DE47032-A904-4C29-BD22-2D235E8D91BA}</Project>
+      <Name>MonoGame.Framework.Windows</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\..\MonoGame\ThirdParty\Lidgren.Network\Lidgren.Network.Windows.csproj">
+      <Project>{AE483C29-042E-4226-BA52-D247CE7676DA}</Project>
+      <Name>Lidgren.Network.Windows</Name>
+    </ProjectReference>
+  </ItemGroup>
+ <ItemGroup>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Fonts\HUDFont.xnb">
+      <Link>Content\Fonts\HUDFont.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Fonts\MenuFont.xnb">
+      <Link>Content\Fonts\MenuFont.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\BoulderHit.wav">
+      <Link>Content\Sounds\BoulderHit.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\CatapultExplosion.wav">
+      <Link>Content\Sounds\CatapultExplosion.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\CatapultFire.wav">
+      <Link>Content\Sounds\CatapultFire.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\Lose.wav">
+      <Link>Content\Sounds\Lose.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\RopeStretch.wav">
+      <Link>Content\Sounds\RopeStretch.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapaultWars\Content\Sounds\Win.wav">
+      <Link>Content\Sounds\Win.wav</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Ammo\rock_ammo.xnb">
+      <Link>Content\Textures\Ammo\rock_ammo.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\blank.xnb">
+      <Link>Content\Textures\Backgrounds\blank.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\cloud1.xnb">
+      <Link>Content\Textures\Backgrounds\cloud1.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\cloud2.xnb">
+      <Link>Content\Textures\Backgrounds\cloud2.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\defeat.xnb">
+      <Link>Content\Textures\Backgrounds\defeat.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\gameplay_screen.xnb">
+      <Link>Content\Textures\Backgrounds\gameplay_screen.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\instructions.xnb">
+      <Link>Content\Textures\Backgrounds\instructions.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\mountain.xnb">
+      <Link>Content\Textures\Backgrounds\mountain.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\sky.xnb">
+      <Link>Content\Textures\Backgrounds\sky.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\title_screen.xnb">
+      <Link>Content\Textures\Backgrounds\title_screen.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Backgrounds\victory.xnb">
+      <Link>Content\Textures\Backgrounds\victory.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\ammoType.xnb">
+      <Link>Content\Textures\HUD\ammoType.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\Arrow.xnb">
+      <Link>Content\Textures\HUD\Arrow.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\hudBackground.xnb">
+      <Link>Content\Textures\HUD\hudBackground.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\HUD\windArrow.xnb">
+      <Link>Content\Textures\HUD\windArrow.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\AnimationsDef.xml">
+      <Link>Content\Textures\Catapults\AnimationsDef.xml</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Fire_Miss\fire_miss.xnb">
+      <Link>Content\Textures\Catapults\Fire_Miss\fire_miss.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Hit_Smoke\smoke.xnb">
+      <Link>Content\Textures\Catapults\Hit_Smoke\smoke.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\blueDestroyed\blueCatapult_destroyed.xnb">
+      <Link>Content\Textures\Catapults\Blue\blueDestroyed\blueCatapult_destroyed.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\blueFire\blueCatapult_fire.xnb">
+      <Link>Content\Textures\Catapults\Blue\blueFire\blueCatapult_fire.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\blueIdle\blueIdle.xnb">
+      <Link>Content\Textures\Catapults\Blue\blueIdle\blueIdle.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Blue\bluePullback\blueCatapult_Pullback.xnb">
+      <Link>Content\Textures\Catapults\Blue\bluePullback\blueCatapult_Pullback.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redDestroyed\redCatapult_destroyed.xnb">
+      <Link>Content\Textures\Catapults\Red\redDestroyed\redCatapult_destroyed.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redFire\redCatapult_fire.xnb">
+      <Link>Content\Textures\Catapults\Red\redFire\redCatapult_fire.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redIdle\redIdle.xnb">
+      <Link>Content\Textures\Catapults\Red\redIdle\redIdle.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\Textures\Catapults\Red\redPullback\redCatapult_Pullback.xnb">
+      <Link>Content\Textures\Catapults\Red\redPullback\redCatapult_Pullback.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\cat.xnb">
+      <Link>Content\cat.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_able.xnb">
+      <Link>Content\chat_able.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_mute.xnb">
+      <Link>Content\chat_mute.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_ready.xnb">
+      <Link>Content\chat_ready.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\chat_talking.xnb">
+      <Link>Content\chat_talking.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="..\..\MacOS\CatapultNetWars\Content\gradient.xnb">
+      <Link>Content\gradient.xnb</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="..\..\MacOS\\CatapultNetWars\Content\Textures\Catapults\AnimationsDef.xml">
+      <Link>Content\Textures\Catapults\AnimationsDef.xml</Link><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 16 - 0
Windows/CatapaultNetWars/Program.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace CatapaultNetWars
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            var g = new CatapultGame.CatapultGame();
+            g.Run();
+        }
+    }
+}

+ 36 - 0
Windows/CatapaultNetWars/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CatapaultNetWars")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CatapaultNetWars")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+//[assembly: Guid("140b2eea-9d89-4c7f-818b-19003adca060")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 514 - 0
Windows/CatapaultNetWars/Properties/Resources.Designer.cs

@@ -0,0 +1,514 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.488
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CatapultGame
+{
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CatapaultNetWars.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Back.
+        /// </summary>
+        internal static string Back {
+            get {
+                return ResourceManager.GetString("Back", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to end this session?.
+        /// </summary>
+        internal static string ConfirmEndSession {
+            get {
+                return ResourceManager.GetString("ConfirmEndSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to exit this sample?.
+        /// </summary>
+        internal static string ConfirmExitSample {
+            get {
+                return ResourceManager.GetString("ConfirmExitSample", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to start the game,.
+        /// </summary>
+        internal static string ConfirmForceStartGame {
+            get {
+                return ResourceManager.GetString("ConfirmForceStartGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to leave this session?.
+        /// </summary>
+        internal static string ConfirmLeaveSession {
+            get {
+                return ResourceManager.GetString("ConfirmLeaveSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Online gameplay is not available in trial mode..
+        /// </summary>
+        internal static string ConfirmMarketplace {
+            get {
+                return ResourceManager.GetString("ConfirmMarketplace", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to quit this game?.
+        /// </summary>
+        internal static string ConfirmQuitGame {
+            get {
+                return ResourceManager.GetString("ConfirmQuitGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Create Session.
+        /// </summary>
+        internal static string CreateSession {
+            get {
+                return ResourceManager.GetString("CreateSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to End Session.
+        /// </summary>
+        internal static string EndSession {
+            get {
+                return ResourceManager.GetString("EndSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lost connection to the network session.
+        /// </summary>
+        internal static string ErrorDisconnected {
+            get {
+                return ResourceManager.GetString("ErrorDisconnected", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must sign in a suitable gamer profile.
+        /// </summary>
+        internal static string ErrorGamerPrivilege {
+            get {
+                return ResourceManager.GetString("ErrorGamerPrivilege", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host ended the session.
+        /// </summary>
+        internal static string ErrorHostEndedSession {
+            get {
+                return ResourceManager.GetString("ErrorHostEndedSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to There was an error while.
+        /// </summary>
+        internal static string ErrorNetwork {
+            get {
+                return ResourceManager.GetString("ErrorNetwork", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking is turned.
+        /// </summary>
+        internal static string ErrorNetworkNotAvailable {
+            get {
+                return ResourceManager.GetString("ErrorNetworkNotAvailable", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host kicked you out of the session.
+        /// </summary>
+        internal static string ErrorRemovedByHost {
+            get {
+                return ResourceManager.GetString("ErrorRemovedByHost", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This session is already full.
+        /// </summary>
+        internal static string ErrorSessionFull {
+            get {
+                return ResourceManager.GetString("ErrorSessionFull", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Session not found. It may have ended,.
+        /// </summary>
+        internal static string ErrorSessionNotFound {
+            get {
+                return ResourceManager.GetString("ErrorSessionNotFound", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must wait for the host to return to.
+        /// </summary>
+        internal static string ErrorSessionNotJoinable {
+            get {
+                return ResourceManager.GetString("ErrorSessionNotJoinable", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This functionality is not available in trial mode.
+        /// </summary>
+        internal static string ErrorTrialMode {
+            get {
+                return ResourceManager.GetString("ErrorTrialMode", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to An unknown error occurred.
+        /// </summary>
+        internal static string ErrorUnknown {
+            get {
+                return ResourceManager.GetString("ErrorUnknown", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Exit.
+        /// </summary>
+        internal static string Exit {
+            get {
+                return ResourceManager.GetString("Exit", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Find Sessions.
+        /// </summary>
+        internal static string FindSessions {
+            get {
+                return ResourceManager.GetString("FindSessions", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to  (host).
+        /// </summary>
+        internal static string HostSuffix {
+            get {
+                return ResourceManager.GetString("HostSuffix", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Join Session.
+        /// </summary>
+        internal static string JoinSession {
+            get {
+                return ResourceManager.GetString("JoinSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Leave Session.
+        /// </summary>
+        internal static string LeaveSession {
+            get {
+                return ResourceManager.GetString("LeaveSession", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Loading.
+        /// </summary>
+        internal static string Loading {
+            get {
+                return ResourceManager.GetString("Loading", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lobby.
+        /// </summary>
+        internal static string Lobby {
+            get {
+                return ResourceManager.GetString("Lobby", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Main Menu.
+        /// </summary>
+        internal static string MainMenu {
+            get {
+                return ResourceManager.GetString("MainMenu", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to .
+        /// </summary>
+        internal static string MessageBoxUsage {
+            get {
+                return ResourceManager.GetString("MessageBoxUsage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} joined.
+        /// </summary>
+        internal static string MessageGamerJoined {
+            get {
+                return ResourceManager.GetString("MessageGamerJoined", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} left.
+        /// </summary>
+        internal static string MessageGamerLeft {
+            get {
+                return ResourceManager.GetString("MessageGamerLeft", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking....
+        /// </summary>
+        internal static string NetworkBusy {
+            get {
+                return ResourceManager.GetString("NetworkBusy", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to No sessions found.
+        /// </summary>
+        internal static string NoSessionsFound {
+            get {
+                return ResourceManager.GetString("NoSessionsFound", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Paused.
+        /// </summary>
+        internal static string Paused {
+            get {
+                return ResourceManager.GetString("Paused", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to LIVE.
+        /// </summary>
+        internal static string PlayerMatch {
+            get {
+                return ResourceManager.GetString("PlayerMatch", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Quit Game.
+        /// </summary>
+        internal static string QuitGame {
+            get {
+                return ResourceManager.GetString("QuitGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Resume Game.
+        /// </summary>
+        internal static string ResumeGame {
+            get {
+                return ResourceManager.GetString("ResumeGame", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Return to Lobby.
+        /// </summary>
+        internal static string ReturnToLobby {
+            get {
+                return ResourceManager.GetString("ReturnToLobby", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Single Player.
+        /// </summary>
+        internal static string SinglePlayer {
+            get {
+                return ResourceManager.GetString("SinglePlayer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to even though not all players are ready?.
+        /// </summary>
+        internal static string String {
+            get {
+                return ResourceManager.GetString("String", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Would you like to purchase this game?.
+        /// </summary>
+        internal static string String1 {
+            get {
+                return ResourceManager.GetString("String1", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to in order to access this functionality.
+        /// </summary>
+        internal static string String2 {
+            get {
+                return ResourceManager.GetString("String2", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to accessing the network.
+        /// </summary>
+        internal static string String3 {
+            get {
+                return ResourceManager.GetString("String3", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to off or not connected.
+        /// </summary>
+        internal static string String4 {
+            get {
+                return ResourceManager.GetString("String4", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to or there may be no network connectivity.
+        /// </summary>
+        internal static string String5 {
+            get {
+                return ResourceManager.GetString("String5", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to between the local machine and session host.
+        /// </summary>
+        internal static string String6 {
+            get {
+                return ResourceManager.GetString("String6", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to the lobby before you can join this session.
+        /// </summary>
+        internal static string String7 {
+            get {
+                return ResourceManager.GetString("String7", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to A button, Space, Enter = ok.
+        /// </summary>
+        internal static string String8 {
+            get {
+                return ResourceManager.GetString("String8", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to B button, Esc = cancel.
+        /// </summary>
+        internal static string String9 {
+            get {
+                return ResourceManager.GetString("String9", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to System Link.
+        /// </summary>
+        internal static string SystemLink {
+            get {
+                return ResourceManager.GetString("SystemLink", resourceCulture);
+            }
+        }
+    }
+}

+ 270 - 0
Windows/CatapaultNetWars/Properties/Resources.resx

@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Back" xml:space="preserve">
+    <value>Back</value>
+  </data>
+  <data name="ConfirmEndSession" xml:space="preserve">
+    <value>Are you sure you want to end this session?</value>
+  </data>
+  <data name="ConfirmExitSample" xml:space="preserve">
+    <value>Are you sure you want to exit this sample?</value>
+  </data>
+  <data name="ConfirmForceStartGame" xml:space="preserve">
+    <value>Are you sure you want to start the game,</value>
+  </data>
+  <data name="ConfirmLeaveSession" xml:space="preserve">
+    <value>Are you sure you want to leave this session?</value>
+  </data>
+  <data name="ConfirmMarketplace" xml:space="preserve">
+    <value>Online gameplay is not available in trial mode.</value>
+  </data>
+  <data name="ConfirmQuitGame" xml:space="preserve">
+    <value>Are you sure you want to quit this game?</value>
+  </data>
+  <data name="CreateSession" xml:space="preserve">
+    <value>Create Session</value>
+  </data>
+  <data name="EndSession" xml:space="preserve">
+    <value>End Session</value>
+  </data>
+  <data name="ErrorDisconnected" xml:space="preserve">
+    <value>Lost connection to the network session</value>
+  </data>
+  <data name="ErrorGamerPrivilege" xml:space="preserve">
+    <value>You must sign in a suitable gamer profile</value>
+  </data>
+  <data name="ErrorHostEndedSession" xml:space="preserve">
+    <value>Host ended the session</value>
+  </data>
+  <data name="ErrorNetwork" xml:space="preserve">
+    <value>There was an error while</value>
+  </data>
+  <data name="ErrorNetworkNotAvailable" xml:space="preserve">
+    <value>Networking is turned</value>
+  </data>
+  <data name="ErrorRemovedByHost" xml:space="preserve">
+    <value>Host kicked you out of the session</value>
+  </data>
+  <data name="ErrorSessionFull" xml:space="preserve">
+    <value>This session is already full</value>
+  </data>
+  <data name="ErrorSessionNotFound" xml:space="preserve">
+    <value>Session not found. It may have ended,</value>
+  </data>
+  <data name="ErrorSessionNotJoinable" xml:space="preserve">
+    <value>You must wait for the host to return to</value>
+  </data>
+  <data name="ErrorTrialMode" xml:space="preserve">
+    <value>This functionality is not available in trial mode</value>
+  </data>
+  <data name="ErrorUnknown" xml:space="preserve">
+    <value>An unknown error occurred</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Exit</value>
+  </data>
+  <data name="FindSessions" xml:space="preserve">
+    <value>Find Sessions</value>
+  </data>
+  <data name="HostSuffix" xml:space="preserve">
+    <value> (host)</value>
+  </data>
+  <data name="JoinSession" xml:space="preserve">
+    <value>Join Session</value>
+  </data>
+  <data name="LeaveSession" xml:space="preserve">
+    <value>Leave Session</value>
+  </data>
+  <data name="Loading" xml:space="preserve">
+    <value>Loading</value>
+  </data>
+  <data name="Lobby" xml:space="preserve">
+    <value>Lobby</value>
+  </data>
+  <data name="MainMenu" xml:space="preserve">
+    <value>Main Menu</value>
+  </data>
+  <data name="MessageBoxUsage" xml:space="preserve">
+    <value />
+  </data>
+  <data name="MessageGamerJoined" xml:space="preserve">
+    <value>{0} joined</value>
+  </data>
+  <data name="MessageGamerLeft" xml:space="preserve">
+    <value>{0} left</value>
+  </data>
+  <data name="NetworkBusy" xml:space="preserve">
+    <value>Networking...</value>
+  </data>
+  <data name="NoSessionsFound" xml:space="preserve">
+    <value>No sessions found</value>
+  </data>
+  <data name="Paused" xml:space="preserve">
+    <value>Paused</value>
+  </data>
+  <data name="PlayerMatch" xml:space="preserve">
+    <value>LIVE</value>
+  </data>
+  <data name="QuitGame" xml:space="preserve">
+    <value>Quit Game</value>
+  </data>
+  <data name="ResumeGame" xml:space="preserve">
+    <value>Resume Game</value>
+  </data>
+  <data name="ReturnToLobby" xml:space="preserve">
+    <value>Return to Lobby</value>
+  </data>
+  <data name="SinglePlayer" xml:space="preserve">
+    <value>Single Player</value>
+  </data>
+  <data name="String" xml:space="preserve">
+    <value>even though not all players are ready?</value>
+  </data>
+  <data name="String1" xml:space="preserve">
+    <value>Would you like to purchase this game?</value>
+  </data>
+  <data name="String2" xml:space="preserve">
+    <value>in order to access this functionality</value>
+  </data>
+  <data name="String3" xml:space="preserve">
+    <value>accessing the network</value>
+  </data>
+  <data name="String4" xml:space="preserve">
+    <value>off or not connected</value>
+  </data>
+  <data name="String5" xml:space="preserve">
+    <value>or there may be no network connectivity</value>
+  </data>
+  <data name="String6" xml:space="preserve">
+    <value>between the local machine and session host</value>
+  </data>
+  <data name="String7" xml:space="preserve">
+    <value>the lobby before you can join this session</value>
+  </data>
+  <data name="String8" xml:space="preserve">
+    <value>A button, Space, Enter = ok</value>
+  </data>
+  <data name="String9" xml:space="preserve">
+    <value>B button, Esc = cancel</value>
+  </data>
+  <data name="SystemLink" xml:space="preserve">
+    <value>System Link</value>
+  </data>
+</root>

+ 594 - 0
Windows/CatapaultNetWars/Resources.Designer.cs

@@ -0,0 +1,594 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CatapultGame {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CatapultGame.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Back.
+        /// </summary>
+        internal static string Back {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Back);
+#else				
+                return ResourceManager.GetString("Back", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to end this session?.
+        /// </summary>
+        internal static string ConfirmEndSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmEndSession);
+#else				
+				
+                return ResourceManager.GetString("ConfirmEndSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to exit this sample?.
+        /// </summary>
+        internal static string ConfirmExitSample {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmExitSample);
+#else								
+                return ResourceManager.GetString("ConfirmExitSample", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to start the game,
+        ///even though not all players are ready?.
+        /// </summary>
+        internal static string ConfirmForceStartGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmForceStartGame);
+#else								
+                return ResourceManager.GetString("ConfirmForceStartGame", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to leave this session?.
+        /// </summary>
+        internal static string ConfirmLeaveSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmLeaveSession);
+#else								
+                return ResourceManager.GetString("ConfirmLeaveSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Online gameplay is not available in trial mode.
+        ///Would you like to purchase this game?.
+        /// </summary>
+        internal static string ConfirmMarketplace {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmMarketplace);
+#else								
+                return ResourceManager.GetString("ConfirmMarketplace", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Are you sure you want to quit this game?.
+        /// </summary>
+        internal static string ConfirmQuitGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ConfirmQuitGame);
+#else								
+                return ResourceManager.GetString("ConfirmQuitGame", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Create Session.
+        /// </summary>
+        internal static string CreateSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.CreateSession);
+#else								
+                return ResourceManager.GetString("CreateSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to End Session.
+        /// </summary>
+        internal static string EndSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.EndSession);
+#else								
+                return ResourceManager.GetString("EndSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lost connection to the network session.
+        /// </summary>
+        internal static string ErrorDisconnected {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorDisconnected);
+#else								
+                return ResourceManager.GetString("ErrorDisconnected", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must sign in a suitable gamer profile
+        ///in order to access this functionality.
+        /// </summary>
+        internal static string ErrorGamerPrivilege {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorGamerPrivilege);
+#else				
+                return ResourceManager.GetString("ErrorGamerPrivilege", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host ended the session.
+        /// </summary>
+        internal static string ErrorHostEndedSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorHostEndedSession);
+#else								
+                return ResourceManager.GetString("ErrorHostEndedSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to There was an error while
+        ///accessing the network.
+        /// </summary>
+        internal static string ErrorNetwork {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorNetwork);
+#else								
+                return ResourceManager.GetString("ErrorNetwork", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking is turned
+        ///off or not connected.
+        /// </summary>
+        internal static string ErrorNetworkNotAvailable {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorNetworkNotAvailable);
+#else								
+                return ResourceManager.GetString("ErrorNetworkNotAvailable", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Host kicked you out of the session.
+        /// </summary>
+        internal static string ErrorRemovedByHost {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorRemovedByHost);
+#else								
+                return ResourceManager.GetString("ErrorRemovedByHost", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This session is already full.
+        /// </summary>
+        internal static string ErrorSessionFull {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorSessionFull);
+#else								
+                return ResourceManager.GetString("ErrorSessionFull", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Session not found. It may have ended,
+        ///or there may be no network connectivity
+        ///between the local machine and session host.
+        /// </summary>
+        internal static string ErrorSessionNotFound {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorSessionNotFound);
+#else								
+                return ResourceManager.GetString("ErrorSessionNotFound", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to You must wait for the host to return to
+        ///the lobby before you can join this session.
+        /// </summary>
+        internal static string ErrorSessionNotJoinable {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorSessionNotJoinable);
+#else								
+                return ResourceManager.GetString("ErrorSessionNotJoinable", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to This functionality is not available in trial mode.
+        /// </summary>
+        internal static string ErrorTrialMode {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorTrialMode);
+#else								
+                return ResourceManager.GetString("ErrorTrialMode", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to An unknown error occurred.
+        /// </summary>
+        internal static string ErrorUnknown {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ErrorUnknown);
+#else								
+                return ResourceManager.GetString("ErrorUnknown", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Exit.
+        /// </summary>
+        internal static string Exit {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Exit);
+#else								
+                return ResourceManager.GetString("Exit", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Find Sessions.
+        /// </summary>
+        internal static string FindSessions {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.FindSessions);
+#else								
+                return ResourceManager.GetString("FindSessions", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to  (host).
+        /// </summary>
+        internal static string HostSuffix {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.HostSuffix);
+#else								
+                return ResourceManager.GetString("HostSuffix", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Join Session.
+        /// </summary>
+        internal static string JoinSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.JoinSession);
+#else								
+                return ResourceManager.GetString("JoinSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Leave Session.
+        /// </summary>
+        internal static string LeaveSession {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.LeaveSession);
+#else								
+                return ResourceManager.GetString("LeaveSession", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Loading.
+        /// </summary>
+        internal static string Loading {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Loading);
+#else								
+                return ResourceManager.GetString("Loading", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Lobby.
+        /// </summary>
+        internal static string Lobby {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Lobby);
+#else								
+                return ResourceManager.GetString("Lobby", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Main Menu.
+        /// </summary>
+        internal static string MainMenu {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MainMenu);
+#else								
+                return ResourceManager.GetString("MainMenu", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to 
+        ///A button, Space, Enter = ok
+        ///B button, Esc = cancel.
+        /// </summary>
+        internal static string MessageBoxUsage {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MessageBoxUsage);
+#else								
+                return ResourceManager.GetString("MessageBoxUsage", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} joined.
+        /// </summary>
+        internal static string MessageGamerJoined {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MessageGamerJoined);
+#else								
+                return ResourceManager.GetString("MessageGamerJoined", resourceCulture);
+#endif				
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {0} left.
+        /// </summary>
+        internal static string MessageGamerLeft {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.MessageGamerLeft);
+#else								
+                return ResourceManager.GetString("MessageGamerLeft", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Networking....
+        /// </summary>
+        internal static string NetworkBusy {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.NetworkBusy);
+#else								
+                return ResourceManager.GetString("NetworkBusy", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to No sessions found.
+        /// </summary>
+        internal static string NoSessionsFound {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.NoSessionsFound);
+#else								
+                return ResourceManager.GetString("NoSessionsFound", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Paused.
+        /// </summary>
+        internal static string Paused {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.Paused);
+#else								
+                return ResourceManager.GetString("Paused", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to LIVE.
+        /// </summary>
+        internal static string PlayerMatch {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.PlayerMatch);
+#else								
+                return ResourceManager.GetString("PlayerMatch", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Quit Game.
+        /// </summary>
+        internal static string QuitGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.QuitGame);
+#else								
+                return ResourceManager.GetString("QuitGame", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Resume Game.
+        /// </summary>
+        internal static string ResumeGame {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ResumeGame);
+#else								
+                return ResourceManager.GetString("ResumeGame", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Return to Lobby.
+        /// </summary>
+        internal static string ReturnToLobby {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.ReturnToLobby);
+#else								
+                return ResourceManager.GetString("ReturnToLobby", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Single Player.
+        /// </summary>
+        internal static string SinglePlayer {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.SinglePlayer);
+#else								
+                return ResourceManager.GetString("SinglePlayer", resourceCulture);
+#endif
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to System Link.
+        /// </summary>
+        internal static string SystemLink {
+            get {
+#if ANDROID				
+				return  Android.App.Application.Context.Resources.GetString(CatapultWarsNet.Resource.String.SystemLink);
+#else								
+                return ResourceManager.GetString("SystemLink", resourceCulture);
+#endif
+            }
+        }
+    }
+}

BIN
Windows/CatapaultNetWars/Resources.resources


+ 250 - 0
Windows/CatapaultNetWars/Resources.resx

@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Back" xml:space="preserve">
+    <value>Back</value>
+  </data>
+  <data name="ConfirmEndSession" xml:space="preserve">
+    <value>Are you sure you want to end this session?</value>
+  </data>
+  <data name="ConfirmExitSample" xml:space="preserve">
+    <value>Are you sure you want to exit this sample?</value>
+  </data>
+  <data name="ConfirmForceStartGame" xml:space="preserve">
+    <value>Are you sure you want to start the game,
+even though not all players are ready?</value>
+  </data>
+  <data name="ConfirmLeaveSession" xml:space="preserve">
+    <value>Are you sure you want to leave this session?</value>
+  </data>
+  <data name="ConfirmMarketplace" xml:space="preserve">
+    <value>Online gameplay is not available in trial mode.
+Would you like to purchase this game?</value>
+  </data>
+  <data name="ConfirmQuitGame" xml:space="preserve">
+    <value>Are you sure you want to quit this game?</value>
+  </data>
+  <data name="CreateSession" xml:space="preserve">
+    <value>Create Session</value>
+  </data>
+  <data name="EndSession" xml:space="preserve">
+    <value>End Session</value>
+  </data>
+  <data name="ErrorDisconnected" xml:space="preserve">
+    <value>Lost connection to the network session</value>
+  </data>
+  <data name="ErrorGamerPrivilege" xml:space="preserve">
+    <value>You must sign in a suitable gamer profile
+in order to access this functionality</value>
+  </data>
+  <data name="ErrorHostEndedSession" xml:space="preserve">
+    <value>Host ended the session</value>
+  </data>
+  <data name="ErrorNetwork" xml:space="preserve">
+    <value>There was an error while
+accessing the network</value>
+  </data>
+  <data name="ErrorNetworkNotAvailable" xml:space="preserve">
+    <value>Networking is turned
+off or not connected</value>
+  </data>
+  <data name="ErrorRemovedByHost" xml:space="preserve">
+    <value>Host kicked you out of the session</value>
+  </data>
+  <data name="ErrorSessionFull" xml:space="preserve">
+    <value>This session is already full</value>
+  </data>
+  <data name="ErrorSessionNotFound" xml:space="preserve">
+    <value>Session not found. It may have ended,
+or there may be no network connectivity
+between the local machine and session host</value>
+  </data>
+  <data name="ErrorSessionNotJoinable" xml:space="preserve">
+    <value>You must wait for the host to return to
+the lobby before you can join this session</value>
+  </data>
+  <data name="ErrorTrialMode" xml:space="preserve">
+    <value>This functionality is not available in trial mode</value>
+  </data>
+  <data name="ErrorUnknown" xml:space="preserve">
+    <value>An unknown error occurred</value>
+  </data>
+  <data name="Exit" xml:space="preserve">
+    <value>Exit</value>
+  </data>
+  <data name="FindSessions" xml:space="preserve">
+    <value>Find Sessions</value>
+  </data>
+  <data name="HostSuffix" xml:space="preserve">
+    <value> (host)</value>
+  </data>
+  <data name="JoinSession" xml:space="preserve">
+    <value>Join Session</value>
+  </data>
+  <data name="LeaveSession" xml:space="preserve">
+    <value>Leave Session</value>
+  </data>
+  <data name="Loading" xml:space="preserve">
+    <value>Loading</value>
+  </data>
+  <data name="Lobby" xml:space="preserve">
+    <value>Lobby</value>
+  </data>
+  <data name="MainMenu" xml:space="preserve">
+    <value>Main Menu</value>
+  </data>
+  <data name="MessageBoxUsage" xml:space="preserve">
+    <value>
+A button, Space, Enter = ok
+B button, Esc = cancel</value>
+  </data>
+  <data name="MessageGamerJoined" xml:space="preserve">
+    <value>{0} joined</value>
+  </data>
+  <data name="MessageGamerLeft" xml:space="preserve">
+    <value>{0} left</value>
+  </data>
+  <data name="NetworkBusy" xml:space="preserve">
+    <value>Networking...</value>
+  </data>
+  <data name="NoSessionsFound" xml:space="preserve">
+    <value>No sessions found</value>
+  </data>
+  <data name="Paused" xml:space="preserve">
+    <value>Paused</value>
+  </data>
+  <data name="PlayerMatch" xml:space="preserve">
+    <value>LIVE</value>
+  </data>
+  <data name="QuitGame" xml:space="preserve">
+    <value>Quit Game</value>
+  </data>
+  <data name="ResumeGame" xml:space="preserve">
+    <value>Resume Game</value>
+  </data>
+  <data name="ReturnToLobby" xml:space="preserve">
+    <value>Return to Lobby</value>
+  </data>
+  <data name="SinglePlayer" xml:space="preserve">
+    <value>Single Player</value>
+  </data>
+  <data name="SystemLink" xml:space="preserve">
+    <value>System Link</value>
+  </data>
+</root>

BIN
iOS/Draw2D/Content/monogameicon48x48.png


+ 4 - 0
iOS/Draw2D/Game1.cs

@@ -152,6 +152,10 @@ namespace Microsoft.Xna.Samples.Draw2D
 			spriteBatch.Draw (texture, new Rectangle (150,390,texture.Width,texture.Height), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.FlipVertically, 0);	
 			spriteBatch.Draw (texture, new Rectangle (150,390,texture.Width,texture.Height), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.FlipVertically, 0);	
 			// Flip horizontaly and verticaly
 			// Flip horizontaly and verticaly
 			spriteBatch.Draw (texture, new Rectangle (220,390,texture.Width,texture.Height), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically, 0);	
 			spriteBatch.Draw (texture, new Rectangle (220,390,texture.Width,texture.Height), null, Color.White, 0.0f, Vector2.Zero, SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically, 0);	
+			
+			// Scale
+			spriteBatch.Draw (texture, new Vector2 (290,390), null, Color.White, 0.0f, Vector2.Zero, new Vector2(0.5f, 1.6f), SpriteEffects.None,0.0f);
+			
             
             
 			base.Draw (gameTime);
 			base.Draw (gameTime);