Neon Swarm
A portrait, one-handed neon roguelite for Android built with Godot 4: seven maps plus a boss map, 45 enemy types, pilots and a gear system.
Neon Swarm is a neon roguelite played one-handed in portrait mode. The player only steers; weapons fire automatically at the nearest targets. Each level-up offers a choice of cards: a new weapon, the next level of an owned weapon or a passive boost. As the run goes on, weapons evolve and change their look. The technical goal was to hold a smooth frame rate on entry-level and mid-range Android devices with hundreds of enemies on screen.
Architecture
- Node-free simulation: the gameplay runtime is written independently of scene nodes, which makes it testable headless. Systems communicate through signals on an event bus (EventBus) instead of referencing each other directly.
- Data-driven content: weapons, enemies, upgrades and evolutions are defined in data files, so new content is usually a new resource file. Every balance and game-feel value lives in a single Tuning resource.
- Rendering pipeline: neon effects are drawn in code at run time (meshes, shaders, particles). Each enemy type is drawn with a single MultiMesh. Pilot and enemy art is pre-rendered headless in Blender and packed into sprite sets for four device scales; the device loads only the set that matches its screen. In the classic look, SVG art is rasterised at screen scale.
- Adaptive quality: graphics quality is picked automatically per GPU. LOW turns glow off, renders at 720×1280 and upscales, and caps at 30 FPS; if frame times grow during a HIGH-quality run, an FPS governor switches to the LOW visuals once.
- Save and monetisation layer: the save file is versioned and written atomically, with a backup fallback. Ads and purchases sit behind provider interfaces with mock implementations; debug builds always use Google’s test ad units.
Highlights
- Run structure: content currently covers the first biome, Neon Hive: seven maps and a boss map. Each map is a three-stage run of about ten minutes; difficulty stays constant within a stage and rises between stages.
- Missions: every stage has a mission (holding a beacon, breaking tethers, hunting a marked elite and so on). A warp gate at the end of each stage offers a short reward choice, and the weapon and upgrade build carries over. Every map ends with a final boss, and every attack is telegraphed in advance.
- Meta progression: Shards collected in a run are kept even after death and are spent on a talent tree and gear. Gear goes into six slots across five rarity tiers; pieces are merged to upgrade and also change the character’s look. Each of the six pilots changes one game rule and has its own level. The Codex collects everything the player has encountered.
- Player-friendly monetisation: daily and weekly missions, a streak calendar and a daily challenge are optional; there is no energy system or wait timer gating runs. Ads are opt-in rewarded ads only (one revive per run, Shard doubling up to three times a day) and never appear during gameplay. Store items only save time, and drop odds for random rewards are shown in the game.
- Device measurements: the renderer was chosen from real-device measurements: on a Xiaomi 11 Lite 5G NE, OpenGL with glow at native resolution drew up to 1,600 enemies at 60 FPS. In 2-minute autoplay runs on debug builds, the Xiaomi 11 Lite 5G NE ran at 58.4–60.3 FPS on HIGH and a TCL 8091 tablet held its 30 FPS cap on LOW.
- Automated balance testing: alongside headless unit tests, balance tests are run by an autopilot bot; each test plays the map with 32 different seeds.
By the numbers
Figures were counted from the project’s data files by a script. Only content a player can actually encounter is included; content used solely for test and calibration runs is not.
- 45 enemy types.
- 7 maps plus a boss map, three stages each; 14 map mechanics and 7 mission types.
- 14 weapons, each turning into one of two forms at level 5 (28 forms in total); 2 weapon evolutions and 6 passive upgrades.
- 50 gear models.
- 6 pilots and a talent tree of 10 talents with 46 ranks in total.
- 42 daily, weekly and first-week missions; 40 achievements; 14 rules for the daily challenge.
- 2,984 assets: drawings, sound effects, shaders and fonts. Sound effects are currently synthesised by a Python script.
Technology
Godot 4.7 and GDScript on the GL Compatibility (OpenGL ES 3) renderer, with HDR 2D and glow. Shaders are written in the Godot Shading Language. The art pipeline uses Blender (headless rendering) and Python, and Python also synthesises the sound effects. On Android, AdMob rewarded ads and Google Play Billing are integrated. Every run periodically logs frame rate, frame-time percentiles, simulation and render times; optimisation decisions are made from that data.
Status: in active development; in-game names are still provisional. Not yet released on the store.
If you are working on a mobile game or a real-time graphics project with clear performance targets, you can reach me through the contact form.