Archive for the ‘XNA’ Category.

Post Process Engine Modification

Ok, a few days ago, i played with the post process engine Mahdi Khodadadi made.
It wasn’t totally fitting my needs, so I “think” i improved it a little bit. (Now, adding an effect is as simple as dropping it in the right folder, and making an advanced one is as simple as derivating the PostProcessEffect)

Today effects are : Color Tone, Combine, Gaussian Blur, Radial Blur, Smart Blur, Simple Blur, Tone Mapping, Bright Extract, Color Inverse, Edge Detection, Embossing, Sharpen, Night Time, Under Water, and differents Greyscale effects.

Here is what’s new :
*-Simples Effects can be loaded automatically, they just need to be in the right path.
*-For more sophisticated effects, just create the right .cs file, according to the ones i already made.
*-For advanced effects, simply define parameters as properties, and override what’s needed.
*-Effects are currently manager through a simple queue/dictionnary list, this will probably change in the future.
*-Viewports are recreated automatically when device lost/reset, RenderTargets too.
*-When drawing, only draw in the current viewport (should work for my splitted screen multiplayer game, although, i haven’t tested it yet) (Different effects for each players)
*-I changed the namespaces to reflect my current game architecture, and to best fit into my UML designer
*-Added some more effects from Glenn Wilson (Mykres)
*-Using a delegate for the drawing (almost all effects are using a delegate from the PostProcessManager, but a few overrides their begin/draw/end functions)
*-Can update needed variables for each effect, just overload the Update methods, default one will set any hlsl parameter whose name contains ‘timer’ to the current total second value.

Here the creation of the post process manager :

PostProcessManager ppm = new PostProcessManager(this, this.graphics.GraphicsDevice, this.content);
this.Components.Add(ppm);

And here the code you need to put in update (the effect queue is flushed every frame)

ppm.AppliedEffects.Enqueue(ppm.EffectDictionary.Keys[currentEffectIndex]);

You can DOWNLOAD the library right here (Use space to change the current effect), change it as you want, but please give credits to Mahdi, Mykres and me.
(I left the .svn folder intentionally in the zip files, so you can update to the last version, I don’t promise the Queue and Dictionnary will last a long time.)

Multiplayer and viewports

Ok, a few weeks ago, i implemented multiplayer views on my race game, and, i have to admit, it was pretty easy. (Thanks to XNA, defining a viewport is only a few lines of code)

