Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

DevLog - Antsy Alien Attack Pico 🚀👾💥

A topic by Martin Wimpress created May 26, 2023 Views: 1,244 Replies: 15
Viewing posts 1 to 15
Submitted(+1)

Day 0 😲

This is my 2nd game jam. My last was in 2021, and I leant loads, including Godot which I spent 2 weeks learning before the jam. If you’re interested, here’s Little Spy, my entry for My First Game Jam: Summer 2021

Other things I learned are

  • The upfront planning paid off
  • Using existing assets was a massive time-saver
  • Getting feedback earlier would have helped me
    • I re-wrote the entire character control mechanic the day before the jam ended based on playtesting from friends
  • Publishing the final article took much longer than I anticipated

So, with that in mind, this DevLog entry outlines what I did before Day 1 of Linux Game Jam 2023.

Learning PICO-8 🧑‍🎓

When I learned Celeste was initially a game jam PoC made with PICO-8, I wanted to learn more about it. So, I’m using PICO-8 for this jam, and I’ve spent my spare time learning it in the last couple of weeks. I already love it, I think I might be spending some time with PICO-8 after this jam, it’s just too much fun.

I read the PICO-8 manual twice, it gave me real vibes for the 8-bit computers I used to own. I spent some time looking at PICO-8 carts and learning from others’ code, and I joined some PICO-8 Discord servers to share ideas and made some demos.

Antsy Alien Attack Pico 👽️

This a sequel to a ridiculous coding challenge we did on the Ubuntu Podcast back in 2019, where we each made a game using bash 🤦 There is video evidence of this monstrous idea, but it was good fun.

I had a basic game design with the original Antsy Alien Attack and thought it deserved a refresh using something more appropriate.

Planning 🗺️

So, with my game idea and some PICO-8 skills acquired, I started planning what I’ll try to make. I wanted to minimise time spent making SFX, Music and graphics, so I also did some asset discovery to determine what I would use to make the game. I really want to focus mostly on code during the jam. No need for more explanation, here’s the GitHub repo.

Packaging 📦️

As this is a Linux Game Jam, I thought packaging PICO-8 games for Linux users would be appropriate. So, yesterday I made a placeholder app, created some scripts to export to all supported platforms and packaged the Linux exports as a .deb and a Snap. If I get time, making an AppImage and Flatpak are stretch goals.

Store Pages 🛍️

Creating an Itch page and publishing Little Spy burned up loads of time last jam. And getting the last build updated was frantic. So, yesterday evening I wrote some initial docs (based on my plans), pushed them to GitHub and then created an Itch.io and Snap Store page for Antsy Alien Attack Pico based on those proto-docs.

I’ve made a script that uses butler and snapcraft to automate publishing new builds to Itch.io and the Snap Store. I am hopeful this will maximise my jam time in the closing hours of the event 🤞

Early testing 🧪

My placeholder app is text, some wavy text that says the game is coming soon and a sprite. Simple.

This morning I shared my test builds with friends seeking compatibility feedback for the .deb and snap installs. Those were both fine 💪 However, my friends have handhelds such as Sony PS Vita and Miyoo that use fake-08, an emulator for the PICO-8 game. I have spent some time today changing my simple text output functions to be compatible with fake-08. I am not done yet, but learning my stuff was busted early is good. Test early. Test often.

DevLog 🪵

Something else I found useful last jam was making a short DevLog entry each day, it helped me see the progress that I actually made even when I initially felt that there were no significant changes. I recommend other participants take a few minutes to jot down a few words in your own DevLogs for this jam 👍️

Have a great jam, I am looking forward to seeing what you all create 🕹️

Host

I always love seeing devlogs - especially ones that show reflection on experiences and planning ahead for what's to come!

Submitted (2 edits) (+1)

Day 1

