How much of MYST can you run on a 4k 16k Atari 2600 cartridge?
Details
I was doing some Atari programming and thought I'd try out Myst.
It's nowhere near a complete game, for that check out my
Apple II demake version
Legal Note
This product contains trademarks and/or copyrighted works of Cyan.
All rights reserved by Cyan.
This product is not official and is not endorsed by Cyan.
Video
Here's a video of the gameplay for version 1.2:
Graphics Notes
The game engine uses ZX02 compression for each scene. I intentionally
limit the compressed image to 256 bytes, which means I sometimes have
to simplify the graphics to fit. Each scene has an asymmetric playfield.
Graphics are 40x48 to simplify things a bit. Each line can be two colors,
foreground and background. We fix the background to a single color.
The foreground color can change each 4-line block. I use sprite1 as an
8-block wide source of additional color, so one extra color per line
but only in that area. You also get an optional vertical line
(missile0) which is the same color as the pointer. The engine
possibly has provisions for the left/right side of the screen
having different background colors but I haven't enabled that yet.
When uncompressed the graphics are 448 bytes
which are temporarily stored in the 2k RAM supplied by the E7 cartridge
(by default a 2600 only has 128 bytes of RAM).
Screenshots
Note: these were captured with the Stella emulator.
If you want to see screenshots from the original 4k proof of concept
you can find them here
System Requirements
An NTSC Atari 2600
Downloads
Disk Images
Here is the ROM image for v1.7 (23 December 2022) myst.e7 (16k)
Finally you can also
possibly play in your browser at the internet archive.
Mini-faq
Q. Why?
A. Because
Q. The graphics look pretty bad.
A. It takes a lot of work to make nice graphics. Each scene
is more or less a procedurally generated demo.
By default you only have a 20-bit (yes, bit) framebuffer,
and you can only draw one line a time, with only two
colors in it. Anything more than that is someone
being really really clever in 6502 assembly language.
Q. Are you going to do the whole game?.
A. No. Even though you can get fancy bank-switch cartridges
these days I prefer to work within the limitations of
the time. Also to do the full game requires at least
800 scenes, which would be roughly 200k, which would
be both a pretty hefty cartridge as well as a lot
of graphics to draw.
Q. How did you learn how to make Atari 2600 games in
less than a month?
A. A lot of skills I have from my Apple II hobby directly transfer.
6502 assembly, 6502 size-coding, 40x48 lo-res block graphics,
beam-racing demos. Doing beam racing is actually much
easier on the 2600 than on the Apple II due to the WSYNC
feature.
Q. How do you make the graphics?
A. I run the original game under SCUMMVM. I take a screenshot
and load it into GIMP. I crop it, raise the brighness
a bit, then size to 40x48.
I then remap to the Atari 2600 palette (no dithering).
I expand to 80x48 for editing. I then draw over by hand.
The biggest challenge is picking what color to be the
background color. It's often black or dark grey.
When done I manually split things up into two images,
background and overlay. I then have tools that convert
these PNG files into data that can be loaded into the
assembly language of the game.
Development Notes
23 December 2022 -- Release v1.7
Finally had some time to work on things again. Finally got glitch-free
(multi-frame) decompression to work, at least on Stella.
So can maybe now work on features again.
1 October 2022
Work has stalled a bit, partly because the semester has started, but
also due to being stuck on some complex code. Curently the graphics
are compressed, and decompressing them takes 3 or so frames. While this
looks fine on the stella emulator, if you go 3 frames without SYNCing the
display you'll get annoying glitches on real hardware (or at least you
do on the NTSC capture cards I have). So I've been working on having
the decompression happen in parts with proper sync happening and it's
proving to be a bit difficult.
31 August 2022-- Release v1.6
Spent a lot of time tracking down some issues with my E7 bank switching.
Should work on mame and harmony cart again.
30 August 2022-- Release v1.5
You can move around D'ni now and bug Atrus. Trying to figure how much
room I'll have to implement some puzzles.
Anyway you can make it to D'ni now, although none of the puzzles
or pages are hooked up properly.
16 August 2022-- Release v1.3
You can now reach all 8 marker switches.
12 August 2022-- Release v1.2
Now you can get to (and activate)
three of the marker switches, plus you can investigate
the red/blue books in the library. This involved making the book-drawing
code generic which was a bit of a pain.
I'd estimate the cartridge is about half full now.
10 August 2022
Now up to 18 different locations you can visit. Need to start adding back
the code that lets you grab objects.
5 August 2022-- Release v1.1
Everyone wants to see more levels, so I'm learning how to use an E7-style
bank switch cartridge (16k ROM / 2k RAM). I'm hoping I can put a decent
amount of Myst island on it. The kernel/engine I have takes 448 bytes
for each screen, but I am using ZX02 compression to fit a lot more in
(though it's tricky decompressing to the RAM). The compressed data
has to fit in 256 bytes per level, which can be tricky for complex levels.
I've got the 4k version more or less transferred over (though I had to
simplify some of the levels) and you can very barely walk about now.
It should be more interested as I find time to add new levels.
29 July 2022-- Release v1.0
Powered through and did a 1.0 release. As always there are probably
more important things I should be working on, but it's hard to
not work on things until I get at least one release out the door.
Most of the work was adding animation to the cleft and book scenes,
optimizing size down, trying to approximate the linking noise,
and work on the arrival screen. Not entirely happy with how
the arrival screen turned out but was running low on ROM so
some compromises were made.
28 July 2022
Finished the clock scene. Redid a lot of the design as I've
learned more about how the VCS works. Also put together the rocket
graphics. Trying to have a 2-scanline kernel if possible but keep
rolling over to 4-scanline as I run out of cycles.
27 July 2022
Got the linking book in decent shape. Feel like I've been decently
clever with it.
26 July 2022
Working on the star cleft. Wasted a lot of time trying to make nice
looking stars, really should look up how games like Solaris do it.
Was trying to have an HMOVE of 7 and then skipping 8 scanlines
so things were relatively prime, but didn't really work out that well.
24 July 2022
Got secret collect more or less finished so back to working on Myst.
It was too ambitious a project to start with, things are going a bit
easier now that I've learned some things.