Laying crawl-sized ducts between rooms and floors
Dungeons now have vent ducts, flat between rooms or climbing between floors, closed by a grate, a small door or a secret door, and the generator lays them itself.
Dungeons now have ducts. A duct is a crawl, 1.5 meters wide and 1.2 meters high, so the party goes through crouched. A flat duct runs between two rooms, and a climbing duct goes straight up between two floors like a cramped ladder. Each end is a vent grate, a small door or a secret door that looks like plain wall until the party gets close. Only small monsters fit, and the dungeon generator lays the ducts by itself.

The film’s 8 frames, in order, with captions.
Why add ducts?
I wanted more than one way to get between levels. Ducts were part of my list for the verticality work, with doors and secret doors on them, and I picked them as step four of five. Each step has to be playable, filmed and taught to the generator before the next one starts, so the generator part is in this post too.
How does a climbing duct work?
I built it as a variant of the ladder, so pairing, climbing and saving all use code that already worked. A duct thing stands on the dead end of a crawl and says whether it leads up or down. It pairs only with another duct straight above or below it.
The shaft is the crawl’s own cross section, 1.5 meters a side. A tube of plate runs from the crawl’s 1.2 meter ceiling up to the next floor, with a dark rib every 0.9 meters and rust rungs up the back wall. The top has a vent grate that the party stands on and that switches off while it climbs. Two solid collars that you can’t see close the rest of the square at the lower ceiling and at the upper floor. Without them a crouched party could stand up into the gap or fall through the upper crawl.
The climb runs at 0.8 meters per second of game time, slower than a ladder’s 1.2. The party is forced to crouch for it and comes out crouched. In the film a 6 meter climb took 7.5 seconds.
How are the ends and the small monsters handled?
Every open crawl mouth already got a grate, so a grate end writes nothing. A door end is a door on the end square, 1.2 meters wide across the crawl. A secret end is a secret_door there. It now has a front field saying which side of the wall it shows on, so the room’s side looks like the room’s wall.
Small monsters only didn’t need a new rule. The crawl is 1.5 by 1.2 meters, and the code that checks whether a body fits already stops anything bigger. A meat sack goes through a duct and a rind stalker stops at the mouth. No monster climbs a climbing duct yet, because the chase code can’t cross floors.
How does the generator lay them?
A flat duct is the shortest crawl through rock between two rooms that the entrance reaches with every lock shut, so it never goes around a lock. It’s at most 9 squares long, touches no other open square, and runs straight for its first and last two squares because a door stands across it. It also has to be a real shortcut, so walking between its ends has to be at least 6 squares longer than the duct.
A climbing duct digs a crawl of at least two squares out of a room on each of two floors, straight above one another. It stays away from the lift, the ladders and the spirals, and it keeps the quick exit’s column in rock. The rates sit in the generator’s one table:
- A flat duct on 0.6 of floors.
- A climbing duct between 0.5 of pairs of floors.
- Ends: grate 0.45, door 0.3, secret 0.25.
My first try laid the flat duct together with the floor’s other choices. That changed which of the generator’s tries got kept, and it broke two existing tests, one that pins a named dungeon and one that holds the metric bands. So I threw it out. Now the flat duct is laid after the layout is chosen and stocked. It’s kept only if every hard check still passes and no metric leaves its band. If a secret end is what breaks a check, the ends are drawn again without a secret. It’s also the last draw, so everything drawn before it comes out as it did, and turning rising off gives the old output byte for byte.
I checked it with 52 passing checks in the duct test and two sweeps of generated dungeons, 40 of one floor and 20 of three floors. None failed. The one-floor sweep had 11 flat ducts. The three-floor sweep had 17 climbing ducts and 8 flat ones. A duct is kept only when no metric leaves its band, so there are fewer flat ones than in an earlier sweep.
What’s still weak?
The shaft is plain plate, not the floor’s theme. The climb speed and the rates are my own picks and I haven’t decided if I like them. No monster follows the party up a climbing duct. The designer page needs its catalog updated for the new duct thing, which has the letter v because every capital letter is taken. A generated draft’s manifest also has no row for a duct yet.