Rebuilding Bulwark from the Ground Up
When I initially created Bulwark, it was supposed to be a quick project—a simple castle defense game built to satisfy my own curiosity about physics-based destruction mechanics. The codebase reflected that: functional but not particularly elegant, with shortcuts and design decisions optimized for quick iteration rather than long-term maintenance.
Then something unexpected happened: people started playing it. And liking it. And eventually, it launched on Steam.
From Hobby Project to Steam Release: The Growing Pains
When your hobby project becomes a product that people have purchased, expectations shift. Features that were "good enough" suddenly need to be robust. Systems that worked for a prototype need to scale for many players. Bugs that were charming quirks become frustrating experience-breakers.
After staring at the increasingly complex Jenga tower of code that powered Bulwark, I made a difficult decision: it was time for a complete rewrite.
Not just refactoring or cleaning up. A ground-up rebuild with a proper architecture that could support:
- New features I was supposed to add
- The performance optimizations needed for larger castles
- The stability expected from a commercial product
- Most importantly, a foundation for future growth
Adding Lua: A Calculated Detour into Madness
While planning the rewrite, I kept coming back to one consistent theme in player feedback: "I wish I could mod this game." The creative constructions I was seeing in the community made it clear that players wanted to push beyond the boundaries I had built.
So I made another decision: learn Lua and build modding support directly into the new codebase.
Why Lua? It's lightweight, relatively easy to learn, well-documented, and has a strong track record in game modding. The fact that I didn't already know it was just a minor inconvenience—and an opportunity to expand my own skillset while rebuilding Bulwark.
-- Example of what modding a new block type might look like
function RegisterCustomBlock()
return {
id = "reinforced_wall",
name = "Reinforced Wall",
health = 250,
materials = { "stone", "iron" },
cost = { stone = 15, iron = 5 },
texture = "textures/blocks/reinforced_wall.png",
onDamage = function(amount, damageType)
-- Reduce damage from projectiles by 30%
if damageType == "projectile" then
return amount * 0.7
end
return amount
end
}
end
Is integrating a scripting language I'm still learning into a codebase I'm completely rewriting a perfectly sensible idea? Perhaps not. But it's proving to be an incredibly educational one.
Bulwark as a Learning Laboratory
One unexpected benefit of this ambitious rewrite: Bulwark has become my own personal learning laboratory.
Each new feature implementation is an opportunity to:
- Explore better architectural patterns
- Benchmark performance optimizations
- Test the boundaries of the Lua integration
- Learn from my previous mistakes
This approach has a cost, of course—development time. The update is taking longer than a simple feature addition would have. But the result will be a vastly improved foundation that can support Bulwark's growth for years to come.
Initial Modding Plans
For the first modding release, I'm focusing on three core systems:
- Custom Blocks - Create new building elements with unique properties
- Custom Projectiles - Design new ammunition types with special effects and behaviors
- Custom Weapons - Build new weapons that combine existing or new projectiles with novel mechanics
These three systems interact with nearly every aspect of Bulwark's gameplay and should provide modders with substantial creative freedom right from the start.
Future modding expansions might include enemies, environments, game modes, and UI elements—but I'm keeping the initial scope focused to ensure quality and stability.
A Request for Patience
To the Bulwark community: thank you for your enthusiasm and support. This rewrite is taking longer than I initially hoped, but the end result will be worth the wait—a more stable, more extensible, more moddable Bulwark.
In the meantime, I'll be sharing more development updates and possibly some early modding examples as the new systems come online.
If you want to follow the progress more closely or offer feedback on the development direction, you can reach me through:
- The Steam Community forums
- Email at hello@insky.io
Note: All development timelines and features described in this post represent my current intentions but may evolve based on technical realities and community feedback.