REFRACT began with a question: what if the crystal you defend was also your weapon?

I wanted to combine the pressure of tower defense with the satisfaction of solving a spatial puzzle. Instead of placing independent weapons along a road, players shape a connected defense out of light. Mirrors redirect beams, splitters create branches, reflectors send light back, and lamps open up new possibilities.

The central mechanic is that enemies absorb light, weakening the beam for everything behind them. Direction matters too: shielded enemies resist frontal attacks but expose their sides and backs. A small change to a mirror can transform how effectively an entire stretch of road is defended.

I built REFRACT as a portrait HTML5 game using JavaScript and Three.js, with AI assistance from ChatGPT and Claude for design exploration, implementation, debugging, and testing. I guided the design through playable iterations, compared alternative versions, and tested how the choices felt during an actual run. The resulting prototype includes an eight-encounter campaign, progressive tool unlocks, upgrade choices, a final boss, and an experimental endless mode.

The biggest challenge was making the geometry understandable while keeping the decisions interesting. Players need to see where light travels, understand why it loses strength, and recognize when changing its direction would help. Another challenge was balancing enemies, piece costs, and upgrades so that multiple approaches could succeed without making every choice feel equivalent. Automated beam tests and campaign simulations helped check the mechanics; hands-on playtesting revealed how the pacing actually felt.

My most useful lesson was that more content does not automatically create more engagement. The campaign maintained tension, but testing endless mode revealed that a sufficiently developed defense could become passive. That highlighted the difference between making enemies stronger and giving players meaningful new decisions.

REFRACT explores how much strategy can emerge from one beam, a few simple tools, and the question: where should the light go next?

Built With

Share this project:

Updates

Submission history