The splore local cartridge storage file browser does not show the game title.
If I download a game from the bbs, the filename is some number. The file browser inside pico-8 only shows this number. But it should show the game's title.
Also there seems no way to change sorting in the splore browser. Is it stuck at alphabetic?
I wish there was a standard gamepad to go with this standard console. This seems to be a huge oversight on an otherwise great project. Games as well as Pico-8 itself seem to use a whole bunch of different keys and "buttons" such as "z","x","menu","esc", "space", "enter" etc.
For a game console, it seems very keyboard-centric, what is the standard gamepad for this?
Also, what are the gamepad mappings from these "keys" to usb controllers on host system/SDL buttons? How do I control pico-8 with a gamepad? The manual refers to z,x,"menu" and I need other buttons to play such as "Esc" "space" etc? So what is "menu" what is "Esc" on my gamepad?
Some games use even more keys and some use other keys, there seems to be no consensus.
In short, it seems impossible to navigate the Pico-8 and play all games with only a gamepad.
For example how do I quit a game with a gamepad? It seems I need to press Esc on the keyboard. But for some games, to start I need to press space, for some I need to press z or x. It seems completely chaotic.
Also, there seems to be a menu that pops up with "enter", but there is no "quit pico-8" menu option. It all seems very ill-thought out and not controllable with a gamepad consistently.
EDIT: For example, in the game "Serpent's Shadow" I have to suddenly press "v" to continue to the next level. In another game, jump and run were set to "x" and "c" instead of "z" and "x". So even if I use some remapping tool to map my gamepad to z,x,enter,esc,space, I will still not be able to play games that make use of v, and c or any other key.







This quirk exists in Pico8 0.1.10C, and possibly other versions. Try this code out, and you'll see the results for i>=16 are the same:
for i=1,20 do print(i .. ' ' .. 1.11^i) end |
1.11 raised to the 20th power (equal to ~8.062) is still well within the overflow limits of pico8, but currently pico8 limits the possible exponent to 16 (resulting in ~5.309).
Here's a workaround for raising to higher power (if y is a positive power), that takes advantage of the property x^m * x^n = x^(m+n):
function pow(x,y) local r=1 while y>0 do r*=x^min(y,16) y-=16 end return r end |
Using this you can get the correct results. Just wondering, is this limitation intentional? It makes sense for integers, because 2^15-1 is the greatest positive integer you can express, and occasionally you might want to do 2^16 (if you're careful about the sign bit), but for fractions it seems a little strange. It's kind of uncommon to do this kind of math in pico8, so I could maybe live with it being a quirk of pico-8 though. If this behaviour isn't changed, could this limitation be documented in the manual?



Hey everyone! I made a some little helper functions for allowing some basic handling of positive integers greater than 32767. Feel free to expand/modify these. Use for whatever, no attribution required.
This could be useful for a score counter in a game or experience points in an RPG. There's a minor overhead in code-size and in performance, so these are when you really need a little bit of of extra precision for your numbers.
Unsigned Integer Decimal Strings
This first method handles numeric strings holding arbitrary unsigned integers. I haven't added sign handling or fraction handling, so this is for unsigned integers only, but may come in handy for score / experience counter sort of things. I also added a comparison function so you can tell if a decimal string is greater than/less than/equal to another one.
The disadvantage is number of allocations required for calculating intermediate results, lots of concenation and substring ops. But if you're doing this for non-time critical functionality, and want the extra digits, it's pretty handy.
function decdigit(s,i) local c=sub(s,-i,-i) return c~='' and 0+c or 0 end function declen(s) for i=1,#s do if(sub(s,i,i)~='0')return #s-i+1 end return 1 end function decadd(a,b) local s='' local c=0 for i=1,max(declen(a),declen(b)) do local v=decdigit(a,i)+decdigit(b,i)+c c=0 if(v>9)v-=10 c=1 if(#s>0 or v>0 or c>0 or i==1)s=v..s end if(c>0)s='1'..s return s end function deccmp(a,b) local m=declen(a) local n=declen(b) if(m<n)return -1 if(m>n)return 1 for i=1,n do local u=decdigit(a,i) local v=decdigit(b,i) if(u<v)return -1 if(u>v)return 1 end return 0 end -- Addition test cases print(decadd('1','1')) -- 2 print(decadd('999','1')) -- 1000 print(decadd('123456789','99999')) -- 123556788 print(decadd('10009','20009')) -- 30018 -- Comparison test cases print(deccmp('2000','200')) -- 1 (a>b) print(deccmp('2000','1000')) -- 1 (a>b) print(deccmp('2000','2000')) -- 0 (equal) print(deccmp('1','00001')) -- 0 (equal) print(deccmp('200','2000')) -- -1 (a<b) print(deccmp('1000','2000')) -- -1 (a<b) |


This is my PICO-1k jam entry. The entire source code is 1024 characters in PICO-8, including the comment at the top. Arrows to fly, button (z on keyboard) to fire.
--top*burn a=48n=32k=64_={}camera(-k,-k)c=16x=0y=0t=0o=0g=0q,b,r,s,h=sqrt,btn,rnd,spr,sspr::a::l=t%8/4map(0,0,-k,-k,c,c)for j=3,k do z=j/4h(q(q(z))*c-l,1,k+k,1,-j*n,j,k*4*z,1)end l=l<1o=max(o-1,0)f=b(4)and o<n if f then m(r(3))o+=2 if(o>n)o=98 end i=l and o>n and s(124,-k,-40,4,1)or h(0,56,min(o,n),6,-k,-a),l and t>650or h(a,n,n-t/n,8,n,-a) i=b(1)p=24m=sfx if(i and x<c)x+=2 p=c if(b(0)and-k<x)x-=2 p=c if(b(2)and y<n)y+=1 p=k if(b(3)and-n<y)y-=1 p=74 s(86,x+8,a,4,2) for e in all(_)do e.x+=e.d e.z+=.1 j=e.d<0w=88z=4/e.z if(e.l==0or e.z>k)del(_,e) if(e.l)e.l-=1 j=r(2)>1goto e h(56,k,c,c,e.x*z+24*z,a*z,c*z,c*z,j)w=k if(f and max(abs(u/z-e.x-21),abs(v/z-e.y-8))<8)e.l=8m(3)g+=.75 ::e::h(0,w,56,24,e.x*z,e.y*z,56*z,24*z,j)end if(r(98)<1)d=sgn(r(2)-1)add(_,{x=r(n)-d*k-c,d=d,y=r(k)-a,z=1}) z=.7u=x*z+13v=y*z-8s(2,u,v) if(f and l)s(c,u*.9,v*z)s(17,u,y*z-5)z+=.1 s(38,x*z+10,y*z-2,2,1)z+=.1 s(46,x*z+14,y*z+1,2,1) s(p,x,y,6,3,i)s(240,-30,-41,g,1)flip()t+=1 if(t<999)goto a ::g::s(137+t%2*k,t%192-140,-n,7,1)flip()t+=1 goto g |


PICO-8 allows 65536 characters, which on one hand is a tight limit for some projects. But, on the other hand, we've seen amazing things from Tweet jam in 140 characters or fewer.
That made me wonder...can a whole PICO-8 game be written in 1024 characters (1k)? There are some impressive JavaScript 1k demos. Let's see what we can do!
Rules:
- Entire program source code lists as 1024 characters or fewer inside PICO-8, including comments.
- Must be a playable game, not just an animation.
- No limits on music, sprites, or map, since they don't count toward PICO-8's character limit.

Hi all.
A newbie question!
I am using the PGET command to read the value of a pixel as you move a point around the screen.
The code I have written seems to work fine in the X axis, but the y-axis is offset for some reason.
If you move the point over the yellow square from left to right, the PGET command successfully reads the pixel colour value.
If you move the point over the yellow square from top to bottom, the PGET command is offset by approx 6 pixels.
Strange.

Am I missing something?
Any advice would be very much appreciated.
Many thanks
Paul :-)
PS:
Code pasted below.
x={}
y={}
x=50
y=50
cls()
function _update()
if btn(1) then x=x+1 end
if btn(0) then x=x-1 end
if btn(3) then y=y+1 end
if btn(2) then y=y-1 end
a=pget(x,y)
end
function _draw()
rectfill (0,0,124,124,0)
rectfill (50,50,70,70,10)
pset(x,y,7)
print(a)
end


