I successfully played to the end, as seen above, so have some confidence that all is well. But I do worry that undiscovered bugs exist. Wear your caving helmet and please email bug reports. Many thanks!
Mike Markowski, mike.ab3ap@gmail.com
Oct 2024
More information on the game and the real cave that inspired it is available at this great page.
I ported adventure from the original FORTRAN IV to python. The initial effort is complete and it appears to be running fine, though the more people who play it the more sure we can be that the port was successful. The program is fairly complex, a massive block of code with few subroutines. The code assumes 36-bit words (cramming five 7-bit ascii chars into one word, yielding the 5-letter commands in the game), characters and integers are treated interchangably, and then the maze of twisty little GOTOs... :-o These are all things that can't be done in python, resulting in many opportunities to introduce bugs in the port. There is a good chance I have taken advantage of those opportunities! Please share bugs you find and, if possible, copy/paste the python stack trace showing the call sequence.
I started with the Crowther and Woods 1977 code:
Crowther, W. and Woods, D. “Adventure”. [Aka “ADVENT” and “Colossal Cave”] FORTRAN source code. 1977. Accessed 18 Oct 2024. http://mirror.ifarchive.org/if-archive/games/source/adv350-pdp10.tar.gz
Once convinced it is fully working, I hope to address the code and have it rely less on so many global variables.
There are other ports of the game, more elaborate and more computer science-y. My conversion was done with an eye toward micropython because my calculator runs that, so it uses the simplest python possible. Here is a screenshot on my HP Prime emulator. It runs identically on the real calculator, but my photography skills are lacking when it comes to backlit screens!
Here are two versions of the python version of the game. Bug fix 5 Nov 2024. Removed debug statement accidentally left in.
Modified hours in the file hours will be used if it exists. By default, adventure can only be played during non-work hours. You can modify hours the same as back in the 70s by starting game and answering as follows:
A file hours is created, and must remain in the same directory where you run adventure to be found and used.
I bypassed the password challenge code that comes after the above sequence. It seems unneccesary in this day of single user machines, but can always be put back in place. After modifying hours, the game exits. It will restart with the new hours.
I added a new command RESUMe so that you can resume after a SUSPEnd. Originally, after a suspend it was up to the player to save a copy of the long obsolete magnetic core memory image. Even though the program now saves game state to a file, I left the old CORE IMAGE message in for fun.
The code can certainly be ported to run on other devices that run micropython. I hope to do so for the TI Nspire at some point.
Music is rarely mentioned in retro-gaming circles, yet was a huge part of the times for me. Whether at home or in the university lab, I always had the stereo on and tuned to one of the local rock stations. As a matter of fact, I continue to do so in my lab at work!
Little spoiler alert! Part of the charm of adventure is discovering the vocabulary that the game responds to. Part of the frustration is fitting what you want to do into the 1 and 2 word commands required! The full vocabulary is listed here. If you don't mind giving up the fun of discovering the words yourself, look at the list and you will likely find words you never tried.
Big spoiler alert! To debug my port of adventure I need detailed maps. I wrote subroutines that parse the adventure setup file to do various things.
If you would like to experience virtual caving, do not look at these maps. They take the fun out of making your own maps and experiencing late 1970s gaming. If you have already spent weeks or months of your life living in Colossal Cave, use the maps to see what you might have missed! With that warning, here are the maps.