This is my first pico-8 game, feedback welcome.
Things I want to add/improve (that I don't necessarily know how to do):
-
m̶a̶k̶e̶ ̶t̶h̶e̶ ̶h̶u̶d̶ ̶f̶o̶l̶l̶o̶w̶ ̶t̶h̶e̶ ̶p̶l̶a̶y̶e̶r̶ ̶t̶o̶ ̶a̶ ̶n̶e̶w̶ ̶r̶o̶o̶m̶ ̶(̶i̶'̶m̶ ̶h̶a̶l̶f̶ ̶w̶a̶y̶ ̶t̶h̶e̶r̶e̶ ̶j̶u̶s̶t̶ ̶n̶o̶t̶ ̶s̶u̶r̶e̶ ̶w̶h̶a̶t̶ ̶e̶l̶s̶e̶ ̶t̶o̶ ̶d̶o̶!̶)̶
-
enemies that move left to right and up and down (half working)
-
knock back when taking damage on spikes or lava when stepped on (currently just contact and take damage)
-
print the value of an object next to it when buying from the merchant
-
ability to swing a sword and attack
-
change player direction when moving and moving animations
-
m̶u̶s̶i̶c̶ ̶a̶n̶d̶ ̶m̶o̶r̶e̶ ̶s̶o̶u̶n̶d̶ ̶e̶f̶f̶e̶c̶t̶s̶ ̶(̶d̶o̶n̶'̶t̶ ̶k̶n̶o̶w̶ ̶h̶o̶w̶ ̶t̶o̶ ̶p̶r̶o̶g̶r̶a̶m̶ ̶t̶h̶e̶ ̶m̶u̶s̶i̶c̶ ̶i̶n̶)̶
-
a̶d̶d̶ ̶i̶n̶ ̶c̶h̶e̶c̶k̶p̶o̶i̶n̶t̶s̶ ̶a̶f̶t̶e̶r̶ ̶e̶a̶c̶h̶ ̶r̶o̶o̶m̶ ̶(̶s̶t̶r̶u̶g̶g̶l̶i̶n̶g̶ ̶t̶o̶ ̶s̶e̶t̶ ̶a̶n̶d̶ ̶r̶e̶c̶a̶l̶l̶ ̶t̶h̶e̶ ̶X̶,̶y̶ ̶o̶f̶ ̶t̶h̶e̶ ̶c̶h̶e̶c̶k̶p̶o̶i̶n̶t̶ ̶w̶h̶e̶n̶ ̶p̶l̶a̶y̶e̶r̶ ̶d̶i̶e̶s̶)̶
-
a̶d̶d̶ ̶a̶ ̶t̶i̶t̶l̶e̶ ̶s̶c̶r̶e̶e̶n̶ ̶a̶n̶d̶ ̶s̶p̶l̶a̶s̶h̶ ̶s̶c̶r̶e̶e̶n̶ ̶(̶n̶o̶ ̶c̶l̶u̶e̶ ̶h̶o̶w̶ ̶t̶o̶ ̶d̶o̶!̶)̶
-
equipment that changes stats
-
pause screen that displays equipment information
- mini tarot game at start that lets you pick a card to give items and stats/
Any help or advice on improving this would be much appreciated
thank you to the community for giving me lots of help learning the basics of lua and helping me realise a new hobby :)
much thanks to @remcode for help coding and fixing the number puzzle!
̶P̶.̶s̶.̶ ̶c̶a̶n̶'̶t̶ ̶f̶i̶x̶ ̶t̶h̶e̶ ̶b̶u̶g̶g̶e̶d̶ ̶s̶e̶c̶o̶n̶d̶ ̶l̶e̶v̶e̶l̶ ̶c̶u̶r̶r̶e̶n̶t̶l̶y̶,̶ ̶u̶s̶e̶ ̶d̶i̶a̶g̶o̶n̶a̶l̶ ̶b̶u̶t̶t̶o̶n̶s̶ ̶:̶)̶
previous versions:





Hi there,
I'm new to pico-8 and was playing around with a system to generate levels for a top-down adventure game on the fly. My setup is as follows:
- in the map editor, I have screen-sized (16x16 tiles) compatible level blocks
- when I call my generate_map() function, it makes a table with a predefined number of entries, each containing the coordinates to row/columns in the map
- in my draw function, I then loop through this table and draw the map
--generate the map function map_setup(map_size) total_area=map_size level={} for area=1,total_area do level[area]={flr(rnd(7))*16, flr(rnd(3))*16} end end --draw the map function draw_map() t=1 for i=0,sqrt(total_area)-1 do for j=0,sqrt(total_area)-1 do map(level[t][1],level[t][2],i*128,j*128,16,16) t+=1 end end end |
This works for drawing the map nicely, however I am having a lot of trouble getting the collision detection with the map tiles to work. After digging around for hours, it appears my problem is that when I check player.y and player.x and feed these into mget (after dividing by 8 to convert to row/column coordinate), that mget returns whatever is at that coordinate in the map editor, not in my actually drawn map.


I have come across a bug with the rendering one-off characters using a binary encoded string. If they binary encoded string ends in a nul \0
the character will not render.
For example:
"\^.⁸\0\0\0\0\0\0\0"
doesn't work, the character will not render
"\^.\0\0\0\0\0\0\0⁸"
does work and the character renders as expected; as does other combination tried as long as the last value isn't \0
None of this appears to be an issue if values are not string encoded first. Using a variable to store a binary value and using it to render a one-off character works in a cart regardless if there is a \0
at the end.
Doing this on the Pico-8 command line:
didn't work
print("\^."..chr(255)..chr(0)..chr(0)..chr(0)..chr(0)..chr(0)..chr(0)..chr(0))
worked
print("\^."..chr(255)..chr(0)..chr(0)..chr(0)..chr(0)..chr(0)..chr(0)..chr(1))
This isn't an issue when using hex values e.g.:("\^:FF00000000000000"
always appear to work as expected)

Paint a Char
A utility for creating one-off characters for use in other carts.
Immediate load this cart by load #paintachar
Creating and exporting
Paint your desired character and send to the clipboard using "c" button.
Select the type of output desired being Hexadecimal string or Binary String.
Press "x" to clear and start new.
Importing
Import hex codes to verify how they look, or edit them further.
To import a hex code:
- Set Paint a Char to receive hex from clipboard
- Copy the 16 digit hex code you want to import
- Paste (e.g. ctrl-v) the value in to the app




Hey all, working on an endless runner and running (lol) into a couple issues.
Here's the cart:
Basically I can't seem to get the 'enemy sprites' to actually kill the player. I've given them their own tables of values, flags etc but I don't know how exactly to check their flags for proper collision. Alternatively, I would maybe like to generate the enemies using the map_gen() function so the placement is relatively random, and that works to kill the player, but then I can't make them move.
This goes hand in hand with making the runner go on indefinitely until player death - currently it only generates 8 screens and then repeats. Another forum member mentioned I should pick a midpoint then 'copy' the second half of of the map back at start, move the player instantly, and then generate the second half again - but I have no clue how to go about that.


What is this cartridge?
This is an example of how the bitcrush/distortion flags (found at poke location 0x5F42) can be utilized. The triangle waveform in PICO-8 can be made to sound more like the NES's triangle wave channel, but not exactly the same as it.
Technical bits
Generally, all digital sound data is not accurate. They are limited by some factors. One of those factors is "amplitude".
The primary way to store audio digitally is with Pulse-Code Modulation (PCM), where an analog audio signal is repeatedly sampled at a certain time interval, and each analog sample is quantized to a limited range of digital values.


Explore Dragon: Bean Bash is the sequel to Explore Dragon. It runs on the same engine as the original game, but with some new features!
Pressing X will allow you to "dash", which makes your speed faster for a bit. There are also some parts of the map that are extremely dark and make the game more difficult. These sections decrease the light energy, so be careful: if you run out of energy, you get sent back to a checkpoint!
Credits for additional code (these can also be found at the end of the game's code):
Azure, Groove,M.D., Kometbomb, Thykka, Yolwoocle, Daniel Shiffman's "The Nature of Code", MBoffin's "PICO-8: Smooth Map Screens" Tutorial.

Hey guys, I'm stuck on trying to make an endless runner with procedurally generated platforms.
I was originally going to try and use the map sheet to make different 'rooms' and then try to cycle through them and draw the 'next room' randomly, but decided to abandon that idea in favor of just procedurally generating the platforms. (someone please let me know if that's a better way to do this type of game)
If you try the game you'll see the issue - the tiles are generated all over (I was going off the LazyDevs roguelike tutorial and trying to modify it for my purpose), they aren't jumpable despite having the right collision flags, and for some inexplicable reason they fall as if they had gravity, which I just can't figure out.
I've been tearing my hair out and really need assistance. Any help at all, or a better method would be really appreciated! I basically want to generate the runner platforms per 8 map screens, and ideally be able to generate powerups, holes in the floor, eventually enemies/traps etc.






A wide world of interactive fiction is playable on the Pico-8
Status Line, a z-machine interpreter which plays .z3 (Zork etc), and .z4 (Trinity etc) interactive fiction games has been updated to v3.0. This add .z5 and .z8 game compatibility, which greatly increases the world of games you can enjoy. Retro and modern classics (Lost Pig!) can be enjoyed.
Features
- Plays z3, z4, z5, and z8 game files
- Supports game sizes up to 512K
- Full-color "EGA" style support (for those games that leverage it)
- Timed functions and timed input support
- Completely redrawn bold and italic fonts
- Both BEEP and BOOP sound effects supported
- Save/restore games in progress
- Lots of player-adjustable preferences
Available Now at itch.io and github
Details, where to find games to play, an extensive series of development blog posts, etc. can be found on the project page at https://christopherdrum.itch.io/statusline.








Picokaiju
You are one big monster with a thirst for destruction. This quick turn-based roguelike PICO-8 game is all about stomping, smashing, grabbing, and chomping your way through a procedurally generated hapless city and its tiny citizens.
Also available at itch.io
Controls
- D-pad (arrow keys), move the Kaiju by one tile
- O button (Z, N, C), ROAR
- X button (X, M, V), Open abilities menu
The mobs will move once you perform an action (movement, roars and abilities).
Score tracker at the bottom right shows "current points"/"points until next powerup".
Mobs
Mobs have a chance to spawn every other turn (except for civilians) and the max count is based on your kaiju's destruction.









I can't find any posts talking about this, which may just mean I'm terrible at finding thing in the BBS.
At any rate, I'm doing Windows, macOS(OS X), and Linux executable exports. I've noticed a few things, and I need to know if this is "just how things are," "that sounds broken," or "that is something we can fix."
On Windows:
- The executable on first launch triggers Windows Defender. I tried codesigning the .exe with
signtool
to no avail. Is there a way to fix this? - On first launch, the exe runs full-screen. I don't want this for my release as it relies on file system interaction via drag-and-drop. Can we default to windowed mode?
On macOS:
- Like Windows, the unsigned app triggers a security warning. Has anyone successfully done a codesign to fix this?
- Also, the full-screen mode occurred for one person, but not for another. Does having Pico-8 installed affect how this launches? (person with Pico-8 was windowed mode on first launch; person without Pico-8 was full-screen on first launch)