Today was about scaffolding the underlying components I’ll need to implement game logic. Here’s what got done:

  • P8SCII text renderer
  • State systems; one for the menus and another for the game itself
  • Actors object; consistent accessor for all actors
  • Weapons object; probably incomplete, but was enough to spray bullets from the player ship
  • Sprite handler with hitbox configuration and collision detection.
    • Collisions check whether the distance between the midpoints of the two boxes is greater than the sum of the half-box widths (ikr)
    • The advantage of this technique is hitboxes are relative to the sprite, and each collision check is very fast. Advantageous for pico-8’s constrained resources.
  • Multi-controller bitwise interface; returns dx/dy as -1,0,1 that maps directly to movement vectors.
  • Simple implementation of normalised movement vectors when travelling diagonally
  • Pixel clamping when changing direction to prevent stair-casing
  • Music dispatcher, which reserves 2 channels for SFX
  • SFX channel dispatcher, which allocates as many SFX as there are available audio channels
  • Fallback to older PICO-8 sys calls (when old PICO-8 is used) and (hopefully) support for fake-08
  • Particle system for debris, shock waves and explosions
  • uint32 support for player scores; 10 digit hiscores anyone?
  • Player “HUD”; score, HP meter and generator level
  • Player shields
  • Fake reactive parallax starfield with hyperspeed effect
  • MVP gameplay; shoot non-firing aliens and avoid asteroids.

Chasing fake-08 compatibility is ongoing, and this is my main learning for making projects in PICO-8. Make sure you have a current version fake-08 device available. I don’t, so I am relying on friends to provide feedback. Antsy Alien Attack Pico now runs on fake-08, it crashed yesterday. But some text rendering is not legible. If I use PICO-8 for a jam in the future, I will ensure I have my own fake-08 device available.

And what does it look like? Here’s the current state of things with some debug and hitboxes enabled for testing.

A longer clip is available on Imgur:

Submitted (1 edit) (+1)

Day 2

  • Fixed text rendering bugs on fake-08. Had to use sub() to index into the strings rather than the newer txt[i] syntax. I filed a bug upstream 🐛
  • Added a build time option to show the EXIT menu item. Only native binary exports have the EXIT menu item enabled and the main menu reflows the available items to fit the screen automatically.
  • Submitted Antsy Alien Attack Pico to the Linux Game Jam 2023; I have a page, so why not get that bit of admin out the way early?
  • Fixed the .dmg image creation script, but discovered the macOS export from PICO-8 is broken 😭
  • Add a new mini-game, “None shall pass”
  • Tweaked the difficulty of “Asteroid Belt” based on play-testing feedback.
  • Tweaked the player starting firing rate based on play-testing feedback.
  • Finalised the sprite sheet.
  • Wrote up a table of alien characteristics.
  • Wrote up player weapons upgrade path and play-tested them.
  • Increased scores to 8-digit numbers.
  • Implemented a simple algorithm for calculating the points aliens yield when destroyed.
  • Made impact flashes when aliens are hit more rapidly.
  • Added knockback to aliens when they are hit.
  • Added basic alien bullet firing.
  • Reworked the SFX for players and alien firing.
  • Refactored the actor class to remove properties not used by all actors.
  • Added screen shake when an alien is destroyed; it makes everything feel more impactful.
  • The screen shakes when the player collides with an alien, not when they are hit by a bullet.
  • The player explosion is only triggered when HP is exhausted; it improves player game-play visibility.
  • Prevented aliens from spawning over the top of other aliens
  • Added some initial alien movement patterns.
  • Fixed some typos in the on-screen prompts.
  • Disabled on-screen debug output and hitbox rendering.

Here’s how things are looking:

The game is a bit unbalanced now and requires power-ups so the player can level up to better take on the hordes.

Submitted

Hey Martin, what are you using for your pixel art? Or is that being done in Pico?

Submitted

What I have made I’ve done directly in PICO-8, but pixel artists contribute some of the sprites, and I think they use Aseprite.

Submitted(+1)

Day 3

  • Added alien bullet spread patterns.
  • Added Bronze, Silver, Sapphire and Emerald class aliens.
  • Added aimed alien bullets.
  • Added simple, estimated, predictive aiming for alien bullets based on player movement. Thanks for the idea, Roger.
  • Updated asteroids to make grey and brown asteroids distinctive. Grey is slower moving, harder to destroy and yields more damage on collision. Thanks for the idea, Stuart.
  • Added spawning multiple alien classes to the Shmup mini-game
  • Added a “Some Can Pass” mini-game and made “None Shall Pass” exactly that. Great idea from Stuart.
  • Added a variation of the Asteroid mini-game where weapons are enabled, and asteroid fields are dense.
  • Added 3-way, 4-way and 5-way firing patterns for the player; with auto-balancing of the firing rate and speed.
  • Added player weapons downgrade when player HP drops below 50%.
  • Balanced the difficulty/fairness.

