Log In  


Download 0.2.0i at lexaloffle or via Humble, or for PocketCHIP.

Alright, let's do this! PICO-8's core specification is complete, and it appears to do what it says on the tin. So I'm calling it:

PICO-8 is in Beta!

The main purpose of 0.2 is to finish freezing the core of PICO-8 -- the api, cpu counting, specs, cart format, memory layout, program behavior, backwards and future-compatibility should no longer change.

Earlier attempts at settling on a fixed core in 0.1.11 and 0.1.12 failed because of technical issues creeping in and also some design decisions that just didn't sit right. It has only been due to the ongoing process of users like @Felice, @electricgryphon, @jobe, @freds72, @Eniko, @samhocevar, and many others prodding at the boundary of what PICO-8 can do -- and what it should do -- that all of those nooks and corners finally took shape. I'm really happy with the way the last pieces of PICO-8 have snapped together, and I think it has reached a point where it feels not only like it should never need to change, but that it never could have been any other way.

To make this happen required some jolting changes and a string of patches to get right, and the last few weeks PICO-8 has been in an uncomfortably liquid state. My apologies to everyone who was riding that bumpy update train (but thanks so much for the bug reports!). There might be one or two emergency patches in the next weeks, but I think any left-over quirks and design flaws will simply become part of the machine.

New Features and Changes

Character Set

PICO-8 now has a full 8-bit character set that can be accessed with CHR() to get a character by index, and ORD() to get the index from a character.

> PRINT(ORD("A"))
97
> PRINT(CHR(97))
A

All characters from 0..255 (0..15 are control characters and are not visible)

All of the new characters 16..255 can now be typed directly into the code editor. There are 3 modes that can be toggled on and off:

  • Katakana (ctrl-k) // type in romanji: ka ki ku ke ko
  • Hiragana (ctrl-j) // ditto
  • Puny Font (ctrl-p) // shift-letter gives you regular font

Additional characters can be accessed in the 2 kana modes with shift-0..9

SFX / Music Organiser

These can be accessed in the music editor, and give you a cart-wide view of all of the patterns or SFXes in a cart. They can be selected by shift-clicking, copied and pasted, or moved around (with ctrl-x, ctrl-v), and can also be used to visualize which SFXes are being used while music is playing.

Operators

Bitwise functions can now instead be expressed with operators. The function versions are still useful if you want nil arguments to default to 0, or just as as matter of style. But the operator versions are a little faster and often more token-efficient.

BAND(A,B)   A & B
BOR(A,B)    A | B
BXOR(A,B)   A ^^ B
SHL(A,B)    A << B
SHR(A,B)    A >> B
LSHR(A,B)   A >>> B
ROTL(A,B)   A <<> B
ROTR(A,B)   A >>< B
BNOT(A)     ~A

There's also a handy integer divide, and operators to peek (but not poke)

FLR(A/B)   A \ B
PEEK(A)    @A
PEEK2(A)   %A
PEEK4(A)   $A

Capacity Adjustments

CPU

Bitwise functions (BAND, BOR..) and PEEK functions are now a little more expensive. They can be replaced with operators counterparts to improve speed, but even they are not as fast as the 0.1.11 bitwise functions, especially when used in deeply nested expressions.

This change was necessary because I badly miscalculated how much real-world CPU load would be required to run the most bitwise-heavy carts. Lua functions cost a lot of (real) CPU compared to vm operators, and the result was carts that could completely obliterate a web-browser or real-world CPU on an older machine. This is a problem because a central goal of PICO-8 is to allow authors to forget about real-world CPUs across platforms, and just focus on the PICO-8 one.

Unfortunately, another central goal is to not mess with or break existing carts! So this was a hard choice to make. I've tried to balance this change somewhat with the introduction of native operators, tline(), and by adjusting the vm costs in a way that feels natural but also frees up some extra cycles. Along with bitwise and peek operators, the add and subtract vm instructions now also cost half as much as other vm instructions. So if you consider PICO-8 to be running at 8MHz, they cost 1 cycle per instruction, while most vm instructions cost 2.

CPU: Coroutines

