The Great Debate: Framework or Engine

Ludum Dare is upon us in only a few days, and like every competition, newcomers and veterans alike prepare themselves for the stress, excitement, heartache, nervousness, and fun of the event. One of the most important choices is the choice of tools to use to develop your game, and there are a multitude of different options out there for all skill sets. One question I often wrestle with the week prior to the event is whether to choose to develop my game using a framework or an engine, and I wanted to write a bit about the benefits and drawbacks of each choice to help others who might be struggling with the same issue.

framework is a collection of libraries that help facilitate game development. They help provide common functionality that most games require, such as handling inputs and rendering visuals on the screen. They try to be as minimalist as possible, only giving the developer what they absolutely need, allowing him or her to customize their tool set to fit his or her personal preference. Frameworks are the scaffolding used to build engines. They usually have communities that are actively building adapters and plugins for different tools to better integrate the two together. Using a framework to develop your game gives a deeper insight in the challenges of piecing your idea together, and can be a rewarding experience as you grow your understanding game by game.

From a game jam sense, frameworks often require more initial setup to get started on creating your game, since you often need to write boilerplate code in order to start the game, handle game state transitions, load assets, etc. They are often much more fluid in how to achieve particular game development goals, since their goal is to give individual developers the ability to choose their own route. Often, it takes longer to see the fruits of your efforts when using a framework, and it may leave you with less time to tweak and improve on your ideas. Frameworks often require a higher technical skill cap to use, as you need some understanding of programming in order to utilize them; however, most of concepts you learn while using a framework can easily be transported to another framework if you decide to try a different one in subsequent games.

Good examples of frameworks are XNA, Love2D, and SDL. All of these provide the developer with only what is necessary to create a game, and leave the rest up to him or her.

An engine is a framework and set of tools and processes bundled together. Engines give developers the complete package for getting started, from a fully realized asset pipeline to map creation tools. Engines are often the results of a developer spending many years perfecting their preferred method of development and releasing it so that others do not have to walk the same path to achieve the same goal. Engines are the toolbox used to build games in a specific way. Some engines are highly specific, optimized to only build a particular genre of games. While it may be feasible to use those engines to build other genres, you are actively working against the design of the engine. Engines often have communities that are actively providing improvements to the engine itself, rather than attempting to patch in outside tools to use with the engine.

From a game jam perspective, engines sometimes require an upfront understanding of their particular workflow, but get you quicker into developing your game. They can be rigid in how things are done; they were built to utilize a particular map editor or work with bitmaps, so trying to use other map editing software or vector graphics will either require going outside the bounds of the engine or even be impossible. Engines have a varied skill cap to use; some engines can be just as challenging to master as frameworks, but generally are designed to be usable by anyone who puts in the effort to learn the tools that come with the engine. Engines can expose the underlying framework to the developer, but will unlikely allow him or her to change anything fundamental about the engines design. The skills you learn while using an engine are less likely to be applicable in other engines.

Good examples of engines are Unity, Source, and Twine. All of these provide the developer with a complete tool set to get started on creating a game.

The choice of what to use depends largely on a few key factors:

  • What is your goal for this Ludum Dare? As in, do you want to learn a new tool, build a complete game, have fun with friends, etc.?
  • Are you willing to try something new?
  • How much time are you willing to invest learning a tool versus using something you already know?

If you want to use something you are already familiar with, then have fun! There’s no harm in it. However, if you want to try something new, or already know a few different game development options and need help decided what to use, then first ask yourself those three questions, then carefully way the pros and cons of your options. Hopefully, I’ve provided a quick reference for some of a common difference between frameworks and engines to help your decision. This is in no way an exhaustive list, and if you have comments or questions, feel free to reply with your thoughts. I am certain loads of people would love to hear other perspectives. Thanks, and have fun jamming this weekend!