Tree @make-yucca-optional (Download .tar.gz)
Dungeons of Ekileugor
Version 1.0
Dungeons of Ekileugor is a little roguelike game for the unexpanded Commodore VIC-20. Despite the limitations of this architecture, it supports a respectable subset of the usual "dungeon furniture":
- random generation of reasonable dungeon levels, with rooms and passages
- the contents of rooms are not visible until entered
- levels populated with monsters, treasure, potions, chests, traps, and stairwells
- monsters persue the hero and engage in combat with hit points
- health potions can be collected and quaffed later
- experience points for victory in combat, experience levels
- queued status messages
- progressively more difficult dungeon levels
Dungeons of Ekileugor is written in Commodore BASIC 2.0. It makes use of colour and the Commodore graphics characters, but not of sound effects or a custom character set.
Playing the Game
Use the following keys:
I
- go (or attack) northJ
- go (or attack) westL
- go (or attack) eastK
- go (or attack) southR
- rest (allow monsters to move)Q
- quaff a health potion
The status bar shows your current hit points, out of your maximum hit points, followed by the amount of gold you have, followed by the number of health potions you have, followed by your experience level.
The dungeon level you are currently on is shown in the lower left; level A is the shallowest level, B is the next deepest, and so on.
You start at experience level zero, because, well, welcome to computer-dom.
If something notable happened during the turn, a message about it will replace the status bar at the beginning of the next turn. You can press any non-action key after that to show the stats in the status bar again.
If more than one notable thing happened during the turn, each message (except the last), after being displayed, will prompt you to press any key to see the next message, by displaying a diamond symbol in the upper-left corner.
We suggest that, if you are playing in an emulator in WARP mode, you do
not press space to dismiss status messages, as the space bar repeats on
the VIC-20. Just press any key not assigned to an action, perhaps Z
.
You will notice that, the first time you play after starting the VIC-20 (or your emulator), the first dungeon level is always the same one. However, things will quickly get more random as the game progresses.
You will also notice that the game ends rather abruptly when you die. If you would like to see your final score (to see if you have beaten your personal record, for example), after the game ends, type:
?au,dl,xp,xl
This will display the amount of gold you accumulated, the dungeon level you died on, the experience points you accumulated, and the experience level you achieved.
Building
To build the PRG
file from the BAS
file, run make.sh ekileugor
.
The following tools are required:
yucca
from the yucca distribution (optional)- A
petcat
-compatible Commodore BASIC 2.0 tokenizer (petcat
itself, from the VICE distribution, orhatoucan
from the hatoucan distribution)
yucca
is only used to remove the REM
statements, and to statically check
that the program is not jumping to an undefined line number. If it is not
found on the executable search path, grep
will instead be used to remove
the REM
s and blank lines.
Run run.sh ekileugor
to start the game in xvic
immediately after building.
Discussion
There are some things you might expect from a roguelike that you won't find in Dungeons of Elikeugor, due to the limitations of the unexpanded VIC; you'll have to wait for Dungeons of Ekileugor II (assuming it ever materializes) which will require at least 3K memory expansion:
- more than one kind of monster
- character generation with three stats (strength, intelligence, and dexterity)
- multiple weapons and armor (although probably not a real inventory)
- detecting traps and secret doors
At one point the plan was to generate MINI and FULL versions of the game from the same program source, but this soon began to seem like a fool's errand; testing that the MINI version still works on an unexpanded VIC after adding features for the FULL version was tricky and cumbersome. Since the MINI version was what was the more impressive, and hardly large enough to justify the sharing of a code base with another version of the program, I decided to concentrate on it, and save the FULL version for some potentially mythical sequel.
So, yeah, basically this game turned out to be "how much of a classic
roguelike can I stuff into an unexpanded VIC-20?" I was originally thinking
of writing it in assembly, with the Ophis assembler, but I suspected that
that would not be much more space-efficient, and run speed was not a primary
concern. Some parts of the code could probably be done in less space with
strategic machine code, but I don't know if it would shave enough off the
size to permit adding any new, significant features. (Currently, after the
program has ended, ?FRE(0)
will report that there are around 14 bytes of
free memory available, which is pretty darn close to nothing.)
But really, this project was undertaken mostly just as an excuse to use the word "Ekileugor" in the title (have you figured it out yet?)
Commit History
@make-yucca-optional
git clone https://git.catseye.tc/Dungeons-of-Ekileugor/
- Somewhat experimental change to how screenshot image is referenced. Chris Pressey 6 years ago
- Make yucca an optional requirement (use grep if it is missing.) Chris Pressey 7 years ago
- Added tag rel_1_0_2016_0304 for changeset e4e0719d7c9f Chris Pressey 8 years ago
- Switch to BSD license. Chris Pressey 8 years ago
- Tokenize using hatoucan or petcat, whichever is available. Chris Pressey 9 years ago
- Merge. Chris Pressey 9 years ago
- This went nowhere, you understand. Chris Pressey 9 years ago
- Added tag rel_1_0_2013_1021 for changeset 6011f6dd93b6 Chris Pressey 10 years ago
- Split run.sh off from make.sh, and handle VICE-2.4 (load at $1001). Cat's Eye Technologies 11 years ago
- m%(i,3) is monster type (screen code). Update meta-information. catseye 11 years ago