System 6 Pocket is a pixel-perfect simulation of the Macintosh System 6 operating system.
This project originally started as an exploration of some theoretical complex menu UX. The attempt was to create a menu or system that could facilitate a large number of functions, maybe to be used in a strategy or building game for example. After a few dead-end ideas, I recall seeing @dustin post something on Twitter about MacPaint, leading me down an internet rabbit hole that ended at Macintosh System 6, which I hadn't thought about in years. The rest has been a blur of code, and extremely zoomed-in pixel views of classic Mac screenshots.
See attached for a .PDX ! Let me know if you have any feedback, and if you're able to solve the slide Puzzle...
I'll continue to post here as I make updates and changes. I'll add all sorts of build process detail in the following post for those interested!
There are something like 12+ fonts in the original classic Macintosh OS systems 1 through 7. So, as in the original System 6, Pocket is using Chicago 12 for the menus, Geneva 9 for icons and other text, and New York 12 for Note Pad. There's also a mysterious/hideous "outlined" font that the Puzzle uses its numbers from, which I just made from scratch. The fonts are all pixel-perfect recreations (and debatably legal to use, which means this definitely won't ever be up for sale), and big shout out to Susan Kare for her beautiful original fonts. Pocket has no "bold" variations of the fonts; those styles were algorithmically generated in the Macintosh OS itself. I'm likely not going to recreate those styles by hand, and mimicking the style generation in code is (probably) beyond me, so those styles Pocket will go without for now.
Also included is a famously fun font, Cairo 13, which has all the charming glyphs in it, including Moof the Dogcow. I'm not sure what the best way would be to give a user access to seeing all of these (for now, only Moof shows up in new Finder windows), maybe in the Scrapbook program eventually. Also, the Cairo font itself yet needs a full manual cleanup, it couldn't convert well unfortunately.
Cursor control is something I considered a lot. Ultimately for now, I've decided to adapt the controls to work without a cursor. The control scheme has gone through quite a few iterations (if I had a dollar for every time I wished the Playdate had just ONE more button on it...). I did want to include the cursor in some way though, so you'll see it show up when closing windows, moving windows, and in the Puzzle game.
I would still consider adding it, but it would require a lot of rework for hit-box detection. If I did, I may do something vaguely similar to how it seems @dustin is doing his cursor for Playmaker, in that the crank would dictate the direction of the cursor, and some other button would "drive" it that way. It would be an interesting way to control a "computer" to be sure!
I'd also love to hear feedback on if pressing A+B to open the menu bar is too awkward or not preferred for many. There are other ways I could approach this, but this was the best for now.
There's very little going on here in the original OS. I recreated the original startup chime from scratch (testing the limits of my music theory chord deconstruction skills...), because believe it or not I couldn't find that source file anywhere. The only other sound is the beep that happens when you win the Puzzle game, which was also recreated in Logic Pro.
Some of this was a little bit tricky to replicate, since a lot of the animations run at whatever internal frame rate of the Macintosh it was originally running on, and so they sometimes look "slow" in ways that are a little unpredictable. I focused on getting it visually identical, and then getting the animations themselves looking as close as possible to "feel" right. Some of it I didn't even bother to do, as it was diminishing returns for the scope of this project. For example, originally when you open a Finder window, the text inside of it "loads" haphazardly after the window opening animation finishes.
I didn't recreate much about the system's ability to open and select files. It's not really my intention to create a file management application, nor do I see much of a use case for that on the Playdate. Some of the presentational internals are in place to do it though, and I did create the Trash and Disk icons from scratch.
This part of the build was trying on my patience. The irony of it of course is that "slide puzzle" style games are something I personally avoid like the plague. In the end though, it was satisfying and interesting to build an algorithm that checks whether the slide puzzle is solvable or not and then regenerates if not. I didn't dive into any A* stuff to actually have the system solve the puzzle once its generated. It could be useful potentially to make varying "difficulty" levels of puzzle. I may port this into its own project and release it that way, in case there are any diehard slide puzzle fans out there on itch jonesing for that...
As for the controls, I couldn't decide which was more intuitive so I included both for now. Pressing B will cycle clockwise through all the adjacent tiles around the empty tile, or you can press the up/down/left/right d-pad button to select the corresponding tile around the empty space. Let me know which feels better (or some other better option).
Also, I only completed an actual generated puzzle once to test it, but it is plausible that my generation code isn't perfect, and it'd be hard to know without developing some A* code, so please let me know if you aren't able to solve it.
Adding this was primarily an excuse for me to learn how to use the SDK's built-in keyboard functions. It led me to the request linked below, which I think would make the Note Pad significantly more usable (but... still this is not really a practical way to keep notes...)! Be sure to press "OK" when exiting the Playdate keyboard if you want your text changes to save. There's no real reason that it's limited to 8 pages, other than that's what the original OS program had.
Differences / Challenges
One of the trickiest parts of this was that I don't have easy access to a computer with System 6 running on it, and there are (believe it or not!) very limited videos of this on YouTube.
Generally though, everything was done with as much pixel-perfect accuracy as possible, aside from the following:
Since there is no direct cursor control, "disabled" menu items can be highlighted in Pocket, creating a visual style that doesn't quite exist in the original OS. In theory, I suppose I could have the gridview just skip these items when selecting through the menus...
In the original OS, the clock comes with some additional "alarm" functions and such. I didn't bother creating these, due to the massive rabbit hole that would have been. Plus, nothing could compete with @AdamsImmersive 's wonderful Playtime clocks anyway
As mentioned in the Fonts section, there's no "bold" styles available
Originally, the Puzzle game doesn't have that visual "selection" stroke. This was added for ease of viewing and control, although it could probably be removed and the cursor alone would suffice
In the Puzzle game, it's supposed to be possible to move an entire row or column of three tiles at a time. I didn't include this, it made much more sense for only the adjacent tiles to be selectable when using a button-only interface
The aspect ratio of the Playdate obviously doesn't match that of any of the machines that originally ran System 6
Probably some bugs left that I didn't squash in there... it was my first time using a complex and extensive setup for input handlers, and it feels a little bit messy...
The floppy disk icon, in screenshots I've seen, sometimes it's colored in black in the top part, and sometimes it's open like I have it... it's not clear when or why the difference there. It might have something to do with the emulator that a lot of the screenshots I found are pulled from, or that some of them are from System 5 or 4 which have some subtle differences sometimes
Things run relatively well, it's all built in a way that keeps screen updates to a bare minimum. That said, Note Pad runs a bit slow for some reason that I haven't yet figured out (is accessing data store slow?), and is best to use with nothing else open. And, if you have more than a handful windows open total, the whole system starts to chug a bit. I'll chalk it up to adding to the charm of it for now, but if others think it's too detrimental, I can do some more focused performance testing to see how to fix some of it.
I'm not sure if more time will get put into this in its System 6 "simulation" form. It's been a ton of fun to work on, but I don't see a lot of reason to push it further than this. And to be clear, as someone who always finishes what's started, that's hard to say!
If others are VERY into this for some reason, I'd consider putting it up on GitHub for the community to collaborate on, although I'm under no impressions that the code is up to the quality it needs to be for that to be a good idea...
Similarly, if anyone wants to use the menu bar UX, let me know and I can share that code. It's not perfectly detached, but it is relatively reusable and maintainable/readable. I've been interested in creating a "UI Kit" for Playdate, so maybe some of this will go into the framework for that.
Most importantly, moving forward, I am pretty curious about playing around with what this idea could look like if it were used as a basis for a game concept. With some different fonts and a few small tweaks, I think it could look Legally Distinct™ from Mac OS. Some initial influences for game style that came to mind are below, although I think I'd explore something still pretty distinct from these:
I've been playing with a tilt-controlled "mouse pointer" concept--mainly for typing on a keyboard concept I have, but it might be cool as Mac pointer too. Not sure how good I can get it to feel yet. I want tilt to control absolute position—not speed—for a (hopefully) precise feel.
This is amazing. Great job! I did the same thing for Windows 3.1 but ultimately got bored when trying to implement actual apps. Turns out the thing I really enjoyed was creating 1bit versions of bitmapped graphics and less-so trying to clone MFC behavior as a Lua API.
I even implemented all the original backgrounds too.
Now that I watch the video you linked to, I don't see it being a viable playdate experience, unless Panic releases a little yellow mouse. Shufflepuck requires being able to mimic the action of an air hockey paddle now that I see it again (it's been decades). Guess I'll have to buy an actual Macintosh Plus.
On the other hand, SuperPaint working in the simulator would be a jaw dropper.
If you haven't already, check this very cool System-6-running-in-a-web-page. There onscreen you will find a folder full of playable games from that era: vector Star Wars, Prince of Persia, Mac Man, Crystal Quest, etc. etc. (28 of them). Have at ‘em!
And even though someone (several someones, perhaps) might be creating Playdate drawing apps, please don’t let that stop you. SuperPaint was the #1 reason I wanted a Mac instead of Windows way back then. Programs like MacPaint and SuperPaint were the progenitors of Photoshop in that they defined the UI (vertical toolbar strip, etc.).
Games are great and all, but excellent drawing apps were what set the Mac apart and established it as a creative person’s weapon of choice. Since you’re taking a shot at replicating what made an original Mac so charming, pulling off MacPaint or SuperPaint should be near the top of your feature list.
Either of those two apps would be great. However don’t forget that SuperPaint had a little tornado tool that would randomize the pixels where you applied it. So it gets my vote for having the original blur tool.
When I was in school they had a super ancient public Mac set up just for managing the big printer. No chair and no keyboard, so nobody could hog it for doing actual work.
But if we needed to make a little change to a project, sometimes we'd use that Mac anyway: you could use the mouse to type into any app using Apple's "Key Caps" application. Looks like that existed back in System 6:
So that might be an interesting--and authentic!--alternative way to implement text entry if you ever incorporated a full mouse cursor.
(P.S. I just learned that Key Caps still exists—now called Accessibility Keyboard—in current Mac OS. It's a crazy-looking stretchable window with non-standard window widgets, and tons of customization options, like adjustable transparency and being able to set its dark/light mode different from the system.)
I just remembered this layout test I did for (the too long in development) Hanafuda game for Playdate.
I still use System 7 a lot so this was based on that, hence the different menu font.
Everything in the below screenshot was drawn on System 7 in an app called UltraPaint, which I prefer only because I've used it more than SuperPaint or the paint mode in HyperCard which are apparently both very strong.
The cards are texture patterns from the app, which I guess are supposed to be colour but dither into really nice sort-of-random tritone patterns.
While messing around with learning 9-slices, I created an AmigaDOS influenced window thing. I didn't include mouse cursor (which i implemented for other apps) but i got it sprite based with each "window" having its own render bitmap for free. I used it for my LlamaFonts free app on itch... LlamaFonts by BleuLlama