This is how things are looking today:

Submitted(+2)

Day 4

  • Fixed some niggles based on excellent feedback from playtesters.
  • Added new mini-game “Evade”.
  • Added pick-ups for shields, HP, generator and weapons.
  • Added generator power transfers to HP if player HP reaches zero.
  • Added a new mechanic, the player ships move slower while firing. Thanks for the idea McPhail.
  • Updated Bronze class aliens to be more distinctive.
  • Updated the Help screen so that it is helpful.
  • Balanced the difficulty/fairness.
  • PICO-8 token hunting: 246 tokens reclaimed; this is where most of today’s effort was spent

Here are the pickups in action (with an artificial drop rate)

Submitted

Day 5

  • Drone class aliens are now animated.
  • Silver class aliens have improved animations.
  • Animated sprites start on a random frame to make things look less uniform.
  • Added Smartbomb, Speedboost and Weapons jammer power-ups.
  • If HP falls below 50% then the player weapons and speed boost are downgraded one level.
  • Players can use dynamo power to emit a Smartbomb.
  • Power-ups leave the play area faster at hyper speed.
  • Made sparkly things more sparkly.
  • Ignore sprite collisions outside of the play area.
  • Tweaked the difficulty of Asteroid Belt mini-games.
  • Added short training missions to help new players learn the game.
  • Added generous power-up drop rate in the Evade mini-game.
  • Balanced the difficulty/fairness across all game modes.
  • PICO-8 token hunting: ~360 tokens reclaimed.

Here are some clips from the training missions:

Submitted

Day 6

Today’s theme was improving the communication with the player in the menus on-screen text and in-game. A group of friends are play testing and providing useful feedback that I want to get into the game as soon as possible.

  • Tweaked the flight path of Silver aliens and sped up the animation
  • Tweaked the flight path of Sapphire aliens so they don’t all hurtle towards certain death
  • Tweaked palette flashes when aliens are hit to only illuminate bright colours and not the whole palette
  • Limit the number of explosions when completing a level or emit a Smartbomb to avoid the game slowing down
  • Made power-ups sparkle to distinguish them from aliens
  • Reworked the “training” missions so that they are not labelled as such and properly incorporated teaching players how to play into the game
  • Added player HUD overlays in the opening seconds of the first levels to help orientate new players
  • Added on-screen prompts when entering a new zone or completing a zone.
  • Power-ups in the Asteroid game now drop down the sides of the screen, where it is most unsafe for the player to be.
  • Power-ups in the Evade game now drop down the centre of the screen, where it is most unsafe for the player to be.
  • Created 5 Zones (levels) of increasing difficulty. Each Zone has between 6 and 8 objectives to complete.
  • Added procedural difficulty increase.
  • Tweaked alien spawn rates.
  • Fixed the rejection of off-screen sprite collisions.
  • Fixed a couple of crashers.
  • Fixed an RNG bug and rebalanced all alien behaviours as a result.
  • Added a “3D” for in-game status messages

Here’s an example of how the new on-screen messaging/prompts look:

Submitted