Previous versions of PICO-8 handled CPU counting inside coroutines very badly. It was easy to accidentally (or intentionally) get 'free' cpu cycles when running a coroutine over a frame boundary, and in some versions the opposite could sometimes happen -- a coroutine or garbage collection would incorrectly yield the whole program causing unnecessary frame skipping. 0.2 contains a much cleaner implementation of cpu counting -- you can wrap anything in coresume(cocreate(function() ... end)), and get exactly the same result (minus the overhead of the wrapping). As a nice by-product, this has also made better STOP() / RESUME behaviour possible (see below).

Tokens and Code Compression

There is still a 8192 token limit (of course!), but negative numbers now count as a single token. This seemingly small fix, along with the new character set and bitwise operators, ultimately resulted in the code compression also improving. The result is that you can squeeze in around 10% more code.

If you want to peek behind the curtain, here's the story behind that:

The first version of PICO-8 had only a single limit for code side: 15360 characters. You can still see the remnants of this when you load a cartridge ("loaded foo.p8 (1049 chars)"). Soon after, tokens were introduced as the new limit, so that there was less incentive to bother minifying code except for really heavy carts. For this to work, the character limit was increased to 64k (so that you can get more than 2 characters per token), and the code became compressed so that it could still fit in the same 15360 byte block of a 32k cartridge.

The idea was to introduce compression that was just good enough so that you'd normally hit the token limit before you hit the compressed size limit. It favored characters that were commonly used, and was intended to compress code rather than data. By virtue of being simple, it was also fast enough to compress up to 64k of code every key press, so that as you approach the compressed limit you can be altered as soon as you surpass it (which is still true).

It held up pretty well, but over time, things changed. Token counting was adjusted to solve common problems, and generally allowed more code to fit within the limit. Carts included more data stuffed into the code section, often containing characters the compressor wasn't intended for. As a result, the compressed code size limit started to become as much of a pressing concern a the token limit. Carts packed to the brim would often use both to capacity.

So, these 3 changes (in token counting, character set, and bitwise operators that cost less tokens), have put even more pressure on the compressor, and the old one just wasn't cutting it anymore. I really want to keep the token limit as the one that normally matters the most, and so better compression was in order. 0.2.0e features a code compressor that does about as well with any character subset, is decent at compressing byte-wise structured data stored in hex strings, and compresses around 10% better than previous versions.

Also, and this is a little embarrassing, I found some unused space in the 32k cartridge format that has been sitting dormant since its creation in 2014. It has been given to the code section, which is now 0x3d00 bytes instead of 0x3c00.

TLINE

The tline() function ("Textured Line") is a mixture of line(), sspr(), and map().

You can use it to draw a line of pixels (same as line()), where each colour is sampled linearly from an arbitrary line on the map. It's not much use out of the box, but can be used as a low-level primitive for many purposes including polygon rendering, DOOM-style floors and walls, sprite rotation, map scaling, drawing gradients, customized gradients and fill pattern schemes. I've only played with it a little bit so far, but it's really fun, and I'm looking forward to seeing what it winds up being used for.

API Changes

RND(TBL)

Give rnd() a table as an argument, and it will return a random item in that table.

BTNP Custom Repeat Delays

From the manual:

Custom delays (in frames @ 30fps) can be set by poking the following memory addresses:

POKE(0x5F5C, DELAY) -- set the initial delay before repeating. 255 means never repeat.
POKE(0x5F5D, DELAY) -- set the repeating delay.

In both cases, 0 can be used for the default behaviour (delays 15 and 4)

Fill Patterns Constants

Use the glyphs (shift-a..z) with fillp() to get some pre-defined fill patterns.

fillp(★)
circfill(64,64,16,0x7) -- transparent white

They are defined with the transparency bit set. You can use flr(★) or ★\1 to get 2-colour patterns.

fillp(★\1)
circfill(64,64,16,0x7c) -- white and blue

Demo Carts

Most of the demos have been updated, including Jelpi which now has a few more monsters and tilesets to play with! Use INSTALL_DEMOS to get the new versions. 0.2 also features 2 extra pre-installed games: 8 Legs to Love by @bridgs, and Embrace by @TRASEVOL_DOG. You can install them with INSTALL_GAMES.

Tabs and Tabs

