Bark Breaker Daily 🐾
A free daily roguelite brick breaker that lives inside Reddit. One run a day, seven daily heroes, and the same map for everyone. The leaderboard is a fair fight and the fun is in the build. This is the story of how a one person studio taught itself to make balls bounce, bricks shatter, and a good dog[^1] look alive, all in Phaser.

Inspiration
I have always loved two things: brick breakers and roguelites. The brick breaker is pure satisfaction, a ball, a wall, and the satisfaction of clearing the board. The roguelite is the thrill, the run where your pieces start comboing into something far bigger than they have any right to be. Put them together and you get Bark Breaker.
I wanted to make a game I wanted to play, and then I wanted to give it away and see if anyone liked it. Bark Breaker Daily is the free version, for people who just want to play something good without a store in the way. A daily run on Reddit turned out to be the perfect home for it, since everyone plays the same board that day and the comments become the place to brag and compare.
What it does
You fling balls into a field of enemies, smash everything, and stack a build out of the balls, boosts and combos that you pick up along the way. Seven heroes rotate through, one a day, and each one bends how a run plays. All of the game's base balls, merge balls and MAX balls are included. Same board for everyone, so it is you, your build, and the leaderboard.
Learning the physics
The heart of a brick breaker is the bounce, and the bounce is where I had to learn real physics. When a ball hits a surface, it reflects. As a vector, you take the velocity and flip it across the surface. Phaser handed me a physics engine so I did not have to hand roll all of that. I leaned on its Matter physics, where a ball is a circle body and the key dial is restitution, the bounciness of a surface. A ball keeps a fraction \(e\) of its speed on every hit.
Here is what nobody warns you about:
Correct physics is not the same as fun physics.
My first bounces were technically right and completely lifeless, or so bouncy the ball turned into a pinball nightmare. I was not chasing realistic physics, I was chasing physics that feel good, and that meant tuning. These were the dials I lived in:
| Dial | What it controls | Too low | Too high |
|---|---|---|---|
| Restitution | speed kept on a bounce | balls die on the wall | endless pinball |
| Top speed cap | the pace of a run | sluggish | unreadable |
| Min bounce angle | how flat a bounce can get | balls stall sideways | feels random |
| Brick spread | how the day's board lays out | repetitive | chaos |
To keep a run from spiraling, I also pin every ball to one steady speed each frame, so energy never creeps up or bleeds away:
// Hold the ball at one fun, constant speed.
const speed = ball.body.speed;
const target = 9;
if (speed > 0 && speed !== target) {
const v = ball.body.velocity;
const k = target / speed;
ball.setVelocity(v.x * k, v.y * k);
}
==The magic was almost never in the math. It was in those numbers, tuned hit after hit, until the bounce felt right in the hand.==
Bringing it to life with art
Art in Phaser is more than the drawings. I load the heroes, balls, and bricks as sprite sheets and texture atlases, but the life comes from what I layer on top. I leverage AI for my art, and say so on my website.
A brick does not just vanish, it bursts. Phaser's particle emitters spray shards on every hit. Then a quick squash and stretch tween gives each hit some weight, the old animator trick where a thing scrunches and springs back. None of this changes the rules of the game. All of it changes how the game feels, and feel is the whole sell on a brick breaker.
The Phaser features that did the heavy lifting
Two engine tools carry more weight than anything else.
Seeded randomness, through Phaser.Math.RandomDataGenerator, is the backbone of the daily. One seed, built from the date, sets the hero, the board, and the boosts on offer, so every player gets the exact same run. The seed fixes the setup, and your choices and aim do the rest.
Collision categories are what make creative builds possible. Each ball type gets a category, so it can choose what to hit and what to pass straight through.
Challenges I faced
The biggest was making the bounce feel good instead of merely correct, which is the tuning story above. The second was performance, since a roguelite brick breaker can flood the screen with balls and particles, and it all has to stay smooth in a webview on a phone, a tighter box than a desktop browser. I lean on object pooling, reusing balls and shards instead of spawning and destroying them, to hold the frame rate. I am still working on this one. The third is balance, the never finished job of making the wild builds rewarding without letting one combo quietly become the only right answer. That one is still live, and probably always will be.
What I learned
- A physics engine gives you correctness for free and charges you for fun. The fun is all in the tuning.
- Art is motion and feedback as much as it is sprites.
- One person can go a long way on Phaser's seeded randomness, collision categories, and particle systems.
- Everything is better with a dog in it.
What's next for Bark Breaker Daily
- [x] Seven heroes on a daily rotation
- [x] One shared run a day with a fair leaderboard
- [ ] More boosts to build around
- [ ] Seasons with their own twists
- [ ] A way to share your most broken runs
The board resets tomorrow. Bring a better build.
Play it: r/BarkBreakerDaily Built with: Phaser on Reddit's Developer Platform Made by: Yeenon Games
[^1]: The dog is non-negotiable.
Built With
- devvit
- node.js
- phaser.js
- typescript
- vite
Log in or sign up for Devpost to join the conversation.