Log In  
Follow
beetrootpaul

🎨 pixel art · πŸ”‰ chiptune · πŸ‘Ύ game dev · πŸ‡΅πŸ‡± · he/him

:: Unfold ::

YouTube introduced user handles recently (somewhere around September/November 2022), making it possible for channels of any follower count (not just 100+) to have the username which starts with "at" ("@") character. For example this is my channel: https://www.youtube.com/@beetrootpaul

Sadly, Lexaloffle BBS profile doesn't allow to use "@", since it is just removing it: I type "@beetrootpaul" and save, then it changes to "beetrootpaul". In result URL of my YouTube channel is broken on BBS – it points to https://youtube.com/beetrootpaul


P#120722 2022-11-14 21:24 ( Edited 2022-11-14 21:25)

:: Unfold ::

Cart #brp_dart07-0 | 2022-09-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
14

Dart-07

A scrolling shooter. As the Dart-07 you fight on Emerald Islands, Outpost in Space, and in the interstellar Phoslar Mine

This is a PICO-8 game, which I made during Basic Shmup Showcase event organised by Lazy Devs Academy.

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).

Controls

Keyboard:

  • press & hold x to fire
  • press c to trigger a shockwave (if available)
  • press p to open the pause menu

Virtual controller (in browser, on a mobile device):

  • press & hold ❎ to fire
  • press πŸ…ΎοΈ to trigger a shockwave (if available)
  • press βž– to open the pause menu

Physical game controllers are supposed to work as well, even in a browser. Button mapping varies between models.

Gameplay

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.

Power-ups

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

HUD

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 πŸ˜‰)

Recordings

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%.

Credits

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:

Version History

v0.2.0

  • new powerup type: fast movement
  • fixed diagonal speed of a player's ship by dividing it by 1.41
  • 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

v0.1.0

  • complete game mechanics
  • complete mission 1
  • complete screens outside missions (but without music for a win screen after mission 3)
  • implemented persisted high score
P#117957 2022-09-25 18:16 ( Edited 2022-09-30 20:24)

:: Unfold ::

Cart #brp_towersofsurvival-0 | 2022-08-18 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
9

This game is my submission for the LOWREZJAM 2022, which requires games to have resolution of 64x64px.


Enemies are approaching. There are 10 waves of them. We need to survive.

There are 3 types of towers you can build:

  • laser - the fast one,
  • v-beam - the stronger one; its beam covers all tiles above and below, therefore you cannot build anything else on its way,
  • booster - this one makes all surrounding lasers and v-beams shoot longer and re-charger faster; you can "stack" boosters to increase total boost – each laser can be boosted up to 8 times and each v-beam up to 6 times (not 8, because 2 tiles are reserved.

Our base have 5 cores. Each enemy is capable of destroying one core. Without cores, we cannot survive, it's that simple.

Good luck! You are our last hope…


P#115972 2022-08-18 10:09

:: Unfold ::

Cart #brp_avoidyourpast1-0 | 2022-07-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

This game is my submission for Mini Jam 111: Colors².

Your goal is to maximise your score. May it be by collecting coins (10 points for each) or activating paints (3 points for a orange one, 1 point for a pink one).

Your enemy is your past self – every time you pick a coin, a memory of your movement appears. You have to avoid those memories to stay alive.

Orange and pink paint drops result with a temporary effect. Orange paint makes coins disappear, so you cannot pick them. The pink one makes your past selves disappear, making you invulnerable.

Controls:

  • arrows – change player's movement direction
  • enter – pause and open menu
P#114801 2022-07-25 11:44 ( Edited 2022-07-25 11:55)

Follow Lexaloffle:          
Generated 2023-01-28 02:56:20 | 0.066s | Q:18