World Of Goo – or a simple aproximation thereof – in Silverlight!?

There’s this wonderful physics based puzzler game called World of Goo, if you have the time, I encourage you to try it out. Buy it, it’s well worth it! I enjoy it by myself and I’ve played it with my six years old son – on the Wii we can play it together.

Anyway, a while back I decided I wanted to try make my own “clone” of World of Goo. At least copy the mechanics and the physics of the game.

Physics in Silverlight / C# / .NET

First of, I needed a physics engine. Previously I’ve worked heavily with Open Dynamics Engine (ODE) – a fully fledged 3D physics engine that I created a Delphi DLL wrapper for waaay back.

But for 2D physics in C#, I was pleasantly surprised to find Farseer Physics – a simple to use and well thought out 2D physics engine based on Box2D.

Rendering in Silverlight / Win32 / WPF

Previously, I’ve only worked with OpenGL, I’ve been a contributor to a OpenGL engine in the distant past. But for 3D graphics in Win32 / Silverlight, I decided to go with WPF – a decision I haven’t regretted.

Putting them Together

After a few days (literally) days of work, I was able to create a simple POC (proof of concept) that imitates World of Goo mechanics and physics using WPF for a renderer.


Have you ever seen the Simpsons episode where someone offers Homer goo and he replies “ooooh, free gooo!!!”? Well, if you ever have, you’re sure to realize that the only sensible name for a would be clone of World of Goo would be…. FreeGoo! So I created a project on CodePlex where you can download the source of FreeGoo.

If you’re interested in game development then you should download it and give it a try! Here’s a screenshot;


And Now for Something Completely Different – Silverlight

Since I’m a Silverlight fan and I’ve built FreeGoo using C# and WPF and FarSeer (both are available in Silverlight), one of my goals are to convert FreeGoo to Silverlight.

I’ll use this blog to outline my progress.

First Step

My first step is to handle the problem that C# projects/assemblies can’t be used in Silverlight and vice versa. That will be possible in Silverlight 4, but currently, it isn’t. What to do? Well, a tool of course – a tool that takes a C# project and emits a Silverlight project…

Stay tuned…

[Edit: Turns out the answer is Project Linker]