Blog

The main menu, our hero and our main baddy squaring off!

Ack Ack Attack! Mission Complete!

Back in my Milestone Two post I said I’d like to have everything finished before the end of December, and that hopefully I wasn’t being too ambitious doing it all on my own while targeting PC, Mac and iOS. Turns out I was being a little too ambitious, by just under two years! But it’s done, and it’s out in the wild. Ack Ack Attack! is on the App Store for iPhone and iPad and on itch.io for Mac and PC, released under my own little company, JonnyP Industries, with Steam to follow. It’s still the same idea from my very first post too: a space station that’s been overrun, waves of aliens and war robots to blast away SmashTV style, the crew to free as you find them, and just plain old surviving.

The main menu, our hero and our main baddy squaring off!
The main menu, our hero and our main baddy squaring off!

Here’s the supercut, if you’d rather just watch some aliens get blasted:

From Unreal to Godot

After Milestone Two the Unreal version went quiet for a good long while. When I picked it back up in April this year I opted to start over from scratch in Godot, with Claude Code as my developer. The way it worked was pretty straight forward. I’d describe what I wanted, Claude Code wrote it, built it and ran its own tests, and then I played the build on the phone and the Mac and came back with what was wrong or what felt off. Over six months that came to a bit over 400 check-ins.

This time I started with the phone in mind, so touch controls came first (left stick moves, right stick aims and fires) and the Mac and PC builds come out of the same project. The Synty packs I bit the bullet on back in 2024 made the jump with me, so the soldier, the aliens and the station kit are the same ones from the old posts, just with a lot more going on around them now.

Building the station

The levels are procedural again, but each deck is built from its own seed, so deck 12 is the same deck 12 every time you get there (which was the plan back in M2, generated but not random on the fly). The Daily Challenge takes its seed from the date instead, so everyone gets the same deck that day. There are 100 decks, getting bigger up to deck 50 and then holding that size, with rooms and corridors, big rooms with a smaller room built inside (Alien Breed was the reference there), hangars, and sections sealed behind coloured keycard doors with the crew locked inside.

The two generator bugs from my first posts are finally sorted too, so no more orphaned rooms the corridors can’t reach, and no more doors popping up in the middle of a room. A door now needs a wall on both sides of it, and Claude ran that check over 200 random seeds to make sure there wasn’t a single stray door left.

We have decks! Top-down on deck 57, with the station floating over a red nebula
We have decks! Top-down on deck 57, with the station floating over a red nebula

Things that shoot back

In M2 I promised another couple of enemies, turret guns and an end boss. Well, that grew a bit! There are six enemy types now (the Xeno Stalker, the Mind Wraith, the Heavy Warbot and friends), plus heavy turrets, little rapid fire sentries, and the red portals they all warp in from. Every fifth deck sends a pair of Hunters after you, big turrets that glide around the room chasing you down, and every tenth deck a mech locks you in its arena with the exit. You shoot off its weapon pods first and then go for the core, Contra style. And yes, the enemies don’t float anymore and they actually turn to face you 🙂

Getting up close

The default view is top-down with a slight tilt, and any walls between you and the camera fade out as you walk behind them so you never lose your guy. That one took a LOT of back and forth, something like fifteen goes before the walls faded as a unit and looked right. Then in August I wanted to see what it’d be like down in the corridors, so in went a first person view. It started out as an over the shoulder camera and was a proper first person view by the end of the same session, and it looks pretty neat on my 49 inch widescreen. You pick which one at the start of every run.

For the soldier’s arms I posed the weapon hold myself in Maya and Claude Code wired it in as the base pose, and later on I ran the crew through Mixamo to get them proper idle, walk and run cycles. Animation is outside of my wheel house, so I’ll take those wins!

Getting up close and personal! A pack rushing me in first person on deck 74
Getting up close and personal! A pack rushing me in first person on deck 74

Seven ways to play

