Hacker News new | past | comments | ask | show | jobs | submit login
Pico-8 Virtual Fantasy Console is an idealized constrained modern day game maker (hanselman.com)
132 points by doomrobo 57 days ago | hide | past | web | favorite | 37 comments

I'd love a PICO-16: a fantasy console almost-but-not-quite like a GBA, extended in some ways (e.g. resolution, sound channels) and reduced in others (e.g. palette, maximum ROM size.)

There are tons of these little "retro console" devices lately—the Bittboy, LDK-game, etc.—that people just treat as emulation devices, when they actually have hidden potential for running native game software as well, with more power than you can get out of them through an emulator. (They're actually usually as powerful as the original PSP, but only have the GPU capabilities of the GBA, making these consoles into a sort of unique alternate-history blend of 2001-2004 era gaming.)

But no games are being written directly for these devices, because they're all slightly-differently specced: different screen-sizes; different amounts of RAM; etc.

A hypothetical PICO-16 "platform", in my mind, would basically be an abstraction over the cross-section of native capabilities of these devices (with maybe some additional tasteful constraints on top), while still allowing to take advantage of the full hardware in a way you can't by just e.g. writing SNES or GBA homebrew.

Maybe the "platform" could even come in a few separate "profiles", where games could be either targeted to a specific minimum profile, or could respec themselves to the highest profile supported (sort of like how Z-Machine games work in detecting the VM's multimedia capabilities.) Take it far enough and PICO-8 could just be the base PICO-16 profile!

I'm working on something like this, but as time has gone on I've made technical constraint less of a priority and focused more and more on the I/O and "bus" model itself, because that's where the ultimate bottlenecks lie. If you have all the processing power in the world but only a 256x256 space to draw in and a limited number of commands to draw with, you still have an interesting constraint.

One of the things I found myself doing with PICO-8's setup was prematurely optimizing code for size, which presented a new kind of puzzle(how to express things in fewer Lua tokens) but didn't feel good in terms of authoring finished work(I made a nice 3D maze wireframe renderer - and then stopped there). So with my own fantasy console I'm prioritizing other things beyond size/retro aesthetic, while still thinking about limitations. "Diversity" has become one of those things: you will have some ability to swap out graphics and sound cores, and use a variety of programming languages. The fixed spec approach makes it harder to make each part really distinctive and not just another "tiles and sprites and chiptunes" doddle.

Since I made the foolish decision to support 3D cores it's taken a while to get a renderer going, though, and I finally decided to speed things up by releasing with 2D first and adding more later.

Neat. Obviously swappable cores in cartridges were a big part of the longevity of the NES and SNES consoles, and it will be interesting to see what sorts of trade-offs you decide to make for the various cores (and their interactions).

Very cool! Have a page or repo up to follow your work?

I have a little landing page on itch.io which can be followed if you have an account (but the content is getting embarassingly out of date): https://triplefox.itch.io/galapagos

Current release plan is to get some builds out late August/early September, both free and paid(paid simply gets the updates faster). Then later on, I can think about plans to open up development. PICO-8 took about two years from conception to release and I'm getting to around the end of year one of mine, and just about everything has had multiple iterations, but the first release will be a basic "run at the command line, code in your text editor, store assets in the file system" kind of environment. Releasing means I think the basic design is mostly settled, so after that all the UI and IDE functions will become possible.

Panic, the mac app development group, is making a custom handheld console for original retro-ish games: https://play.date/

AFAICT the Playdate is actually an instantiation of a less powerful abstract machine than even the PICO-8; closer to an Arduboy.

In my experience Pico-8 maxes out at something kinda-sorta approximating 4MHz, although in the words of the author, "PICO-8 CPU costs are made up and essentially silly when looked at too closely."[1]

The CPU in the Playdate prototype runs at 216MHz.[2] The numbers aren't directly comparable, but I'd wager that the Playdate will have _significantly_ more headroom.

1. https://www.lexaloffle.com/bbs/?tid=33883

2. https://twitter.com/zhuowei/status/1132447884719210497

I would love to see a PICO-OS. Something in the same spirit, but for making little simple apps instead of games, in the style of a 90’s OS.

That's also something I have thought about. I always figured I was mostly alone and there wouldn't be any demand for such a thing.

The way I imagined it working was a simple instruction set emulator that mmap()ed ROM images and had a fixed RAM size (in the order of 64k). Have an adjustable resolution, but simple fantasy console style display. Also the option to allow the apps to call host commands.

It would be ideal for things like volume controls, and pop up calculators etc. Maybe a really lightweight Winamp style mpd front-end.

Initially this struck me as an idea when I was hunting for what was eating memory on a 256Meg machine. I found the Volume control (one slider, and a menu dock item) required 4meg to operate.

It is something I have considered. The Fantasy console I'm making is currently uses an 8-bit AVR instruction set, but I have wondered about making the same virtual hardware interface accessible from WASM.

The open-source TIC-80 is a less-constrained fantasy console if you're not aware:


It's not really "less constrained" in any way that matters, though. Sure, you can write more than 8K of Lua and the display resolution is a bit wider, but you don't get a dedicated DSP+sequencer for audio, multiple graphics layers with affine transforms/color math, SRAM(!), a real-time clock, etc. I can't even build a Tamagotchi with this ;)

In other words, for my needs, TIC-80 is still entirely dominated by just using https://github.com/rust-console/gba to write GBA homebrew in Rust. (And everything has a GBA emulator. Everything!)

A viable PICO-16 platform, to me, would have to offer a clear improvement over the "GBA homebrew in Rust" solution.

(Even if all it is, come to think of it, is the GBA's ARM7TDMI ISA extended with some more hardware registers and instructions, and a PICO-8-like IDE for building those "GBA+" ROMs. Such an approach would come with the benefit that you could build a PICO-16 runtime by just starting with a GBA emulator and adding features. You could even choose encodings for the new ops such that they would look like NOPs to old GBA emulators, making PICO-16 "GBA+" ROMs gracefully degrade into regular GBA ROMs when run on a regular GBA emulator—very much like how Gameboy Color games work, or how SNES ROMhacks and homebrew support the MSU-1 audio chip.)

This is one of my most favorite inventions within the past 5 years that still sticks out. I think it's ingenious and a great gateway to game development for anyone, be it a hobbyist or professional.

I've spent a ton of time trying to get into game development only to get stuck in researching the many frameworks, programs, and even the idea of making my own engine. Pico-8 just packs everything you need in it including code editor, mapper, pixel editor, sound editor, etc. so you can focus on making the game instead of figuring out your tech stack. Highly recommend it and well worth the money ($15)

I love the idea of using Pico-8 as a platform for prototyping simple games. It forces you to simplify your code and focus on perfecting the limited functionality you can support.

Celeste is a great game. If I remember correctly you can actually play the pico-8 version within the newer version.

If you're into the idea of a portable linux gaming handheld check out the community at https://sudomod.com

The Discord server and Forums are very active and friendly.

Specifically, Helder's Minty Pi[0], or various incarnations of the Game Boy Zero: Kite's Circuit Sword CM3+ AIO PCB[1], RenegadeLab's Game Boy Zero AIO PCB[2], and the always out of stock (but can be found on ebay with a markup) Retroflag GPi Case[3].

[0] https://heldergametech.com/shop/mintypi/mintypi-v3-pcb-kit/

[1] https://sudomod.com/forum/viewtopic.php?f=38&t=8488

[2] https://www.renegadelabs.net/product/gameboy-zero-aio-pro-pc...

[3] https://www.amazon.com/Retroflag-CASE-Raspberry-Zero-Shutdow...

I'm a huge Pico-8 fan and suggest that anyone that is interested in Pico-8 watch Joseph White's (the creator) Practice (NYU game designer conference) talk about the design philosophy of Pico-8. https://www.youtube.com/watch?v=87jfTIWosBw. The TLDW of the talk is that he explicitly tried to built a "cozy" game development environment with enough constraints in place to encourage creativity without the stress of starting from a completely blank canvas.

At the end Scott Hanselman has a footnote about building or buying a physical Pico-8 console. One thing that is missing is most Pico-8 consoles focus on the play aspect of Pico-8, not the creation aspect of Pico-8 which is just as important to me if not more so. I own a PocketCHIP and the device is a decent handheld computer, but there are many aspects of it that make it painful to use, not due to the form factor but due to the quality of various components. The keyboard is bad although there are a variety of solutions, including 3D printed covers (https://www.thingiverse.com/glitchpudding/collections/pocket...) or rubber feet (https://androidarts.com/Amiga/PRBOOM.jpg). The quality of the screen and touch is also not great, so it was hard for me to draw pixel art on the device.

I'd like to build a custom handheld computer primarily for Pico-8 development built around this display https://shop.pimoroni.com/products/hyperpixel-4-square, probably using a Raspberry Pi Zero. One of my issues with Pocketchip was that the entire system felt kind of slow\high latency and more compute might be one of the only fixes for that, so rpi zero might not cut it. I'd probably have to print my own case and I still haven't found a great keyboard solution. The best option I've seen is Teensy Thumb keyboard (https://www.pjrc.com/handheld-tactile-switch-keyboard/), but I might go with a standard bluetooth thumb keyboard. If anyone on HN has built a handheld computer or has good resources I'd love to hear about it. My goal is to get something that feels like a Nintendo handheld (Switch, DS, GB) with good feeling physical thumb keyboard and can also be used to draw pixel art.

David Murray (The 8-bit Guy) and others are building an expandable, C64ish computer with sourceable parts and modern I/O connectivity (eg. VGA). They're calling it Commander X16. It's very early, but it looks promising as a retro gaming/educational platform. Due to hardware limitations (eg 6502-based CPU), it will probably be fairly limited to Basic and assembly programming and w/o networking capability. But, it will be expandable, so who knows. I think they will eventually have a Kickstarter. Should be a lot of fun!


here are some other fantasy consoles: https://github.com/paladin-t/fantasy

Seems to be missing the original virtual console, CHIP-8: https://en.wikipedia.org/wiki/CHIP-8

I have an ETI-660 that I built in the early 1980's around here somewhere. Possibly it even still works, though I'd need to find an old CRT TV to try. (probably need to replace the capacitors too). Coding in CHIP-8 was my intro to programming.

I designed and maintain an IDE for CHIP-8 development (http://octo-ide.com) which you might find enjoyable. If you wanted to run your programs on an ETI-660 I could easily make the assembler's base address configurable to suit that machine's memory map.

Thanks for the offer, but I'm not even sure if any of my code from that era survives. I'll have a look sometime.

Cool project btw!

I've made a game with PICO-8 with my 6-year-old watching along with me and telling me what to put into it. It was a great experience.

I do think it's very nearly almost too constrained, specifically in the code editor. But, it did it's job. A QBASIC-like interface would be appreciated.

You can use Pico 8 with Atom: https://www.lexaloffle.com/bbs/?tid=3440

I wish you could configure your constraints. I understand why you can't. But I just want unlimited tiles and map sizes. :)

When I was looking around the fantasy computers, I found one that was configurable. It had presets for different popular machines. I saved the link and closed the rest but when I was about to start I realised I saved the wrong one and I haven't been able to find it again. Did I just dream it? The one I started on instead was tic-80.

You can kinda skirt some of the limitations with Pico-8's multi-cart feature. It gives you more storage space via a simulated cartridge swapping system.

Interesting that it's just an "8-bit look" but not really "8-bit". Code is written in Lua which will be either 32- or 64- bit depending on what platform the Lua interpreter is compiled on.

(From the name, I went to read the docs, because I thought they emulated an "ideal" 8-bit processor, too.)

Yeah, it's all on the Lua VM. It does behave kinda like an 8-bit computer in that you can go poking around in the RAM to create various effects or glitches.

Actually, considering I'm learning C and pretty much enjoy the process, I'm thinking about doing some game dev for some of the retros. NES and SNES are pretty fun platforms, I'll probably use Assembly for NES but maybe I can use C for SNES?

It's always fun to do some low level stuffs in these days.

this might be childish wishful thinking, but I'd love to make something like that but with a physical console also. Share the software created between the physical console and the fantasy console, maybe allow alternate software evolutions (imagine an internet that diverges with something other than html).

It's a fun little daydream at least

Have you seen http://makenesgames.com/ ?

> imagine an internet that diverges with something other than html

Pico-8 has the "cartverse," which allows you to link between carts in various ways. It's all centralized around the BBS right now, though.

There's lots of possibilities with Arduino or similar hooked up to small LCD displays. Unfortunately HDMI output makes a system no longer simple.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact