Log In  
BBS > Lexaloffle Community Superblog
This is a combined feed of all Lexaloffle user blogs. For Lexaloffle-related news, see @zep's blog.

All | Following | PICO-8 | Voxatron | General

Hi there, fellow PICO-8 lovers. Today I want to share something I've been working on a little bit here and there throughout the year, and ask for a little feedback.

Cart #tojenanoja-0 | 2021-10-10 | Code ▽ | Embed ▽ | No License

My endgoal for this text box is to be able to make decisions (2- or 3- options at most) and to add extra features, such as Zelda-like highlighting, chaining to another textbox (for conversation), and a page-break like feature to pace which lines get scrolled in. So far, I have a custom inset and outset animation with sound, per-letter sfx, a throbbing button indicator to advance, and clean removal from the objlist.

It's taken me quite a bit of trial and error to pull this off. If you know of ways to simplify my code while supporting all of the same features, please let me know!

The textbox is implemented in coroutines that run in parallel until certain conditions are met. This allows one to think of the phases of the textbox in terms of a Gannt chart.

This is the first time I've gotten something together that feels almost ready for production, so any tips or feedback are appreciated!

P#98479 2021-10-10 23:04

Cart #makhganu-0 | 2021-10-10 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#98463 2021-10-10 13:20

Cart #yofutitede-0 | 2021-10-10 | Code ▽ | Embed ▽ | No License

Extremely unfinished atm but I'd love some feedback. Right now it's endless but I'd like to integrate some sort of ending, originally I wanted a really elaborate final boss but I don't think I can do that within the token limit. If anyone has any ideas, I'd love to hear them!


Z to use subweapons when you get them
X to attack with whip

arrows to move

Get upgrades to your hearts (ammo for subweapons), your maximum life and the power/length of your whip, and then get to the exit!

I realize most sound effects etc. aren't there, but they will be if I ever finish the game.

P#98448 2021-10-10 00:16

Cart #enkrdn_defuse_001-0 | 2021-10-09 | Code ▽ | Embed ▽ | No License

Hello all, this is my first cart post but I've been enjoying PICO-8 for a couple years now.

I've been wanting to get this defusal game idea out of my head for a while now and I finally did it. Every game is a totally unique randomly generated scenario (my favorite kind!)

However, I think the game mechanics need some polishing because, while luck must be a crucial element, the game seems to be mostly luck regardless of any hints or deduction. I say this because after 100 games my win ratio was a solid 50%.

On the left side you have the 6 types of wires: disarm, decoy, time penalty, clock speed-up, clock freeze, and detonate. You occasionally receive random hints as to what type of wires are in the current device, and when you cut a wire it reveals the type of wire you cut as well.

On the right side you have the simplified interface for cutting wires, as the wires in the device in the middle can be difficult to see.

This game is playable but definitely not complete. There are a lot of things I could do with it, such as:

  • give the wires in the device meaning based on placement?
  • create levels of difficulty that affect what wire-type hints you get.
  • tune the algorithm to create more specific disarming scenarios.
  • find that balance between luck and logic

Enjoy! All feedback is welcome!

  • Enchiridion
P#98446 2021-10-09 22:24

Building on my previous ray casting toy I've been playing around with shadow casting.

Cart #difepoduko-1 | 2021-10-10 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Old (30fps):

New (60fps):

Most examples of this I've come across work with tiles/on a grid. This works with arbitrary line segments with the following caveat: the more line segments, the worse the performance. This example runs okay at 30fps but not so much at 60fps.

Most of my time seems to be lost in the actual casting of rays.

