



Game Overview
"Block Shots" is a Pico-8 game similar to a block breaker or brick breaker style game where players shoot balls to break blocks. The game features:
- Blocks with numerical values that decrease when hit
- Balls that bounce off walls and blocks
- A launcher mechanism with directional aiming
- Progressively advancing blocks that create increasing difficulty
- Score tracking based on block hits
- Highscore
Controls
- ⬅️ ➡️: Adjust aim angle
- 🅾️: Fire/release balls
- ❎: Restart
Core Mechanics
Launcher System
- Player aims using left/right buttons to adjust angle
- Balls are released in sequence with a timer delay
- The launcher has a visual aim indicator
Ball Physics
- Balls bounce off walls and solid objects
- Ball speed and direction are determined by launch angle
- Balls are removed when hitting the kill zone (bottom of screen)
- Ball colors dynamically change based on the highest block value
Block System
- Blocks have numerical values that decrease when hit
- Blocks are removed when their value reaches zero
- New lines of blocks are added at the top after each round
- Blocks advance downward after each round
- Game ends if blocks reach the bottom deadline
Level Progression
- New rows of blocks are added with increasing difficulty
- Block count per row is randomized within min/max constraints
- Block positions within a row are randomized
- More balls are provided as levels increase
Technical Implementation
- Uses a tile-based collision system with flag checking
- Tracks game elements (balls, blocks) in tables
- Uses sprite-based rendering with dynamic sprite selection
- Implements simple physics for ball movement and bouncing
- Handles collision detection between balls, walls and blocks



This is really well done, would be nice if you could track your high score and some of the numbers on the blocks can be a little difficult to read, but overall I like this!



Tracking the highscore is a great idea, thx for the suggestion.
The numbers are just sprites with 4x4 px. Maybe i find a better way to make them a bit more readable.
Edit: Now, the game over screen contains a highscore.



addicting. I do find myself accidentally restarting the game. Perhaps an are you sure pop-up would be helpful



Thanks for the advice.
This happens to me me too, sometimes.
I have added a restart dialog to prevent restarting the game by mistake



Very fun, if soul crushing during the last few rounds where you're forced to focus on the low tiles, knowing it's a guaranteed game over. Last move where you shoot behind the lines and get lots of points before your inevitable defeat is bittersweet.
I find it absolutely amazing you managed to squeeze two digits in 4x4 resolution.
I would have gone for the native font myself :
![]() |
[8x8] |
Arguably more legible, but not centered and looks cheap/spriteless.
I like your graphics much better : more harmonious and gives unique personality to the game.



I'm glad you like it.
The number sprites were actually a challenge... and I made '99' of them! 😆
But I also thought the 4x4 pixel numbers fit better with the overall design of the game.



I'm wondering what you would have come up in a 5x5 resolution.
The board is 14x14 tiles, excluding the borders and bottom status line.
14x9=126
That would have left a single pixel for the border on each side and the status bar would have to become a transparent overlay.
The drawing of the screen would be two nested loops with spr() call instead of a map call, but nothing major. The real difficulty would be to make a legible 2 digits sprite-sheet in 5x5 resolution, not something I know how to do.
If you're curious and want to try it, I can patch your game and post it here with placeholder 5x5 graphics. (Just rewriting _draw() , the game logic doesn't read from the screen with pget() or peek(), so it would play exactly the same aside from the visuals).



I think its not worth the work.
Especially because i like the layout as it is now. As you said its "more harmoniuous and gives unique personality to the game".



No problem, I didn’t think the final result would look better than current version, but the exercise of treating the map as a 2D array of tiles of size 9 felt novel, so I didn’t mind doing it as an exercise, and was curious how you would have handled a 2 digit number in 5 x 5 resolution, had you wanted to try, as an experiment.
Had a lucky run today where I reached fifty something. Wish there was some rogue-light elements to the game… maybe something simple like the ability to start at a level a third the max you ever reached, for example.



More than 50? 😮 Wow!
I never reached more than level 40.
I was thinking about to add some additional features, maybe a "super-ball" when you`ve reached a certain score.
Unfortunately I'll be on vacation the next two weeks and cannot work on the game... damn! 😆



Could you please swap the x and o keys in the restart prompt? it's sort of pointless if just pressing it twice quickly defeats the whole thing.



Just reset a game by mistake on mobile, so I agree with Soupster's suggestion.
Another quality of life update suggestion : let us move the cursor during shooting. I'm not suggestion to adjust the aim during the shooting phase, that would completely change the game, but letting us prepare the next angle while the balls are bouncing.
That would save significant time when you alternate between full left and full right, for example.



This is so fun.
I feel like it needs a line as an aim reference, rather than that dot though.



Just had a thought : the info required to replay game is very small : you need the RNG seed at start of the game (8 bytes 0x5f44..0x5f4b), and the sequence of angles played (between -66 and 66, so fits 1 byte per throw(or 7 bits even, if needed)).
In the pause menu, when game is over, we could add a "get replay string" option that would put to the clipboard a string containing the info, that we could paste in BBS to share with others, and a "replay from clipboard".



I got tantalisingly close to finding out what happens past block number 99. Do the 99s repeat from then on? Do they have higher numbers but only display 99? Do you win? Do you unlock the previously unseen 33rd PICO-8 color?
@RealShadowCaster : I'd really like to see how it feels if you could adjust heading in the middle of a shot, although I agree it would become a completely different game. There does seem a lot of luck under current rules, where if you aim at certain angles the ball bounces back at you off the first corner it hits, while just slightly differently it bounces around for ages. But maybe I just need to git gud?
I also like the idea of saving replays, I'm sure you'd see some fascinating runs.



@Cowirrie , Wow, I most definitely would have watched a replay of your game. 96 is very impressive !!
Looking at the code, if I'm not mistaken, there's no new ball color after 40, and the tiles are capped at red 99.
The sprite tiles are also not drawn after 99.
Modding the game to allow angle changes during shooting phase is probably not too hard as each ball object already has its own angle. I can do it this week end if you're curious. I suspect it would make this well balanced game into a trivially easy non ending one...
[Please log in to post a comment]