Neverstill is a train defence roguelike for iPhone. You fly a drone above an armed train and keep it running across the desert, twelve waves at a time. Every ad in the game is a physical object beside the track, it only plays if you press it, and the Line Pass (2.99 USD, once) removes all of them.
Entered for Catvertising, Best Game, the RevenueCat Design Award and HAMM.
- Catvertising: rewarded video as objects in the world, opt-in, verified server-side through RevenueCat before it pays out.
- Best Game: a real decision at every station, and nothing for sale that makes you stronger.
- Design: almost no HUD. The shop is a desk on the platform and the paywall is a freight car.
- HAMM: rewarded ads, the Line Pass, and paid liveries. The game is free unless you want more of it.
Released on 10 September 2026 and built solo.
Inspiration
I think mobile games often fall into two extremes.
On one side are games built around a beautifully simple loop: easy to understand, easy to control, instantly rewarding. On the other side are games that aim for deep immersion, with more systems, more decisions and a much higher investment from the player.
I wanted to find the space in between.
I wanted Neverstill to make you feel like a small part of a much larger machine. The train is constantly moving, constantly fighting and constantly growing, while you control a single drone around it. Your controls stay simple enough to work naturally on a phone, but your decisions have enough weight that you can get genuinely invested in the run.
The fantasy is straightforward: keep moving forward while an increasingly ridiculous number of monsters and bosses try to tear the train apart.
You upgrade the train, decide which cars deserve your attention, jump between them when things go wrong, collect scrap and use your drone to directly influence the fight.
The challenge for me was making those two ideas coexist, the simplicity of the loop, with the depth and immersion of something you can really sink your teeth into.
Neverstill is my attempt at finding that balance.
What it does
The train cars are the arsenal and they fire on their own. Laser, mortar, tesla, shield, flak, carrier. Each car has its own targeting and its own ideal counter to the monsters you face. But they can only do so much, so your job is to drop onto whichever car matters right now and overcharge it, stomp off boarders before they destroy a car, and drag in scrap. The moment you lose focus, the train starts losing cars, and a lost car doesn't come back.
Every station is a moment to repair and rebuild. The station offers you cars and modules in exchange for the scrap you pulled during the run. Weld three of a kind together and you get one car that hits far harder, and merging enough of them unlocks more variations. Breadth or depth, there is no correct answer. Spend your scrap wisely or you will lose more than you put in.
Twelve waves take you to the terminus, and the next line opens from there with stronger waves and more bosses.
How I built it
Three.js, wrapped for iOS.
The whole game is small, so it installs in seconds, and it holds 60fps on hardware from 2018. Nothing waits on a download or a server, and it doesn't ask you to sign in. You can play a run offline but ads and Game Center need an online connection.
RevenueCat handles three things for the game:
- Manages the Line Pass, an IAP that removes ads, unlocks the depot's progression upgrades, and opens the endless mode after the first terminus.
- Manages the liveries. Some come with the Line Pass, others are one-time purchases.
- It verifies the rewarded video: AdMob's signed server-side callback is checked by RevenueCat before the game pays a single unit of salvage, so a player cannot fake a reward and I cannot accidentally give one away.
Challenges I ran into
Making the advertising something players choose. My first idea was billboards along the track that simply ran ads in-world. This was my first game on mobile with monetisation in mind and I wondered why games don't just place ads like they do in the World Cup, around the edges on boards, or like billboards on the side of the road. However when I started developing and reading up on the requirements I noticed that to run ads I need to comply with a set of rules. So I adapted my idea to show what you'd get for watching the ad, turning it into a Rewarded ad, which gives the players something of value. When you press a board it opens a model that states the two facts that matter: an ad will play, and here is exactly what it pays. Nothing starts until you say yes. NOT NOW costs nothing and does not burn the offer
Selling without a shop window. Whenever I make a game I want to keep the players inside of the world as much as possible. This means reducing any sort of HUD or menu as possible. A game needs to feel like a game, so everything in it I tried to build as part of the world. But a phone has a small screen and the world displayed in it is large so text became a problem quickly. Text that is hard to read isn't read. So I combined in-world elements with in-game panels to make the UI feel like it belongs to the game.
Accomplishments that I'm proud of
The ads are objects in the world. When I install and play games that are "free" often I am either bombarded with ads or the game becomes unplayable as soon as the tutorial/onboarding is complete. Both are frustrating experiences. Neverstill has no banners, no interstitials, no app-open ads, none of it anywhere. There are boards along the track, a board on the terminus roof, a drone towing a banner, and a bike towing a billboard trailer that paces the train and tries to get your attention. Whether you accept the rewarded ad or keep playing is totally your choice. I also have a cap on 12 waves and depot upgrades but the Line Pass unlocks all gameplay.
Running the IAP. The Line Pass removes the ads, but also the rewards players get from them. Keeping the game fun to play for free while giving people who pay enough value back is not an easy balance. I still have some work to do here, but I am happy to see both revenue streams working and reporting real numbers.
What I learned
There is much more to releasing a game and making it successful than I initially scoped. I put all my focus and effort into making a great game, but did not realise the effort it would take to get it shipped and playable. Running on TestFlight and getting feedback from actual players is completely different. There are a huge number of tools and platforms that help accelerate the process, but you still need to be heavily involved at each step. Settings on TestFlight versions and live builds are also often different. While testing the ads or IAP in TestFlight everything would work, but after releasing I noticed that the IAP was still pending approval, or the RevenueCat callback was not configured properly.
"Fail fast, learn fast" would be my key takeaway.
What's next for Neverstill
More lines, with harder waves and new bosses at the end of them. More liveries. Revenue reporting per ad placement, so I can see which of the three sponsor spots actually earns. And an Android build, because the engine underneath was never iOS-specific.
Log in or sign up for Devpost to join the conversation.