Log In  


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:

	v0.1.8

		Added: 60fps support
		Added: Music exporter
		Added: Custom GIF length (maximum 120 seconds)
		Added: -,+ to navigate sprite tabs, sfx, music patterns
		Added: sfx editor: navigate with home, end, pageup/down, mousewheel
		Added: <, > to modify sfx speed, or click and drag
		Added: Middle mouse button to pan around spritesheet / map
		Added: Shortcut command for splore: S
		Added: Pre-installed selection of BBS cart (use INSTALL_GAMES)
		Added: Warning when saving .p8.png with no label 
		Added: (OSX) logging to ~/Library/Logs (viewable with Console.app)
		Changed: Can not CTRL-S save over a loaded bbs cart
		Changed: Only .p8 files listed by dir() and by splore
		Changed: Command history increased to 256
		Changed: exit() / shutdown() have no effect while running cart
		Fixed: Memory useage (stat(0)) inconsistent across host platforms
		Fixed: Spinny disks shows when reloading current cart with load()
		Fixed: GIF saver does not respect 64x64 / mirrored modes
		Fixed: Miscellaneous multi-line comments / strings issues
		Fixed: Empty map cels cost cpu in mapdraw()
		Fixed: mapdraw() slowdown when drawing bottom half of map
		Fixed: preprocess changes semantics when += and : operators on same line
		Fixed: Identifiers starting with underscore counted as extra token
		Fixed: Saving .png exceeding compressed code limit fails silently
		Fixed: Right-clicking a sprite does not set the currently edited sprite
		Fixed: (Windows) extra space added to pasted lines
		Fixed: spr() expensive when drawn with low negative coordinates
		Fixed: pipe character identical to colon character
		Fixed: (Raspberry Pi) shift key appends a character when entering text
		Fixed: Editor mode buttons are still clickable during cart runtime
		Fixed: When loading a .p8.png file, label is reset and needs to be re-captured
		Fixed: export() does not report failure
		Fixed: mset()'d changes in shared memory not readable via peek() / sget()
		Fixed: cstore() saving edited code
		Fixed: audio pop between patterns during music playback

	v0.1.7

		Added: menuitem()
		Added: button glyphs in code (shift-L, R, U, D, X, O)
		Added: Customisable data directory (e.g. pico8 -home mydata)
		Added: Web gpio pins: read and write pico8_gpio[] in javscript 
		Fixed: SPLORE search doesn't reset
		Fixed: Splore skipping 33rd cart listing after loading more items
		Fixed: Crash when selecting a local binary file in splore
		Fixed: Semicolon can't be used as a list or statement separator 
		Fixed: Exported html can not cstore self

15


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 :

function _update()
  if(btnp() == 64)then
    print("custom menu")
    poke(0x5f30,1)
  end
end



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



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


Thanks @matt!



[Please log in to post a comment]