Tab characters are now optionally visible (but off by default). You can turn them on in config.txt
Press shift-enter to automatically add an END and indent.

Also, there are 8 more code tabs. Click the right or left-most visible tab to scroll.

Shape Drawing Tools

Both the map and sprite editors now have circle, line, and rectangle drawing tools. Click the tool button to cycle through those 3 modes, and hold ctrl to toggle filled vs. outline circles and rectangles.

Map Tile Moving

It's now a little easier to move sprites around that are referenced by the map. In the map editor, select the sprites you'd like to move, use ctrl-x and ctrl-v to move them, and the map cell data will also be updated to avoid broken references. This operation applies to the selected region on the map (ctrl-a to select half, and ctrl-a again to select the whole map including shared memory).

This operation is a little tricky, because it adds items to both the spritesheet undo stack and the map undo stack, so you need to manually undo both if desired. Back up first!

Splore

Every time you launch a BBS cartridge, PICO-8 will now ping the server to check for a newer version and prompt you to update if it exists. You can turn this off in config.txt

There's also a 'search thread' option in splore's cart menu, which will be useful for long jam-style threads in the future. And is already great for browsing the tweetjam thread! (You can go to the search tab in splore, and search for "thread:tweetjam")

Exporters

HTML

The HTML exports now run a lot smoother on older machines, and with more reliable page formatting and mobile controls.

.zip File Output

A common problem when exporting cross-platform binaries, is that the machine you're generating files from doesn't necessarily support the file attributes needed to run programs on other operating system. This was especially problematic for Mac and Linux binaries exported from Windows, which had no way to store the executable bit (and so end-users would have to manually fix that). To get around this problem, the EXPORT command now produces ready-to-distribute .zip files, that store the needed file attributes when unzipped on any other operating system. As a bonus, you also don't need to bother manually zipping up each platform folder! There's currently no way to add other files (e.g. documentation) though, so in that case you might need to zip the .zip along with any other desired files.

Options menu

Binary exports now come with an OPTIONS menu that shows up when a cart is paused, and includes the same settings available in HTML exports (sound, fullscreen, controls).

Activity Log

Have you ever wondered how much time you've spent in PICO-8 editors or carts? Or which carts you've played the most? 0.2 now logs your activity to activity_log.txt (in the same folder as config.txt) once every 3 seconds (unless the PICO-8 is left idle for 30 seconds). There aren't any tools to process this data yet, but it is human-readable. I should clarify: this information is not transmitted anywhere! You can turn this off in config.txt (record_activity_log 0)

Frame Advance

PICO-8 can now be resumed from exactly the point that code stopped running. For example, if you put a STOP() in your code, and then type RESUME from the commandline, the program will continue as if the STOP() had not occurred. It's possible to type in commands before resuming to modify the state of the program though, which is useful for debugging.

A common debugging tool is to slow a game down and advancing frame by frame. You can do this by stopping suspending a program with escape, and then typing . and pressing enter. This will run the program until the next flip() call and then stop again. You can get subsequent frames in the same way, or just keep pressing enter after the first one. To add additional debugging behaviour, you can use stat(110), which returns true when running in frame-by-frame mode.


That's all for now -- I hope you enjoy 0.2 and I'll catch you soon!

-- zep


Full Changelog: (scroll down to 0.2.0 for the main changes)

v0.2.0i

Added: pack(), unpack()
Changed: bitplane read/write mask only reset after finished running program
Fixed: tline() doesn't draw anything when the layers argument is not given

v0.2.0h

