Contents

Key takeaways

  • A vertical shooter played with one finger: the ship follows your move and fires on its own.
  • Six bosses, each a single drawing animated by code: breathing, engines, cannons that light up before attacking.
  • Difficulty checked over an hour of play by an autopilot that writes its own log.
  • Up to 120 frames per second targeted, with a pool of reused objects and automatic step-down if the frame rate drops.
  • A challenge code that holds the score and mode: no server, and a mistyped code is rejected.

Star Ace is a vertical space shooter for iPhone, iPad and Android, in the spirit of the plane games on 2000s phones: your ship at the bottom, enemies coming from the top, a score to beat. Slide your finger anywhere, the ship follows and fires on its own. Behind that simple gesture: six code-animated bosses, difficulty tuned on hours of runs played by an autopilot, and a game that targets 120 frames per second on fast screens, with no network.

What Star Ace does

The very first launch has no menu: you fly straight away. The ship follows your finger without going under it, so you always see it. It fires continuously; the player only chooses where to go, when to drop a bomb and when to trigger power-ups.

A Classic run crosses six sectors: Violet Nebula, Asteroid Field, Frozen Comet, Red Star, Alien World and Black Hole. The top gauge fills with enemies destroyed and time spent in the sector; when it is full, the boss arrives. After the sixth boss, a second loop begins in another universe (Andromeda, Magellanic Clouds…), with other colours and stronger enemies, endlessly.

Star Ace home screenCombat with automatic fire and power-upsThe seven game modes
The home screen, a fight mid-sector and the seven modes.

Features

  • Six giant bosses: Siege Cannon, Dreadnought, Carrier, War Arachnid, Citadel and Dreadnought Mk II, with spirals, fans, rings, announced laser beams, missiles to shoot down and bullet walls with a gap to find.
  • Ten enemy types: drones in formation, zigzagging scouts, diving fighters, wasp swarms, kamikazes, mines, gunships, snipers, bombers and elite aces.
  • An energy barrier instead of lives: it drops when you are hit, but also when an enemy crosses the bottom of the screen. You have to destroy everything.
  • Six weapon levels, a ×2 to ×8 combo, and power cores dropped by bosses: triple cannon, laser, overdrive, missiles, repair, shield.
  • Seven modes: Classic, Survival, Retro (big pixels, left-right only), two-minute Blitz, Daily challenge, Boss Rush and Hardcore.
  • A hangar of 18 ships, each with its own weapon, and six upgrades.
  • Missions, chests and wheel: three missions at a time, a free chest every four hours, a wheel of fortune with its odds displayed.
  • Daily gift over seven days that does not reset if you skip a day, with an exclusive ship on day seven.
  • Score card and challenge code to send to a friend, who plays the same mode to beat that score.
  • Offline, in French and English.

Living bosses, animated by code

Each boss is a single drawing. Everything else is computed every frame: it breathes, tilts in the direction it moves and keeps some inertia, its engines blast harder when it moves, its energy core beats faster when it rages. Before each attack its cannons light up for a moment; each volley makes it recoil. The more health it loses, the more it smokes, sparks and catches fire. None of this adds to the download size.

Its arrival is staged: enemies leave, planets and asteroids fade out, stars stretch as in light speed, the sky turns into a red storm, the music cuts and the “WARNING” banner appears. The boss enters shaking the screen, its health bar fills, then “FIRE!”. In its last phase it rages and a second music theme takes over.

The boss order is drawn at random each run, never with the same first boss as the previous run, and it is the same for everyone in the Daily challenge. A boss’s strength depends on its rank in the run, not on which boss it is: the first one falls quickly, the next ones last longer and longer.

The Siege Cannon firingThe CarrierThe ship hangar
The Siege Cannon, the Carrier and the hangar.

Tuning difficulty without spending every evening on it

A shooter plays out over time: too easy in sector 5, or impossible in sector 2, and the player leaves. To check it, the game ships with an autopilot and a test mode that runs without touching the screen: it starts a mode, plays, and writes a log (bosses met and fight length, deaths, enemies that got through, power-ups, frames per second every five seconds).

