A scrolling shooter. As the Dart-07 you fight on Emerald Islands, Outpost in Space, and in the interstellar Phoslar Mine
You can play it here and on https://beetrootpaul.itch.io/dart-07 .
⚠️ Please be aware this game is under development. Mission 1 is complete and ready to play, but you enter missions 2 and 3 on your own risk 😄
If you want to take a look at the codebase, please visit https://github.com/beetrootpaul/dart-07 (the code inside PICO-8 carts of this game is minified, therefore not suitable for reading).
- press & hold
cto trigger a shockwave (if available)
pto open the pause menu
Virtual controller (in browser, on a mobile device):
- press & hold
🅾️to trigger a shockwave (if available)
➖to open the pause menu
Physical game controllers are supposed to work as well, even in a browser. Button mapping varies between models.
Your task is to pilot Dart-07 unit in a set of secret missions of increasing difficulty:
- first, you mess with the enemy on Emerald Islands
- then you continue to the Outpost in Space (⚠️ under development ⚠️)
- in order to reach the interstellar Phoslar Mine (⚠️ under development ⚠️) and prevent the enemy from utilising that precious resource
Destroy enemies along the way to increase your score, grab power-ups left by them and survive a boss fight in order to complete a mission.
There are 5 types of power-ups you can grab, each of them either makes your life easier or, if cannot improve further, increases your score:
- +1 heart – you can have max 10 hearts; you lose one whenever you take damage
- fast movement – increases player's movement speed; does not accumulate; lost on a damage
- fast shoot – increases shooting speed; does not accumulate, but can be combined with the triple shoot; lost on a damage
- triple shoot – you shoot 3 bullets instead of 1, but on a little but slower rate; does not accumulate, but can be combined with the fast shoot; lost on a damage
- shockwave charge – allows you to trigger a destructive shockwave around you (with use of "c" / "🅾️" button); you can have max 4 shockwave charges
In your HUD you see:
- left-top: mission progression (the higher the ship's icon is placed, the close to the boss you are)
- right-top: your score, which you gain by destroying enemies and grabbing power-ups in case they cannot bring any improvement
- right-middle: power-ups you gathered (excluding hearts and shockwave charges)
- left-bottom: hearts left; you die when all hearts are gone
- right-bottom: shockwave charges left; you can trigger a shockwave if you have at least 1 charge left
- top-middle, during boss fight: boss' health (yes, you are supposed to bring it down to zero 😉)
Technical Challenges Tackled In This Game
In this game I focused on learning various bits of PICO-8 API.
Some of the topics I tackled in this game are:
- multi-cart setup: this game consists of many carts – 1 main cart for the title screen etc., and 1 cart for each mission. Each mission has its own sprites and music, as well as a code responsible for available enemy types, including their attack and movement patterns. Common SFXs and sprites are copied from the main cart to missions carts with use of MEMCPY and a user data memory area (
0x4300-0x55ff), preserved across loaded carts). Moreover, I implemented this in a way which allows me to use same codebase to load both locally developed carts as well as those published to Lexaloffle BBS.
- missions defined as a map – level shape and enemy pattern are defined as sprites in a PICO-8 map, but in a simplified form (in order to fit all needed data there). Dedicated piece of code is responsible for translating sprites from map into a mission gameplay, including proper placement of edge land/structure tiles.
- circular clipping: during shockwave a ring of inverted colors propagates from the player. To achieve that I had to learn how to implement circular clipping masks in a CPU-performant way.
- dithered fade-in/out transition: basically a set of rectangles filled with FILLP patterns, moving over screen.
- high score: usage of PICO-8's API to read and store data persisted on a host machine
- code minification: with my code style (full of spaces and long names), I found it easy to hit PICO-8's characters' count limit. Therefore I forked and modified luamin tool and incorporated it into this game's build flow, resulting with characters' count reduced by around 50%.
I implemented this game on my own, as well as drew all sprites and composed all SFXs and music. But there are some resources I found super useful and used some of them I used in the codebase as well. With huge thanks, here are those:
#easingcheatsheetcart by ValerADHD with copy-paste ready easing functions. See: https://www.lexaloffle.com/bbs/?tid=40577
- Circular Clipping Masks tutorial by Krystman
- Lua minification tool
luaminby Mathias Bynens
- Pico-8 Music Tutorials by Gruber
- new powerup type: fast movement
- fixed diagonal speed of a player's ship by dividing it by
- fast movement, fast shoot, and triple shoot have their status visible in a HUD
- more health for mission 1 boss and mission 1 big enemy
- shake camera on a shockwave trigger
- lower volume of player shooting
- show a win screen after first mission (the completed one)
- print version number on a title screen
- complete game mechanics
- complete mission 1
- complete screens outside missions (but without music for a win screen after mission 3)
- implemented persisted high score
I luv luv luv the UI. It's the best I've seen so far in the PICO SHMUP Jam. Even without the explanation image, it's extremely intuitive. The only thing I'd even try to suggest is some more screen shake or something to make the guns feel less like pellet-guns and more like cannons. Other than that I really like it.
[Please log in to post a comment]