Added: tline() takes an optional layers parameter, similar to map()
Added: high bits of 0x5f5e taken as colour read mask, low taken to be colour write mask
Added: Double-click in the sfx tracker to select all attributes of a single note.
Fixed: assignment shorthand RHS scope wrong when contains certain operators. e.g. a+=1&127
Fixed: while/if shorthands fail when "do" or "then" appears on the same line as part of an identifier
Fixed: ctrl-c copies the wrong sfx after clicking pencil button (next to pattern #) in organiser view
Fixed: spinning cart icon present in video memory when cart boots from splore

v0.2.0g

Added: Window title shows current cartridge filename while editing
Changed: ~ preceeding a numerical constant (e.g. ~1) counts as a single token
Fixed: >>> operator behaviour does not match lshr(a,b) when b >= 32 (again)
Fixed: PICO-8 freezes when shift by -0x8000
Fixed: .p8 format does not store extpal label colours
Fixed: Can not save screenshot when filename contains ":"

v0.2.0f

Changed: @@ operator (peek2) to %
Fixed: Exported wasm crashes on boot when code contains a numerical constant out of range.
Fixed: HTML Shell treats controller shoulder buttons as MENU; easy to accidentally bump.
Fixed: shift operators behaviour undefined for negative values of n (now: x << n means x >> -(n\1))
Fixed: >>> operator behaviour does not match lshr(a,b) when b >= 32
Fixed: INFO crashes when code is close to 64k of random characters
Fixed: Code editor undo step not stored when starting to edit a new line (hard to see what happened)

v0.2.0e

Added: zip file creation (with preserved file attributes) when exporting binaries
Added: cpu working animation when cpu usage > 120 skipped frames
Improved: stop() / resume now works at the instruction level
Fixed: tline clipping broken (from 0.2.0d)
Fixed: cpu counting is wrong inside coroutines
Fixed: coroutines interrupted by garbage collection
Fixed: code compression suddenly much worse for carts > 32k chars
Fixed: code compression ratio can be less than 1 in extreme cases
Fixed: pasting a string ending in '1' into the command prompt opens the editor
Fixed: html export can run out of pre-allocated heap when doing heavy string operations
Fixed: hex memory addresses displayed in puny font on windows
Fixed: devkit mouse message shown once per cart -- should be once per chain of carts
Fixed: can't paste sfx notes after moving to another sfx via keyboard
Fixed: copying note select vs. sfx vs. pattern range is ambiguous
Fixed: crash after redefining type()

v0.2.0d

Added: rnd(x) when x is an array-style table, returns a random item from that table
Added: gif_reset_mode (in config.txt / CONFIG command). Defaults to 0.1.12c behaviour
Added: print(str, col) form behaves the same as: color(col) print(str)
Added: Operators: <<> >>< <<>= >><=
Changed: tline now also observes an offset (0x5f3a, 0x5f3b)
Changed: tline rounds down to integer screen coordinates (same as line)
Changed: Final cpu adjustments (see release post)
Changed: Removed experimental "!"->"this" shorthand
Changed: clip() returns previous state as 4 return values
Fixed: Included files remain locked (and can not be edited by external editors)
Fixed: Carts loaded as plaintext .lua fail to handle BOM / DOS characters
Fixed: palt() returns previous state of bitfield as a boolean instead of a number
Fixed: CPU speed on widget doesn't exactly match stat(1)
Fixed: stat(1) occasionally reports garbage values when above 1.0
Fixed: Custom btnp repeat rates (0x5f5c, 0x5f5d) speed up when skipping frames
Fixed: gif_scale setting not read from config.txt
Fixed: tline: texture references are incorrect when sy1 < sy0
Fixed: tline: single pixel spans are drawn as two pixels
Fixed: binary exports' controls menu always shows 0 joyticks connected
Fixed: Pressing DEL on first row of tracker doesn't do anything
Fixed: host framerate regulation is slow (~1/sec) when PICO-8 frame takes < 1ms to execute
Fixed: fillp() return value (previous state) does not include transparency bit
Fixed: clip"" setting all clip values to 0 (should be ignored)
Fixed: Raspberry Pi static build / static export requires GLIBC 2.0.29 (now .16)
Fixed: stop(nil) crashes
Fixed: print(), printh(), stop() prints "nil" with no arguments (should have no output)
Fixed: trace() can not be used with coroutines

v0.2.0c

Changed: Compressed size limit now 0x3d00 bytes (reclaimed an unused 0x100 byte block)
Fixed: >>>= operator (was doing a >>= replacement instead)
Fixed: #including large .lua files causes crashes, weird behaviour
Fixed: Sandboxed CSTORE: writing partial data to another embedded cart clobbers the remaining data.
Fixed: Multicart code storing regression introduced in 0.2.0 (code from head cart stored in other carts)
Fixed: Can not edit spritesheet after panning
Fixed: Junk error messages when syntax error contains one of the new operators
Fixed: Crash with: 0x8000 / 1

v0.2.0b

Changed: #include directive can be preceeded by whitespace
Changed: Activity logger records nothing after idle for 30 seconds
Fixed: Mouse cursor movement in editor is not smooth
Fixed: Screen palette doesn't reset after exiting splore
Fixed: PALT() returns 0 instead of previous state as bitfield
Fixed: Rectangle and line tools broken when used in map editor
Fixed: INSTALL_GAMES under Windows produces broken cart files
Fixed: Stored multicart sometimes has code section truncated (fails to load())

v0.2.0

Added: 8-bit character set with kana, alt font
Added: ord(), chr()
Added: SFX / Pattern organiser view
Added: SFX edit buttons on pattern channels
Added: tline // textured line drawing
Added: SPLORE automatically updates BBS carts when online
Added: Search for similar (shared tags) cartridges, or by thread
Added: predefined fillp() pattern values assigned to glyphs
Added: btnp() custom delays (poke 0x5f5c, 0x5f5d)
Added: "." shorthand command for advancing a single frame (calls _update, _draw if they exist)
Added: Current editor/cart view is recorded every 3 seconds to [app_data]/activity_log.txt
Added: Cutting (ctrl-x) and pasting selected sprites while in map view to also adjust map references to those sprites
Added: Clipboard is supported in the html exports (with some limitations) // load #wobblepaint for an example.
Added: Can load .lua files as cartridges
Added: Operators: ..= ^= \ \= & | ^^ << >> >>> ~ &= |= ^^= <<= >>= >>>= @ @@(update: @@ replaced with %) $
Added: New demo carts: waves.p8 dots3d.p8 automata.p8 wander.p8 cast.p8 jelpi.p8 (use INSTALL_DEMOS)
Added: Extra pre-installed games: Embrace, 8 Legs to Love (use INSTALL_GAMES)
Added: Splore cart labels for .p8 files
Added: Now 16 code tabs (click on the rightmost ones to scroll)
Added: ipairs()
Added: SAVE from commandline to quick-save current cartridge (same as ctrl-s)
Added: BACKUP from commandline to save a backup of current cartridge
Added: CPU usage widget (ctrl-p while running cartridge)
Added: Button / dpad states exposed in memory at 0x5f4c (8 bytes)
Added: Random number generator state exposed at 0x5f44 (8 bytes)
Added: pico8_dyn version is included when exporting to Raspberry Pi
Added: allow_function_keys option in config.txt (CTRL 6..9 are now preferred -- will phase out F6..F9 if practical)
Added: Visible tab characters (draw_tabs in config.txt)
Added: pal({1,2,3..}) means: use the value for each key 0..15 in a table
Added: palt(bitfield) means: set the colour transparency for all 16 colours, starting with the highest bit
Added: Options menu for binary exports (sound / fullscreen / controls)
Added: Shape drawing tools in sprite and map editor
Improved: Miscellaneous HTML shell / player optimisations and adjustments
Improved: Lower cpu usage for small foreground_sleep_ms values (changed host event loop & fps switching strategy)
Changed: This update is called 0.2.0, not 0.1.12d! (grew into plans for 0.2.0, and bumped cart version number)
ChangeD: Reverted cheaper 0.1.12* costs on bitwise operators & peek (recommend replacing with operators if need)
Changed: negative numbers expressed with a '-' count as a single token
Changed: glitchy reset effect does not leave residue in base RAM (but maybe on screen when using sprites / tiles)
Changed: sset() with 2 parameters uses the draw state colour as default
Changed: line() or line(col) can be used to skip drawing and set the (line_x1, line_y1) state on the next call to line(x1,y1)
Changed: vital system functions (load, reboot etc.) can only be overwritten during cartridge execution
Changed: sqrt(x) is now more accurate, and a little faster than x^.5
Changed: sqrt(x) returns 0 for negative values of x
Changed: btnp() delay and repeats now work independently per-button
Changed: pairs(nil) returns an empty function
Changed: Default screenshot scale (now 4x), gif scale (now 3x)
Changed: gif_len now means the length when no start point is specified (used to be the maximum recordable length)
Changed: (Multicarts) When loading data from many different carts, the swap delay maxes out at ~2 seconds
Changed: (Raspberry Pi) removed support for (and dependency on) libsndio
Changed: camera(), cursor(), color(), pal(), palt(), fillp(), clip() return their previous state
Changed: Can not call folder() from a BBS cart running under splore
Changed: F9 resets the video, so that multiple presses results in a sequence of clips that can be joined to together
Changed: color() defaults to 6 (was 0)
Changed: Backed up filenames are prefixed with a timestamp.
Changed: Automatically start on the (host's) current path if it is inside PICO-8's root path
Changed: tostr(x,true) can also be used to view the hex value of functions and tables (uses Lua's tostring)
Changed: Can hold control when clicking number fields (spd, pattern index etc.) to increment/decrement by 4 (was shift)
Fixed: HTML exports running at 60fps sometimes appear to repeatedly speed up and slow down
Fixed: HTML export layout: sometimes broken -- option buttons overlapping in the same place
Fixed: __tostring metatable methods not observed by tostr() / print() / printh()
Fixed: Mac OSX keyboard permissions (fixed in SDL2 0.2.12)
Fixed: Audio mixer: SFX with loop_end > 32 would sometimes fail to loop back
Fixed: btn() firing a frame late, and not on the same frame as stat(30)
Fixed: #include can not handle files saved by some Windows text editors in default format (w/ BOM / CRLF)
Fixed: Exports do not flatten #include'd files
Fixed: Default window size has too much black border (now reverted to previous default)
Fixed: Functions yielded inbetween frames occasionally push an extra return value (type:function) to the stack
Fixed: can't load png-encoded carts with code that starts with a :
Fixed: .gif output unnecessarily large
Fixed: .gif recording skipping frames when running at 15fps
Fixed: printh does not convert to unicode when writing to console or to a file
Fixed: cart data sometimes not flushed when loading another cart during runtime
Fixed: Can not navigate patterns with -,+ during music playback
Fixed: Mouse cursor not a hand over some buttons
Fixed: Laggy mouseover messages (e.g. showing current colour index, or map coordinates)
Fixed: Can't paste glyphs into search field
Fixed: Tab spacing always jumps config.tab_spaces instead of snapping to next column
Fixed: -p switch name is wrong (was only accepting "-param" in 0.12.*
Fixed: Code editor highlighting goes out of sync after some operations
Fixed: Multicart communication problem (affecting PICOWARE)
Fixed: time() speeds up after using the RESUME command
Fixed: Audio state is clobbered when using the RESUME command
Fixed: Audio glitch when fading out music containing slide effect (1)
Fixed: Toggling sound from splore cart->options menu has no effect
Fixed: Devkit keyboard works when paused
Fixed: "-32768 % y" gives wrong results
Fixed: Replacing all text in code editor breaks undo history
Fixed: Double click to select last word in code does not include the last character
Fixed: Weird block comment behavior in code editor
Fixed: HTML export: cart names can not contain quotes
Fixed: HTML export: menu button layout under chromium
Fixed: HTML export: Adding content above cartridge breaks mobile layout
Fixed: HTML export: Can touch-drag PICO-8 screen around (breaks simulated mouse input)
Fixed: LOAD("#ABC") does not always immediately yield
Fixed: Infinite RUN() loop crashes PICO-8
Fixed: Mouse cursor is not a finger on top of most "pressable" button-style elements
Fixed: CD command fails when root_path is relative (e.g. "pico8 -root_path .")
Fixed: poke in fill pattern addresses (0x5f31..0x5f33) discards some bits
Fixed: After using ctrl-click in map editor, can not modify map outside that region
Fixed: Shift-selecting sprites from bottom right to top left selects wrong region
Fixed: Changing GIF_LEN from PICO-8 commandline sometimes breaks gif saving
Fixed: pget() sometimes returns values with high bits set
Fixed: Preprocessor: unary operator lhs is not separated in some cases (e.g. x=1y+=1)
Fixed: Preprocessor: ? shorthand prevents other preprocess replacements on same line
Fixed: Preprocessor: fails when multiple shorthand expressions + strings containing brackets appear on the same line
Fixed: Loading a .p8 file with too many tabs discards the excess code.
Fixed: Map editor's stamp tool wraps around when stamping overlapping the right edge.
Fixed: Very quick/light tap events sometimes do not register
Fixed: SFX tracker mode: can't copy notes with shift-cursors before clicking (whole sfx is copied instead)
Fixed: "..." breaks syntax highlighting
Fixed: Click on text, press up/down -> cursor reverts to previous horizontal position
Fixed: CTRL-[a..z] combinations processed twice under some linux window managers
Fixed: ctrl-up/down to jump to functions in the code editor breaks when "function" is followed by a tab
Fixed: map & gfx drawing selection is not applied consistently between tools
Fixed: Using right mouse button to pick up a colour / tile value sometimes also applies current tool

63


3

Congratulations, @zep! This is just wonderful. Thank you for all the work that went into this release. PICO-8 is a huge part of my life as an educator and as a game developer. It is so great to see it reach this point.


Really excited about all the improvements--i'm sure it's a tricky balance to add features and maintain the limitations that made PICO-8 so special in the first place. You've managed to strike that balance admirably.


1

I spent last night writing an unpack function for about an hour...but I'm not mad.

:)

Thanks, @zep.
This is like an early Christmas.


1

Outstanding! tline() is such a game changer, as people making texture mappers and Mode 7 type effects with it have demonstrated, but there are a great deal of other excellent features and improvements as well. That animated loading icon that pops up when something does a lot of precalculation is a nice touch :)

Thank you for all of this. It was PICO-8 that truly encouraged and inspired me to dive deeper into coding, and every update has kindled that inspiration further. I'm not exaggerating one bit when I say this has been life changing for me.


Thank you @zep, awesome job!


I’m impressed by the amount of things you managed to add!

Can’t wait to play with tline!


Hi @zep, Could you please consider removing trailing whitespace and multiple blank lines from html export for the next update. This is causing extra diffs and just untidy.

Thanks.


2

WOO HOO! 🙌
Congratulations, @zep! 🥳🎉
A HUGE milestone indeed. ✅
You should feel very proud of this achievement. 🏆
Thank you for creating something small and cozy, that has the power to bring SO much joy to kids & adults alike, all around the world! 🤓❤

P.S. Thanks for the new DEBUGGING features - these should be a great help! 😅


pretty good,thank you @zep


2

> 0..31 are control characters and are not visible

> All of the new characters 32..255

I believe these should be 0…15 and 16…255 instead.


Hi,

Could this be added as default for macos Info.plist?

<key>NSSupportsAutomaticGraphicsSwitching</key>
<string>TURE</string>

I just joined the PICO-8 family just in time for this release. I'm absolutely loving it. You've created a gem here zep. Fantastic work.


Why won't this appear in my Updates tab? I thought all future updates were free once you'd bought Pico-8?


Did you register your BBS account with the same address with which you bought PICO-8?


@BlinkyMcGoo

Try clicking on your name in the upper right of the page and selecting Downloads.


Aphex Twin fans being like "Selected PICO-8 Works"


@zep How do I update pico-8 to its newest version? My version is "0.1.11G". Is there any way to update it?


@sliuey You just download the new version and remove the old version. There is no automated update facility.


@dddaaannn Uhhh, how do I do that?


@sliuey The Linux and Mac versions are just folders of files. If you're using the Windows installer, you should be able to download the latest installer and just run it, and it'll install over the previous version. (If that's not working say so, I haven't tested it in Windows in a while.)


@dddaaannn But where do I get it from? The new version of pico 8.


@sliuey Ah, yes, go to the top of this page and click on your account name in the navbar to open the dropdown menu. Click "Downloads" and get it from there.


@dddaaannn Oh. I don't have a 'Humble' account, so I can't do it. But thanks anyway!


@zep Does Frame Advance work on Linux? I'm running on Ubuntu 19.10 and it doesn't seem to work for me.


@zep
thanks for this brilliant update! I really would love to try out the debugging tool but it seems bugged. Every time I stop the game (no matter if done so by escape or stop() ) the camera gets reset to 0.0.
I can do what I want it won't reset it to the position where my code would move it to usually. It simply jumps up instantly although even if it should move it would do so slowly.
Can you test it on my snake game?



[Please log in to post a comment]