The original Angry Birds is credited to Box2D, a free 2D rigid-body physics engine written by Erin Catto. That attribution is repeated everywhere and is almost certainly right, but it’s worth being precise: Rovio has never published a technical breakdown of the 2009 game, and Box2D’s own site and publication list don’t name any commercial titles. So treat it as the accepted account rather than an official statement.
What can be checked is what Box2D is, why it fits a slingshot game, and what a game in that genre uses today.
What is Box2D? #
Box2D describes itself as “a 2D rigid body simulation library for games.” It’s written by Erin Catto, released under the MIT licence, and the current version is 3.1.0. Its documentation says it exists so programmers can “make objects move in realistic ways and make the game world more interactive.”
According to the project’s documentation, it was created as part of a physics tutorial at the Game Developers Conference, and Catto has published talks and papers alongside it for two decades, on topics including Sequential Impulses (2006), Contact Manifolds (2007), Modeling and Solving Constraints (2009), Continuous Collision (2013) and Dynamic Bounding Volume Hierarchies (2019).
The feature list is the reason it suits games like Angry Birds:
- Rigid bodies of simple shapes: convex polygons, circles and capsules
- A rigid body solver with joints, including revolute (hinge) and prismatic (slider)
- Continuous collision detection, which stops fast objects passing through thin walls between frames
- Ray casting, for line-of-sight and aiming checks
- Written in portable C17, with multithreading and SIMD
Every one of those maps onto something you see in a slingshot game. The pig towers are polygons and circles. The hanging objects are joints. The bird moving at launch speed is exactly the case continuous collision detection exists to handle.
Why a slingshot game needs so little #
A game like Angry Birds asks for a short list of behaviours: gravity, collisions between simple shapes, stacking that doesn’t jitter, and friction that holds a tower up until it shouldn’t. That’s the standard feature set of every 2D physics engine, which is why so many games of that era felt physically similar.
The engine doesn’t decide how a game feels. The numbers do. Each object gets a density, a friction value and a bounciness value, and those three are what separate a floaty game from a punchy one. We go through the whole loop in how physics games work.
What other engines are there? #
| Engine | Language | Typically used for |
|---|---|---|
| Box2D | C17 | Native 2D games, and as a base inside larger engines |
| Matter.js | JavaScript | Web games and JavaScript app frameworks |
| Unity and Unreal’s built-in physics | C# / C++ | Games built inside those engines, 2D and 3D |
Matter.js is the web equivalent, written by Liam Brummitt. Its feature list covers rigid bodies, compound and composite bodies, convex and concave hulls, restitution, friction, constraints, gravity, sleeping bodies and collision detection split into broad, mid and narrow phases. If you’ve ever seen a physics demo running in a browser, there’s a good chance it was this.
Big general-purpose engines ship with physics built in, which is why so many games made in them share a feel. That’s a tuning choice as much as a technical one.
What Kitty Kaboom uses #
Kitty Kaboom, our cats-versus-robots slingshot game, runs on Matter.js, with the game world drawn through Skia for speed on a phone. Some specifics, since they’re easier to state honestly about our own game than about someone else’s:
- Gravity is set to 2.5 in the engine’s units, a number picked for how a shot feels on a phone screen rather than to imitate Earth.
- The simulation steps at 1/60 of a second, a fixed step, which keeps results consistent.
- Every cat is a circle and every block is a rectangle or a circle, with a density, friction and bounciness value each. Soap has a friction of 0.01, so stacks slide apart. The pink cushions have a bounciness of 0.95, which makes them trampolines.
- When two objects touch, Matter.js takes the higher of their two bounciness values and the lower of their two friction values. That single rule is why anything at all bounces off a cushion and why anything at all slides on soap.
- Breaking isn’t physics. The engine only moves and collides things. Each block has hit points, each impact deals damage based on speed and mass, and the game removes the block when they run out.
There’s one more trick worth mentioning because it’s invisible. When a level loads, the game runs about a second of simulation with damage switched off and speeds damped, so any hairline overlaps in the layout settle quietly instead of launching a tower across the screen on the first frame. Stacking is the hardest thing you can ask a 2D physics engine to do well.
Does the engine matter to players? #
Barely. Two games on the same engine can feel nothing alike, and two games on different engines can feel nearly identical. What players notice is the tuning: how strong gravity is, how heavy things are, how much they bounce, how much feedback fires on impact.
That last part isn’t simulation at all. The screen shake, the brief pause on a heavy hit, the debris and the slow motion are presentation layered on top, and they do more for the feel of a hit than any engine choice. Which is the subject of why destruction games are so satisfying.
Frequently asked questions #
Is Box2D free to use? #
Yes. It’s released under the MIT licence, which allows commercial use. That’s part of why it spread so widely through 2D games in the late 2000s and 2010s.
What engine do the newer Angry Birds games use? #
Rovio hasn’t published that, and we’re not going to guess. The games have been rebuilt several times across 2D and 3D, and Angry Birds 2, Journey, Reloaded and Bounce are different products with different needs.
Can I make a slingshot game with Box2D? #
Yes, and it’s a common first project. You need a body for the projectile, bodies for the blocks, gravity, and code that sets the projectile’s velocity when the player releases. The hard parts are stacking that doesn’t jitter and making impacts feel good, not the launch.
What’s the difference between Box2D and Matter.js? #
Box2D is written in C for native applications and is the older, faster of the two. Matter.js is written in JavaScript for the web and for JavaScript app frameworks. The concepts are nearly the same: rigid bodies, density, friction, restitution and constraints.
Do physics engines break objects? #
No. They move objects and resolve collisions. Breaking, damage and explosions are rules the game adds on top, usually by giving each object hit points and removing it when an impact uses them up.