Hello, Picos.
I am trying to integrate an HTML5 API into an exported HTML5 PICO-8.
My current solution plan is to find the code which checks the function name.
If the function name checking (example the function name is "foo"), then it will trigger the API function.
Unfortunaltey, I still couldn't find that code so far.
I also have checked the _emscripten_set_main_loop, but couldn't find something that direct me to that code yet.
I also have learned that the code for the cart is in var _cartdat at line 71 (I used Notepad++) (compressed).
The other is that gfx on line 4 and map on line 36.
So, can anyone guide and help me to find it?
Thank you very much.

I'm considering making a jrpg in Pico 8 at some point. Yes, I know it is a very tired genre. However I really don't mind, I still love it.
One thing I was wondering was how to make an overworld that's larger than the 128x64 cels in the built in map memory.
My current idea is to represent the overworld in terms of geometry instead of in terms of a grid, rendering the tiles manually (or temporarily filling a portion of the map cel memory). So I'd have like, a mountain range defined as a rectangle, and then I'd overlay rectangles to give them a shape, and have some logic for arranging the tiles around the edges to look correct, etc.
Then individual tiny dungeons perhaps would just be hard coded in the map cels. Not sure.
I have seen several adventure type games in Pico 8, but...are there any that are trying to give the appearance of being "vast?"
I am really interested in the idea of packing a lot of engaging gameplay into a tiny space like this.






A pico-8 version of the ocean loader theme 3
original by peter clarke
https://www.youtube.com/watch?v=Zx8T3lOPAfw&t
visualizer by kittenm4aster. I put some scrolling credits on the top just because i thought it would look kinda cool.
Just a little thing i made to spend the evening. Feel free to use in your projects but do give credit :D



Here's a tool I did program to investigate the Hardware State Region, It displays all the 64 bytes in the hardware state, you can see whenever you re-run the tool the same data until you reboot. (try also to reset the cart in the browser, it will still show the same data)
After reverse engineering I found that the addresses 0x5F40 -> 0x5F43 does something specials which is music corrupting as shown in this topic: https://www.lexaloffle.com/bbs/?tid=3561
And addresses 0x5F44 -> 0x5F7F are not used at all, and can be used to keep data between cart resets or cart changing, but clears on reboot.
I'm not sure if they are used in the other platforms like rpi or chip, nor if they will be used in future updates.
