Log In  


Here's 0.1.6! You can download it from your updates page while you're logged in, or from your Humble Store Library. Just a reminder, that if you're a Voxatron alpha customer, you also own PICO-8! (it should show up automatically in both places).

By far the biggest change is the addition of SPLORE, a complete bbs and local cartridge explorer. You can run it by typing SPLORE, or start PICO-8 with "pico-8 -splore". If you plug a joystick in and auto-boot into splore, it's possible to navigate everything using only the 6 buttons + menu button.

This version also has a lot of new data storage functionality. Cartridges can cstore() to themselves in order to save extra data, and this is now officially supported on the web, so don't feel like it's a weird hack that's going to break! (actually it might break, but it's supported, so I'll fix it :p). Here's a demo:

Cart #19844 | 2016-04-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

Notes on cartridge storage, and the full change log:

--------------------------------------------------------------------------------------------
	Cartridge Data
--------------------------------------------------------------------------------------------

	Each cartidge is able to store 64 numbers (256 bytes) of persistent data 
	on the user's PICO-8 (rather than on the cart itself). This can be used as
	a lightweight way to store things like high scores or to save player progress.

	If you need more than 256 bytes, it is also possible to write directly to the
	cartridge using cstore(). The disadvantage is that the data is tied to that
	particular version of the cartridge. e.g. if a game is updated, players will
	lose their savegames.

	Another alternative is to write directly to a second cartridge by specifying
	a fourth parameter to cstore(). This requires a cart swap though (so is 
	slightly slower), and leaves data-cart litter when run from a local folder.

	v0.1.6

		Added: SPLORE local & bbs cartridge explorer
		Added: setmetatable(), cocreate(), coresume(), costatus(), yield()
		Added: Spinning cart icon to show when a cart is swapped / written to
		Added: Permanent storage when carts played in a browser
		Added: Adjustable aspect ratio (-aspect 420 for 1:1)
		Changed: Lua memory limit: 1024k (was 512k)
		Changed: Music channel now resumes after being clobbered by an sfx 
		Changed: Arpeggios double speed when SFX speed <= 8
		Changed: Exceeding compressed code limit does not block saving in .p8 format 
		Changed: spr() half as expensive, to be consistent with map()
		Changed: Fractional hex number notation: 0x0.3 == 0x0.3000, (was 0x0.0003)
		Changed: : operator doesn't count as an extra token (same as .)
		Changed: cstore() writes directly to disk
		Changed: cstore(), reload() return number of bytes read / written
		Changed: save() while running does nothing. (use cstore() instead)
		Changed: load() while running loads and runs the specified cartridge 
		Fixed: Small pops in audio mixer caused by sound wave discontinuities
		Fixed: HTML5-exported sound clicks badly under Chrome
		Fixed: Display palette is not oberserved when exporting GIFs
		Fixed: Rapid keypresses causes duplicate readings in tracker & text editor
		Fixed: += inside comments breaks preprocessor
		Fixed: sspr() cpu cost the same when clipped
		Fixed: cartdata() with bad parameters crashes
		Fixed: EXPORT from commandline can not be used without brackets and quotes

18


hey zep,

ps: is there any way to continuously search inside the code editor? after pressing enter, the field closes. I also cannot paste in strings, and must repeatedly type in same string to find its next occurrence..


Yes, you can CTRL-G to repeat. (Updating the manual..)


On Mac "cmd+g" does work perfectly! Thank your for all the hard and amazing work you do!


Sweet! It's great to be able to use SPLORE after so many screenshots of it! Also, I love SPLORE's name ^.^ Would it be possible to have an "update all" option for splore?


I'm thrilled to pieces with Splore. People can buy Pico-8 and immediately start playing hundreds of games. It's the fastest cheapest app store in the world.

Now I'm fantasizing about other Pico-8 + BBS interactions like publishing, snippet sharing, and global code search from within the editor. Global as in all published carts.


Ooohhh, I really like those ideas, especially publishing from within PICO-8. Maybe eventually even being able to read and interact with whole threads. (this really makes me wish PICO-8 were opensource, then I could help add this stuff instead of zep doing all the work)


Woo, so excited about SPLORE in particular.


Great release! I have, however encountered a crash-making bug with Splore that I'm now posting in support.


