✦mossmoss.net

Moss Moss guide

How the Moss Moss Map Was Read Out of the Cartridge

A technical write-up of extracting every Moss Moss leaf, spirit and the crown from the PICO-8 cartridge, including decompressing the game's Lua to prove which sprite ids the game actually uses.

mossmoss.net Editorial Team

Published November 1, 2026 · Updated November 1, 2026

Want to learn by playing? Play Moss Moss online →

Why read the cartridge at all

A guide can describe where collectibles are, or it can read them. Moss Moss ships as a PICO-8 cartridge, and the browser build that plays on this site contains the same 32 KB of data as the downloadable file. In that data, the level geometry and the object placements live in the map layer — the same bytes the engine reads when it builds a room. So the positions are not a transcription of someone's playthrough; they are the game's own input.

Where things live in a PICO-8 cart

A cart is 32 KB with fixed regions: sprite graphics start at 0x0000, the map at 0x2000, sound at 0x3100 and Lua code at 0x4300. The map is stored as one byte per tile, 128 tiles wide and 128 tall. The first 32 rows are the level data you normally think of; rows 32 to 63 are the shared sprite area at 0x1000 to 0x1FFF, which the engine can also draw from. Moss Moss uses that shared area for level content, which is why a map reader that only looks at the first 32 rows misses part of the world.

Finding the collectibles

The map holds sprite numbers, not names, so the first question is which number means what. Counting gave a strong hint: sprite 73 appears exactly 32 times and there are 32 screens, one leaf each; sprite 86 appears 12 times; tile 10 appears 3 times; sprite 61 appears once, on screen 4-1; sprite 60 appears once, on screen 4-3. The counts suggest a leaf, a spirit and a crown, but a guess is not a source.

Proving the sprite ids from the game's own code

The proof is in the Lua. The cart stores its code compressed in PICO-8's pxa format — an 8-byte header holding the decompressed length and the compressed length, then a bitstream read least-significant bit first, mixing move-to-front characters with back-references and one raw-block special case. Decompressing it gives the game's source, and the source contains the dispatch table: 73 initialises a leaf, 86 initialises a spirit, 61 initialises the crown and 60 initialises the player. The room setup also counts a spirit when the tile is either the spirit sprite or tile 10, which is where the total of fifteen comes from even though only twelve are drawn as visible spirits.

The cross-check that makes it trustworthy

Two of those ids can be checked against knowledge that did not come from the extraction. The player start is on screen 4-3, which is exactly where the existing walkthrough said a run begins, and the crown is on screen 4-1, where it said an Any% run ends. Those two independent matches are what justify publishing the other 47 collectible positions. The extraction also corrected a claim on this site: an earlier version of the full-map guide said the map did not contain collectibles at all. It does, and the old sentence was written without checking the tile data.

What it produces

Every leaf, spirit, hidden spirit and the crown now has a screen and a tile position in machine-readable form, published as JSON at /data/moss-moss-collectibles.json and rendered into the numbered map on the full-map guide. The same data answers the question the HUD cannot: there are 15 spirits, three of them stored as a hidden tile on screens 7-1, 1-3 and 6-3, which is why a careful player stops at twelve.

Play Moss Moss online

Everything above is playable right here in the browser. No download and no account required.

Start playing →

Frequently asked questions

Are the Moss Moss collectible positions from a playthrough?+

No. They are read from the cartridge's map layer, the same data the game uses to build each room, and the sprite ids were confirmed from the decompressed game code rather than guessed from counts.

What is the pxa format in PICO-8?+

It is the compressed code format PICO-8 uses for the Lua section of a cart: an 8-byte header with the decompressed and compressed lengths, followed by a bitstream read least-significant bit first, using move-to-front characters and back-references, plus a raw-block case.

Why does the map have 128 rows if the world is 4 screens tall?+

A PICO-8 map is 128 tiles tall. The first 32 rows are the usual level data and rows 32 to 63 are the shared sprite area at 0x1000 to 0x1FFF. Moss Moss stores level content in that shared area too, so a reader limited to the first 32 rows sees an incomplete world.

Can I get the raw positions?+

Yes, as JSON at https://mossmoss.net/data/moss-moss-collectibles.json. Each entry has the screen, the tile coordinates within that screen, and the absolute tile position in the map.

Keep reading

More Moss Moss guides