Day 7

  • Added a Cargo Run mini-game
  • Removed Speedbrake when firing and Speedboost power-up. Feedback from playtesters is that these are “Meh” and don’t add much to the game.
  • Removed using dynamo power to emit a Smartbomb. Feedback from playtesters is that this is “Meh” and doesn’t add much to the game.
  • Every power-up now adds charge to the generator, with the battery power-up adding twice as much as the others.
  • The power-up drop rate now has a more even distribution.
  • Aliens are rendered in greyscale (ghostly) when their weapons are jammed
  • Improve the flight path of Bronze class aliens.
  • At 100% dynamo charge, it converts to a 50% boost to ship HP.
  • Award players Zone Cleared bonus points.
  • Award players a +15% dynamo charge at the end of each objective.
  • Added a multiple to the points awarded for destroying aliens with a smart-bomb power-up.
  • Made rewards for destroying stuff more “interesting”.
  • No longer take control from the players prematurely when a zone is cleared so they can scramble for any remaining power-ups.
  • Added pre-coloured rockets for each player instead of palette swapping. Saves quite a bit of CPU.
  • Re-balanced the player weapons power-up progression.
  • Remove unused game state properties
  • Fixed some bugs which crashed the game
  • Don’t make weapons sounds when player controls are disabled

Here’s a clip of the new Cargo Run mini-game and “ghostly” alien when the weapon jammer is active:

Submitted

Day 8

  • Optimised palette swapping when aliens are hit. Looks better too.
  • Added Power Spree mini-game.
  • Added Quick Draw mini-game.
  • HP and Battery Power-Ups have their own sounds, and the HP/dynamo bar will flash for a few seconds
  • Added an “Objective Complete” message at the end of each objective.
  • Tidied up the Game End screens
  • Token Hunting: 226 tokens reclaimed. (hours of work to make space for new features)

Here are some clips of the new mini-games:

Submitted

Day 9

It is done 😅

  • Re-made the level progression to include all the mini-games.
  • Added Use the Force mini-game.
  • Made the Armada mini-game more challenging.
  • Fixed rounding errors in the HUD.
  • Made Asteroids Evade mini-game more fun.
  • Made Asteroids Shoot ‘em Up mini-game more fun.’
  • Show overall game progress at the end of each objective.
  • Re-balanced player firing frequency and cooldown.
  • Fixed some bugs that crashed the game.
  • Updated cart data version to enforce the new default hi-score.
  • Only disable PICO-8 menu in native binaries.
  • Limited maximum screen shake.
  • Assorted bug fixes and improvements discovered by playtesters.
  • Performance tuning.
  • Token Hunting: 91 tokens reclaimed.

Come and beat the author 😁

Submitted

Day 10

Just a little bit of final admin and an early night 😴

  • Added AppImage to the export and publish scripts
  • Added a Nix flake to the export script
  • Created a play-through video and published it on YouTube
  • Made covert art.
  • Updated Itch.io and Snap Store pages with new artwork, screenshots, gifs and video.
  • Updated Itch.io with AppImage and NixOS instructions.
  • Published on Lexaloffle BBS

I’m looking forward to playing the other submissions! 🕹️🖱️🎮️⌨️

Here’s the play-through:

Submitted (1 edit)

Day 11

The jam was extended by 1 day, so I really finished the game with a boss fight 🛸💥

  • Learned some new PICO-8 token optimisation techniques, reclaimed 159 tokens
  • Add a Boss Fight
  • Changed objective order in Zone 3 so there are no longer 4 objectives in a row that don’t use weapons, thanks for the feedback Roger.
  • Increased time limit for Use the Force by 3 seconds, thanks for the feedback McPhail.
  • Prevented aliens from shooting you when they are about to go off the bottom of the screen
  • Silver and Sapphire now aim at the players with some random skew.
  • Made Window Title camel case

Here are a couple of clips of the boss fight in action:

Submitted (1 edit)

Postmortem

It has been a week since the Linux Game Jam 2023 development period concluded. I’m looking back at how the jam went and what I learned. My decision to use PICO-8 for this jam is where most of my reflections lay, so I’ll cover that last.

Build and publish

I prepared upfront to automate the build and publishing pipeline. It did indeed avoid a last-minute panic to publish on a deadline. When the jam was extended by a day, that automation meant I could work on one last feature right until the last hour with the confidence I could publish a new build of the game in just a few seconds.

Changes for the future:

  • Create a project template including standard boilerplate code for a stub game (common helper functions, menu, controller handling, etc) with build and publish automation ready-to-go.
  • Create a GitHub Workflow for exporting/publishing games.
  • Don’t bother with Snap or Flatpak. This was a Linux Game Jam, so I prioritised Linux packaging, including a .deb, AppImage, Snap (in the snap store) Nix Flake and simple tarballs. The workflow for building/publishing snaps is quite different from my typical approach of using GitHub actions, and the review period for Flatpak is a blocker for jam time pressures.

