PICO-8 0.1.1 is now available! Grab it from the Updates page.
Note that PICO-8 is available to all Voxatron alpha users (including bundle customers). You may need to activate your account, or log in via email if you don't have a username/password already set up.
I'm doing things a little out of order here.. a full introductory post to PICO-8 will follow in a bit for those who haven't been around lately, but for now here's a rundown of new stuff in 0.1.1..
1. Gif saving! Press F9 to save the last 8 seconds (or F8 to set a starting point if you wish)
2. Token counting.
Instead of limiting cartridges to ~15k of ascii text, the primary limit is now 8192 tokens. I say primary limit, because the character count still stands, but is now 32k -- in practice the token limit is almost always reached first. There is actually also a third limit when saving cartridges -- the code must compress to the original 15k allocation. Exceeding this is extremely rare and you can probably ignore it! To get the status of your program, use the new INFO() command.
There aren't currently any cartridges that I know of that go over 8k tokens, and in general this change will give you around 20~30% more space.
3. Freeform sprite and map editing
You can now zoom out with the mousewheel and pan around using space. There is also a more traditional selection tool (you can use cursors to move the selection around). See the manual for more details.
4. New api functions
By popular demand, sqrt(), atan2() and sub() have been added.
atan2() follows the convention set by cos() and sin() of flipping y so that angles increase anti-clockwise in screenspace and reach a full circle at 1.0. So atan2(0,-1) is 0.25
To grab the length of a string, you can use the now-fixed # operator (#s) and grab individual characters with sub(s,pos,pos)
5. More palette control
Palette mapping now applies to all draw operations (note: there is a tiny bit of palette weirdness for existing carts because of this)
Also, you can specify which colours spr(), sspr() and map() should treat as transparent using palt()
palt(1, true) -- don't draw any dark blue pixels
6. Better saving, loading and re-loading
You can now quick-save with CTRL-S. Saving over files, or quitting without saving causes a backup to be saved in [pico-8 home]/backup.
When loading a .png, you can now omit the ".p8.png" and pico-8 will check for it.
Using CTRL-R will automatically reload the cartridge if no changes have been made (making it easier to work with external editors for heretics).
Thanks so much to everyone who has given suggestions and shaped the direction of this project. I'm really happy with the way token counting in particular has worked out, but the proof will be in the pudding! Let me know if there are any show-stopping problems that should be nipped in the bud, and I'll include them in a bug-fixing update next week (that will also hopefully include keyboard mapping & broken Yosemite mouse fixes).
Test 0.1.1 cart:
Added: Token-based code limiting (8192 tokens, 32k ascii text)
Added: Freeform move, pan and selection in sprite and map editors
Added: Flood-fill tool (sprite and map)
Added: .GIF saver
Added: CTRL-Stamp to stamp with transparency
Added: Single-step undo for map and sprites
Added: 2x2 brush
Added: sqrt(), atan2()
Added: CTRL-S to quick-save
Added: CTRL-R reloads .p8 file and runs (useful for external text editing)
Added: Automatic backups on overwriting or quitting without saving
Added: Scroll wheel zooms in sprite editor
Added: Customisable resolution // e.g. pico8 -width 580
Added: Strings highlighted as green
Added: ALT-click can optionally simulate right click (see config.txt)
Added: palt() to control transparency for spr(), sspr()
Changed: load() tries adding .p8.png, .png if file doesn't exist
Changed: Draw operations apply only to selection when active
Changed: Move operations (cursors) apply to selection if present
Changed: Removed time()
Changed: Random seed is random on cart startup
Changed: api functions never read directly from cart rom
Changed: sspr() can take negative values for dw, dh
Fixed: Sparse table indexing with integers fails
Fixed: Assignment operators and shortform if-then-else failing
Fixed: sspr() failed when w0 == 128
Fixed: Circle drawing broken when camera not (0,0)
Fixed: CPU hogging
Fixed: Noise instrument clobbers rnd() sequence
Fixed: Audio system not resetting on program reset
Fixed: % operator sometimes wrong for negative values
Fixed: Length operator (#)
Fixed: Power operator (^)
Fixed: Line clipping bug on right and bottom edges
Fixed: print() precision for whole numbers
Fixed: print() broken for negative y values
Fixed: tokenization and keyword highlighting
Fixed: sprite properties not copied/pasted
Fixed: Only sfx 0..32 could be used as music patterns
Fixed: Saving and loading a .p8 file adds newline to end of code
Fixed: Drag selection to left margin in code editor -> selects all
[Edit: figured it out] To enable alt-click for right-mouse, close Pico-8, edit ~/Library/Application Support/pico-8/config.txt (or config.txt in the appropriate data dir for your operating system), find rmb_key 0 and replace it with rmb_key 226, as instructed in the comment. Save the file, then start Pico-8.
226 is Left Alt. 224 is Left Control, if you prefer that. (It's slightly more consistent on a Mac.)
Note that Pico-8 appears to save its config to this file when it exits. I got confused when I tried editing config.txt when Pico-8 was running, then restarting Pico-8, only to find my edits replaced with the defaults again. You must quit before editing the file.
Thanks very much for this update!
Thanks for the update. It looks great.
I will play with it this week-end.
I have noticed some small regressions/glitches:
 In the map editor, the coordinates are no more displayed. (you can see some screen like coordinates when pressing space to move the canvas, but the tile coordinates of previous version were much more useful I think).
 The sin() / srand() / shr() / shl() API functions are not colored in the code editor (ok for cos() for instance).
 bshr() / bshl() are colored while they are not part of the API.
[Please log in to post a comment]