Hey All -- PICO-8 0.1.8 builds are now live on Lexaloffle and Humble! Note that there was no 0.1.7 release for Desktop; there were in-development versions of 0.1.7 released early for web and Pocket C.H.I.P. to resolve pressing issues, so I'm calling this 0.1.8 to keep version numbers in sync across platforms. New stuff:
60 FPS support
This breaks the 'every cart runs the same on all PICO-8s' rule of PICO-8's design philosophy a little bit, but I think it's worth it! On all of the desktop host platforms, it is now possible to make cartridges that display and update at 60 frames per second instead of 30. You don't get any more CPU though, so that means half the usual CPU allowance per frame. From the manual:
:: Running PICO-8 at 60fps If _update60() is defined instead of _update(), PICO-8 will run in 60fps mode: - both _update60() and _draw() are called at 60fps - half the PICO-8 CPU is available per frame before dropping down to 30fps ** please note that not all PICO-8s support 60fps. On machines that do not support it, _update60() will instead be called twice per frame and _draw() at 30fps. You can check the behaviour of your program running at 30fps by adding the following snippet to the bottom of your code: u60=_update60 _update60=nil function _update() u60() u60() end |
Button Glyphs
The two action buttons on the PICO-8 controller are called O (BTN(4)) and X (BTN(5)). To make it easier to print instruction in-game explaining the controls, you can now insert glyph characters directly into strings in your code with Shift - U D L R O X.
Long GIFs
Adjust the maximum GIF length in config.txt or by running PICO-8 with -gif_len n switch, where n is the number of seconds to record for (maximum: 120). The GIF output is not optimized, so you might want to run it through an optimizer to get smaller file sizes.
Custom Menu Items
It is now also possible to add your own items to the pause menu to trigger things like 'RESTART PUZZLE' or 'EXIT TO OVERWORLD'. Here's an example program:
col=12 function _draw() cls() rectfill(0,20,127,107,col) end function changecol() col = (col+1) end menuitem(1, "change colour", changecol) |
The first parameter is the position (1-5) in the menu to insert the item, the second is the item's label, and the 3rd is a function to be called when the item is selected. I opted to keep this simple and quite rigid, so there's no way to have extra stuff going on in the background while the cart is paused, or to re-appropriate the pause button as an in-game button.
Music Exporter
To record a .wav of a PICO-8 tune, first navigate to the pattern you'd like to start from in the music editing mode, then press escape to enter the console and type:EXPORT SONG.WAV
If the song is looping, it will export around 4:30 that you can then manually trim in a [sound editing program](http s://sourceforge.net/projects/audacity/).
Pre-installed Games
There are now 5 BBS games that ship included with PICO-8, so that it's easy to get up and playing something more than the demo carts, even when internet access is not immediately available. To install them, use INSTALL_GAMES -- they will be accessible from your favourites list in SPLORE. The games are Celeste, Frog Home, Tower of Archeos, Hug Arena, and Dusk Child.Linux Builds
I've included both statically and dynamically linked versions of the executables for i386, amd64 and Raspberry Pi. The RasPi build still depends on bcm, so it is tricky (impossible?) to get it up and running on Chromebooks.I plan to look at better Chromebook support at some point, but it will probably have to be during beta. Pocket C.H.I.P. owners, and later on regular C.H.I.P. owners can expect updates too, of course --- but we are still sorting out details and it will take a while. o( )o
Next up, 0.1.9 will be mostly ongoing bugfixes, and improvements to the web player (optimization, fold-out touch controls for mobile, and controller instructions).
Full Changelog:
Any reason why update60 can't work on web? I've seen plenty HTML5 games running at 60fps... Same with games for RaspPi and other ARM-based systems.
Quick and dumb question: is 1.0 still the number we should try and stay below when using stat(1) to check cpu usage in 60 fps mode, or is it 0.5?
Also, is there any way to get flip() to run at 60 fps?
Thank you so much for this update Zep, it's awesome!!! All the new additions are amazing!! (and hell yeah for live-coding gifs!)
"I opted to keep this simple and quite rigid, so there's no way to have extra stuff going on in the background while the cart is paused, or to re-appropriate the pause button as an in-game button."
Funny you mention that. https://www.lexaloffle.com/bbs/?tid=3703
More particularly: https://www.lexaloffle.com/bbs/?pid=23648#p23648
Quote:
poke(0x5f30,1) seems to disable the pause menu, can anyone confirm? Here's an example :
|
What happens if you define both _update60() and _update()?
I assume that it'd get locked into 60 fps mode
So wait...did someone say the 60fps won't work in the web version? So if I make a game using 60fps, it will run fine on the desktop client but not the web version? Hmmm...if so, that's a bummer...
Very cool to have the menu option though, will certainly be using that
I can feel the love you put on this little computer, thanks zep.
Wonderful update <3
@morningtoast seems like the html export currently ignores the _update60 altogether. makes sharing 60fps carts a bit harder hey
update: eh no works exactly like Zep described, it just renders my neat 60fps trickery useless :)
Hi there!!
_update60() works fine on Win10 but it doesn't work at all in Ubuntu64bits
hope this helps :)
Again, I can't see a reason why _update60 is desktop only, where there are many HTML5 games that run on 60hz flawlessly. Heck, some people wrote emulators in HTML5 for systems that naturally ran in 60hz refresh rate.
If there are no technical problems forbidding implementation of a feature without breaking "every pico behaves the same" concept, it should be done so, and in this case there isn't.
@zep as seen (loved & retweeted) on twitter, you are going to add a "JAM" entry in splore and here on the forum, which is really cool!
I'm not speaking for the next release, but do you have any plan to allow cart submission directly from Pico8? That would be really nice to have such a feature! Especially for JAM entries :D
Hello everybody
i had a look a little everywhere on the bbs, wiki etc but i have no clue how to start/install Pico-8 on raspberry pi :/
i just bough voxatron and wanted to give pico-8 a try on rpi.
if someone could hook me up i would be extremelly grateful :)
thanks a lot
++
Alex
@s199 this might be useful
thanks Matt,
i checked that page earlier and had a look at the sdl2 tutorial also. i think i will wait for my pocket c.h.i.p. to get in and until then just use pico on windows.
im just grafic design, not very skilled coder, thats already too much for me :)
++
Alex
Understood. I'll try to get a Pi soon to try installing it myself.
NIIICE.
"Splore" needs a CLS upon escaping. I got confused and thought it was still running. OTT, pretty decent update! :D
EDIT: It's not just Splore. It's anything running when you hit Escape to back out of it, into the console screen.
Can _update60() and _update() both be used simultaneously? O.o
I hope the PocketCHIP version supports 60 FPS, but why wouldn't it?
EXCELLENT! Thank you so much for implementing this in the perfect way! This makes all the difference in the world on quite a few games!
BUG?:
The third (highest) octave of keyboard key inputs (I9O0P-[, IIRC?) don't seem to function in the SFX editor anymore. Am I missing something?
Also... couldn't you export music to .MID format? O.o
@zep, thanks for the update.
I just found out that you added logging to ~/Library/Logs on OSX. Unfortunately, I failed to find any logs in the directory, both using Console.app and the good old "ls" command.
Is there a new command to log (instead of printh)? Both print() and printh() do not seem to create any log file.
I guess it's broken?
meanwhile you can use the old command line workaround:
cd /Applications/PICO-8/PICO-8.app/Contents/MacOS ./pico8 >& ~/Library/Logs/pico8.log |
then use printh()
See: https://twitter.com/gingerbeardman/status/735166333478961152
[Please log in to post a comment]