If you can’t play the new VR version of Myst, why not play the Apple II demake

Posted by



How much of MYST can you run on an Apple II+ with three 140k floppy disks?




Details

I needed a break from my Another World Demake
and somehow was thinking about Myst.

Could you do a credible version of Myst on an Apple II in lo-res mode?
The answer seems to be just barely. I think you could also make a nice
version with hi-res graphics, but they are 8 times bigger and it would
be harder to fit on a reasonable number of disks.

One observation, Myst island is very dark and brown. Maybe a system
with lots of browns (hello C64!) would work better.


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.


Implementation

This is a fully playable version of the game. A few off-the-main-track
locations are missing, but otherwise the game is complete.
You can walk around everywhere, solve
all of the puzzles, and get to all four endings of the game.

The graphics were all done by hand, and the quality is a bit irregular
as I was trying a few different techniques.

The game is just a series of “rooms” you can walk between. Each room
has four exits, N/S/E/W. In each room you can have one item you can
poke around with. This maps the gameplay fairly well, though the real
game you can have more than 4 exits from a room.

The whole thing is written in 6502 assembly language, runs on a system
with 48k of RAM and fits easily on three 140k floppy disks.


Graphics Comparison


I’ve moved this section on the suitability of various Apple II
graphics modes to a separate page.


Video

Here’s an any-percent speed run of the game on the occasion of
the v1.0 release:

Here’s a 5-part long-playthrough of the entire
game recorded on an actual Apple IIe Platinum machine.
This is version 0.99, there have been some improvements to the
game since then, most notably the loads from disk are about 10 times
faster now.

A playlist of various clips of gameplay from while the game was
under development:

Someone requested to see what my workflow was like for creating the
graphics. The answer is it’s a very inefficient one, but here’s a
video of me creating a background if you’re curious:

Here is my talk at Kansasfest describing some of the technical background
of the project:

Here are the slides from the above talk:
kfest2020_myst.pdf

I also gave a talk on the disk code used in the Myst demake at
Demosplash 2020. You can possibly watch it toward the end of/beginning
of these two links:
link1,
link2

You can view the slides from the talk here:

demosplash2020_diskII.pdf

Also from Demosplash, the ANSI art that (somehow) won first place.
It’s an Ad for Apple II Myst. DOS CGA 80×25 ANSI art that could be
used for an MS-DOS Myst Demake, or maybe a BBS door game:
Apple II Myst ANSI art


Real Hardware Action Shots

I finally rescued one of my machines from lockdown at work.

The full set of disks:


Screenshots

Note: these were captured with the AppleWin emulator.

Myst Island

Mechanical Age

Stoneship Age

Selenitic Age

Channelwood Age

D’NI

When making your own game engine, sometimes it’s tempting to inject
some sarcasm (in the end most of that was removed as it would
have been really confusing for people who hadn’t played the game
before):


Differences from original Myst

All ages are completely playable. You can play through to all four endings.

There are some differencs compared to the original:

  • Missing locations:
    In general only half of the locations
    are there, meaning when walking around every other step is missing unless
    the view was important for plot reasons. This makes walking slightly
    jumpier but was needed to fit on a reasonable number of disks.
  • Modified puzzles:
    Some puzzles have been modified to address limitations of the Apple II
    platform. The fireplace puzzle has fewer squares due to limited resolution.
    The gears puzzle is changed due to the difficulty of getting key-release
    times. The spaceship piano button is one note fewer, also due to limited
    screen resolution. The mechanical tower rotation puzzles were made
    simpler just because I found the originals to be overly difficult.

  • Missing animations:
    Most of the quicktime animations are not implemented due to space reasons
    and developer time.

  • Missing sound effects:
    Most of the sound effects and music are missing, primarily due to disk
    and RAM limitations. In cases where it’s important, the Apple II version
    adds the sound effects via subtitle.

  • Clickable items:
    Many of the rooms in the original had interactive items and pictures
    scattered about that you could look at closely or even pick up or
    play with. Some, but not all, of these have been implemented in the
    Apple II version. You’ll have to explore to find out which ones.

  • Text/Letters/Speeches:
    Primarily for space saving reasons some of the longer
    chunks of text in books and speeches
    are summarized, hopefully capturing most of the original intent.
    Text can take up a surprisingly large amount of space in RAM, but also
    in mixed graphics/text mode on the Apple II you only get 4 lines of
    40 characters to express your message.


