This project is read-only.
Buttermilk is a *DISCONTINUED* 2D XNA game / GUI engine that was being built for the game "Rogue Bishop". It's a very easy-to-use 2D game engine which tranparently supports 3D objects in the 2D scene graph. It currently includes a dynamically-skinned GUI system. The GUI system is completely separated from the 2D game engine in its own project module, and can be used in any XNA application, 2D or 3D.

This project is discontinued. This code is dead. Buttermilk Game / Gui Engine is available for archival purposes only.

Buttermilk is currently being rewritten in 3D as the "Ox Game Engine". Feel free to use the code for whatever you want though.

Contact me at if you have any questions!

- Bryan Edds

Notes from the Last and FINAL update...

This Is An Evaluation Version!

Please note that the current build is an evaluation version only and should not be used in any distributed application. It's still a little too early to be ready for some uses at this time, and its restricted licensing reflect such. When it is ready for prime time, the license will be changed to a far more liberal one. Nonetheless, it already has all the neat features for you to get started with!

Current Features
  • Sprites which can be dynamically changed from 2D to 3D on the fly
  • Tile Layers
  • Tile Maps
  • Framework for an MVC GUI system which already includes all common components, and a truly dynamic GUI skin system
  • A non-rotational, rectangle-based collision system
  • A non-rotational, rectangle-based physics system
  • Complex animated sprite system using key frames (unstable due to lack of testing)
  • Complete serialization / deserialization of many key game objects like tile maps, key animated sprites, etc to / from disk (no editors yet though!).
  • A nice particle system which can use animated 2D or non-animated 3D objects.
  • Optimized 2D sprite batch rendering system
  • 2D scenegraph which transparently interoperates with 3D models
  • %100 automated content loading / unloading / reloading system.
  • Resource management system makes sure you never load the same graphics in memory twice.
  • Virtual PiXel system automatically keeps your graphics the same size no matter what resolution your game is in, and supports a non-stretched, wide screen mode!

What is the Buttermilk GUI Engine good for?

Buttermilk has one of the most advanced and complete GUI systems available for any XNA engine out there. Out of the box, it should support most any GUI system no matter how complex. For those with specific needs, Buttermilk exposes its innards so that you can, with the requisite skill, make all the custom GUI components you need. And on that note, feel free to send them to me for integration into the main release if you so please! :)

Now I know what the Buttermilk GUI engine is good for. What 2D games is the Buttermilk GAME Engine good for?

Almost all games! Shooters, platformers, RPGs, strategy games... Buttermilk is good for so many games, the better question is what games is the Buttermilk Game Engine NOT good for.

So then, what 2D games is the Buttermilk Game Engine NOT good for?

Out of the box, Buttermilk does not have the functionality to do intense physics games or games with scene rotations because its collision system, physics system, and scene graph to a certain extent do not support rotations. Buttermilk could definitely be extended to support this functionality and thus the neat-o 2D physics games genre, but you would have to refactor the scene graph to support rotation with mounting as well as plug in a new collision and physics system. Fortunately, I have made plugging these systems in very easy using XNA's game component functionality.

Additionally, Buttermilk is not recommended for 3D isometric games (like, say, Super Mario RPG on the Super NES). This would be difficult, moreso than plugging in new collision and physics systems.

Current Issues

Of course, since this project is so new, there are a few issues that have yet to be resolved. They include -
  • Problem keeping 3D sprites the exact same size among different resolutions
  • No normal is calculated for collisions yet
  • Some incomplete features here and there
  • Bugs, of course!

What is needed?

Anyone who can help resolve some of the current issues would be a great asset on this project. None of the problems are very complex, but do require someone who knows what they're doing in the given system to resolve them. So if you can contribute some fixes, feel free to submit them!

Also, some bug testers for the upcoming release would be GREAT! If anyone wants to help, contact me at the forums here or at

Or, if you would like to post an issue or make a suggestion, the forums and the open bug reporting system at this codeplex page will make it easy!

So what's coming up next?

Very Near Future -

0.1.10 will simply be getting more polish and another gui component called GuiPopUpList.

Near Future -

Buttermilk 1.0.0 is coming up soon! Buttermilk 1.0.0 will support shaders on the 3D models. I'm putting them in as of right now! The license will also change to a far looser one as the whole thing gets ready for prime time. There may be a charge for commercially-release games, but no charge for freely released games. I'm thinking GPL with an option for a commercial licence.

Far Future -

Once Rogue Bishop is finished, I will write Buttermilk 2.0. In Buttermilk 2.0, I will rewrite the TextureRenderable, ModelRenderable and RenderQueue portion of the code so that SpriteBatch is no longer used. Instead of using Texture2D's, I'll do everything with an totally optimized 3D engine which will completely minimize state changes and maximise performance. This will allow for shaders on 2D objects as well. I will also change the scenegraph to be more traditional (think a normal 3D scenegraph, but in 2D). I will probably also add animation for the 3D models. Also, there will be a tile editor and sprite animation editor written for Buttermilk.

Have Fun Playing with Buttermilk!

Last edited Aug 18, 2008 at 4:26 AM by bryanedds, version 42