Feedback from Friends

Without a doubt, the single best decision I made during this jam was asking my friends, Roger, Alan, Mark, McPhail, Stuart and Simon, to test and provide feedback; this happened daily (thanks to the automation above) and had a huge impact on how the game evolved, including:

  • Getting it to work on FAKE-08 (more on that later)
  • Making the game more intuitive/accessible
  • Coming up with new game mechanics
  • Setting the game pacing and difficulty
  • Dropping features that were not fun

And that last point is important ☝️ Don’t get attached to ideas if they are not working. Fail fast; cut out the cruft that is not adding value.

Changes for the future:

  • Share plans for games/jams early so friends can comment and share their ideas.

Game Design

I could (and should) have done more upfront planning. Most of Day 2 was spent making tables for player weapons progression, alien behaviour, and difficulty progression. I needed these before I could figure out how best to implement them, and this is something I should have done well ahead of the jam starting.

Changes for the future:

  • Create difficulty/behaviour tables ahead of the jam. These will likely be subject to change during the implementation, but having them ready will enable earlier playtesting feedback so they can be refined.
  • Write the descriptive text in bullet points for game mechanics so they are easy to interpret when you come to implement them. I spent a bit of time trying to remember what my notes meant. Make sure your past self is a good assistant for your future self.
  • Smaller game scope. I’ve only participated in 2 game jams so far, and I’ve made this mistake in both. I’ve been too ambitious with the features I wanted to implement, and this approach will certainly not scale to shorter jams.
  • Write down how the game will communicate with the player. I got great feedback about how the game could better “teach” new players how to play.
  • Dedicated “Training” missions were not fun. Teaching the player should be fully integrated into the game as fun, not grindy, levels.

Game Juice

I wanted to use this jam to put into practice some of what I learned about juicing game feel. I loved working on particle effects, screen shakes, and animations and ensuring every pixel was impactful and not lifeless or uninteresting.

Changes for the future:

  • Continue to study the art of game juice and game feel to refine visual feedback to players.

PICO-8

The Good 👍️

I will start by saying that I loved working with PICO-8 and the PICO-8 community. Here’s the good stuff:

  • Lua: My first introduction to Lua. It suits me; I’ll be doing more with it.
  • Fast iteration: I’ve seen that PICO-8 is popular for jams because you can go fast, and you really can.
  • Community & Documentation: The PICO-8 documentation is very good, and the PICO-8 community provide excellent learning resources and targetted discussion. Sharing carts means lots of code examples are readily available to learn from.
  • Sharing .gifs: Quickly creating gifs of new game ideas/features and sharing them with friends helped the feedback loop and also for writing up Dev Logs and social posts.
  • Genuine 8-bit vibes: Writing for PICO-8 took me back to a mindset I had working on the C64 in the ‘80s. I love the feeling of accomplishment when I’ve implemented something efficiently, from elegant input handling, sprite objects, collision detection and particle animations. However, striving for efficiency also became a drag on momentum…

The OK 👌

While my overall impression of PICO-8 is and will remain positive, here’s where my choice to use it was not ideal:

  • Not native: This is not PICO-8s fault. PICO-8 is a fantasy console and therefore operates as such. But early feedback was my game didn’t feel “native”. To some extent, I masked this on the game’s binary exports by disabling the built-in PICO-8 menus.
  • PICO-8 emulation: Many handhelds can play PICO-8 games by way of the FAKE-08 emulator. However, FAKE-08 is not 100% accurate, so a good chunk of the first day of the jam was spent making my code compatible with FAKE-08. This was mostly because I didn’t feel I could create a game using PICO-8 and not cater to the PICO-8 community.
  • Sound & Music: While there are a few collections of reusable music and SFX assets for PICO-8, it is slim pickings. These assets were more than sufficient for this game, but for future projects, I’d struggle unless I could find a collaborator to work on sound design and music composition.

The Pain 😱

