CognitoCoding All posts
15 July 2026 3 min read by Eris Taylor

My Roblox Tower Defense Got a Visual Overhaul — Here's What Actually Changed

robloxvibe-codinggame-designbeginnerslearn-to-code

Watch the build

Where it started: grey boxes

When I first vibe coded the Roblox tower defense game — directing AI to build the mechanics without writing a single line of Luau myself — the focus was entirely on making it work.

Enemies walked a path. Towers shot them. Waves got harder. Done.

But it looked terrible. Every surface was a grey box. The towers were grey rectangles. The enemies were grey rectangles. It worked like a game but felt like a test level someone forgot to finish.

That's normal. Grey boxes are placeholder code for your eyes — the same as writing # TODO: fix this later in your script. They tell you the idea is there, but the thing isn't built yet.

What a "theme" actually means

A theme isn't just colours. It's a decision: what world does this game exist in?

Once you have an answer to that question, every design choice becomes easier. Does this shape fit? Does this colour belong? The theme is your reference point for every call you make after that.

Think of it like naming your variables. x = 5 works fine. enemy_speed = 5 is better — same logic, but it tells you exactly where that number lives in your program. A game theme does the same thing for visuals. Everything that gets added either belongs to the world or it doesn't.

Four things that made the biggest difference

1. Replace grey geometry with shapes that read as what they are

A tower reads as a tower when it's tall, narrow, and has something on top that looks like it fires. The moment the shape matches the idea, the grey box problem starts to dissolve. You don't need a texture pack. You need the right shape.

2. Pick three colours and stick to them

A game with twelve random colours looks like a mistake. Choose a main colour, a contrast colour, and one accent. Use those three everywhere. That's a palette — and it makes even simple geometry look intentional.

3. Make the path impossible to miss

In any tower defense game, players need to see the enemy path immediately. If it blends into the background, the game is broken — no matter how perfect the underlying code is. Contrast between path and terrain is a design rule, not an aesthetic preference. It's the same as using clear variable names: it makes the thing readable.

4. Match the visual weight to how the game feels

Heavy, solid shapes say: slow down, think this through. Light, bright colours say: react fast. The visuals communicate the game's pace before a single word has been read. Choose shapes and colours that match the mood you're going for — not just the ones that look nice in isolation.

What this teaches you about building things

When you code a game, you're making two things at once: the system (the logic, the rules, the numbers) and the experience (what it feels like to be inside it).

The system can be perfect and the experience can still be terrible. Grey boxes make that gap visible — everything works but nothing feels right.

The visual overhaul isn't a separate project after the "real" coding is done. It's the second half of the same build. Learning to think about both at once — does this work, and does this feel right? — is what turns a prototype into something finished.

That thinking transfers. It applies to web apps, to Scratch projects, to Python scripts with output that needs to be read. Anything you build has both a system and an experience. The system is the first half. The experience is what makes someone else want to use it.

Try it on your own project

If you've built something in Roblox Studio, Scratch, or anywhere else and it works but looks rough, pick one thing from the list above and apply it.

Don't try to make it beautiful. Try to make it readable. That's the first step — and it teaches you more than trying to fix everything at once.


This is part of the vibe-coded Roblox tower defense series. The original build — I Vibe Coded a Roblox Game Using Only AI — covers how the whole thing came together from scratch.