Things I plan to do but haven't done yet:

  1. Currently I'm casting two rays, slightly offset, towards every line segment's end-points (after removing duplicates so I'm not casting at the same point more than once.) I figure it shouldn't be too terribly difficult to modify it so a ray which hits a line's end-point is extended to the next wall instead of stopping. Then I'd only need one ray per end-point cutting my total number of rays in half.
  2. Culling the geometry before casting so instead of casting at everything, I only cast at everything within a visible radius. Bonus, that'll also make it easy to only cast in the direction the character is facing instead of casting in all directions.

I do sort things a few times and I'm using bubble sort because it was easy to implement but I'm sorting pretty short lists so I don't think it's a huge time sink.

Suggestions on how to optimize further are very welcome!

Optimized a couple things:

  1. Made casting rays more efficient by in-lining the wall/ray intersection calculations.
  2. Made removing duplicates more efficient by using a set-like data structure.
  3. There are enough line segments/end-points that a more efficient search makes sense so threw together a (probably pretty bad) merge sort.

The new version has approximately the same CPU usage at 60fps that the old version had at 30fps. I'm sure some optimization wizards out there can help me squeeze some more out of this.

P#98442 2021-10-09 20:41 ( Edited 2021-10-10 20:30)

Cart #vomvomcastle-1 | 2021-10-09 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

The castle is yours - but first you must puke all over it!


Player 1
Left / Right: arrow keys
Jump: Z, N, C
Puke: X, V, M

Player 2
Left / Right: S, F
Jump: Left Shift, Tab
Puke: A, Q

Player 2 can join at any time by pressing the 2nd player jump or puke button.
2 players are not necessary to complete the game.

A dev-log for the game is here: https://twitter.com/st33d/status/1436396564046614529

P#98433 2021-10-09 13:45 ( Edited 2021-10-09 23:05)

Cart #standgame-6 | 2021-10-15 | Code ▽ | Embed ▽ | No License

Enjoy The Game. Share your High Score.

Another antigame/deconstruction, I guess.

P#98419 2021-10-09 03:46 ( Edited 2021-10-15 01:08)

Cart #tinyrogue-5 | 2021-10-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Decided to use Pico8 to lay down the initial design work for an RPG designed for the Thumby which runs using the RP2040 chip. This means I have 264kb (actually probably 232kb) RAM to work with, about 1.5mb of disk space, and a 72x40 screen. So I restricted the display area and made use of poking in an 8x8 font to simulate a lot of the final look of the game.

Version 0.1a is just about pre-alpha, as you have an endless dungeon to explore (max size 10x10) but no victory condition quite yet. There is still a few bits and pieces to finish off, code to tidy up but it's coming along.

Version 0.2a is now pre-alpha. Added in graphical updates, hooked in most abilities, added in some more user feedback, balancing is faaaar from done yet. There are likely still be be some bugs floating around as I haven't gone through a complete bug test yet.

Version 0.3b is now beta. Should be feature complete (and down to about 120kb), win/loss conditions, all abilities in and coded. Slowly starting to work on balancing the game now and completing the last tweaks.

Version 0.4b is getting close to final build. Fixes up some more bugs, added new "dodge" passive ability, tweaked some things for balancing, added in list of enemies at the start of a fight.

Version 0.5b is pretty much the final build. Balancing is basically complete, audio (a single beep) has been added, finished off modding support (for Pico8 requires editing load_data section). All that's really left to do is refactoring the code to improve the structure of it rather than any other major changes.

Version 0.6b added might passive ability and tweaked a player to go with that. Found a few bugs which I've fixed (such as monster movement, monsters not casting spells etc). Last big change was refactoring the code to streamline some things. Code is still a bit messy but way better than it was before overall. Now on final testing before porting.


  • Arrow keys for menus or movement
  • Z/X to interact with menu (flashing element is current option to use)
  • Hold down Z/X for 1+ second to bring up item menu when outside of a fight

==Active ability==
These abilities can only be used during combat.

1. Fury         attacks number of times equal to level but decreases accuracy by 25%
2. Pray         random effect: cast known spells, heal 1hp/level, flee, nothing
3. Flee         allows user to escape to nearby cell without damage
4. Cast         allows user to cast known spells (!!not suitable spell effect!!)
5. Burn         damages all enemies for 1hp/level, *2 if single enemy
6. Drain        damages 1 enemy for 0.5hp/level (min. 1) and restores hp equal to damage to user
7. Void         damages all enemies for 0.5hp/level (min. 1), *2 if single enemy, and restores hp equal to damage to user
8. Shift        gain abilities/passives of random monster <= level until end of next fight
9. Heal         heals user for 2hp/level
10.Aura         attack that automatically hits for 0.75hp/level (min. 1)
11.Slay         damages 1 enemy for 9999hp

==Passive ability==
These abilities are used automatically when appropriate.

1. Resist       reduces all damage by 1 point
2. Regen        regenerate HP over time (automatic outside of combat)
3. Disarm       disarms any encountered traps
4. Learn        learn unknown spells from scrolls
5. Strike       increases accuracy of any attack by 50%
6. Immune       takes minimum damage (max. 1)
7. Dodge        decrease attackers accuracy by 33%
8. Might    increases all damage by 1 point

Scrolls can only be used in combat, with no cost to hp, except if the player has the learn passive in which case the spell added to the players known spells. All items are consumed after use

1. Potion       heals user 2hp/level
2. Map          reveals map
3. Tools        disarms any traps
4. *xxxxx       scroll of the spell of the same name

All spells cost the caster 1hp to cast.

ID NAME         EFFECT  
1. Missile      same effect as the ability "smite"
2. Bless        same effect as the ability "pray"
3. Blink        same effect as the ability "flee"
4. Fireball     same effect as the ability "burn"
5. Siphon       same effect as the ability "drain"
6. Vortex       same effect as the ability "void"
7. Reshape      same effect as the ability "shift"
8. Heal         same effect as the ability "heal"
9. Holy         same effect as the ability "fury"
10.Slay         same effect as the ability "slay"
P#98405 2021-10-08 21:11 ( Edited 2021-10-17 20:03)

Cart #defenderexample-0 | 2021-10-08 | Code ▽ | Embed ▽ | No License

This is a tutorial cartridge for making a defender clone in pico8.

Features :

  • Seamless wrapping.

  • Player's controls and camera movements.

  • Enemy's shooting AI on the seamlessly wrapped area.

  • Pixel perfect sprite-based collision.

  • Checking if the object is within the screen or not.

  • Scanner.
P#98377 2021-10-08 10:25

Cart #rhythmfrog-1 | 2021-10-08 | Code ▽ | Embed ▽ | No License

This is a one-button rhythm game made as a present to our teammate Kyle (@kylelabriola on twitter) for his birthday.
It was done on around ~14 hours, including learning how to use PICO-8, which by the way, it's really good.



  • Hafiz Azman: Design + Music
  • Giacomo Preciado: Programming + Art

We are all part of 7th Beat Games

P#98375 2021-10-08 07:21 ( Edited 2021-10-09 02:18)

I just found out that you can turn a specific sprite into the icon for the binary export: https://www.lexaloffle.com/dl/docs/pico-8_manual.html#Binary_Applications_ and whoa, this is really great! But afaict it's restricted to the standard palette. Is there some way to set a custom palette for the icon in the export? If not, adding some sort of palette flag might be a nice feature:

EXPORT -I 32 -C 12 -Z 0,132,4,140,134,6,135,7,8,137,139,11,138,130,13,131 MYGAME.BIN

or maybe reuse the -C flag, and a -1 entry means transparent?

EXPORT -I 32 -C 0,132,4,140,134,6,135,7,8,137,139,11,-1,130,13,131 MYGAME.BIN

(although that might be a bit awkward because using pal(12,-1,1) ingame means to map 12->0x8F, not 12->transparent...)

P#98352 2021-10-07 20:06

I have a couple of token count reducer functions:

function poke_map(loopx,loopy,offsetx,offsety)

function unpack_split(s)
    return unpack(split(s))

As of 0.2.3, the latter one of these, especially when combined with the former, as in


has started to cause some weird behaviour in cases where cpu usage is high (around 80% or 90%).

The most obvious symptom is that actions triggered by a simple global timer (i.e. t += 1 in _update60()) start to occur prematurely when the unpack_split() function is called repeatedly in successive _draw() calls.

P#98347 2021-10-07 18:19 ( Edited 2021-10-07 18:25)

Cart #deep_impact-4 | 2021-10-09 | Code ▽ | Embed ▽ | No License


first game created
i am a newbie coder.

it s a simple arcade game where you have to shoot some kind of meteor to survive
hope you ll have some fun



update 9/10/21:
correct some bugs
update 8/10/21:
change button to shoot

P#98345 2021-10-07 18:13 ( Edited 2021-10-09 05:49)

Cart #name_dialog_snippet-0 | 2021-10-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This is my attempt to implement an RPG-style name entry dialog, which should be helpful for others as well.

It doesn't use any sprites or map elements, so its code should be easily usable in other cartridges.

You can use this code according to the CC-BY-SA-NC 4.0 license, as is default, or according to the MIT license below:

Copyright © 2021 /dev/urandom

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.


P#98326 2021-10-07 12:36

Cart #beatmania_picomix_visualmockup-1 | 2021-10-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Revision 1: Ditched sprite-based notefield frame; better background pattern; shrunk info panel due to lack of important things to put there; refined hitzone sprite code; general size/positioning adjustments

i can't think of how to write this so i'll just make bullet points because faeshnrfioujkgvle;nhs r

  • Arrows + buttons will light up hitzones
  • Aiming for 5-key era style
  • Absolutely not final; suggestions are welcome
  • Results screen has yet to be made
  • Will definitely need help with logistics (i.e. handling keysounds with a 64 sfx limit) and songs once this is ironed out
  • thanks

Previous version:

Cart #beatmania_picomix_visualmockup-0 | 2021-10-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#98313 2021-10-07 03:10 ( Edited 2021-10-07 19:52)

Cart #rojezagoka-0 | 2021-10-06 | Code ▽ | Embed ▽ | No License

P#98305 2021-10-06 23:01

Cart #coolannouncement-0 | 2021-10-06 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

X or C to continue.

Basically, I'm gonna release 4 projects at the same time.
PICO-8 Projects to be released:
-Oatmeal Adventure
-Scrolleste Upgrade
Scratch Projects to be released:
-Tile Platformer Creator
My Scratch Profile: https://scratch.mit.edu/users/ooooggll/

Also, look at this if you want: https://scratch.mit.edu/projects/579006253/

P#98304 2021-10-06 21:58 ( Edited 2021-10-06 21:59)

Does anyone know if it's possible to run "splore" from inside a game? My situation right now is that I've got Pico8 up and running on my Emulation Station arcade machine, and I'm wondering if I could make a Splore program which opens splore at runtime.

Currently, I've got pico8 setup so that selecting a cart will run it with pico8, but there was another method that just runs pico8 with splore, but won't let you access your carts that are already loaded onto the machine.

Any help is appreciated!

Cheers, Leo

P#98300 2021-10-06 19:31

in my code I have a variable named "times" and I am trying to add one to that variable
I do so with:


however it throws this strange error

syntax error line 12 (tab 2)
')' expected near '='

my whole code is this:

function move_x(x,obj,flag)
    local times=0
    local my_x=obj.x
     if (collide(obj,flag))
    until (times = abs(x))

plz help!

P#98286 2021-10-06 16:22

Cart #defender-4 | 2021-10-18 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This is a modified version of my Stargate for pico8 to make it identical to its predecessor, Defender.

Controls :

X - Fire laser

O - Hyperspace

O while holding X - Smartbomb

About smartbombing pods : If you smartbomb pods when there are more than 2 pods in the level, the smartbomb will wipe out both the pods and swarmers at once. otherwise swarmers will survive !

Since there were tons of tokens left after removing stargate contents, I added scoreboard and various gameplay options :

Start lives - number of lives at start. number of smartbombs at start is lives+1.

Bonus at - the required score for extra live and smartbomb. 0 means no bonus at all.

Humanoids per planet - number of humanoids in each planet. 1 to 10.

Waves per planet - Number of waves until moving to the new planet. 0 means never moving to new planet.

Start difficulty - Initial difficulty of the game.

Max difficulty - hardest difficulty of the game.

Risky hyperspace - when it's set to yes, the player has a potential of causing self-destruct after using hyperspace. No means you will always be safe after using it.

Fire on release - when it's set to yes, you can fire laser by both pressing and releasing the button like atari-8bit port of defender, which allows to rapidly fire laser without too much effort of mashing the button.

P#98278 2021-10-06 14:27 ( Edited 2021-10-18 23:11)
View Older Posts
Follow Lexaloffle:        
Generated 2021-10-19 15:43:39 | 0.133s | Q:92