Besides the campaign there’s Blackout (lights out, and a much smaller flashlight), Race the Fog, the Daily Challenge, Survival, and Escort, where you walk one crew member out alive and pick them back up when they get knocked down. Then there’s Beat the Bug, where you race Karl, the lab’s escaped specimen, to the exit. Karl can’t be hurt, he gets held up at doors, and he stops to eat things. He had to be called Karl. The first time I raced him on the phone I got smoked pretty quick, so his races now pick from the early decks!

Between decks you draft upgrades (faster fire, triple shot, piercing bolts and so on), and the better cards are tied to the crew you rescued, so if you don’t go and get them you might miss out. The catch is that the station fights back harder the stronger your kit gets, and you lose the lot when you die. There’s also a single item slot for mines, bombs, a stun tank and a warp gate.

The last ten percent

They say the last ten percent takes ninety percent of the time, and that was definitely the case here. September and October were all about turning it from a game I could play into one other people could buy. The menus all got rebuilt on Synty’s Sci-Fi Menus kit, and the little intro I’d wanted since the start finally went in, very much in the spirit of an old Origin or Sierra intro from the 90s.

Under attack! The intro, with the station in the asteroids and the warship parked outside
Under attack! The intro, with the station in the asteroids and the warship parked outside

The testers got builds through TestFlight and zips for the Mac and PC, and one of them had the game crash every time they opened Options, which Claude tracked down from the crash report on their phone. The phone was also running a bit warm, and it turned out the game was running at 120 frames a second on the iPhone with nothing capping it, so now there are Battery settings that cap the frame rate and render scale. After five levels on each setting it stayed cool.

On iOS the first ten decks are free and the full game is a single in-app purchase (£4.99 here in the UK). I went that way because a paid app puts a barrier up front, and I’d rather people get to try it first. I didn’t trust the existing Godot plugins to restore purchases properly, so Claude Code wrote a small StoreKit 2 plugin that I can reuse in my other Godot projects. Apple did bounce the first submission, not for the game but because the in-app purchase’s promo image was just the app icon! I dropped the image, sent it back with a few more fixes as 1.0.1, and that was approved on October 18th. On itch.io the demo (the first ten decks plus a level in some of the modes) is free, with the full game at $4.99 on the same page.

How it’s built

Under the hood it’s Godot 4.6.2 on the mobile renderer, so the one project builds for iOS as well as macOS and Windows. Claude Code did the programming, and a big part of how it all hung together was the testing. Claude wrote a pile of little test scripts that boot the game without a window and check things like enemies actually getting to you through the doors and the store unlocking properly, and changes ran through those before I ever saw a build. Every change also meant building all three platforms together, so I never had a stale build on one of them confusing me (which did happen early on!).

Even the trailer and the store screenshots came out of the game itself, from a bot Claude wrote that plays the game and records it in 4K. That had one funny bug: for about two weeks every capture had the phone’s touch sticks drawn on screen, even in shots meant for the Mac and PC, because one script quietly failed to load in the capture runs and took the rest of the HUD setup down with it.

Still on the list

There’s still a bit to do of course. There’s one rare bug on the phone I still haven’t caught, where every so often the shots just stop doing any damage. On a newer iPad with windowed apps turned on, the game can open sideways the first time until you rotate the iPad once, which I’m living with until Godot catches up with the new iPadOS. I still want to redo the textures from scratch (my weakest skill out of all of this) and redo the portals and vents as Houdini effects, and the turrets and mechs still need the same grime pass the characters and walls got. Game Center leaderboards are on the cards for 1.1, and the Steam store page is on the way. After that there’s Pyrate Plunder Island and Attack Track waiting in the wings, so stay tuned!

You can grab it on the App Store for iPhone and iPad, or on itch.io for Mac and PC, and there’s more about it on the JonnyP Industries site. Give it a go, and let me know how far up the decks you get!

No Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

So Long Slider Revolution, Hello JP Photo Carousel!The carousel running full width on a test site, with the arrows and dots showing