so, here is the code i use to set each player it’s part in the screen (for one to four players, you just have to call this function before you draw your player X stuff).

		private void SetupViewport()
		{
			// 1 player
			if (m_raceScreen.InitDatas.TotalPlayerCount == 0) 
				return; // don't touch viewport, we're obviously the only player :)
			
			Viewport v = new Viewport();
			v.X = 0;
			v.Y = 0;
			v.Width = XeGame.Device.PresentationParameters.BackBufferWidth;
			v.Height = XeGame.Device.PresentationParameters.BackBufferHeight;

			#region 2 players
			if (m_raceScreen.InitDatas.TotalPlayerCount == 1) // 2 player
			{
				if (v.Height > v.Width) // cut height in 2
				{
					v.Height = v.Height / 2;

					if (this.m_playerIndex == PlayerIndex.One)
					{
						v.Y = 0;
					}

					if (this.m_playerIndex == PlayerIndex.Two)
					{
						v.Y = v.Height;
					}
				}
				else
				{
					v.Width = v.Width / 2;

					if (this.m_playerIndex == PlayerIndex.One)
					{
						v.X = 0;
					}
					
					if (this.m_playerIndex == PlayerIndex.Two)
					{
						v.X = v.Width;
					}
				}
			}
			#endregion

			#region 3 players
			if (m_raceScreen.InitDatas.TotalPlayerCount == 2) // 3 player
			{
				if (v.Height > v.Width)
				{
					v.Height = v.Height / 3;

					if (this.m_playerIndex == PlayerIndex.One)
						v.Y = 0;

					if (this.m_playerIndex == PlayerIndex.Two)
						v.Y = v.Height;

					if (this.m_playerIndex == PlayerIndex.Three)
						v.Y = v.Height * 2;
				}
				else // standard case (4/3, 16/9, 16/10)
				{
					v.Width = v.Width / 2;

					if (this.m_playerIndex == PlayerIndex.One)
					{
						v.Y = 0;
						v.X = 0;
					}
					
					if (this.m_playerIndex == PlayerIndex.Two)
					{
						v.Height = v.Height / 2;
						v.X = v.Width;
					}

					if (this.m_playerIndex == PlayerIndex.Three)
					{
						v.Height = v.Height / 2;
						v.X = v.Width;
						v.Y = v.Height;
					}
				}
			}
			#endregion

			#region 4 players
			if (m_raceScreen.InitDatas.TotalPlayerCount == 3) // 4 player
			{
				if (v.Height > v.Width)
				{
					v.Height = v.Height / 4;

					if (this.m_playerIndex == PlayerIndex.One)
						v.Y = 0;

					if (this.m_playerIndex == PlayerIndex.Two)
						v.Y = v.Height;

					if (this.m_playerIndex == PlayerIndex.Three)
						v.Y = v.Height * 2;

					if (this.m_playerIndex == PlayerIndex.Four)
						v.Y = v.Height * 3;
				}
				else // standard case
				{
					v.Width = v.Width / 2;
					v.Height = v.Height / 2;

					if (this.m_playerIndex == PlayerIndex.One)
					{
						v.Y = 0;
						v.X = 0;
					}

					if (this.m_playerIndex == PlayerIndex.Two)
					{
						v.Y = 0;
						v.X = v.Width;
					}

					if (this.m_playerIndex == PlayerIndex.Three)
					{
						v.X = 0;
						v.Y = v.Height;
					}

					if (this.m_playerIndex == PlayerIndex.Four)
					{
						v.X = v.Width;
						v.Y = v.Height;
					}
				}
			}
			#endregion

			XeGame.Device.Viewport = v;
		}

Actually, a lot of work have been made when i see the screenshots i took 3 months ago. (Sun is now a big heap of particles, models have been smoothed a lot, physics are almost in place, post scree processing engine have been integrated, and the SceneRenderManager is almost ready, and will makes render a lot simpler)

See by yourself : Four players Sun, planets and ship

Is there life on Mars ? (Updated)

For life, i don’t know, but, I’m pretty sure I can crash on it 🙂

Mars Asteroid Earth

uXe update

Well, after some persons want me to show the progress of my DBP entry (which now i’m sure won’t be 100% ready for july 2), i can show you a screen of the effect me and my friend (loulou again!!!) we integrated today. It’s just a simple integration of the Particle3DSample from creators club, but, hey, it’s working great, it renders nice, and with some slight modifications, fit perfectly to our needs. Screenshot and svn adress with more 🙂
Continue reading ‘uXe update’ »

First Trys with XNA

Oh, this post was forgotten ! I begun to write it at the beginning of the year 🙂

Ok, you might want to know what XNA is ? That’s the framework Microsoft released last week for indie game developper, to create game, easily, quickly, both on Xbox 360 and pc. You can get some more info here.

I’m just gonna give some feelings about XNA, then, in next posts, i’ll talk about what i’m working on (yep, the next next generation universal game, who will bring peace on earth).

Pros
– Integration into VC# Express, it’s really great, its as much integrated as the .net framework, xna guys made a great job on this part.
– The power of C#, both on PC and Xbox 360 (no more memory management !!)
– All the code you write is almost the same on both platform.
– Great Framework, taking care of all annoying things (windows management, content pipeline)

Cons
– No Real Integration with VS complete (miss the Content Pipeline on full editions)
– Almost only C# (not a problem for me anyway)
– Requires a subscription to Xbox Live Gold, and another one to Creators Club to run your stuff on Xbox
– No network on Xbox for the moment. (Xbox Compact Framework is still incomplete, and a few bugs remains)
– That’s all 🙂