Rename `.markdown` file extension to `.md`.
Chris Pressey
3 years ago
0 | Dungeons of Ekileugor | |
1 | ===================== | |
2 | ||
3 | Version 1.0 | _Entry_ [@ catseye.tc](https://catseye.tc/node/Dungeons%20of%20Ekileugor) | |
4 | | _See also:_ [Bubble Escape](https://github.com/catseye/Bubble-Escape#readme) | |
5 | ∘ [hatoucan](https://github.com/catseye/hatoucan#readme) | |
6 | ∘ [yucca](https://github.com/catseye/yucca#readme) | |
7 | ||
8 | - - - - | |
9 | ||
10 |  | |
11 | ||
12 | _Dungeons of Ekileugor_ is a little roguelike game for the **unexpanded** | |
13 | Commodore VIC-20. Despite the limitations of this architecture, it supports | |
14 | a respectable subset of the usual "dungeon furniture": | |
15 | ||
16 | * random generation of reasonable dungeon levels, with rooms and passages | |
17 | * the contents of rooms are not visible until entered | |
18 | * levels populated with monsters, treasure, potions, chests, traps, and | |
19 | stairwells | |
20 | * monsters persue the hero and engage in combat with hit points | |
21 | * health potions can be collected and quaffed later | |
22 | * experience points for victory in combat, experience levels | |
23 | * queued status messages | |
24 | * progressively more difficult dungeon levels | |
25 | ||
26 | Dungeons of Ekileugor is written in Commodore BASIC 2.0. It makes use of | |
27 | colour and the Commodore graphics characters, but not of sound effects or a | |
28 | custom character set. | |
29 | ||
30 | Playing the Game | |
31 | ---------------- | |
32 | ||
33 | Use the following keys: | |
34 | ||
35 | * `I` - go (or attack) north | |
36 | * `J` - go (or attack) west | |
37 | * `L` - go (or attack) east | |
38 | * `K` - go (or attack) south | |
39 | * `R` - rest (allow monsters to move) | |
40 | * `Q` - quaff a health potion | |
41 | ||
42 | The status bar shows your current hit points, out of your maximum hit points, | |
43 | followed by the amount of gold you have, followed by the number of health | |
44 | potions you have, followed by your experience level. | |
45 | ||
46 | The dungeon level you are currently on is shown in the lower left; level A is | |
47 | the shallowest level, B is the next deepest, and so on. | |
48 | ||
49 | You start at experience level zero, because, well, welcome to computer-dom. | |
50 | ||
51 | If something notable happened during the turn, a message about it will | |
52 | replace the status bar at the beginning of the next turn. You can press | |
53 | any non-action key after that to show the stats in the status bar again. | |
54 | ||
55 | If more than one notable thing happened during the turn, each message | |
56 | (except the last), after being displayed, will prompt you to press any key | |
57 | to see the next message, by displaying a diamond symbol in the upper-left | |
58 | corner. | |
59 | ||
60 | We suggest that, if you are playing in an emulator in WARP mode, you do | |
61 | not press space to dismiss status messages, as the space bar repeats on | |
62 | the VIC-20. Just press any key not assigned to an action, perhaps `Z`. | |
63 | ||
64 | You will notice that, the first time you play after starting the VIC-20 | |
65 | (or your emulator), the first dungeon level is always the same one. | |
66 | However, things will quickly get more random as the game progresses. | |
67 | ||
68 | You will also notice that the game ends rather abruptly when you die. If | |
69 | you would like to see your final score (to see if you have beaten your | |
70 | personal record, for example), after the game ends, type: | |
71 | ||
72 | ?au,dl,xp,xl | |
73 | ||
74 | This will display the amount of gold you accumulated, the dungeon level | |
75 | you died on, the experience points you accumulated, and the experience level | |
76 | you achieved. | |
77 | ||
78 | Building | |
79 | -------- | |
80 | ||
81 | To build the `PRG` file from the `BAS` file, run `make.sh ekileugor`. | |
82 | The following tools are required: | |
83 | ||
84 | * `yucca` from the [yucca distribution][] (optional) | |
85 | * A `petcat`-compatible Commodore BASIC 2.0 tokenizer | |
86 | (`petcat` itself, from the [VICE][] distribution, or | |
87 | `hatoucan` from the [hatoucan distribution][]) | |
88 | ||
89 | `yucca` is only used to remove the `REM` statements, and to statically check | |
90 | that the program is not jumping to an undefined line number. If it is not | |
91 | found on the executable search path, `grep` will instead be used to remove | |
92 | the `REM`s and blank lines. | |
93 | ||
94 | Run `run.sh ekileugor` to start the game in `xvic` immediately after building. | |
95 | ||
96 | [yucca distribution]: http://catseye.tc/node/yucca | |
97 | [hatoucan distribution]: http://catseye.tc/node/hatoucan | |
98 | [VICE]: http://vice-emu.sourceforge.net/ | |
99 | ||
100 | Discussion | |
101 | ---------- | |
102 | ||
103 | There are some things you might expect from a roguelike that you won't find | |
104 | in Dungeons of Elikeugor, due to the limitations of the unexpanded VIC; | |
105 | you'll have to wait for _Dungeons of Ekileugor II_ (assuming it ever | |
106 | materializes) which will require at least 3K memory expansion: | |
107 | ||
108 | * more than one kind of monster | |
109 | * character generation with three stats (strength, intelligence, and | |
110 | dexterity) | |
111 | * multiple weapons and armor (although probably not a real inventory) | |
112 | * detecting traps and secret doors | |
113 | ||
114 | At one point the plan was to generate MINI and FULL versions of the game | |
115 | from the same program source, but this soon began to seem like a fool's | |
116 | errand; testing that the MINI version still works on an unexpanded VIC after | |
117 | adding features for the FULL version was tricky and cumbersome. Since the | |
118 | MINI version was what was the more impressive, and hardly large enough to | |
119 | justify the sharing of a code base with another version of the program, I | |
120 | decided to concentrate on it, and save the FULL version for some potentially | |
121 | mythical sequel. | |
122 | ||
123 | So, yeah, basically this game turned out to be "how much of a classic | |
124 | roguelike can I stuff into an unexpanded VIC-20?" I was originally thinking | |
125 | of writing it in assembly, with the Ophis assembler, but I suspected that | |
126 | that would not be much more space-efficient, and run speed was not a primary | |
127 | concern. Some parts of the code could probably be done in less space with | |
128 | strategic machine code, but I don't know if it would shave enough off the | |
129 | size to permit adding any new, significant features. (Currently, after the | |
130 | program has ended, `?FRE(0)` will report that there are around 14 bytes of | |
131 | free memory available, which is pretty darn close to nothing.) | |
132 | ||
133 | But really, this project was undertaken mostly just as an excuse to use the | |
134 | word "Ekileugor" in the title (have you figured it out yet?) |
0 | Dungeons of Ekileugor | |
1 | ===================== | |
2 | ||
3 | Version 1.0 | _Entry_ [@ catseye.tc](https://catseye.tc/node/Dungeons%20of%20Ekileugor) | |
4 | | _See also:_ [Bubble Escape](https://github.com/catseye/Bubble-Escape#readme) | |
5 | ∘ [hatoucan](https://github.com/catseye/hatoucan#readme) | |
6 | ∘ [yucca](https://github.com/catseye/yucca#readme) | |
7 | ||
8 | - - - - | |
9 | ||
10 |  | |
11 | ||
12 | _Dungeons of Ekileugor_ is a little roguelike game for the **unexpanded** | |
13 | Commodore VIC-20. Despite the limitations of this architecture, it supports | |
14 | a respectable subset of the usual "dungeon furniture": | |
15 | ||
16 | * random generation of reasonable dungeon levels, with rooms and passages | |
17 | * the contents of rooms are not visible until entered | |
18 | * levels populated with monsters, treasure, potions, chests, traps, and | |
19 | stairwells | |
20 | * monsters persue the hero and engage in combat with hit points | |
21 | * health potions can be collected and quaffed later | |
22 | * experience points for victory in combat, experience levels | |
23 | * queued status messages | |
24 | * progressively more difficult dungeon levels | |
25 | ||
26 | Dungeons of Ekileugor is written in Commodore BASIC 2.0. It makes use of | |
27 | colour and the Commodore graphics characters, but not of sound effects or a | |
28 | custom character set. | |
29 | ||
30 | Playing the Game | |
31 | ---------------- | |
32 | ||
33 | Use the following keys: | |
34 | ||
35 | * `I` - go (or attack) north | |
36 | * `J` - go (or attack) west | |
37 | * `L` - go (or attack) east | |
38 | * `K` - go (or attack) south | |
39 | * `R` - rest (allow monsters to move) | |
40 | * `Q` - quaff a health potion | |
41 | ||
42 | The status bar shows your current hit points, out of your maximum hit points, | |
43 | followed by the amount of gold you have, followed by the number of health | |
44 | potions you have, followed by your experience level. | |
45 | ||
46 | The dungeon level you are currently on is shown in the lower left; level A is | |
47 | the shallowest level, B is the next deepest, and so on. | |
48 | ||
49 | You start at experience level zero, because, well, welcome to computer-dom. | |
50 | ||
51 | If something notable happened during the turn, a message about it will | |
52 | replace the status bar at the beginning of the next turn. You can press | |
53 | any non-action key after that to show the stats in the status bar again. | |
54 | ||
55 | If more than one notable thing happened during the turn, each message | |
56 | (except the last), after being displayed, will prompt you to press any key | |
57 | to see the next message, by displaying a diamond symbol in the upper-left | |
58 | corner. | |
59 | ||
60 | We suggest that, if you are playing in an emulator in WARP mode, you do | |
61 | not press space to dismiss status messages, as the space bar repeats on | |
62 | the VIC-20. Just press any key not assigned to an action, perhaps `Z`. | |
63 | ||
64 | You will notice that, the first time you play after starting the VIC-20 | |
65 | (or your emulator), the first dungeon level is always the same one. | |
66 | However, things will quickly get more random as the game progresses. | |
67 | ||
68 | You will also notice that the game ends rather abruptly when you die. If | |
69 | you would like to see your final score (to see if you have beaten your | |
70 | personal record, for example), after the game ends, type: | |
71 | ||
72 | ?au,dl,xp,xl | |
73 | ||
74 | This will display the amount of gold you accumulated, the dungeon level | |
75 | you died on, the experience points you accumulated, and the experience level | |
76 | you achieved. | |
77 | ||
78 | Building | |
79 | -------- | |
80 | ||
81 | To build the `PRG` file from the `BAS` file, run `make.sh ekileugor`. | |
82 | The following tools are required: | |
83 | ||
84 | * `yucca` from the [yucca distribution][] (optional) | |
85 | * A `petcat`-compatible Commodore BASIC 2.0 tokenizer | |
86 | (`petcat` itself, from the [VICE][] distribution, or | |
87 | `hatoucan` from the [hatoucan distribution][]) | |
88 | ||
89 | `yucca` is only used to remove the `REM` statements, and to statically check | |
90 | that the program is not jumping to an undefined line number. If it is not | |
91 | found on the executable search path, `grep` will instead be used to remove | |
92 | the `REM`s and blank lines. | |
93 | ||
94 | Run `run.sh ekileugor` to start the game in `xvic` immediately after building. | |
95 | ||
96 | [yucca distribution]: http://catseye.tc/node/yucca | |
97 | [hatoucan distribution]: http://catseye.tc/node/hatoucan | |
98 | [VICE]: http://vice-emu.sourceforge.net/ | |
99 | ||
100 | Discussion | |
101 | ---------- | |
102 | ||
103 | There are some things you might expect from a roguelike that you won't find | |
104 | in Dungeons of Elikeugor, due to the limitations of the unexpanded VIC; | |
105 | you'll have to wait for _Dungeons of Ekileugor II_ (assuming it ever | |
106 | materializes) which will require at least 3K memory expansion: | |
107 | ||
108 | * more than one kind of monster | |
109 | * character generation with three stats (strength, intelligence, and | |
110 | dexterity) | |
111 | * multiple weapons and armor (although probably not a real inventory) | |
112 | * detecting traps and secret doors | |
113 | ||
114 | At one point the plan was to generate MINI and FULL versions of the game | |
115 | from the same program source, but this soon began to seem like a fool's | |
116 | errand; testing that the MINI version still works on an unexpanded VIC after | |
117 | adding features for the FULL version was tricky and cumbersome. Since the | |
118 | MINI version was what was the more impressive, and hardly large enough to | |
119 | justify the sharing of a code base with another version of the program, I | |
120 | decided to concentrate on it, and save the FULL version for some potentially | |
121 | mythical sequel. | |
122 | ||
123 | So, yeah, basically this game turned out to be "how much of a classic | |
124 | roguelike can I stuff into an unexpanded VIC-20?" I was originally thinking | |
125 | of writing it in assembly, with the Ophis assembler, but I suspected that | |
126 | that would not be much more space-efficient, and run speed was not a primary | |
127 | concern. Some parts of the code could probably be done in less space with | |
128 | strategic machine code, but I don't know if it would shave enough off the | |
129 | size to permit adding any new, significant features. (Currently, after the | |
130 | program has ended, `?FRE(0)` will report that there are around 14 bytes of | |
131 | free memory available, which is pretty darn close to nothing.) | |
132 | ||
133 | But really, this project was undertaken mostly just as an excuse to use the | |
134 | word "Ekileugor" in the title (have you figured it out yet?) |