I chose to use PICO-8, knowing it has several constraints to create a sense of working on a retro platform, and those constraints have been very thoughtfully implemented, IMO. Indeed, working with a 128x128 resolution made me think about how to display player progress/score/health compactly, which I was very pleased with. And while I am no artist, I can make passable 8x8 sprites in a pinch. But the 8192 token limit and compressed space did become a burden, here’s why:

  • The last four days of the jam, I spent more time optimising code than working on game features because I needed to free up tokens to implement features. I did enjoy this process, but with a jam deadline approaching, it is not how you want to spend your valuable time.
  • Token optimisations sometimes introduced regressions into previously well-tested/working code and required time to play through levels to ensure everything worked as intended.
  • I had to remove comments and delete commented-out “features”, such as debug hooks, to free up compressed space.
  • Some features never got implemented due to a lack of tokens or compressed space.
  • Features implemented towards the end of the jam (the boss fight in particular) are not as complete as I would have liked.

Even now, I am still finding new techniques to optimise PICO-8 token utilisation which could free up space to make new game features.

Changes for the future:

  • Add PICO-8 optimisation tools to the build pipeline so I can retain debug capabilities and verbose comments.
  • Use PICO-8 built-in menus to create a more cohesive feel, native or not.
  • Integrate better in-game guidance for controls/keybindings
  • Set up a FAKE-08 test environment on the development workstation so I don’t have to rely exclusively on friends testing with their devices.
  • Use a more mainstream game engine to enable access to lots of ready-made assets for sounds and visuals.

PICO-8 final thoughts

My main takeaways about PICO-8 are these:

  • I love it.
  • I love that PICO-8 introduced me to Lua, which I’ll invest more time learning.
  • You can iterate very fast.
  • Without a jam deadline, more complete games are viable and fun to work on with PICO-8 despite the token limitations.
  • I would use PICO-8 for shorter jams where the available time will be exhausted well before token limits.
  • The PICO-8 community is inviting and helpful.
  • It is worth doing at least one jam with PICO-8.
  • While I enjoy token hunting (genuinely, this is a fun game in itself), I think my time would be better spent learning the art and craft of creating games rather than becoming an expert in PICO-8 token optimisation.
  • I will continue using PICO-8 as a prototyping tool and a learning platform to teach my daughter more code skills.

The Game 🕹️

Overall, I’m very happy with how the game turned out. It is a small but complete game, taking about 18 minutes to play through from start to finish, with enough mini-games to keep the gameplay fresh and with a good sense of progression. The feedback, post-jam, is the game pacing is good and the gameplay fun.

I wanted to put into practice some game juicing techniques, and I’m rather proud of the results; palette flashes, palette swaps, screen shake, screen flash, multiple particle effects; psycho-visual transparencies, knock back and classic demo scene text effects.

There are about a dozen mini-games, and those were created quite by accident 🤯

  • While testing the game before the alien could move, I smashed into objects as fast as possible to test the collision detection. This was the inspiration for the Power Spree mini-game.
  • Similarly, avoiding the un-firing aliens falling down the screen before the player ship could fire rockets was the catalyst to create the asteroid games.
  • While testing the two-player mode, I instinctively moved to protect the uncontrolled 2-UP ship and laid down covering fire. This became the Cargo Run mini-game.

My friends came up with other mini-game ideas, which I sadly didn’t have the time or tokens to implement. Anyone of these mini-games could have been a jam entry in itself, and I’m thinking about developing some of these ideas into smaller casual games. And that right there is the value of participating in game jams.

Antsy Alien Attack Pico is the implementation that the original Antsy Alien Attack deserved. I now have the confidence that I could make a better shmup, and perhaps I will 😃

What’s Next?

Participating in Linux Game Jam 2023 has been quite profound:

  • The most significant discovery was using Lua. I immediately felt at home with Lua, and I am currently researching other game engines that use Lua as the principal scripting language.
  • I want to make more games. In fact, I’m going to make more games.
  • I like making (what are now considered) retro-styled or pixel art games. I am going to focus on this style exclusively.
  • New bucket list item is to publish at least one game for PC, mobile, web and console. I mean, how hard can it be? 😉