A long run was played this way for an hour, sped up: a boss every three to four minutes, fights of 30 to 65 seconds in the first loop, difficulty rising clearly in sectors 5 and 6 and again in the second loop. A ship that stays still, even with a maxed weapon, ends up losing: you have to play.

Difficulty follows a continuous scale that never goes back. The start of a run is deliberately slow, then speeds up over four sectors. The weapon is capped at level 3 in the first sector, then gains one level per boss defeated, and enemy health follows the ship’s power.

Targeting 120 frames per second

  • No objects created during a run: bullets, enemies and sparks come from a pool of reused objects. Nothing is created or destroyed mid-fight, to avoid stutters.
  • Automatic tuning: on first launch, quality is chosen from the phone’s memory and processor. The game targets 120 frames per second on fast screens (iPhone ProMotion, 90 or 120 Hz Android) and measures its frame rate over three-second windows; if it holds less than 88% of the target twice in a row, it steps down one level.
  • Player settings: Light, Balanced or High quality, 30, 60 or 120 frames per second, glow, screen shake and an FPS counter.
  • Effects drawn by code: glowing shots, explosions, shock waves, beams and three layers of stars, with post-processing bloom.

A defect showed up on the iOS simulator: the full-screen storm layers, even when transparent, were drawn as a white square. They are now only active when visible, which also avoids filling the screen for nothing.

A challenge between friends, with no server

At the end of a run, the game creates a score card (1080 × 1350: logo, ship, score, mode, sector) with a challenge code. The score and mode are encoded in that short code, with a final check character: there is no server to query. The friend enters the code in the Modes tab and plays the same mode with that score to beat; if they win, they get 200 coins.

The code has no dashes and no look-alike characters (no I, L, 1, O or 0), and it is accepted in upper or lower case. A mistyped code is rejected instead of starting a fake challenge.

Missions and rewardsWheel of fortune with displayed odds
Missions and the wheel of fortune, with its odds displayed.

Rewards and ads, with limits

The game is free, with no account and no in-app purchase, funded by Google AdMob. The rules are set in the game configuration:

  • a banner only in menus, never during combat;
  • a full-screen ad after a run, not before the fourth run, at most one every two runs, 120 seconds apart, 15 a day, and never within 90 seconds of a video;
  • videos the player chooses to watch for a reward (continue, double coins, chests, wheel, ships), 25 a day at most;
  • one second chance per run, with half the energy.

Chests and the wheel rely on the phone’s clock. If the clock goes back by more than an hour, they wait until the recorded time is reached again: turning the date back gives nothing.

Ready to be fixed remotely

All of the game’s content lives in a configuration file: enemies, bosses and their attacks, sectors, modes, ships, missions, economy and ad caps. The game can receive three kinds of patches through Unity Remote Config: a piece of that configuration, corrected texts, and new images or sounds. Each patch is checked and applied on the next launch; if it is invalid, it is ignored entirely and the game keeps its shipped content.

The tech stack

Star Ace is built with Unity 6.5 (URP) and C#, with a UI Toolkit interface and a code-drawn “cockpit” skin (cut corners, neon outlines), using the Orbitron and Rajdhani fonts. The rules of a run are pure computation, independent of Unity, covered by automated tests: configuration and artwork, remote patches, weapons, daily challenge, records, missions, mode rules, challenge codes and ship unlocks. Native iOS modules handle haptics, the review prompt and sharing the score image.

What this project shows

Star Ace was designed and built end to end by Ahmed: game design, bosses, modes, economy, score sharing, graphics settings and the game page. It shows what a mobile action game really takes: staging that makes you want to play, difficulty measured rather than guessed, and smoothness held on very different phones.

A game or mobile app to build? Get in touch. All the game’s screens are on the Star Ace page.

Frequently asked questions

Do you need an internet connection to play Star Ace?

No. The whole game plays offline and progress stays on the phone. Only ads and remote settings use the network.

How does the challenge code work without a server?

The score and mode are encoded in the code itself, with a check character at the end. The friend who enters it plays the same mode with that score to beat; a mistyped code is rejected.

How does the game stay smooth on smaller phones?

Quality is chosen on first launch from memory and processor. The game then measures its frame rate every three seconds and steps down one level if it cannot hold it.