Great update - any chance, we'll see multi cart support for splore and the web player anytime soon?
Technically this shouldn't be that hard now - with the mechanisms for splore, the file based memory commands could translate into splore calls. If this isn't the case already anyway (Haven't tried yet, but in that case I would wonder, how the cartride reacts on an initial load. Maybe an additional preload command would do the trick here?)


Hey I trust you, but both the Windows 10 SmartScreen and my antivirus (Panda) are complaining when I attempt to run the installer. Is this because it's not signed or could it be compromised in some way?


Suggestion:
In SPLORE, 'o' button to select/launch a cartridge and 'x' button to go up a directory. It can be awful to scroll up a large list of carts when navigating folders.


Another suggestion: Link SPLORE to our BBS accounts so it shares favorites


love it zep! keep up the amazing work. both the saves and splore are fantastic.


Yes OOP with setmetatable :-)
Right now, I'm on my raspberry pi to try to use i/o. Coroutine may be fun too...
Thanks


❤_❤


Confirming: AWESOME UPDATE!


\o/ this is awesome!


still $15 tho


still worth it!


Totally worth it!


Very nice work, I really appreciate the audio, setmetatable, and cart persistence changes!

However, I just noticed some subtle bugs with semicolons that seem to be new in this version.

I tried a couple carts of mine which worked fine 0.14, and noticed that without changes, a few issues crop up in 0.16.

Semicolons no longer work as table separators, which you can confirm on the command line:

for i in all {1;2;3} do print(i) end -- error

Replacing this with commas works.

for i in all {1,2,3} do print(i) end -- prints 1 2 3 each on a new line

Also, semicolons are supposed to serve as a grammar-disambiguation between parentheses and function calls, which used to work... but 0.16 it treats it as if the semicolon isn't there:

x=y
;(x or print)('hello') -- should print 'hello', but instead triggers a runtime error (it tries to call y as a function)

While this particular example causes an error, this bug can cause code to silently run with different unintended behaviour.

This part of the Lua 5.2 manual explains the ambiguity further down and recommends the semicolon as a workaround (because Lua's parser doesn't treat whitespace as significant, semicolons as statement separators are pretty much optional except in the case of disambiguating leading parens vs function call in assignment rvalues) http://www.lua.org/manual/5.2/manual.html#3.3

But other than these semicolon issues, things work fine so far! Going try to dive into the new build more when I find time.


Hey zep, I'm really enjoying the new update!

Splore is really cool, but I go around accidentally favoriting everything when i navigate around it (i'm a weirdo that uses esdf and jk so i don't have to move my hands from the home row as i'm playtesting and coding). I just wanted to give you a heads up about it.

Besides that little thing, i've really been enjoying the new update! Thanks for all your hard work!


Any way to get it to look in it's own folder for the config file before creating files in %appdata%? I run this thing off a usb stick on different computers. It's kind of a hassle to tell it where to look for the carts on the stick everytime, and then to have to clean out %appdata% on the host machine when I'm done.


How can I clear the search and enter a new search term in splore?


movAX13h, that seems to be one problem with SPLORE. I actually came here to report that problem. To change the search, from what I can tell, you have to restart PICO-8.


Love the loading icon at the top left while accessing another cartridge :)


Good job on splore! It's really well-polished and shows off the Pico-8 platform well. :3 Aside from that oddity with the search function. (The "Search" menu option turns into "Update" like all the other categories, becoming useless!)

But it cheats by doing networking, the same way the editing tools cheat by letting you use the mouse. X3 Damn it, I wish I could use sockets or make HTTP requests to download PNG data in my Pico-8 games! :P

And splore doesn't get its memory cleared by reboot, either, since it's not a cartridge. :( Such cheat~

EDIT: Gamax92's game Air Raiders gets broken in few weird ways by 0.1.6! When you press X to reset the game (and possibly trigger rain), it calls run() to do so, which makes the cartridge spin animation play again and a big delay for no apparent reason? And when you download it to play via splore, the cartridge art disappears (possibly because the cart label is hacked and doesn't necessarily conform to the Pico-8 palette?)

