podtree number / string bug
In podtree if a number is overwritten with a string it remains as a string, even if the user re-enters a number. For example in /appdata/system/code.pod change selcol to "yellow" then back to 10. 10 remains as a string. And results in the code highlighting to go awry (see image) until code.pod is deleted and reset by app.
This is minor, but I was hoping to offload all app settings to podtree,(ie stay in picotron os / app world) without recreating a settings pane, or having to save back to a pod from the app.


Finished my first PICO-8 game! A farming game heavily inspired by <a href="https://www.youtube.com/watch?v=d6lu_dLie_E&list=PLavIQQGm3RCmgcBCb0aK4hT7morWlQ19A" target="_blank">SpaceCat's farming game tutorial</a>, but with my own twists, gameplay mechanics and visuals!


Precision Drift in t() Over Long Uptimes
Bug Description
Over hours, floating-point division yields cumulative precision drift.
This results in noticeable glitching in all applications that derive any of their values from t()
at any point during their _update()
or _draw()
functions.
Summary
- Root cause:
lua54_time()
uses60.0f
(32-bit), resulting in precision drift - Fix: change
60.0f
=>60.0
- Alternatives: new
stat(STAT_SEC_TICKS)
orstat(STAT_TICKS_RUNNING, n)
If this is behaving as intended or you go with the "Fix", I implore you to consider implementing one of the stat()
solutions!
Context
time()
is the lua-side of the c functionlua54_time()
lua54_time()
returnscproc->ticks_running / 60.0
as a lua_Numberticks_running
is a once-per-tick integer counter- (tick = 1/60 seconds) =>
t()
increments ~0.01667 seconds per tick
- (tick = 1/60 seconds) =>
- No reliable sub-second API for long-running apps

Officially, you can't use multiple data storage one one program.
This feels mostly true, but very similar in spirit to statements like "pico-8 has 16 colors".
"cartdata() can only be called once per program", is already less restrictive :
You could have a game that uses 3 save slots, each with a different cartdata ID because each save requires most or all of the 256 bytes of a cartdata storage, and let the player choose his slot at start of the program. You'd only ever call cartdata once per game session, but would have three storage slots used in one program.
This would still not be great because you can't display any info about the slots before loading them so the player would have to blindly load a slot, see if it's the save he intended to use, and reset the game if he made a mistake.
Could we do that programmatically ? Turns out that yes, we can :
extcmd("reset")
Does reset the cart. Problem is, how do we remember what the previously viewed storage was, or what we were doing before triggering the reset ?
They say your first game should either be a Pong/Breakout clone, or a Space Shooter...why not both?
Here is GalaPong! A simple high-score space shooter with a twist. You have to keep the ball in play while fending off against these invaders.
There are three different difficulties to try.
Easy for a breezy playthrough
Medium for a balanced challenge
Hard for a real challenge
O fires a shot, and X increases the paddle speed.
Be careful, you can only have 2 shots out at once!
See how far you can build your score!
1 Point: The ball bouncing off the walls
10 Points: Shooting an enemy
20 Points: Bouncing the ball off your paddle
30 Points: Hitting an enemy with the ball!
Enjoy!
I'm a newbie and I'd like to learn procedural generation to add things like dynamic grass and vegetation to my game. I really like how Zep created the swaying trees in the fireflies gif for the 0.2.4 release, so I thought I'd examine his code. But I'm having some trouble parsing it because the function seems to call itself. I'm assuming this is what's called a recursive function.

How does the function know to stop calling itself? I'm guessing the if statement regarding the l variable terminates it but how? I'm confused because, to my mind, logically, there should be an "else" following the if/then to call the function again. What is the point of the return command?
Here is his function for drawing the trees:
function tree(x,y,a,l) if (l<3) then for ii=0,3 do circfill( x+rnd(8)-rnd(8), y+ii, 1,lcol[4-ii]) end return end local x1=x+cos(a)*l local y1=y+sin(a)*l local q=l/8 local col=l>8 and 13 or 0 for xx=-q,q do line(x+xx,y,x1+xx,y1,col) col=0 end local d= ( cos(t()/3+x1/50)+ cos(t()/4+x1/70) )/500 tree(x1,y1,d+a-.04-rnd(0.04),l*(.9-rnd(0.2))) tree(x1,y1,d+a+.04+rnd(0.04),l*(.9-rnd(0.2))) end |
Thanks!


This is a basic engine to create an isometric game, it has mouse movement and collision detection on sprite flag1, arrow keys work also. I have a small function you send in x,y,sprite number and is places correctly in the isometric world, npc, monsters etc. I added textures to the tiles, your able to display more than one tile for player/monsters. Was testing pico functions and this came out.
Tunedle
A Musical Wordle Tribute
A little melody game where you have 6 attempts to guess a random melody with wordle-like feedback. "Easy Mode" will add note labels to your previous attempts. When Easy Mode is off, you have to play by ear (and can only listen to your last attempt).
This was a fun to put together and I am fully incapable of playing this game with easy mode off, but I figured for some more talented and musical people it might be a fun challenge.
Hello,
This Sunday, I purchased the discounted version of Picotron for $12, but I haven't received an email regarding the transaction or the license in my account (have pico8 and voxatron on this)
Monday, my account has been debited
I don't see picotron on the download page or even received a key by email, I sent an email on Sunday to [email protected] but I didn't get a response.
Thank you for you help
Haven't had any issues with connection before, but today it seems that no matter what I do, trying to [update] any of the lists in splore leads to a 'could not connect to BBS' error. I downloaded a fresh zip of pico-8 and renamed my appdata/roaming/pico-8 folder so that it would generate a new one with all the defaults. I also set pico-8.exe as an exception in windows firewall, and just for the heck of it I also set both the program folder and the data folder as exceptions in windows defender virus protection (I also tried it with both virus protection and firewall turned off), and just in case I made sure neither were read-only. I also disconnected and reconnected to the internet, somehow none of these have resolved the error, and I'm not finding any other suggestions (aside from linux-specific commands, and this is running on windows 10). Hoping someone has any idea what else it could be!