My browser game Void Parry is a neon boss rush: 15 bosses, you reflect their bullets back with a shield. The bosses, backgrounds and key art were painted with an image model and cut out. It looked fine in screenshots.
Then I ran the portal's certification tool. One question was blunt: "Is this game built entirely with generative AI?" I answered yes, because it was. The next screen:
AI for code/logic is welcome, but titles with raw AI graphics are rarely approved.
Their written requirements say why: games with AI graphics perform more than 2x worse on their metrics than games without. Players can tell, and they bounce.
So I replaced every generated image in the game with art drawn by code. It took one evening, and the game looks better for it.
A neon boss rush suits the Geometry Wars / Just Shapes & Beats look: dark shapes, bright outlines, glow. That style is easy to draw with the Canvas 2D API and hard to get wrong:
// one path, stroked four times: wide faint glow, tighter glow, the neon line, a white-hot core
function neon(ctx, path, col, w) {
ctx.fillStyle = "#0a0616"; path(); ctx.fill();
ctx.globalCompositeOperation = "lighter";
ctx.strokeStyle = col + "22"; ctx.lineWidth = w * 6; path(); ctx.stroke();
ctx.strokeStyle = col + "4d"; ctx.lineWidth = w * 2.6; path(); ctx.stroke();
ctx.globalCompositeOperation = "source-over";
ctx.strokeStyle = col; ctx.lineWidth = w; path(); ctx.stroke();
ctx.strokeStyle = "#ffffffd9"; ctx.lineWidth = w * 0.34; path(); ctx.stroke();
}
No shadowBlur: it is the slow part of canvas glow. Stacked strokes with "lighter" blending look the same and cost almost nothing. The slowest of the 15 bosses draws in 0.33 ms.
Because each boss is code, it can react. Every draw call gets a small state object:
VP_VEC.draw(ctx, bossIndex, size, time, {
lx, ly, // direction to the player, -1..1: eyes and cores follow you
charge, // 0..1 while winding up an attack: glows flare, jaws open
hit, // flashes the outline white when you land a hit
phase, // 1-3: later phases add rings, cracks and more parts
});
The painted sprites could only breathe, lean and move a glow over their eye. Now the Void Eye's pupil tracks you, the Star Leviathan's jaw opens before it fires, and the final boss's chains snap in phase 3. Game feel went up, not just legality.
Backgrounds don't need to animate, so they are procedural scenes (seeded stars, stacked radial-gradient nebulae, one neon set piece per world: a black hole, a ringed planet, a lava range) rendered once in a headless browser to JPGs. One lesson: dim the set pieces to about 50%. The platforms are neon lines too, and a bright mountain outline behind them reads as something you can stand on.
The key art, store covers and app icon come from one composer page: background + a boss + the hero raising the shield + the title, exported at every size a store asks for.
The code for the game was written with an AI coding assistant; every visual in it is now drawn by that code.