About

I'm an independent game developer living in Cracow, Poland. Born in 1987, graduated from Jagiellonian University in 2010. Former gameplay programmer at Polish game studio Tate Interactive.

Contact

E-mail:
madras/AT/madras/DOT/pl

Twitter: MarcinDraszczuk

My Games

Yet Another Zombie Defense

Duel: The Art of Combat

Get Your Girlfriend Into Games

Tag cloud

(all)

Archives

01 Dec - 31 Dec 2010
01 Jan - 31 Jan 2011
01 Mar - 31 Mar 2011
01 Jun - 30 Jun 2011
01 Nov - 30 Nov 2011
01 Dec - 31 Dec 2011
01 Jan - 31 Jan 2012
01 Feb - 29 Feb 2012
01 Mar - 31 Mar 2012
01 Apr - 30 Apr 2012

Search!

Last Comments

Stuff

Powered by Pivot - 1.40.7: 'Dreadwind' 
XML: RSS Feed 
XML: Atom Feed 

It's done!

Saturday 26 March 2011 at 5:46 pm After weeks of strenuous effort we can finally announce that Oozi: Earth Adventure Ep. 1 is now available to Xbox 360 gamers!

You can download the game directly from Xbox Live Indie Games section on your Xbox or using Xbox Marketplace website: Oozi: Earth Adventure Ep. 1

Please remember to rate the game and click "Like" on our Facebook page. Thanks!

We also recorded a brand new trailer for Oozi that showcases features we added during last two months, you can watch it right here:

Oozi vs Garbage Collector

Saturday 12 March 2011 at 6:08 pm Yesterday I finally managed to go down with runtime garbage generation to zero bytes per second. You think it's easy task, just use pooling and avoid String concatenations? Well, that's what I thought some time ago. Unfortunately I was wrong. Here are some things that are good to know if you're going for garbage-free XNA-Xbox game.

1) StringBuilder isn't garbage free. Surprised? I was pretty sure that this class was designed to avoid garbage. Unfortunately, it works garbage-free only for String and char Append methods. If you want to append int, garbage will be generated. Fortunately I found a free implementation of garbage-free Append methods on Gavin Pugh's blog (thanks Gavin!).

2) XACT isn't garbage free. Furthermore, SoundEffect.Play() isn't garbage free as well. What can you do? The only thing you can do to play sounds and avoid garbage is to keep a pool of SoundEffectInstances. However, you can't keep more than 300 instances at once on Xbox, if you do it will crash. I included my code that manages a pool of SoundEffectInstances at the end of this post.

3) Foreach loop might generate garbage in some cases. Especially when you're iterating over a Collection, i.e. Dictionary.Keys collection. You can read more on foreach garbage here.

int soundEffectInstancesCount;
Dictionary< SoundEffect, List< SoundEffectInstance > > SingleInstancesCache
= new Dictionary< SoundEffect, List< soundeffectinstance > >();

public void playSingleSound( SoundEffect soundEffect, float volume )
{
List < SoundEffectInstance> instances;
if (!SingleInstancesCache.ContainsKey(soundEffect))
{
instances = new List(10);
SingleInstancesCache[soundEffect] = instances;
}
else
instances = SingleInstancesCache[soundEffect];

for (int iSoundInstance = 0; iSoundInstance < instances.Count; ++iSoundInstance)
{
SoundEffectInstance instance = instances[iSoundInstance];
if (instance.State == SoundState.Stopped)
{
instance.Play();
return;
}
}

SoundEffectInstance newInstance = soundEffect.CreateInstance();
SingleInstancesCache[soundEffect].Add(newInstance);
newInstance.Play();
soundEffectInstancesCount++;
if (soundEffectInstancesCount % 20 == 0)
System.Diagnostics.Debug.WriteLine("Sound effect instances count over "
+ soundEffectInstancesCount);
}