The spinney cartridge thing also breaks parts of user memory, so PicoWare Inc. is no longer playable at all. :( You get one microgame, then you instantly game over with a score of 1 point.

I find it odd that splore overrides the Esc key with the pause menu while in use, but then after exiting splore it leaves the cartridge in memory anyway, so why...? Ah... I think I understand now, nevermind.


OMG this is so amazing!


Really excited to play with setmetatable! I should be able to fit a lot more content in my games now \o/

I've started making a vector class for picoracer2048 so I can use operator overloading to get nice stuff like v1 + v2: 3 tokens
which should be nicer than vecadd(v1,v2): 6 tokens

Splore is looking great! Makes games a lot more accessible.
Would be nice to be able to view more games by an author.


Impbox, you can on the BBS, click on someone name, then in the menubar on top of the page, you will have User: xxx and a link to "Cartridge", it will give you all the cart release by that user.

It's not directly usable in Pico-8, but at least.. :)


Hey Godzil, I know. I was suggesting it as a feature in Slore since I like to see what other things a developer has made after playing their games. =)


Funny the manual reference changes for 0.1.7, which is still not available ;)

Edit: it's even more funnier, the headers says

PICO-8 v0.1.6

Version 0.1.7 add at least one new command: menuitem()

Which is documented :D

menuitem index [label callback]

Add an extra item to the pause menu

Index should be 1..5 and determines the order each menu item is displayed
label should be a string up to 16 characters long
callback is a function called when the item is selected by the users

When no label or function is supplied, the menu item is removed

example:
menuitem(1, "restart puzzle", function() reset_puzzle() sfx(10) end)


Anyone noticed, that the 16kb limit for compressed code size is gone for good? Source code seems to be able to use the whole 65kb without any further limits now.


I'd like to request a couple of extra key aliases for the code editor.

In Windows, it's a tradition that, on top of ^x, ^c, and ^v, you can usually also do shf-del, ctl-ins, and shf-ins, respectively. I'm long since used to using them. Unfortunately, I keep deleting my code because pico-8's editor doesn't know those keystrokes. Would it be hard to catch them and send them to the same places ^x^c^v go?

Otherwise this is a lot of fun to play with. :)


Yes please, implement dos-old school keystroke: ctrl-ins, shift-ins, shift-del.
I've tried using autohotkey to simulate them but for some reasons it did not work.


perekk--

The problem seems to be something to do with PICO-8 still thinking the shift key from, e.g., shift-Del is down, so when you send ctrl-x, it actually receives shift-ctrl-x and that doesn't work.

I managed to get ahk to work by using {blind} mode and manually lifting the appropriate shift key, then pressing ctrl and x, then releasing ctrl and x, then putting that same shift key back down where it was:

#if WinActive("ahk_exe pico8.exe")

	;; ctrl-ins just works because it's already the right modifier
^Ins::Send ^c

	;; have to release the correct shift key
+Ins::
	if GetKeyState("LShift", "P")
	{
		Send {blind}{LShift up}{LCtrl down}{v down}{v up}{LCtrl up}{LShift down}
	}
	else if GetKeyState("RShift", "P")
	{
		Send {blind}{RShift up}{RCtrl down}{v down}{v up}{RCtrl up}{RShift down}
	}

	;; have to release the correct shift key
+Del::
	if GetKeyState("LShift", "P")
	{
		Send {blind}{LShift up}{LCtrl down}{x down}{x up}{LCtrl up}{LShift down}
	}
	else if GetKeyState("RShift", "P")
	{
		Send {blind}{RShift up}{RCtrl down}{x down}{x up}{RCtrl up}{RShift down}
	}
	return

	;; old habits die hard :)
F5::Send ^r

It mostly works, but it fails sometimes, for some reason. Seems like using it again too quickly causes the problem. It's tolerable as a workaround, but it'd be a lot better if PICO-8 just handled those keystrokes natively.


That's clever ! Thanks, it works really well here.


SunSailor: the 16kb compressed size limit no longer applies to carts saved as .p8. It still affects .p8.png carts.


If I am in splore and find something online I like, can I save it from there directly into my carts?


Yes. Load the game. Type [Esc], select Splore, [Esc] again.
Then you can do want you want with the cartridge : edit, save....


Thanks, I see what my mistake was - I was looking under my carts folder, instead of the BBS folder.


SPLORE is the best feature ever! :D

Find a way to wrap that around an "arcade simulator" interface, and you're solid gold.



[Please log in to post a comment]