8 Years Later, The Tank Fires Again


Before I start with the self roasting and full of headache story of this remake, if you haven’t already — I’d recommend you to checkout my previous post which is a nice warm story ( at least it preserves my dignity🙂 ). It’ll give you all the nostalgic context you need.
A Look Back at an 8-Year-Old 2D Tank Game
Alright, all caught up?
Let’s begin the madness of building BunkBlaster — the remake.
Getting Started
How do I even start?
That’s the biggest problem I keep facing — and weirdly, it’s only grown with time. When I was a kid, I jumped into things without a second thought. Now? I just sit, overthink, and end up doing… absolutely nothing.
This project was no different. I’ve thought about remaking it for years. SFML? Maybe SDL? Heck, even full-blown engines. But in the end — nada.
Then one random day, I just started.
No grand plan. No fancy architecture. Just opened VS Code and said, “Screw it, let’s make something.”
And that’s how it began… my chaotic dive into rebuilding a childhood classic — now rebranded as BunkBlaster.
But of course, I wasn’t going to make it easy for myself.
The Birth of BunkBlaster
I don’t know why, but I need my projects to be hard and challenging. That’s what fuels me. Easy things? Boring as hell.
One of my main motivations while building is learning. Even if it’s a remake, I want it to push me. So I went with the beast: C++. Yep, you read that right.
But don’t worry — I also picked up Raylib to make my life a little easier. (I’m not a psycho.)
Also got box2d to make the game a physics beast ( It was a mistake ☠️ ).
Raylib? Box2D? What’s going on?
You’re probably thinking — "Raylib? Box2D? What the heck is this?"
Well, let me break it down.
Heck, I am gonna sound like a nerd in this section — bear with me, alright?
So... Raylib.
It’s a C library that handles most of the heavy lifting — graphics, windowing, input, audio… you name it.
An absolute beast.
Perfect when you want control without writing 1000 lines of boilerplate.
#include "raylib.h"
int main(void)
{
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
while (!WindowShouldClose()) // Detect window close button or ESC key
{
BeginDrawing();
ClearBackground(RAYWHITE);
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
EndDrawing();
}
CloseWindow(); // Close window and OpenGL context
return 0;
}
Don’t stress if you didn’t catch all of that.
You’re not supposed to. I just wanted to show you how easy Raylib can make your (my 🙂) life.
And now... Box2D.
This one? Pure physics engine madness. And not just some janky “collision go brr” logic — real, proper physics simulation.
Gravity?
Friction?
Bounce?
Momentum?
Yup. It handles everything. You just describe the world, and let Box2D handle the rest.
But I’ll be honest…
The API is powerful, but a lot advanced and troublesome if you don’t know what you are doing.
So yeah — it was a mistake ☠️.
Still, I stuck with it. Because again… I like pain.
Brains off, brushes on — let’s talk about the mess I call game art.
Making The Art For the Game ( I am not an artist )
One of the biggest reasons I never made huge games?
Art. Yes… cause I can’t draw.
In my older projects, I stuck with rectangles. Lines. Circles to get anything that I needed.
But this time… I wanted more. This wasn’t just a remake. It was an upgrade. A level-up.
I can’t even manage to underline my name with a straight line.
The best drawing that I ever made in my laptop…
Okay… enough self roast 🙂…
Let’s get on with it
so I grabbed my brush (a budget mouse and zero drawing skills)...
Fired up my drawing studio (Pixelorama)...
And dove in...
What came out was… well see for yourself
Here’s a sneak peek of some of the first sprites I whipped up 👇
See my bullet designs 🫣 (Don’t laugh... 🙂).
You’re probably wondering why the tank’s body and turret are separate — well, that’s because I’m going for a rotating turret. Yup. A fully functional, directional cannon (yes, really).
I’ll definitely design more sprites down the road — explosions, pickups, etc.
But for now, these little assets were enough to get things rolling...
Oh, and guess what?
I even animated the tank 😤
See… one’s the shooting animation and the other’s the movement. Once they’re synced and not looping, you’ll really feel the effect.
Conclusion
And that’s a wrap for this devlog!
Everything aside — I genuinely enjoyed making these sprites (even if my art skills are, let’s say… a work in progress 😶🌫️).
But this was just the calm before the storm.
Next up: The chaotic madness Box2D unleashed.
Brace yourself — things are about to get wild, frustrating, and strangely addictive.
If you enjoyed this peek behind the scenes, consider subscribing and dropping a comment.
Trust me, the rollercoaster is only getting started, and you won’t want to miss it.
Subscribe to my newsletter
Read articles from Devesh Agarwal directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Devesh Agarwal
Devesh Agarwal
An engineer with a curious mind and a love for systems that go beyond the surface.I enjoy exploring how things work under the hood — whether it's rendering pixels, routing audio, or handling low-level protocols. My work spans across game development, system programming, and occasionally web tech when the problem is worth solving. I’m driven by the desire to build things that are fast, efficient, and just a bit unconventional. This blog is my space to document experiments, challenges, and the weirdly satisfying bugs that teach you more than tutorials ever could. Outside of tech, I enjoy observing how people use technology, and occasionally breaking things just to fix them better.