# buildings/*.ron

> Building templates: rooms, doors, windows, furniture.

<!-- Generated by `zombye-server --docs`. Do not edit: change the game and generate again. -->

**Building templates: rooms, doors, windows, furniture.** Read by the game's rules: a change here changes how the game plays, and a world remembers the content it was made with.

File: `assets/data/buildings/` (10 files)

## About this file

Small one-storey bungalow. One character per tile; "." is outside. The bottom row is the front of the house and faces the street. Openings are (x, y, side): side N/E/S/W of tile (x, y).


## Fields

The file is one `BuildingTemplate`.

| Field | Type | What it is |
|---|---|---|
| `id` | `String` |  |
| `name` | `String` |  |
| `kind` | `BuildingKind` |  |
| `roof` | `RoofStyle` | Roof style in template-local axes. |
| `rooms` | `BTreeMap<char, RoomDef>` | Layout character → room. |
| `levels` | `Vec<LevelDef>` | Level 0 first. All levels share the same footprint size. |
| `porch` | `Option<PorchDef>` | A porch for the client to draw. Optional; render only. |

### `BuildingKind`

| Value | What it means |
|---|---|
| `House` |  |
| `Office` |  |
| `Shop` |  |
| `Civic` | A landmark: town hall, courthouse, church, school, library, police station. The town generator puts these (and shops or offices too big for the main street's lots) on the civic district's landmark lots, about 42–52 m wide and 48–54 m deep. |

### `RoofStyle`

| Value | What it means |
|---|---|
| `GableX` | Ridge runs along the x axis. |
| `GableY` | Ridge runs along the y axis. |
| `Flat` |  |

### `RoomDef`

| Field | Type | What it is |
|---|---|---|
| `name` | `String` |  |
| `room_type` | `String` | Drives loot tables and what furniture makes sense (bedroom, kitchen, bathroom, ...). |
| `floor` | `Floor` |  |

#### `Floor`

| Value | What it means |
|---|---|
| `Grass` |  |
| `Dirt` |  |
| `Asphalt` |  |
| `RoadLine` |  |
| `Sidewalk` |  |
| `Path` |  |
| `Wood` |  |
| `Carpet` |  |
| `TileFloor` |  |
| `Concrete` |  |

### `LevelDef`

One level of an icon in `status.ron`.

| Field | Type | What it is |
|---|---|---|
| `at` | `f32` | The value at which this level starts. |
| `label` | `String` |  |
| `tip` | `String` |  |
| `severity` | `u8` | 1 to 4; 0 (left out): its place in the list. |

### `PorchDef`

A porch: square posts, a pale railing with a gap at the way in, steps. **Render only**: posts and railing never block walking (nothing on the map changes), so a template that wants a railing you can't walk through needs walls or fences of its own.

| Value | What it means |
|---|---|
| `Room(char)` | A room of the layout that is the porch (`'P'`), open to the outside through arches and under the house's roof, like the cottage's: posts along its open sides and a railing across its arches but the way in. |
| `Front{ from: i32, to: i32, depth: i32 }` | A porch built onto the front wall, outside the footprint, on tiles `from..=to` of the bottom row, standing `depth` tiles out (1 or 2, so it stays inside a house lot's front yard): a raised deck with steps, posts, a railing and a roof of its own. |

## The files

<details>
<summary><code>buildings/bungalow.ron</code></summary>

```ron
// Small one-storey bungalow. One character per tile; "." is outside.
// The bottom row is the front of the house and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "house_bungalow",
    name: "Small bungalow",
    kind: House,
    roof: GableX,
    // A porch across the front, round the front door (drawn only: see `PorchDef`).
    porch: Some(Front(from: 0, to: 4, depth: 2)),
    rooms: {
        'B': (name: "Bedroom", room_type: "bedroom", floor: Carpet),
        'b': (name: "Bathroom", room_type: "bathroom", floor: TileFloor),
        'H': (name: "Hall", room_type: "hall", floor: Wood),
        'K': (name: "Kitchen", room_type: "kitchen", floor: TileFloor),
        'L': (name: "Living room", room_type: "living", floor: Wood),
    },
    levels: [
        (
            layout: [
                "BBBBbbbKKK",
                "BBBBbbbKKK",
                "BBBBbbbKKK",
                "BBBBHHHKKK",
                "LLLLHHHKKK",
                "LLLLLLLKKK",
                "LLLLLLLKKK",
                "LLLLLLLKKK",
            ],
            doors: [
                (2, 7, S), // front door
                (8, 0, N), // back door
                (3, 3, E), // bedroom
                (5, 2, S), // bathroom
            ],
            arches: [(5, 4, S), (6, 6, E)],
            windows: [
                (0, 1, W), (2, 0, N),
                (5, 0, N),
                (9, 2, E), (9, 5, E), (8, 7, S),
                (0, 6, W), (4, 7, S),
            ],
            furniture: [
                (kind: "bed", at: (1, 0), size: (2, 2)),
                (kind: "wardrobe", at: (3, 0)),
                (kind: "bathtub", at: (4, 0), size: (1, 2), facing: E),
                (kind: "toilet", at: (6, 0)),
                (kind: "sink", at: (6, 2), facing: W),
                (kind: "fridge", at: (7, 0)),
                (kind: "counter", at: (9, 0), size: (1, 2), facing: W),
                (kind: "stove", at: (9, 3), facing: W),
                (kind: "table", at: (8, 4), size: (1, 2)),
                (kind: "sofa", at: (0, 5), size: (1, 2), facing: E),
                (kind: "coffee_table", at: (1, 5)),
                (kind: "tv", at: (3, 4), facing: W),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/cottage_porch.ron</code></summary>

```ron
// Small one-storey cottage with an open front porch under the main roof. One character per tile;
// "." is outside. The bottom row is the front of the house and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y). The porch is open on its front and
// side (arches); the front door leads from it into the living room.
BuildingTemplate(
    id: "house_cottage_porch",
    name: "Cottage with porch",
    kind: House,
    roof: GableX,
    // The porch room: posts along it and a railing across its arches (drawn only: see `PorchDef`).
    porch: Some(Room('P')),
    rooms: {
        'K': (name: "Kitchen", room_type: "kitchen", floor: TileFloor),
        'L': (name: "Living room", room_type: "living", floor: Wood),
        'H': (name: "Hall", room_type: "hall", floor: Wood),
        'B': (name: "Bedroom", room_type: "bedroom", floor: Carpet),
        'b': (name: "Bathroom", room_type: "bathroom", floor: TileFloor),
        'C': (name: "Small bedroom", room_type: "bedroom", floor: Carpet),
        'P': (name: "Porch", room_type: "porch", floor: Wood),
    },
    levels: [
        (
            layout: [
                "KKKKKBBBB",
                "KKKKKBBBB",
                "KKKKKBBBB",
                "KKKKKHbbb",
                "LLLLLHbbb",
                "LLLLLHCCC",
                "LLLLLHCCC",
                "LLLLLHCCC",
                "PPPPPPCCC",
                "PPPPPPCCC",
            ],
            doors: [
                (2, 7, S), // front door, off the porch
                (1, 0, N), // back door
                (5, 3, N), // bedroom
                (5, 4, E), // bathroom
                (5, 6, E), // small bedroom
            ],
            arches: [
                (2, 3, S), (4, 6, E),
                // The open porch.
                (0, 9, S), (1, 9, S), (2, 9, S), (3, 9, S), (4, 9, S), (5, 9, S),
                (0, 8, W), (0, 9, W),
            ],
            windows: [
                (3, 0, N), (0, 2, W),
                (0, 4, W), (0, 7, S), (4, 7, S), (5, 7, S),
                (5, 0, N), (8, 1, E),
                (8, 3, E),
                (8, 8, E), (7, 9, S),
            ],
            furniture: [
                (kind: "fridge", at: (0, 0)),
                (kind: "sink", at: (0, 1), facing: E),
                (kind: "counter", at: (2, 0), size: (2, 1)),
                (kind: "stove", at: (4, 0)),
                (kind: "table", at: (3, 2), size: (2, 1)),
                (kind: "sofa", at: (0, 5), size: (1, 2), facing: E),
                (kind: "coffee_table", at: (2, 5)),
                (kind: "tv", at: (4, 4), facing: W),
                (kind: "sofa", at: (4, 8), size: (2, 1)),
                (kind: "bed", at: (6, 0), size: (2, 2)),
                (kind: "wardrobe", at: (8, 0)),
                (kind: "sink", at: (6, 3)),
                (kind: "bathtub", at: (7, 3), size: (2, 1)),
                (kind: "toilet", at: (8, 4), facing: W),
                (kind: "bed", at: (7, 5), size: (2, 2), facing: W),
                (kind: "desk", at: (6, 9), facing: N),
                (kind: "wardrobe", at: (8, 9), facing: N),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/family_two_storey.ron</code></summary>

```ron
// Two-storey family house. One character per tile; "." is outside.
// The bottom row is the front of the house and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "house_family_two_storey",
    name: "Two-storey family house",
    kind: House,
    roof: GableX,
    // A porch along the front under the upstairs windows (drawn only: see `PorchDef`).
    porch: Some(Front(from: 1, to: 7, depth: 2)),
    rooms: {
        'K': (name: "Kitchen", room_type: "kitchen", floor: TileFloor),
        'D': (name: "Dining room", room_type: "dining", floor: Wood),
        'H': (name: "Hall", room_type: "hall", floor: Wood),
        'L': (name: "Living room", room_type: "living", floor: Carpet),
        'b': (name: "Bathroom", room_type: "bathroom", floor: TileFloor),
        'u': (name: "Laundry", room_type: "laundry", floor: Concrete),
        'B': (name: "Bedroom", room_type: "bedroom", floor: Carpet),
        'C': (name: "Kids' bedroom", room_type: "bedroom", floor: Carpet),
        'M': (name: "Main bedroom", room_type: "bedroom", floor: Carpet),
    },
    levels: [
        (
            layout: [
                "KKKKKDDDDD",
                "KKKKKDDDDD",
                "KKKKKDDDDD",
                "KKKKKDDDDD",
                "HHHHHHHHHH",
                "LLLLLLHHbb",
                "LLLLLLHHbb",
                "LLLLLLHHuu",
                "LLLLLLHHuu",
            ],
            doors: [
                (6, 8, S), // front door
                (2, 0, N), // back door
                (8, 5, N), // bathroom
                (8, 8, W), // laundry
            ],
            arches: [(2, 3, S), (7, 3, S), (4, 1, E), (3, 5, N), (5, 6, E)],
            windows: [
                (1, 0, N), (0, 2, W),
                (7, 0, N), (9, 2, E),
                (0, 6, W), (2, 8, S), (4, 8, S),
                (9, 5, E), (9, 7, E),
                (0, 4, W), (9, 4, E),
            ],
            furniture: [
                (kind: "stairs", at: (7, 5), size: (1, 3), facing: N),
                (kind: "fridge", at: (0, 0)),
                (kind: "stove", at: (1, 0)),
                (kind: "counter", at: (3, 0), size: (2, 1)),
                (kind: "table", at: (6, 1), size: (2, 2)),
                (kind: "sofa", at: (0, 6), size: (1, 2), facing: E),
                (kind: "coffee_table", at: (2, 6)),
                (kind: "tv", at: (5, 8), facing: W),
                (kind: "sink", at: (9, 5), facing: W),
                (kind: "toilet", at: (9, 6), facing: W),
                (kind: "dryer", at: (9, 7), facing: W),
                (kind: "washer", at: (9, 8), facing: W),
                (kind: "shelf", at: (8, 7), facing: S),
            ],
        ),
        (
            layout: [
                "BBBBBCCCCC",
                "BBBBBCCCCC",
                "BBBBBCCCCC",
                "BBBBBCCCCC",
                "HHHHHHHHHH",
                "MMMMMMHHbb",
                "MMMMMMHHbb",
                "MMMMMMHHbb",
                "MMMMMMHHbb",
            ],
            doors: [(2, 3, S), (7, 3, S), (3, 5, N), (8, 5, N)],
            windows: [
                (1, 0, N), (0, 2, W),
                (7, 0, N), (9, 2, E),
                (0, 6, W), (2, 8, S), (4, 8, S),
                (9, 7, E), (0, 4, W),
            ],
            furniture: [
                (kind: "bed", at: (1, 0), size: (2, 2)),
                (kind: "wardrobe", at: (4, 0)),
                (kind: "bed", at: (6, 0), size: (2, 2)),
                (kind: "desk", at: (9, 1), facing: W),
                (kind: "bed", at: (0, 7), size: (2, 2), facing: E),
                (kind: "wardrobe", at: (5, 8), facing: N),
                (kind: "sink", at: (9, 5), facing: W),
                (kind: "toilet", at: (9, 6), facing: W),
                (kind: "bathtub", at: (8, 8), size: (2, 1), facing: N),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/general_store.ron</code></summary>

```ron
// General store and hardware: groceries on one side (drinks coolers along the wall), tools and
// supplies on the other, open to each other, each with its own front door and till; behind them
// a stockroom with a loading door, a restroom and the office. One character per tile; "." is
// outside. The bottom row is the front of the building and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "shop_general_hardware",
    name: "General store and hardware",
    kind: Shop,
    // Flat, behind a parapet, like every shop and office on the main street.
    roof: Flat,
    rooms: {
        'W': (name: "Stockroom", room_type: "hardware", floor: Concrete),
        'b': (name: "Restroom", room_type: "bathroom", floor: TileFloor),
        'O': (name: "Office", room_type: "office", floor: Wood),
        'H': (name: "Back hall", room_type: "hall", floor: Concrete),
        'G': (name: "General store", room_type: "shop", floor: TileFloor),
        'R': (name: "Hardware", room_type: "hardware", floor: Concrete),
    },
    levels: [
        (
            layout: [
                "WWWWWWWWWbbOOO",
                "WWWWWWWWWbbOOO",
                "WWWWWWWWWbbOOO",
                "WWWWWWWWWHHOOO",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
                "GGGGGGGRRRRRRR",
            ],
            doors: [
                (3, 12, S), // general store front door
                (10, 12, S), // hardware front door
                (4, 0, N), // loading door, from the stockroom
                (2, 3, S), (3, 3, S), // stockroom double doors to the store
                (8, 3, E), // stockroom to the back hall
                (9, 3, N), // restroom
                (10, 3, E), // office
                (10, 3, S), // staff door to the hardware side
            ],
            arches: [(6, 5, E), (6, 6, E), (6, 10, E), (6, 11, E)],
            windows: [
                (1, 0, N), (5, 0, N),
                (12, 0, N), (13, 1, E),
                (0, 12, S), (1, 12, S), (4, 12, S), (5, 12, S),
                (8, 12, S), (9, 12, S), (11, 12, S), (12, 12, S),
                (0, 11, W), (13, 11, E),
            ],
            furniture: [
                (kind: "shelf", at: (0, 0), size: (1, 2), facing: E),
                (kind: "shelf", at: (0, 2), size: (1, 2), facing: E),
                (kind: "shelf", at: (2, 0), size: (2, 1)),
                (kind: "workbench", at: (6, 0), size: (2, 1)),
                (kind: "shelf", at: (8, 0)),
                (kind: "sink", at: (9, 0)),
                (kind: "toilet", at: (10, 0)),
                (kind: "shelf", at: (11, 0)),
                (kind: "desk", at: (12, 1)),
                // General store: drinks coolers, shelves, aisles and the till.
                (kind: "fridge", at: (0, 4), facing: E),
                (kind: "fridge", at: (0, 5), facing: E),
                (kind: "fridge", at: (0, 6), facing: E),
                (kind: "shelf", at: (0, 8), size: (1, 2), facing: E),
                (kind: "shelf", at: (2, 6), size: (1, 2), facing: W),
                (kind: "shelf", at: (3, 6), size: (1, 2), facing: E),
                (kind: "shelf", at: (2, 9), size: (1, 2), facing: W),
                (kind: "shelf", at: (3, 9), size: (1, 2), facing: E),
                (kind: "desk", at: (5, 11), facing: W),
                // Hardware: wall racks, an aisle and the till.
                (kind: "shelf", at: (11, 4), size: (2, 1)),
                (kind: "shelf", at: (13, 5), size: (1, 2), facing: W),
                (kind: "shelf", at: (13, 8), size: (1, 2), facing: W),
                (kind: "shelf", at: (9, 6), size: (1, 2), facing: W),
                (kind: "shelf", at: (10, 6), size: (1, 2), facing: E),
                (kind: "workbench", at: (9, 9), size: (2, 1)),
                (kind: "desk", at: (8, 11), facing: E),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/l_shaped_patio.ron</code></summary>

```ron
// One-storey L-shaped house: a bedroom wing down one side, the kitchen and living room down the
// other, round a covered back patio (open on two sides, under the main roof), with a laundry off
// the kitchen. One character per tile; "." is outside. The bottom row is the front of the house
// and faces the street. Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "house_l_shaped_patio",
    name: "L-shaped house with patio",
    kind: House,
    roof: GableX,
    // The patio: posts along it and a railing across its arches (drawn only: see `PorchDef`).
    porch: Some(Room('P')),
    rooms: {
        'M': (name: "Main bedroom", room_type: "bedroom", floor: Carpet),
        'b': (name: "Bathroom", room_type: "bathroom", floor: TileFloor),
        'u': (name: "Laundry", room_type: "laundry", floor: Concrete),
        'P': (name: "Patio", room_type: "porch", floor: Concrete),
        'H': (name: "Hall", room_type: "hall", floor: Wood),
        'K': (name: "Kitchen", room_type: "kitchen", floor: TileFloor),
        'B': (name: "Bedroom", room_type: "bedroom", floor: Carpet),
        'C': (name: "Kids' bedroom", room_type: "bedroom", floor: Carpet),
        'L': (name: "Living room", room_type: "living", floor: Carpet),
    },
    levels: [
        (
            layout: [
                "MMMMMbbuuPPP",
                "MMMMMbbuuPPP",
                "MMMMMbbuuPPP",
                "MMMMMbbuuPPP",
                "HHHHHHHKKKKK",
                "BBBBBHHKKKKK",
                "BBBBBHHKKKKK",
                "BBBBBHHKKKKK",
                "BBBBBHHLLLLL",
                "CCCCCHHLLLLL",
                "CCCCCHHLLLLL",
                "CCCCCHHLLLLL",
            ],
            doors: [
                (5, 11, S), // front door
                (2, 4, N), // main bedroom
                (5, 4, N), // bathroom
                (7, 4, N), // kitchen to laundry
                (10, 4, N), // kitchen to patio
                (5, 6, W), // bedroom
                (5, 10, W), // kids' bedroom
            ],
            arches: [
                (6, 5, E), (6, 9, E), (9, 7, S),
                // The patio, open to the back garden.
                (9, 0, N), (10, 0, N), (11, 0, N),
                (11, 0, E), (11, 1, E), (11, 2, E), (11, 3, E),
            ],
            windows: [
                (0, 1, W), (3, 0, N),
                (6, 0, N),
                (7, 0, N),
                (0, 4, W),
                (0, 7, W),
                (1, 11, S), (3, 11, S), (0, 10, W),
                (11, 7, E),
                (8, 11, S), (10, 11, S), (11, 8, E),
            ],
            furniture: [
                (kind: "bed", at: (1, 0), size: (2, 2)),
                (kind: "wardrobe", at: (4, 0)),
                (kind: "desk", at: (0, 3), facing: E),
                (kind: "bathtub", at: (5, 0), size: (1, 2), facing: E),
                (kind: "toilet", at: (6, 0)),
                (kind: "sink", at: (6, 3), facing: W),
                (kind: "washer", at: (7, 0)),
                (kind: "dryer", at: (8, 0)),
                (kind: "shelf", at: (8, 2), facing: W),
                (kind: "table", at: (9, 1), size: (2, 1)),
                (kind: "counter", at: (8, 4), size: (2, 1)),
                (kind: "fridge", at: (11, 4), facing: W),
                (kind: "sink", at: (11, 5), facing: W),
                (kind: "stove", at: (11, 6), facing: W),
                (kind: "table", at: (8, 6), size: (2, 1)),
                (kind: "bed", at: (0, 5), size: (2, 2), facing: E),
                (kind: "wardrobe", at: (3, 5)),
                (kind: "desk", at: (0, 8), facing: E),
                (kind: "bed", at: (0, 9), size: (2, 2), facing: E),
                (kind: "wardrobe", at: (4, 9), facing: W),
                (kind: "desk", at: (2, 11), facing: N),
                (kind: "wardrobe", at: (6, 11), facing: N),
                (kind: "sofa", at: (11, 9), size: (1, 2), facing: W),
                (kind: "coffee_table", at: (9, 10)),
                (kind: "tv", at: (7, 10), facing: E),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/office_block.ron</code></summary>

```ron
// Two-storey office block: a lobby with the stairs at the front, a corridor across the middle,
// offices round it, restrooms on both floors, and upstairs a meeting room, a break room, a copy
// room and a store room. One character per tile; "." is outside. The bottom row is the front of
// the building and faces the street. Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "office_block",
    name: "Two-storey office block",
    kind: Office,
    roof: Flat,
    rooms: {
        'A': (name: "Office", room_type: "office", floor: Carpet),
        'B': (name: "Office", room_type: "office", floor: Carpet),
        'C': (name: "Office", room_type: "office", floor: Carpet),
        'D': (name: "Office", room_type: "office", floor: Carpet),
        'E': (name: "Open office", room_type: "office", floor: Carpet),
        'O': (name: "Open office", room_type: "office", floor: Carpet),
        'N': (name: "Meeting room", room_type: "office", floor: Carpet),
        'b': (name: "Restrooms", room_type: "bathroom", floor: TileFloor),
        'H': (name: "Corridor", room_type: "hall", floor: TileFloor),
        'L': (name: "Lobby", room_type: "hall", floor: TileFloor),
        'K': (name: "Break room", room_type: "kitchen", floor: TileFloor),
        'S': (name: "Store room", room_type: "office", floor: Concrete),
        'c': (name: "Copy room", room_type: "office", floor: Carpet),
    },
    levels: [
        (
            layout: [
                "AAAAAbbbBBBBBB",
                "AAAAAbbbBBBBBB",
                "AAAAAbbbBBBBBB",
                "AAAAAbbbBBBBBB",
                "HHHHHHHHHHHHHH",
                "CCCCCLLLLDDDDD",
                "CCCCCLLLLDDDDD",
                "CCCCCLLLLDDDDD",
                "CCCCCLLLLDDDDD",
                "CCCCCLLLLDDDDD",
                "CCCCCLLLLDDDDD",
                "CCCCCLLLLDDDDD",
            ],
            doors: [
                (6, 11, S), (7, 11, S), // front doors
                (13, 4, E), // side door at the end of the corridor
                (2, 4, N), (6, 4, N), (10, 4, N),
                (2, 5, N), (11, 5, N),
            ],
            arches: [(6, 5, N), (7, 5, N)],
            windows: [
                (2, 0, N), (0, 2, W),
                (6, 0, N),
                (9, 0, N), (11, 0, N), (13, 2, E),
                (0, 4, W),
                (0, 7, W), (0, 9, W), (1, 11, S), (3, 11, S),
                (5, 11, S), (8, 11, S),
                (13, 7, E), (13, 9, E), (10, 11, S), (12, 11, S),
            ],
            furniture: [
                (kind: "shelf", at: (0, 0)),
                (kind: "shelf", at: (4, 0)),
                (kind: "desk", at: (1, 1)),
                (kind: "desk", at: (3, 1)),
                (kind: "toilet", at: (5, 0)),
                (kind: "toilet", at: (7, 0)),
                (kind: "sink", at: (5, 3), facing: E),
                (kind: "sink", at: (7, 3), facing: W),
                (kind: "desk", at: (9, 1)),
                (kind: "desk", at: (11, 1)),
                (kind: "shelf", at: (13, 0), facing: W),
                (kind: "shelf", at: (13, 1), facing: W),
                (kind: "shelf", at: (0, 5), facing: E),
                (kind: "desk", at: (1, 7)),
                (kind: "desk", at: (3, 7)),
                (kind: "desk", at: (1, 9)),
                (kind: "desk", at: (3, 9)),
                (kind: "stairs", at: (8, 6), size: (1, 3), facing: N),
                (kind: "desk", at: (5, 7), facing: E),
                (kind: "sofa", at: (8, 10), size: (1, 2), facing: W),
                (kind: "coffee_table", at: (7, 10)),
                (kind: "shelf", at: (13, 5), facing: W),
                (kind: "desk", at: (10, 7)),
                (kind: "desk", at: (12, 7)),
                (kind: "desk", at: (10, 9)),
                (kind: "desk", at: (12, 9)),
            ],
        ),
        (
            layout: [
                "NNNNNbbbOOOOOO",
                "NNNNNbbbOOOOOO",
                "NNNNNbbbOOOOOO",
                "NNNNNbbbOOOOOO",
                "HHHHHHHHHHHHHH",
                "KKKKKHHHHEEEEE",
                "KKKKKHHHHEEEEE",
                "KKKKKHHHHEEEEE",
                "KKKKKHHHHEEEEE",
                "SSSSSccccEEEEE",
                "SSSSSccccEEEEE",
                "SSSSSccccEEEEE",
            ],
            doors: [(2, 4, N), (6, 4, N), (10, 4, N), (5, 6, W), (6, 9, N), (5, 10, W), (11, 5, N)],
            windows: [
                (1, 0, N), (3, 0, N), (0, 2, W),
                (6, 0, N),
                (9, 0, N), (12, 0, N), (13, 2, E),
                (0, 4, W), (13, 4, E),
                (0, 6, W), (0, 8, W),
                (1, 11, S), (3, 11, S),
                (6, 11, S), (7, 11, S),
                (13, 7, E), (13, 9, E), (10, 11, S), (12, 11, S),
            ],
            furniture: [
                (kind: "table", at: (1, 1), size: (3, 2)),
                (kind: "toilet", at: (5, 0)),
                (kind: "toilet", at: (7, 0)),
                (kind: "sink", at: (5, 3), facing: E),
                (kind: "sink", at: (7, 3), facing: W),
                (kind: "desk", at: (9, 1)),
                (kind: "desk", at: (11, 1)),
                (kind: "desk", at: (13, 1), facing: W),
                (kind: "shelf", at: (8, 3), facing: E),
                (kind: "counter", at: (0, 5), size: (2, 1)),
                (kind: "fridge", at: (2, 5)),
                (kind: "sink", at: (3, 5)),
                (kind: "table", at: (1, 7), size: (2, 1)),
                (kind: "shelf", at: (1, 9)),
                (kind: "shelf", at: (2, 9)),
                (kind: "shelf", at: (3, 9)),
                (kind: "shelf", at: (0, 10), facing: E),
                (kind: "shelf", at: (1, 11), facing: N),
                (kind: "shelf", at: (2, 11), facing: N),
                (kind: "shelf", at: (3, 11), facing: N),
                (kind: "shelf", at: (8, 9), facing: W),
                (kind: "desk", at: (7, 11), facing: N),
                (kind: "shelf", at: (8, 11), facing: W),
                (kind: "shelf", at: (13, 5), facing: W),
                (kind: "desk", at: (10, 7)),
                (kind: "desk", at: (12, 7)),
                (kind: "desk", at: (10, 9)),
                (kind: "desk", at: (12, 9)),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/office_small.ron</code></summary>

```ron
// Small one-storey office: a reception at the front, an open office of desks behind it, the
// manager's office, a store room, restrooms and a break room. One character per tile; "." is
// outside. The bottom row is the front of the building and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "office_small",
    name: "Small office",
    kind: Office,
    roof: Flat,
    rooms: {
        'M': (name: "Manager's office", room_type: "office", floor: Carpet),
        'O': (name: "Office", room_type: "office", floor: Carpet),
        'c': (name: "Store room", room_type: "office", floor: Concrete),
        'b': (name: "Restroom", room_type: "bathroom", floor: TileFloor),
        'R': (name: "Reception", room_type: "office", floor: Carpet),
        'K': (name: "Break room", room_type: "kitchen", floor: TileFloor),
    },
    levels: [
        (
            layout: [
                "MMMMOOOOOOOOOO",
                "MMMMOOOOOOOOOO",
                "MMMMOOOOOOOOOO",
                "MMMMOOOOOOOOOO",
                "MMMMOOOOOOOOOO",
                "ccccOOOOOOOOOO",
                "ccccRRRRRRKKKK",
                "bbbbRRRRRRKKKK",
                "bbbbRRRRRRKKKK",
                "bbbbRRRRRRKKKK",
            ],
            doors: [
                (6, 9, S), (7, 9, S), // front doors
                (12, 0, N), // fire exit
                (13, 8, E), // side door from the break room
                (3, 2, E), // manager's office
                (3, 5, E), // store room
                (4, 8, W), // restroom
                (11, 5, S), // office to break room
                (9, 7, E), // reception to break room
            ],
            arches: [(7, 5, S), (8, 5, S)],
            windows: [
                (1, 0, N), (0, 1, W), (0, 3, W),
                (5, 0, N), (7, 0, N), (9, 0, N), (10, 0, N), (13, 3, E),
                (0, 8, W),
                (4, 9, S), (5, 9, S), (8, 9, S), (9, 9, S),
                (11, 9, S), (12, 9, S),
            ],
            furniture: [
                (kind: "shelf", at: (0, 0)),
                (kind: "shelf", at: (2, 0)),
                (kind: "desk", at: (1, 2), facing: E),
                (kind: "sofa", at: (0, 4), size: (2, 1), facing: N),
                (kind: "desk", at: (5, 1)),
                (kind: "desk", at: (7, 1)),
                (kind: "desk", at: (9, 1)),
                (kind: "desk", at: (11, 1)),
                (kind: "desk", at: (5, 3)),
                (kind: "desk", at: (7, 3)),
                (kind: "desk", at: (9, 3)),
                (kind: "desk", at: (11, 3)),
                (kind: "shelf", at: (13, 1), facing: W),
                (kind: "shelf", at: (13, 2), facing: W),
                (kind: "shelf", at: (0, 5), facing: E),
                (kind: "shelf", at: (0, 6), facing: E),
                (kind: "shelf", at: (1, 6), facing: N),
                (kind: "shelf", at: (2, 6), facing: N),
                (kind: "toilet", at: (0, 7), facing: E),
                (kind: "toilet", at: (0, 9), facing: E),
                (kind: "sink", at: (1, 7)),
                (kind: "sink", at: (2, 7)),
                (kind: "desk", at: (5, 7)),
                (kind: "desk", at: (6, 7)),
                (kind: "sofa", at: (9, 8), size: (1, 2), facing: W),
                (kind: "coffee_table", at: (8, 8)),
                (kind: "fridge", at: (10, 6)),
                (kind: "counter", at: (12, 6), size: (2, 1)),
                (kind: "sink", at: (13, 7), facing: W),
                (kind: "table", at: (11, 8), size: (2, 1)),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/pharmacy.ron</code></summary>

```ron
// Corner pharmacy: a sales floor of shelves with the dispensary counter at the back, doors on
// the front and the side (for a corner lot), and behind it a stockroom, a restroom and the
// pharmacist's office. One character per tile; "." is outside. The bottom row is the front of
// the building and faces the street. Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "shop_pharmacy",
    name: "Corner pharmacy",
    kind: Shop,
    roof: Flat,
    rooms: {
        'T': (name: "Stockroom", room_type: "pharmacy", floor: Concrete),
        'b': (name: "Restroom", room_type: "bathroom", floor: TileFloor),
        'O': (name: "Pharmacist's office", room_type: "office", floor: Carpet),
        'H': (name: "Back hall", room_type: "hall", floor: Concrete),
        'P': (name: "Pharmacy", room_type: "pharmacy", floor: TileFloor),
    },
    levels: [
        (
            layout: [
                "TTTTTTbbOOOO",
                "TTTTTTbbOOOO",
                "TTTTTTbbOOOO",
                "TTTTTTHHOOOO",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
                "PPPPPPPPPPPP",
            ],
            doors: [
                (9, 11, S), // front door
                (11, 10, E), // side door
                (2, 0, N), // back door, from the stockroom
                (6, 3, W), // stockroom
                (6, 3, N), // restroom
                (7, 3, E), // office
                (7, 3, S), // staff door to the shop floor
            ],
            windows: [
                (9, 0, N), (11, 1, E),
                (6, 0, N),
                (1, 11, S), (2, 11, S), (3, 11, S), (5, 11, S), (6, 11, S), (7, 11, S),
                (11, 8, E), (0, 8, W),
            ],
            furniture: [
                (kind: "shelf", at: (0, 0), size: (1, 2), facing: E),
                (kind: "shelf", at: (0, 2), size: (1, 2), facing: E),
                (kind: "shelf", at: (4, 0), size: (2, 1)),
                (kind: "sink", at: (6, 0)),
                (kind: "toilet", at: (7, 0)),
                (kind: "shelf", at: (8, 0)),
                (kind: "desk", at: (9, 1)),
                // Prescriptions behind the counter, and the counter itself.
                (kind: "shelf", at: (0, 4), size: (2, 1)),
                (kind: "shelf", at: (2, 4), size: (2, 1)),
                (kind: "shelf", at: (4, 4), size: (2, 1)),
                (kind: "desk", at: (1, 6), size: (3, 1)),
                // Aisles.
                (kind: "shelf", at: (7, 6), size: (1, 2), facing: W),
                (kind: "shelf", at: (8, 6), size: (1, 2), facing: E),
                (kind: "shelf", at: (3, 8), size: (2, 1), facing: N),
                (kind: "shelf", at: (3, 9), size: (2, 1)),
                (kind: "shelf", at: (11, 4), size: (1, 2), facing: W),
                (kind: "shelf", at: (11, 6), size: (1, 2), facing: W),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/ranch_garage.ron</code></summary>

```ron
// One-storey ranch house with an attached single garage, its door rolled up. One character per
// tile; "." is outside. The bottom row is the front of the house and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "house_ranch_garage",
    name: "Ranch house with garage",
    kind: House,
    roof: GableX,
    // A small porch at the front door, beside the garage (drawn only: see `PorchDef`).
    porch: Some(Front(from: 5, to: 8, depth: 2)),
    rooms: {
        'u': (name: "Laundry", room_type: "laundry", floor: Concrete),
        'G': (name: "Garage", room_type: "garage", floor: Concrete),
        'K': (name: "Kitchen", room_type: "kitchen", floor: TileFloor),
        'L': (name: "Living room", room_type: "living", floor: Carpet),
        'H': (name: "Hall", room_type: "hall", floor: Wood),
        'M': (name: "Main bedroom", room_type: "bedroom", floor: Carpet),
        'b': (name: "Bathroom", room_type: "bathroom", floor: TileFloor),
        'B': (name: "Bedroom", room_type: "bedroom", floor: Carpet),
    },
    levels: [
        (
            layout: [
                "uuuuKKKKKMMMM",
                "uuuuKKKKKMMMM",
                "uuuuKKKKKMMMM",
                "GGGGKKKKKMMMM",
                "GGGGLLLLLHbbb",
                "GGGGLLLLLHbbb",
                "GGGGLLLLLHBBB",
                "GGGGLLLLLHBBB",
                "GGGGLLLLLHBBB",
                "GGGGLLLLLHBBB",
            ],
            doors: [
                (5, 9, S), // front door
                (1, 0, N), // back door, from the laundry
                (2, 3, N), // garage to laundry
                (3, 1, E), // laundry to kitchen
                (9, 4, N), // main bedroom
                (9, 5, E), // bathroom
                (9, 7, E), // bedroom
            ],
            // The garage door, rolled up; the kitchen opens onto the living room.
            arches: [(0, 9, S), (1, 9, S), (2, 9, S), (6, 3, S), (7, 3, S), (8, 6, E)],
            windows: [
                (0, 1, W),
                (6, 0, N), (7, 0, N),
                (9, 0, N), (12, 2, E),
                (12, 4, E),
                (12, 8, E), (11, 9, S),
                (7, 9, S), (8, 9, S),
                (0, 5, W),
            ],
            furniture: [
                (kind: "washer", at: (2, 0)),
                (kind: "dryer", at: (3, 0)),
                (kind: "shelf", at: (0, 2), facing: E),
                (kind: "workbench", at: (0, 3), size: (2, 1)),
                (kind: "shelf", at: (3, 3)),
                (kind: "shelf", at: (0, 6), facing: E),
                (kind: "shelf", at: (0, 7), facing: E),
                (kind: "fridge", at: (4, 0)),
                (kind: "stove", at: (5, 0)),
                (kind: "counter", at: (6, 0), size: (2, 1)),
                (kind: "sink", at: (8, 0)),
                (kind: "counter", at: (8, 1), size: (1, 2), facing: W),
                (kind: "table", at: (5, 2), size: (2, 1)),
                (kind: "shelf", at: (4, 4), facing: E),
                (kind: "sofa", at: (4, 6), size: (1, 2), facing: E),
                (kind: "coffee_table", at: (6, 6)),
                (kind: "tv", at: (8, 7), facing: W),
                (kind: "wardrobe", at: (9, 9), facing: N),
                (kind: "bed", at: (10, 0), size: (2, 2)),
                (kind: "wardrobe", at: (12, 0)),
                (kind: "sink", at: (10, 4)),
                (kind: "bathtub", at: (11, 4), size: (2, 1)),
                (kind: "toilet", at: (12, 5), facing: W),
                (kind: "bed", at: (11, 6), size: (2, 2), facing: W),
                (kind: "wardrobe", at: (10, 9), facing: N),
                (kind: "desk", at: (12, 9), facing: N),
            ],
        ),
    ],
)
```

</details>

<details>
<summary><code>buildings/townhouse.ron</code></summary>

```ron
// Narrow two-storey townhouse, gable end to the street: a side hall with the stairs, living room,
// dining room and kitchen one behind the other. One character per tile; "." is outside.
// The bottom row is the front of the house and faces the street.
// Openings are (x, y, side): side N/E/S/W of tile (x, y).
BuildingTemplate(
    id: "house_townhouse",
    name: "Narrow townhouse",
    kind: House,
    roof: GableY,
    // A narrow porch at the front door (drawn only: see `PorchDef`).
    porch: Some(Front(from: 3, to: 6, depth: 2)),
    rooms: {
        'K': (name: "Kitchen", room_type: "kitchen", floor: TileFloor),
        'D': (name: "Dining room", room_type: "dining", floor: Wood),
        'L': (name: "Living room", room_type: "living", floor: Wood),
        'H': (name: "Hall", room_type: "hall", floor: Wood),
        'b': (name: "Bathroom", room_type: "bathroom", floor: TileFloor),
        'C': (name: "Back bedroom", room_type: "bedroom", floor: Carpet),
        'B': (name: "Small bedroom", room_type: "bedroom", floor: Carpet),
        'M': (name: "Front bedroom", room_type: "bedroom", floor: Carpet),
    },
    levels: [
        (
            layout: [
                "KKKKKKK",
                "KKKKKKK",
                "KKKKKKK",
                "KKKKKKK",
                "DDDDDbb",
                "DDDDDbb",
                "DDDDDHH",
                "DDDDDHH",
                "LLLLLHH",
                "LLLLLHH",
                "LLLLLHH",
                "LLLLLHH",
                "LLLLLHH",
                "LLLLLHH",
            ],
            doors: [
                (5, 13, S), // front door
                (5, 0, N), // back door
                (5, 6, N), // downstairs toilet
            ],
            arches: [(2, 3, S), (1, 7, S), (2, 7, S), (5, 7, W), (4, 12, E)],
            windows: [
                (1, 0, N), (0, 2, W), (6, 2, E),
                (0, 5, W), (0, 6, W),
                (6, 4, E),
                (0, 9, W), (0, 12, W), (1, 13, S), (3, 13, S),
                (6, 13, S),
            ],
            furniture: [
                (kind: "fridge", at: (0, 0)),
                (kind: "counter", at: (1, 0), size: (2, 1)),
                (kind: "stove", at: (3, 0)),
                (kind: "sink", at: (4, 0)),
                (kind: "counter", at: (6, 0), size: (1, 2), facing: W),
                (kind: "table", at: (2, 2), size: (2, 1)),
                (kind: "shelf", at: (4, 4), facing: W),
                (kind: "table", at: (1, 5), size: (2, 1)),
                (kind: "sink", at: (5, 4)),
                (kind: "toilet", at: (6, 4)),
                (kind: "stairs", at: (6, 8), size: (1, 3), facing: N),
                (kind: "wardrobe", at: (6, 12), facing: W),
                (kind: "sofa", at: (0, 10), size: (1, 2), facing: E),
                (kind: "coffee_table", at: (2, 10)),
                (kind: "tv", at: (4, 10), facing: W),
            ],
        ),
        (
            layout: [
                "CCCCCCC",
                "CCCCCCC",
                "CCCCCCC",
                "CCCCCCC",
                "bbbbHHH",
                "bbbbHHH",
                "BBBBBHH",
                "BBBBBHH",
                "BBBBBHH",
                "MMMMMHH",
                "MMMMMHH",
                "MMMMMHH",
                "MMMMMHH",
                "MMMMMHH",
            ],
            doors: [(5, 4, N), (4, 5, W), (5, 7, W), (5, 11, W)],
            windows: [
                (1, 0, N), (5, 0, N), (0, 2, W), (6, 2, E),
                (0, 5, W),
                (0, 7, W),
                (0, 12, W), (1, 13, S), (3, 13, S),
                (6, 12, E), (6, 13, S),
            ],
            furniture: [
                (kind: "wardrobe", at: (0, 0)),
                (kind: "bed", at: (2, 0), size: (2, 2)),
                (kind: "desk", at: (6, 1), facing: W),
                (kind: "bathtub", at: (0, 4), size: (2, 1)),
                (kind: "toilet", at: (2, 4)),
                (kind: "sink", at: (3, 4)),
                (kind: "bed", at: (0, 6), size: (2, 2), facing: E),
                (kind: "wardrobe", at: (4, 6)),
                (kind: "desk", at: (3, 8), facing: N),
                (kind: "wardrobe", at: (4, 9)),
                (kind: "bed", at: (0, 10), size: (2, 2), facing: E),
                (kind: "desk", at: (0, 13), facing: N),
            ],
        ),
    ],
)
```

</details>