Log In  
Follow
Soupster
Peometry Dash
by Soupster
Want You Gone
by Soupster
3D Picotron Screensaver
by Soupster

Cart #peometry_dash-1 | 2026-07-29 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

First release of my Geometry Dash demake. No music currently.

Up arrow to jump
Z/X to place/remove checkpoints, or jump in normal mode.
The enter menu also has useful options.

Ship physics is weird, I need to fix that at some point. The other gamemodes have pretty good physics though, but not perfect.

5
0 comments



When using strings in your code it is sometimes useful to break them over multiple lines. Usually you would use the long strings [[text]] to do so, but this will introduce newlines into the string:

str = [[foo
bar]]
?str -- foo\nbar

If you don't want newlines in the string, there is a little-known feature of Lua that allows you to break short strings over lines:

str = "foo\z
bar"
?str -- foobar

While this works and prints the correct value (foobar), the syntax highlighting does not continue over the linebreak, and more importantly, the token count also breaks. Take this example:

foo = "\z
" function free_tokens() print('yay, ' .. 'free ' .. 'tokens!') end free_tokens()

This is only 4 tokens, yet runs fine!

3
1 comment



Cart #room-0 | 2026-03-21 | Embed ▽ | License: CC4-BY-NC-SA
8

A simple chatroom made with the new scoresub feature added in 0.3.0.

Controls: WASD or arrow keys to move, and type in the text box at the bottom to send a message. You can send a blank message to clear your speech bubble. That's about it.

This likely will not work on the BBS.

8
0 comments



Is there a way to remove a score from scoresub? Like passing a 0 or false as the score? I think this could be quite useful for more unconventional scoring systems, or for facilitating online play.

Addendum: What's the maximum score that can be recorded? Are the scores unsigned 64-bit integers?

4
0 comments



Cart #bouncy_desktop_ball-0 | 2026-03-09 | Embed ▽ | License: CC4-BY-NC-SA
2

Drag it around! Right-click to remove.

2
0 comments



Cart #wantyougone_pcm-1 | 2026-02-15 | Embed ▽ | License: CC4-BY-NC-SA
22

I managed to fit the whole song into a single 256kB Picotron cartridge using DFPWM!

22
3 comments



It would be nice to have a way to patch system processes and files that are run before /appdata/system/startup.lua is run, for processes like wm, and the default workspaces. My suggestion is to add a /appdata/system/patch.lua, which is run inside boot.lua before any other processes are created. It would be a safer way that making the system folder persistent, as it could still be bypassed like with startup.lua, but it would allow for things like creating custom patches for the editors and such.

5
2 comments



When using alt+up or alt+down in a text box, it will can sometimes freeze. I have narrowed it down to this loop: while (first or y != start_y) do in search_for_function().
The reason it freezes is because start_y is 0 if the cursor is at the top of the text. The code responsible for wrapping the search position will wrap it between #text and 1, which means if there are no functions or bookmarks to jump to, and the cursor is at the top of the editor (which will happen if it's only a single line), then y != start_y will never be false, and the loop will never terminate.

2
2 comments



@zep I was recording a GIF to test out some stats, not even pushing the limits, just recording and checking stat(321) a bit, if that helps, and I checked the output folder and it was completely wiped! Not sure what happened.

2 comments



Something that I feel is missing from the otherwise great userdata api is some way to fill a region with a specified value. It would work similar to lerp, as in: userdata:fill(offset, len, el_stride, num_fills, fill_stride). Since we already have more advanced operations such as lerp, I feel this would fit, and be useful in many cases.

Edit: You can use :add to set values, since it's 0 by default and you can pass a scalar to it.

2
0 comments



When setting up a window for an app, you can set pixels to be transparent, so the background shows through. This allows us to have simple on/off transparency, but it does not allow us to blend colours and have translucent windows. My suggestion is to let the cart give the window a colour table. This would be applied before drawing the window and removed afterwards, and it would let the window blend with the background.

2
0 comments



In a recent update, fetch()ing a .png file will now return a paletter-fitted u8 userdata, instead of the i32 we had before. Unless I've missed something, this means it's now no loner possible to get the actual colours in the image? Maybe an extra argument to fetch could resolve this, as we still have the ability to pass true to userdata :convert to get the palette alongside a u8.

1 comment



Cart #picotron_screensaver-0 | 2025-05-21 | Embed ▽ | License: CC4-BY-NC-SA
16

Made a neat little screensaver that I thought I'd share. Smoothly transitions between some different scenes.

(Sped up a bit, but the GIF lags):

16
2 comments



I have encountered some strange behaviour when using pod() with keys that are tables.

This code snippet prints {} (it should print nil if it were to be consistent with other pod behaviour)

local a = {}
a[a] = 1

?pod(a)

This code snippet also prints {}

local a = {}
local b = {}
a[b] = 2

?pod(a)

But now, the strange part. This:

local a = {}
local b = {}
a[a] = 1
a[b] = 2

?pod(a)

causes an error, it reads simply attempt to compare two table values. No error location, just this!

0 comments



Cart #tile_stress_test-0 | 2025-01-04 | Embed ▽ | License: CC4-BY-NC-SA
3

Just a little test to see if the implementation works.

Controls:

LMB: Place
RMB: Pick tile

Left/Right arrows: Cycle through tiles

S: View stress
M: Change stress mode

Have fun!

Edit: Also, each tile has different properties, so you'll want to be careful what you build with.

3
0 comments



Here is a list of bugs/annoyances in the BBS:

Important:

  • Code preview is broken, if you click on the code button under the pico-8 web player, it doesn't show the code. (It's the right size now, but still no code. Definitely an improvement!) Fixed!

Minor:

  • The padding around the pico-8 web player is too big.
  • The featured buttons at the top of the BBS don't show the author, it just says "by ".

There are a couple more, but they're not really issues, so I've omitted them.

0 comments



When clicking the play button on the Picotron web player, it stays as a grey screen. Checking the console shows an error, that it can't find https://www.lexaloffle.com/play/picotron_0101.js. After some digging, I believe it should be https://www.lexaloffle.com/play/picotron_0100h.js instead.

Edit: Wait, does this hint at Picotron 0.1.1?

FIXED!!!!

3
0 comments



Text gets "buffered" if no text editor is selected, and upon selecting it, it types the text.

How to reproduce:

  1. Start Picotron
  2. Type something
  3. Open up filenav
  4. Select the navbar
  5. The text appears where you click instantly.
2
1 comment



This is a maze generator in 191 characters.

Cart #maze_gen_191-0 | 2024-07-03 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

t={-2,2}function g(x,y)if(pget(x,y)<7)return
line(x,y)::l::r=rnd(t)if(rnd(2)>1)then
g(x+r,y)else
g(x,y+r)end
line(x,y)if(rnd(99)>1)goto l
end
cls(7)g(0,0)pal(7,8,1)pal(6,7,1)::_::flip()goto _

This is my first time doing this, let me know if it could be improved.

5
2 comments



Cart #rgb_transition-0 | 2024-06-07 | Embed ▽ | License: CC4-BY-NC-SA
7

This is a simple transition, that should be fairly easy to use. All the code is in rgb_transition.lua. Simply call rgb_transition_setup() when starting the transition, and then on each frame, after the game is drawn, call rgb_transition(). It takes one argument: Whether the transition should be fading in or out. True fades out. In this test cart, press X to reverse the transition.

7
1 comment





Top    Load More Posts ->