System Requirements

  • Any sort of Apple II should work (II/II+/IIe)
  • Should also run on IIc or IIgs but not tested as much
  • At least 48k of RAM (no sound effects)
  • For sound effects you need 64k of RAM
  • It will play the intro theme if you have a Mockingboard
    sound card
  • You probably also want a color monitor, it’s a bit hard
    to play in monochrome
  • You can play with a joystick, though be careful enabling
    that on systems w/o a joystick hooked up.

Downloads

Disk Images

Source


How to Play

The best way of course is on actual Apple II hardware.

Barring that, you can download the images above and run in an emulator.
If you’re on Windows (or Linux using wine) I recommend
AppleWin.

If you want to play online, try uploading the images into

Apple ][js

The game comes with 5 pre-defined save games you can load (using control-L)
that will warp you to the various parts of the game if you just want
to look around a bit.


Controls

To move the “pointer” use the arrow keys or WASD (your emulator might
not support up/down arrow as the original Apple II didn’t have them).

Use enter or space to move or for action.


Hints

If you haven’t played through the real game it might not be obvious
how to beat things. This version is close enough to the original that
a walkthrough for the original game can help you through this one.

One thing, that is hinted in the game, is that due to the Apple II keyboard
you can’t tell if a key is being held down. This affects the puzzle in
the island-clock. In the real game you could hold down the lever for
an extended time to change its behavior. To do that in the demake click
the top of the levers for a short turn and click the bottom of the levers
for a longer turn.


Credits

  • Code, GR graphics: Deater
  • lzsa compression:
    Emmanuel Marty
  • Disk loader and enhanced compression lib: qkumba
  • Audio player: Oliver Schmidt

TODO

  • Mouse support. This is low priority as I don’t have mouse hardware,
    but also because from what I understand using a mouse in lores mode
    is not a smooth experience.

Mini-faq

  • Q. Why lo-res? Why not use the hi-res (140×192, 6 colors), double lo-res
    (80×48, 15 colors) or double hi-res (140×192, 15 colors)
    modes instead?

    A. See the Graphics Comparison
    Page
    for a detailed rundown of the tradeoffs in
    the Apple II Graphics modes.

  • Q. But I *really* want a native version for my IIgs with SHR graphics
    and sound!

    A. That’s certainly possible but modifying this code for that would
    involve more or less a complete re-write of the game.
    You’d probably be better off porting the SCUMMVM port
    to the IIgs than using this one as a base.

  • Q. Was it hard to write this?

    A.
    The code is actually surprisingly simple and not very big.
    It helps that I could re-use a lot of the lo-res drawing code from
    my Another World project.

    The big time-sink is the graphics, which take a while to draw
    and there are just so many scenes.

  • Q. So how did you draw the graphics?

    A. So for 40×48 resolution you can’t just take a paint program
    and have it do this automatically. That tends to lose a lot
    of important details.

    Usually I take a screenshot and drop a 40×48 grid on top
    and then trace over it. The scummvm/masterpiece edition
    is very close to 560×336 resolution which scales nicely to 40×48.

    The hardest part of this is color selection,
    as the 15 Apple II colors are a weird bunch and don’t make gradients
    well. I sometimes try to do things like make color 2 (a sort of
    blue-purple color) act as a shade of grey, which rarely works.

    I also have had to resort to using the “aqua” color which on
    some monitors/TVs has an unearthly/sickly hue.

    Currently there are 800 background images.

  • Q. Have you played all of the MYST games?

    A. Yes, all of them, multiple times. I haven’t quite finished
    Obduction yet. My favorite is probably Riven.

  • Q. Have you met the devs of the game?

    A. Not the Millers, but I have met the oft-forgotten co-developer
    Chuck Carter.

  • Q. Why do you call it Mist and why do the sublevels have odd
    nearly-correct names?

    A. I’m never sure how litigious companies are going to be,
    but in this case the parties involved seem to
    be pretty cool with things.

  • Q. If the game runs on Apple IIgs, why isn’t that on the disk label?

    A. The game runs in backward compatibility mode, and has only
    the bare minimum IIgs support code to make sure the colors
    are right. I feel like it would be false advertising to
    list it as having full IIgs support.

  • Q. Why are the disk accesses so slow?

    A. By using qkumba’s qboot track-at-a-time code we managed to
    get really nice disk speed. Prior to that things
    were a lot slower.

    If the slowness really gets to you, you can run under AppleWin
    and enable the enhanced disk speed option and the loads will
    appear nearly instantaneous.

  • Q. The graphics are horrible, I wouldn’t be able to tell what
    was going on if I wasn’t familiar with the original game.

    A. Possibly true. As someone who has spent a lot of time now
    both in the original and in the Apple II version, things
    look fine to me, but I am used to the graphics.
    I’d like to think people in 1980 would have been slightly more
    forgiving of the hard-to-parse graphics.


Speedrun

It’s of course possible to speedrun the game. For what will probably be
a brief moment of time I have the record:


You can see the current leaderboard here:

speedrun.com


Development Notes

5 December 2020

After jokingly suggesting it for a while, got around to mocking up
what the Demake would look like in IBM DOS CGA text mode. Proof of concept
using mostly just an auto-conversion of the Apple II graphics here:
DOS CGA Myst.

Translating the code wouldn’t be that bad, though redrawing 800 images to
be higher quality ANSI art would take forever. It would be a good start
for a really lo-res Linux port.

20 November 2020

Made a presentation at Demosplash demoparty on the fast disk routines
used by the Demake. Also entered an ANSI art ad for the demake, which
somehow won 1st place.

12 September 2020 — Release v1.02

Updated Atrus’ viewer message to be closer to that of the original
game. The previous version was a bit funnier but also a bit of
a spoiler if you haven’t played the game before.

This pushed the viewer executable over a page boundary so had to
shuffle the disk layout a bit, hopefully that didn’t break anything.

9 September 2020 — Release v1.01

Fixed a bug in the order of the valves on the clock tower puzzle.
This was noticed by the Myst Guild of Speedrunners.

Also tried to improve joystick support a bit. The edges of the screen
are now enforced and the joystick is only checked every other frame.
Works OK in the emulator, need to re-test on actual hardware.

6 September 2020 — Release v1.0

Finally hit version 1.0!

This did add some more places to poke around in the sub room on
Selenitic.

Made the speedrun on real hardware and found a lot of bugs, hopefully
they are all sorted out now. Most of them had to do with my code
hard-coding slot6 in a few places, and accidentally leaving the
cycle-counted disk write code straddling a page boundary which through
the timings all off.

It’s never good when you are trying to record a speed run and you have
to stop midway through to consult qkumba! Big thanks to him for being
super responsive with my silly issues with his disk code.

5 September 2020 — Release v0.99.7

Added joystick support, seems to run reasonably well under the emulator
although maybe a bit too sensitive. Will have to try it on my II+
that has a real joystick

Was worried about room for the code (it’s about 128 bytes) but then
found that the sprite draw code still included flipped-sprite support
from OOTW that we weren’t using and disabling that freed up a lot
of space.

4 September 2020 — Release v0.99.6

Save game support is now there and seems to be working. Code also
provided by qkumba.

Seriously running low on memory space though, going to be a challenge
to fit the joystick code.

Also, the loading-from-right-disk sanity check managed to trigger a new
bug in qkumba’s qboot code, but it was quickly fixed.

1 September 2020 — Release v0.99.5

Finally got qkumba’s qboot code going. Makes a massive improvement
in speed when loading from disk. Managed to trigger a bug when loading from
non-0 sector offset but qkumba quickly fixed it.

Also added support for 5 saved games and pre-populated them with
the different ages.

29 August 2020 — Release v0.99.4

Brought the Mechanical Age up to the maximum size (39.75k). There are now
some more in-between spots on the paths, and you can poke around the
brothers’ rooms a bit more.

26 August 2020 — Release v0.99.3

Working on qboot based fast load support. Have proof of concept working.

Also went back and added the missing locations in the 2nd level of
Channelwood. Can now visit each tree house visible on the map.
The last two almost didn’t fit, had to play some games with the graphics
to get them to compress small enough (the graphics in Channelwood are
complex and don’t compress well at all).

19 August 2020 — Release v0.99.2

Since we have some leftover disk space, have been adding in some
missing scenes. In this case the top level of Channelwood is a lot
more complete now, including a working projector room as well as
animated metal gate and trap.

11 August 2020 — Release v0.99.1

Was playing through the actual game and noticed some things I should
add to Mechanical age. So now you can look up to the top of the
elevator, and you can also poke around the secret rooms some more.

10 August 2020 — Release v0.99

Finished the puzzles in the Stoneship age.
Hooking up the lighthouse took a while, it’s a more complex puzzle
than it appears.
We’re seriously low on RAM for this part, ended up making the “lights off”
part algorithmic rather than separately drawn backgrounds to save room.
Also did some fun stuff with the telescope, including modifying the
sprites on the fly.

3 August 2020 — Release v0.98

Have Selenitic done. Including the sub puzzle, which I wasn’t going
to do, but in the end I had most of the pieces in place so why not.
There are a few minor locations you can’t walk to, but other than
that it’s more or less complete. No audio though, all subtitles.
There are hooks in place in case I do ever find a good way to generate
the sounds.

Also went back and filled in some missing locations on the whole path
to Selenitic, including some at the generator. Myst island is completely
out of room now.

30 July 2020 — Release v0.97.1

Working on getting the final version of Selenitic done, but it is
taking longer than expected. Split off the submarine part to give some more
room. You can now fully complete the sound puzzle, and I am
trying to make navigation easier by adding back some of the in-between
places when walking around.

27 July 2020 — Release v0.97

Channelwood is now more or less finished. Hooked up the water valve
puzzle. The whole level is a bit hard to navigate, at least in part
because I left out every other step for disk/RAM space reasons.

24 July 2020

Presented this work at Kansasfest,
the long-running Apple II conference.

You can find the talk on youtube and the slides are available
here

23 July 2020 — Release v0.96

This improves IIgs support, thanks to 4am providing code from
Total Replay. Sets black background and enables the gr/text PAGE2 fix.
Also works with lowercase input now.

20 July 2020 — Release v0.95

This release mostly fixes a bunch of bugs introduced recently that
were caught by a fresh playthrough.

Also leaving the viewer the state of the ship is properly taken into
account.

19 July 2020 — Release v0.94

You can finally beat the game! This was mostly the grid-book, the
fireplace grid puzzle, and the animation to get inside the fireplace.

This means Myst island is more or less complete. You can also speed run
the game, or you can if I reset the default marker switch positions to
be all off.

Also, if you are interested in the technical details be sure to watch
my talk at Kansasfest this Friday (July 24th).

17 July 2020 — Release v0.93

The intro is now implemented. I have to admit that all the times I’ve
played I never watched it? It is iconic though. The real reason is
late last night I found THEME.MID and couldn’t rest until I had a PT3
AY-3-8910 version, and then of course I needed the intro for it to
play over.

Also the link sound effect has been re-enabled, but you’ll need a
language card (64k of RAM) to get it. You can also toggle sound on/off
with ^T.

16 July 2020 — Release v0.92

The cabin-in-the-woods-with-giant-tree puzzle works now.
Boiler, matches, safe, treetops, basement, and all.
So you can now properly get to Channelwood.

This was the last major missing thing on Myst island, besides the final
ending.

This release also now has working marker switches.

10 July 2020 — Release v0.91

You can now lose the game. Can’t win it yet because I haven’t got
the marker switches hooked up properly.

9 July 2020 — Release v0.90

You can raise and lower the ship! The Myst island code was the oldest
so I wasted a lot of time fixing up the code and graphics while doing this.
We are just barely fitting in the 40k limit and I still have to add
support for flipping the marker switches…

Also with this version you can get to D’NI so stop by and say hi to
Atrus.

5 July 2020 — Release v0.89

Implemented the planetarium/dentist-chair level.
This was fairly tricky with lots of odd corner cases, including some
that might have been bugs in the original game (all months with 31 days?
odd behavior if you lower the panel while the light is flashing?).
The “SED/CLD” 6502 decimal mode helped a lot. Am still cutting some
corners compared to the original game.

Some other minor changes too, improved some of the graphics on Myst island and
moving some other things around.

1 July 2020 — Release v0.88

Top level of Channelwood implemented, you can collect the pages and
view the ripped letter. You can even play around with part of
the projector machinery.

26 June 2020 — Release v0.87

Second level of Channelwood Age implemented.
This level is huge! I’m going to have to break it into 3 pieces, even
with leaving out a lot of side paths.

Also it looks like it might take 3 floppy disks to hold the game.
Though once it’s done it might be able to squeeze it back to 2 if you
play various optimization games.

Have also implemented loading of saved games. Only for debugging now
as you can’t actually save yet, only load.

16 June 2020 — Release v0.86

Lower level of Channelwood Age implemented. Water valves not implemented,
but you can link back to Myst.

This age is a pain, with lots of water, trees, and wood. At least there’s
no bricks or checkered floors.

With this linking book you can finally get to all the ages and back.
It had been bothering me that you could potentially get stuck on
Channelwood for a while, leading to a Myst Exile type situation for
any unfortunate travelers.

29 May 2020 — Release v0.85

Most of Selenetic Age implemented, but not the puzzles.

The sound puzzle is going to be difficult due to the Apple II’s poor
sound.

The submarine puzzle is just long and not much fun so it might
never get implemented.

This was a hard one as there are a lot of colors, including some odd
color choices (the crazy crystals) and it was hard to map this to
lo-res.

21 May 2020 — Release v0.84

Can now talk to both brothers, and could in theory lose the game
(in theory because it’s not possible to gather all of the pages yet).

21 April 2020 — Release v0.83

Started implementing the tree area (without puzzles yet) and you can
get to Channelwood (but can’t return).

Also got a bit carried away and have a lot of Stoneship implemented.
Running into the 48k limit with Stoneship but should be able to make it fit.
Also, you can link back from Stoneship. I actually end up feeling stressed
if you can get to an age with no return, I don’t want to be like Atrus
(in Exile) and end up accidentally trapping someone.

8 April 2020 — Release v0.82

Sadly things got big enough it’s going to take two disks
(or both sides of one floppy). Added support for the tower rotation,
including a lot of animations. Also added books to the bookshelf.

28 March 2020 — Release v0.81

This adds u-turn support. The dimensional imager works.
Beginning of the stone ship age.

24 March 2020 — Release v0.8

A bugfix release fixing some issues encountered when you
leave/return to the main island from various ages. Encountered more or
less all the bugs when trying to show off the game to family.

23 March 2020



First finished the rocket puzzle by adding the circuit breakers on the tower.
Then got completely carried away and implemented most of the Mechanical Age.
Took a lot of time and is much bigger than I expected. It looks like it
might take two 140k floppies if I get around to implementing the whole game.

15 March 2020



Implemented the puzzles (Generator Room and Spaceship Controls)
to get to the Selinitic Age. The age itself is not implemented.
Its colors are even worse for the Apple II than previous. Also
there’s a big sound puzzle and then the interminable sub maze
which would be complex to implement.

9 March 2020



Well that one video I posted got unexpectedly popular. Including
the crew at Cyan! Hello to the Cyan people if you’re reading this, I
apologize in advance for some sarcasm about the game’s plot that I
sprinkle around in places.

8 March 2020



You can now solve the clock related puzzles, open the gear, and
travel to the Mechanical Engineer age.

5 March 2020



You can now access all of the marker switches.

4 March 2020



Moved all compression to
lzsa,
which freed up nearly 8k of space. It’s not quite as fast
as the previous RLE algorithm I was using though.

I thought I was done, but I might be adding some additional features,
stay tuned.

3 March 2020



Still room in memory, so added a few more locations.

2 March 2020



Added some more graphics and sound, and threw the release out the door!

1 March 2020



Threw this together over a weekend, because why not.
Cursing Atrus more than normal for all his granite and wood which are a pain
to convert down to GR resolution.

Paper Design Documents


Some of the notes made during development.


Other VMW Software Demos / Demakes


Other Apple2 Projects


Back to the VMW Software Productions Page

Read More