Basement, to describe it in brief, is a cross between cadastre [1] and a dungeon crawler. You make rooms in a directory, and basement gives you a way to walk around those rooms. (You can also view other people's rooms, if you know the rooms exist.) The program is in my bin directory, and it is possible to run it by typing ~ulhar/bin/basement in the shell prompt. [1]: https://tilde.town/~troido/cadastre Rooms are found in a user's .basement directory (~/.basement; I'll refer to it as .b for brevity). By default, basement looks for the room called simply "room" (.b/room). The filename shouldn't have an extension on it, and the room layout defined in the file must contain exactly 1 @ symbol. The file can contain a few different sections, delimited by at least one empty line. (Spaces, or any other characters, will disqualify the line's emptiness, and will be treated as part of the section.) The room is laid out in the first section, which is the only mandatory section. Next, the second section defines an alternate layout for linking purposes. Prompts are defined in the third section; they are linked to the characters used in the second section. (The prompts are displayed when typing e to look, for when you're standing on a tile, or by walking into a wall.) The next two sections define the tiles that you can walk on, as well as the tiles that block your line of sight. (These default to . and #, respectively.) This is a lot to take in at once, so I'll provide concrete examples from my own rooms. ~~[ ~ulhar/.basement/space ]~[ lines 1-7 ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /-----#-----# |.....|.....# |.....#...==# |o@j........# |.....#+##### |./.\.#.^.c[# \-|v|-####### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is the first section in the file. It has some walls and some things to interact with. By default, the player will spawn at the @ at the left side of the room. ~~[ ~ulhar/.basement/space ]~[ lines 9-26 ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .00000100000. 0.....7.....1 0.....1...221 03.4........1 0.....1811111 0.....1.9.551 .0.6.01111111 0 > A reinforced window. You are in space. 1 > A sturdy wall. 2 > A bed. Comfortable enough. 3 > The ship's console. Navigation controls are on standby. 4 > Pilot's chair. 5 > Toilet. 6 ~ulhar/room 7 > A reinforced window. 8 > A door. 9 > A small sink. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The second section looks mostly like the first section, however, most of the tiles are numbers instead of what you would normally see in the room if you opened it in the program. (The symbols do not have to be numbers, but I find them easy to work with. Any character will do.) Following, in the third section, are definitions of what happens when you check a tile with these symbols. On a given line, the character is first, and there's either a quote (>) or a target room. Quotes are displayed to the user at the top of the screen; if a target room is specified, the user will find themself in that room. It is also possible to specify coordinates in the form x,y: ~~[ ~ulhar/.basement/room ]~~[ line 14 ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0 ~ulhar/space 3,5 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As with most computer programs, x is the horizontal position and y would be the vertical position. 0,0 is the top left. Finding 3, 5 in the space room, we would find ourselves above the tile that puts us in room in the first place. Anyway... ~~[ ~ulhar/.basement/space ]~~[ lines 28-30 ]~~~~~~~~~~~~~~~~~~~~~~~~~~~ .+^ #+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The fourth section, as you may recall, defines walkable tiles. Users may not walk into a tile unless it is in this section. The first tile listed here will be placed in the map where the @ is, but otherwise order isn't important. The fifth section defines the tiles that will block your view of the map. Walkability and opacity are not mutually exclusive, so it is possible to create things like doors that you can't see through but that you can walk through. (If you are in an opaque tile, you'd still be able to see whatever is outside of that tile, as long as it isn't hidden by a tile besides the one you're standing in.)