Technical stuff | home |
The changing face of Zak: Commodore 64, the IBM PC, the original box art, FM Towns, FM Towns in-box art, and two fan sequels (can you name them?)
The changing face of Zak's bedroom
C64 low res version
PC classic version
256 color version
High color version (from
"Zak McKracken and the Alien Rockstars")
3D rendering Massimiliano Miardo Brugiatelli (true to the classic version!)
Real life! By Danielle Spadoni
Zak on the PC, Mac, Linux, Amiga, Commodore64, Palmtop, etc., etc.
Thanks to the fine people at ScummVM.org. You can now play the original Zak on DOS, Windows95, WindowsXP, Mac OS X, RedHat Linux, Debian Linux, SlackWare Linux, BeOS, PalmOS, Solaris 8, Dreamcast, PocketPC, HandheldPC, and more! As David Fox remarked,
"When we made those games in the 80s, we never imagined they'd still be popular more than 5 years later! I was blown away when I saw Zak playing on a Palm Pilot and cell phone, as well as an emulator on an XBox! Wow!"
More C64 screenshots
Personally, I think the PC classic is the best. The C64 version (EGA graphics) were so blocky that they seriously restrict what the designers can do. The later, high color versions are very pretty, but don't add anything to the gameplay in my opinion. Anyway, here are some more C64 shots and similar shots, so judge for yourself.
Zak on a palmtop
(Or at least I think this is a palmtop - I found this screenshot on a German site, concerning the FRODO C64 emulator)
Zak on the Nintendo DS
This is from a ScummVM port provided by the amazing Neil Millstone. Awesome! Visit his site to find out more. Remember, you don't HAVE to play Zak on the latest hardware. But you CAN! Isn't that cool?
And here's a mock-up of what a Zak DS box would look like (thanks to the artists - sorry I mislaid your name)
Below:
Zak on the GP2X (a Linux based handheld, beloved by gamers).
The image is copyright, so rather than just grab it, here's an
archive screenshot of the photographer's Flickr page.
Palettes
One of the most obvious difference between the diifferent versions is the color depth. The earliest versions had the same fixed 16 color palette for the whole game. The classic PC version had a custom palette for each scene (which gave more freedom than you might think - I had to manually count the colors sometimes just to check there were only 16). This allowed for effects like changing the look of forests just by changing palette numbers. (Off on a tangent, in my first job I worked with palettes, and my company used to create full screen graphics that changed simply by changing the palette. This was incredibly fast, even on very slow computers: you could change the look of every pixel on the screen sixty times a second. It took ten years for graphics cards to catch up.)
Anyway, in some versions the skin color was the same color as the background, so the character's face sometimes looked invisible. ATMAchine (Swami) investigated, and reports that
"The original C64 version of Zak had a somewhat different palette than the PC EGA versions, such that the characters' skin tone wasn't the same as any other color used in the game and thus stood out more from the background. When the original low-res EGA PC version (backgrounds of 160x200 res) was ported from the C64, they had to drop the special skin tone color and make it the same as the pale red color used in backgrounds. This is because the PC palette assigns that color slot a much different value (it's either pale blue or bright purple, I'm not sure which). Also, in the low-res EGA PC version of Zak, Zak wears a green shirt. Early screenshots, though, show his shirt in two different shades of blue."
For collectors: how to spot an original copy
The best way to find an original boxed copy of Zak - from 1988 or 1989 - is to look on eBay. And keep looking - these things are rare and don't come up every day. Some of the boxed versions are cut-price re-releases from the 1990s. This is how to tell the difference, courtesy of Eriq from AdventureGamers. (He calls re-releases 'Slash' versions, because of the company that re-released a lot of old Amiga games.)
LucasArts boxes have a requirements label [that is often not] printed directly on the box. They printed labels to apply over the boxes when the disks were different than the ones on the original box. For instance, if they did a print run with 3.5" printed on the box but the discs in the package are 5.25", they printed labels and applied those on top of the existing requirements box. It would basically save them from having to print another 50,000 boxes just for the 5.25" version. Sierra did the same thing.
The SLASH versions are a big white requirements box printed directly on the package with black text. It's very obvious when you see a slash version. Obvious because the actual boxes themselves are much flimsier and less vibrant overall. If you look at the original LucasArts boxes you can see the box itself is actually artwork glued on top of a nice quality box. SLASH versions have the artwork printed directly on less thick box.
Trust me. You'd know if you had SLASH version.
Many eBayers don't know the difference. Email the seller for details before bidding big bucks.
Still with me? OK, now let's get REALLY technical
This is a brief summary (or SCUMMary?). For more details, search Google using the key words 'ripping' and 'SCUMM.' The best place to start is scumm.mixnmojo.com If I have made any mistakes, please let me know!
About SCUMM
SCUMM (Script Creation Utility for Maniac Mansion) was originally developed in 1987 by Ron Gilbert and Aric Wilmunder, for Maniac Mansion (hence the name). Each SCUMM game added to and refined the engine. When Ron Gilbert left Lucasarts after Monkey Island 2, Wilmunder continued work on SCUMM up till the Curse of Monkey Island. But here we'll look at 1988-89 and Zak McKracken.
A SCUMM game has three parts:
- A set of compiler tools (used by the programmers)
- An interpreter (called Zak.exe - the part that is distributed with the game)
- A number of 'rooms' - saved as LFL files (more on this below).
Note that SCUMM has spawned a number of fan-made imitations. My personal favorite - the one I use every day - is SLUDGE.
LFL files (rooms)
If you look at the folder where you save Zak, you will see Zak.exe, and about 58 LFL files (called 1.lfl, 2.lfl, 3.lfl, etc.), and probably a few 'save game' files (one for each saved game). If you take a later room (like 50.lfl) and give it the name of an earlier room (like 10.lfl), then play the game, Zak goes into the wrong rooms. Unless you play it in ScummVM, in which case you will see some interesting debug messages. Also, don't touch 00.lfl or 001.lfl, or the game will just crash.
If you have the right software you can extract the contents of an LFL file and see what is hapening - sort of. For example, in the game scripts there is line where Lou refuses to let you play the Lotto again after you've won it a bunch of times. I wonder if anyone has actually played the game enough to see that line?
Each LFL file contains the room picture, character pictures, objects, boxes that show where the character can walk, instructions for how to use all this stuff, and more. LucasArts don't expect (or want) anyone to look at these files, so you can't just open them in 'paint', but the people at ScummVM (and other great Scumm hackers) have managed to extract their secrets. For exmple, Jens Ch. Restemeier wrote mm_view.c which decodes the room graphics, and Lance Ewing wrote lflview.c which opens up the LFL files. (Both of these apply mainly to the C64 versions.)
The programmers added stuff to the LFL files whenever they needed to, so the finished files look like a jumble of different stuff. Each item is stored in a 'block' and can be used in other rooms if needed, so you don't need to save a new version of Zak in every single room.
00.lfl is the 'index file' - it tells zak.exe where to find everything else. SCUMM (in Zak) allowed 256 variables (i.e. it stores stuff in 8 bit integers). For comparison, SLUDGE, my favorite game creation utility, uses 16 bit integers, so it can have 65536 variables. I am always amazed at how Zak squeezes so much good stuff out of so little space. Back when I first finished Zak, I remember calculating how many rooms could be squeezed onto the available space (16 color bitmaps take up a certain amount of space and can only be squeezed a certain amount). I remember my sadness when I realised that I must have seen almost all the available locations - it was simply physically impossible to fit any more in. Years later, when I came to work on my own game, the first thing I checked was the flexibility in adding more rooms. That was the principle reason I chose SLUDGE instead of the market leader, Adventure Game Studio. AGS can create very big games, but for a number of reasons SLUDGE has the edge in my opinion. But enough about me.
Instruction codes
The LFL files include various commands. If you have never programmed, this won't mean much to you. But if you have never programmed anything, you probably won't have read this far. A few typical commands are:
ACTOR_MODIFY(Actor, Value, Attribute, Args): 'Attribute' can be: (1) Change walking sound, (2) Change color, (3) Change name, (4) Change costume etc. 'Arg' is an argument to that attribute. For example, a color number, or a string (such as a character's name).
ACTOR_SAY(Actor, String) - makes Zak or another actor say something
SOUND_PLAY(Sound)
ACTOR_GETROOM(Var, Actor) - finds out where an actor is, so that another command can use that information
SETVAR_IND(VarInd, Value) - sets a particular numbered variable
ACTOR_MOVETOROOM (GlbActor, Room)
etc.
As an example, when Zak looks at his mailbox, the code says something like
object door code
say("it's"++)
ifeq(bit4)
say("locked.")
else
say("already opened.")
endifFor more details, read Lloyd Rosen's excellent article 'SCUMM - The Infernal Machine.'
Inside Zak.exe
SCUMM bundles various other tools together - for music, animations, writing new code, placing objects in rooms, and so on. The 'exe' file (zak.exe) is SCUMM interpreter version 2, though version numbers were not used much until the next game, Monkey Island. In the days of Zak, SCUMM was still a new idea. Zak.exe contains the following parts:
- inven - for handling the inventory (the things you pick up and use - like the kazoo, cashcard, etc.)
- actor - for handling the characters (like Zak and Annie)
- room - for handling the rooms (like Zak's bedroom or 13th Avenue)
- script - for handling the instructions (like when Zak picks up something)
- sound - for sounds
- misc - for other stuff
Like all interpreters, zak.exe takes numbers from the LFL file and interprets them as something useful. A particular number will mean finding certain pixels and moving them from one place to another. Typical programming stuff. Some numbers are as follows. (Obviously, the meaning opf the numbers depends on their context):
11 [Actor][Command] - Commands actor:
10 Normal face
1C Frown
F5 Face right
F6 Face front
F7 Face back
F8 Face left
FF Stop walking13 [Actor][Value][Property] - Set property of actor:
02 Body color
04 Costume
05 Text color14 [Actor] - Actor # speaks
1E [Actor][LocX][LocY] - Actor walks to location.
1C [Sound #] - Plays sound.
2E (Delay) - Pauses.
and so on.
In the early versions, with very low resolution pictures, and only 16 possible colors, it is easy to see how a number and an offset can translate into a changed image on screen. As SCUMM evolved into higher resolution and more colors - the programmers have to rely on more sophisticated tools and the finished code looks more complicated.
Hey, that's enough for now. :)