Antsy Alien Attack Pico is a juicy retro-style vertically scrolling shoot 'em up. It is my love letter 💌 to the shmups I played in the arcades in the '80s and '90s 🕹️ and my entry to Linux Game Jam 2023 🐧
The year is 2139. Planet Earth is under attack by aliens, and they're (still) antsy!
🚀 You're a mercenary with a state-of-the-art space fighter and a gun for hire
👾 The United Federation of Planet Earth has hired you to dispatch the aliens and restore calm
💰️ Complete every mission to fulfil your contract and earn your pay
💥 Destroy aliens by shooting or colliding with them
🛸️ Avoid the aliens if you can't destroy them
🔋 Collect power-ups to enhance your weapons and charge the ship dynamo
🛡️ A fully charged dynamo boosts ship health by 50%
🛑 Weapons go offline when travelling at hyperspeed
🌌 When your ship health is depleted, you're lost to the vacuum of space
Antsy Alien Attack Pico should work with most game controllers 🎮️ The in-game visuals show the PICO-8 buttons, but the following shows the equivalent buttons for Xbox controllers.
Action | Button / Stick |
---|---|
Move | |
Fire | |
Fire |
Action | Key(s) |
---|---|
Left | |
Right | |
Up | |
Down | |
Fire | |
Fire |
Action | Key(s) |
---|---|
Left | |
Right | |
Up | |
Down | |
Fire | |
Fire |
All the install instructions are kept up-to-date on the Antsy Alien Attack Pico page on Itch.io. Supported platforms are:
- PICO-8 Cart
- .deb for Debian & Ubuntu
- Flake for NixOS
- AppImage for x86_64 Linux
- Snap for x86_64 Linux
- Tarball for x86_64 Linux
- Tarball for 32-bit and 64-bit Raspberry Pi
- Windows
- macOS
Antsy Alien Attack Pico is a "sequel" to Antsy Alien Attack. Antsy Alien Attack Pico was developed during Linux Game Jam 2023 🐧 using PICO-8. I've been looking for an excuse to learn PICO-8 and this is it!
- Vertical shooter
- 1-UP or 2-UP
- 5 waves each with distinct mini-games
Post-wave status report- 5 (or more) distinct alien enemies
- 1 life governed by HP meter
- Mini-games between waves
- Asteroid belt - Go fast, don't die
- Power spree - A few seconds to grab fast-moving power-ups
- Both run at hyper-speed with no weapons
- None shall pass - don't miss any aliens
- Cargo escort - protect the cargo ship
- "Juice"
- Publish Linux builds
.deb
, Snap and Flatpak
- Weapon upgrades
- Faster speed
- Shorter cool down
- More damage
- Wider spray patterns
- Shields
- Weapons block
- Wipeout alien projectiles and prevent fire for some seconds
- Smartbomb
- Damage all aliens and wipeout all alien projectiles
- Power
- Charges the dynamo
- A fully charged dynamo yields player HP
Hold the second button to release a smart bomb; playtesters didn't think this added anything of value
- 1-UP accent is green, 2-UP accent is red
- Alien projectiles will always be yellow/orange
- Subtle parallax starfield backdrop
- Helps make projectiles visible
- More sprites for actors and projectiles
- Minimal player HUD due to 128x128
- Target 60FPS on low-power handhelds
- Use particle system to overcome sprite bank limits
- Use palette swaps to overcome sprite bank limits
- Hitbox collision detection to preserve performance budget
- Time
- pico-8 token limit; the struggle is real
- pico-8 performance budget; turns out this is not such a big concern
- Flatpak and publishing in Flathub
- Level "design"
- Time
- Juicy enough
- pico-8 sprite bank size; is plenty if your games doesn't use tiles
- Finding suitable sfx and gfx
- pico-8 optimisations create ugly code 🍝
- Time
- Reference for packaging/distributing pico-8 games to Linux users
- pico-8 tooling to use for making more games
- Learn some basic juicing and game-feel mechanics
- Fun
A big "Thank you!" to everyone below who contributed to the making Antsy Alien Attack Pico during the game jam. Antsy Alien Attack Pico would have been boring shapes and silence had it not been for these fine people:
The game code is licensed under the MIT license and all game assets are licensed using CC-BY-NC-SA 4.0. As I'm using assets from other creators, and they use the CC-BY-NC-SA 4.0 license, the few SFX and sprites I created are also released under the CC-BY-NC-SA 4.0 to keep things simple.
- The player ship is from Krystian Majewski [CC-BY-NC-SA 4.0]
- Most of the other sprites are created by Alice Masters [CC-BY-NC-SA 4.0]
- All the music is from Gruber [CC-BY-NC-SA 4.0]
- Most of the SFX are from Gruber [CC-BY-NC-SA 4.0]
10 Days! Welp 😅
- 🪵 DevLog
- Text renderer
- State system
- Actors object
- Weapons object
- Super simple sprite system with collision detection
- Bitwise controller system
- uint32 handler
- SFX channel dispatcher
- fake-08 compatibility
- Main screen with Tux
- Credits
- Help
- Game Over
- Game Win
- Toggle music
- Persist Hiscore
- Particle system
- Screen shake
- Linux, Raspberry Pi, Windows, & macOS binaries
-
.deb
- Snap
- Flatpak (stretch goal)
- AppImage (stretch goal)
- Controls and movement
- Collider handling
- HUD
Level | Speed | Cooldown | Damage | Pattern |
---|---|---|---|---|
1 | 4 | 4.5 | 7 | Dual |
2 | 2.75 | 5.5 | 8 | 3-way |
3 | 2 | 6.5 | 9 | 4-way |
4 | 1.75 | 7.5 | 10 | 5-way |
- Shields
-
Speed; playtesting feedback was this was "Meh" and didn't add anything to the game - Weapon patterns; more devastation
- Weapons block; wipeout alien projectiles and prevent fire for some time
- Smartbomb; damage all aliens and wipeout all alien projectiles
- Power; charges the generator.
- HP; adds to ship HP
- Shot damage is 10 across the board for all aliens at the moment.
- Each alien yields points when destroyed that is calculated as
(HP + COLLISION_DAMAGE * 100) + EXPLOSION_SIZE
Class | Speed | Trajectory | Fire Pattern | Bull. Size | HP | Coll. Damage | Exp. Size | Status |
---|---|---|---|---|---|---|---|---|
Drone | Slow | Wave | Single on line of sight | Small | 20 | 20 | 1 | Done |
Asteroid Grey | Slow | Single path | n/a | n/a | 50 | 30 | 2 | Done |
Asteroid Brown | Medium | Single path | n/a | n/a | 35 | 20 | 1 | Done |
Orby | Medium | Vertical | 8-way Pulse | Small | 40 | 20 | 1 | Done |
Bronze | Slow | Converge center | Opposite corner | Medium | 40 | 20 | 1 or 2 | Done |
Silver | Medium | Vertical | Aimed | Small | 45 | 20 | 2 | Done |
Sapphire | Medium | Diagonal | Predictive | Small | 50 | 20 | 2 or 3 | Done |
Emerald | Fast | Wide wave | 4-way Spread | Medium | 60 | 20 | 3 | Done |
Saucer | Fast | Loop | 4-way Spread | Large | 5000 | 60 | 3 | Done |
- A flying saucer that loops around the screen and fires a 4-way spread of bullets.
- Asteroid Belt Slow/Dense Weapons On
- Asteroid Belt Fast/Sparse Weapons Off
- Power Spree Fast Weapons Off
- Some Can Pass
- None Can Pass
- Spheres Attack Weapons On
- Spheres Evade Weapons Off
- Cargo Run
- Quick Shoot Fast Weapons On
- Quick Force Fast Weapons Off
- Boss Fight
- Drone
- Bronze
- Asteroid Belt Slow Weapons On
- Silver
- Some Can Pass
- Metal Squad
- Sapphire Scouts
- Quick Draw
- Cargo Run
- Power Spree Fast Weapons Off
- Asteroid Belt Fast Weapons Off
- Emerald Scouts
- Gem Squad
- Quick Force Fast Weapons Off
- Spheres Evade Fast Weapons Off
- Metal Squad
- Asteroid Belt Fast Weapons Off
- Power Spree Fast Weapons Off
- Gem Squad
- None Can Pass
- Quick Shoot
- Spheres Attack
- Asteroid Belt Slow Weapons On
- Power Spree Fast Weapons Off
- Armada
- Cargo Run
- Armada
- Asteroid Belt Fast Weapons Off
- Power Spree Fast Weapons Off
- Boss Fight
- Asteroid belt - Go fast, don't die
- Power spree - A few seconds to grab fast-moving power-ups
- None shall pass - don't miss any aliens
- Some can pass - try to stop them all
- Cargo escort - protect the cargo ship
- Push 'em back - push the aliens back into the obliterator
- Rock on - more rocks than you can avoid
- Quick draw - Shoot fast moving aliens within a tight time limit
- Use the Force - Shields up, crash into aliens within a tight time limit
- Peekaboo - Aliens appear briefly, fire and leave
-
Canyon run - narrow canyon with lots of rocks at speed (stretch goal) -
Tunnel through - make a path through the rocks (stretch goal)
- GitHub page
- Itch.io page
- Snapstore page
- Lexaloffle BBS page
- Training missions; first missions teach you how to play
-
Player performance/skill tracking with post-wave report - Publish in Flathub page
-
Predictable wave patterns/timings -
Sprite rotation and zooming -
Ship velocity/friction - Scene change transitions/wipes
- Player formation "animations"
- Player gravity-guided pick-ups
- Pick-up animations
- HUD orientation
-
Player smart bomb is homing missiles
All development was done on Linux workstations, running either NixOS ❄️ or elementary OS. I decided to use pico-8 directly for all development, and the following tools to help with the process:
- PICO-8 CRT effect HTML template
- Renoiser
- respriter (I didn't use this in the end)
Think about portability to 8x8 or 16x16 sprites with the fixed pico-8 16 colour palette. I found these, most are not suitable for pico-8 😭 Thankfully Alice Masters helped out.
- https://opengameart.org/content/modular-ships
- https://opengameart.org/content/1616-ship-collection
- https://opengameart.org/content/bullet-collection-2-m484-games
- https://opengameart.org/content/shmup-ships
- https://opengameart.org/content/space-ship-shooter-pixel-art-assets
- https://opengameart.org/content/retro-spaceships
- https://opengameart.org/content/space-war-man-platform-shmup-set
- https://opengameart.org/content/super-dead-space-gunner-merc-redux-platform-shmup-hero
- https://opengameart.org/content/some-invaders
Gruber has two carts with music selection that can be used in games. This is what I've picked:
From Pico-8 Tunes Vol. 1
- pat 00 - 05
- pat 06 - 13
- pat 14 - 17
- pat 18 - 23 Use as Game Theme
- pat 24 - 29
- pat 30 - 35
- pat 36 - 41
- pat 42 - 45 Use as Boss Fight
- pat 46 - 47
- pat 48 - 54
- pat 55 - 58
- pat 59 - 63
From Pico-8 Tunes Vol. 2
- pat 00 - 06 Use as Game Win
- pat 07 - 12
- pat 13 - 20 Use as In Game
- pat 21 - 30
- pat 31 - 39
- pat 40 - 42
- pat 43 - 48 Use as Game Over (not enough instrument space)
- pat 49 - 55
- pat 56 - 61 Use for Asteroids (not enough instrument space)
I used Renoiser to make a new cart with the following music patterns. Not feasible to add music for the asteroid belt, there would not be sufficient SFX slots left over.
- pat 0 - Attract
- pat 6 - In Game
- pat 14 - Boss Fight
- pat 18 - Game Win
SFX 35 to 63 are free after the music is added. Only two channels are available for SFX so none of them can be particularly long-running and I'll need to manage the channel usage dynamically.
Gruber also has a Pico-8 SFX Pack he's created for various pico-8 games.
Here are the SFX slot numbers and what the corresponding SFX is used for. Any that start with "From" indicate which slot in the Pico-8 SFX Pack they were sourced from.
- 0 : UI Move : From 8
- 1 : UI Action : From 11
- 2 : 1-UP Fire : Mine
- 3 : 2-UP Fire : Mine
- 4 : Alien Fire : Mine
- 5 : Hit : Mine
- 6 : Explosion 1 : From 21
- 7 : Explosion 2 : From 25
- 8 : Explosion 3 : Mine
- 9 : Pickup Item : From 56
- 10: Shields Up : From 48
- 11: Generator Power : From 51
- 12: Smartbomb : From 45
- 13: Weapons Disabled : From 40
- 14: HP Power-Up : From 4
- 15: Battery Power-Up : From 6