# Chapter 8: Bastions

A Bastion is a location that belongs to a player character: a home, a stronghold, and a place of power that the character develops over the course of a campaign. A Bastion offers a character temporary refuge from the dangerous world of adventuring, and it provides opportunities for a character to craft magic items, conduct research, harvest poisons, build ships, and carry out a range of other activities.
As DM, you decide whether Bastions are available in a campaign. Bastions are best suited to campaigns that allow characters to return to their Bastions during intervals when they're not actively adventuring. Not every character needs to have a Bastion. It's fine for some players in your campaign to opt in to Bastion ownership and others to opt out.
There's no need to choose between going on adventures and commanding a Bastion; a character can do both at once. A Bastion has special facilities that generate benefits, and these facilities can also undertake projects while the character is otherwise occupied.
Most importantly, a Bastion is a creative playground for a player and a shared storytelling space in the campaign. Be as permissive as you can with the stories players tell in their Bastions, but players should know their control might be limited by the campaign's larger story, which you strive to make fun for everyone.
## Gaining a Bastion
If you allow Bastions in your campaign, characters acquire their Bastions when they reach level 5. You and the players can decide together how these Bastions come into being. A character might inherit or receive a parcel of land on which to build their Bastion (see "*Marks of Prestige*" in *chapter 3*), or they might take a preexisting structure and refurbish it. It's fair to assume that work has been going on behind the scenes of the campaign during a character's early adventuring career, so the Bastion is ready when the character reaches level 5.
The shape, style, and function of a character's Bastion are up to the player to determine. For example, a Wizard might build a tower, a Cleric might establish a shrine, a Fighter might build a fortified keep or similar stronghold, and a Rogue might establish a guildhall or lodge. Characters of other classes might choose one of these forms or combine them—a Paladin's Bastion might be similar to a Cleric's shrine but as fortified as a Fighter's stronghold. And multiple characters can combine their Bastions to form a single large structure (see "*Bastion Map*").
Every Bastion has facilities that serve basic needs as well as special ones, such as libraries, menageries, and workshops (see "*Basic Facilities*" and "*Special Facilities*").
## Bastion Turns
As time passes in the campaign, players take Bastion turns to reflect the activity occurring in their Bastions, whether or not the characters are present. On a Bastion turn, a character can issue orders to the special facilities in their Bastion or issue the *Maintain* order to the entire Bastion (see "*Orders*").
### Frequency of Bastion Turns
By default, a Bastion turn occurs every 7 days of in-game time. Here are common examples of players taking one or more Bastion turns:
- The characters are on a long journey away from their Bastions. After the characters have been away for 7 days, you might say, "Time for a Bastion turn. Since you're not there, we'll assume you issue the *Maintain* order for your Bastions." Then roll for events as described in the "*Bastion Events*" section in this chapter.
- The characters spend 7 days or more in their Bastions between adventures. You might say, "You have six weeks to spend in your Bastions. Go ahead and resolve six Bastion turns."
- The characters return to their Bastions in the midst of an adventure. You might say, "You have just enough time to take a Bastion turn before you leave again in the morning."
- The characters are adventuring near their Bastions and resting in their Bastions at night. You might say, "It's been a week since your last Bastion turn, so you can take one now."
You can slow the frequency of Bastion turns to better serve the needs of your players and your campaign. For example, if the characters have months between adventures, you can call for a Bastion turn every month instead of every 7 days, so the characters aren't issuing so many orders or reaping too many benefits at once.

## Bastion Map
Encourage players to create floor plans of their characters' Bastions, configuring its facilities as they see fit and using the same techniques you use to create dungeon maps (see "*Dungeons*" in *chapter 3* and "*Adventure Maps*" in *chapter 4*).
In addition to *basic* and *special facilities* (described later in this chapter), a Bastion can have the following features:
- **Closets.** A basic or special facility can have one or more closets, washrooms, or similar enclosures. The closets must be inside the facility and can't increase the facility's area in squares. These features are free.
- **Corridors, Ramps, and Staircases.** A facility can contain one or more corridors, ramps, or staircases leading to other facilities in the Bastion. These features are free.
- **Defensive Walls.** A character can add defensive walls around their Bastion. A defensive wall is 20 feet high and may include a walkway along its top, with a means to access it (such as a ladder or lift). Each 5-foot square of defensive wall takes 10 days to build and costs 250 GP. If a character's Bastion is completely enclosed by defensive walls and it comes under attack (see "*Bastion Events*" at the end of this chapter), reduce by 2 the number of dice rolled to determine how many Bastion Defenders are lost in the attack.
- **Doors and Windows.** Each facility comes with one or more doors and shuttered windows, placed wherever the player sees fit. See "*Doors*" in *chapter 3* for kinds of doors to choose from, including locked doors, secret doors, and portcullises. These features are free.
### Combining Bastions
Two or more players can combine their characters' Bastions into a single structure. Doing so doesn't change the number of special facilities each Bastion can have, how those special facilities work, or who issues orders to each Bastion. Each Bastion retains its own hirelings, which can't be sent to or shared with another Bastion. Bastion Defenders are handled differently: if some event deprives one character's Bastion of defenders, another character can apply all or some of those losses to their Bastion instead, provided the two Bastions are combined.
### Facility Space
The amount of space in a basic or special facility determines its maximum area in 5-foot squares, as shown in the Facility Space table. A player can configure the squares of a facility as they please on their Bastion's map. The squares can be stacked so that a facility's area is distributed over multiple levels or stories.
##### Facility Space
| Space | Maximum Area |
|---------|--------------|
| Cramped | 4 squares |
| Roomy | 16 squares |
| Vast | 36 squares |
## Basic Facilities
A character's Bastion starts with two free basic facilities, which the character's player chooses from the Basic Facilities list below. One of the chosen facilities is Cramped, and the other is Roomy (see the *Facility Space* table). A Bastion can have more than one of each basic facility.
#### Basic Facilities
- Bedroom
- Dining Room
- Parlor
- Courtyard
- Kitchen
- Storage
A basic facility comes with nonmagical furnishings and decor appropriate for that facility.
Basic facilities don't have any game effects, but they can inspire roleplaying opportunities and enhance a Bastion's verisimilitude. A Bastion with a kitchen is functionally the same as one without, but the former gives you and your players a fun setting to start game sessions, have in-character discussions, or introduce new NPCs.
A character can add new basic facilities or enlarge existing ones by spending money and time, as discussed in the sections that follow. Any number of basic facilities can be added or enlarged at the same time. A character doesn't need to be in their Bastion while basic facilities are being added or enlarged.
### Adding Basic Facilities
A character can add a basic facility to their Bastion by spending money and time. The cost of adding a basic facility and the time required depend on the facility's space, as shown on the table below.
| Facility Space | Cost | Time Required |
|----------------|---------:|--------------:|
| Cramped | 500 GP | 20 days |
| Roomy | 1,000 GP | 45 days |
| Vast | 3,000 GP | 125 days |
### Enlarging Basic Facilities
There is no in-game benefit to enlarging a basic facility, but a character might enlarge a facility for cosmetic reasons or to increase the Bastion's size.
A character can spend money and time to increase the space of a basic facility in their Bastion by one category, as shown on the table below.
| Space Increase | Cost | Time Required |
|------------------|---------:|--------------:|
| Cramped to Roomy | 500 GP | 25 days |
| Roomy to Vast | 2,000 GP | 80 days |
## Special Facilities
Special facilities are Bastion locations where certain activities yield game benefits. A character's Bastion initially has two special facilities of the character's choice for which they qualify. Each special facility can be chosen only once unless its description says otherwise.
Unlike basic facilities, special facilities can't be bought; a character gains them through level advancement. At level 9, a character gains two additional special facilities of their choice for which they qualify; they gain one additional facility at level 13 and another at level 17. The Special Facility Acquisition table shows the total number of special facilities in a character's Bastion. Each new special facility immediately becomes part of the character's Bastion when the character reaches the level.
Each time a character gains a level, that character can replace one of their Bastion's special facilities with another for which the character qualifies.
##### Special Facility Acquisition
| Level | Special Facilities |
|:-----:|:------------------:|
| 5 | 2 |
| 9 | 4 |
| 13 | 5 |
| 17 | 6 |
### Requirements
Each special facility has a level. A character must be that level or higher to gain that facility. A special facility might also have a prerequisite the character must meet to gain that facility. For example, only a character who can use an Arcane Focus or a tool as a Spellcasting Focus can have an *Arcane Study*.
### Space
A special facility occupies a certain amount of space (see "*Facility Space*"). A player can configure the squares of a special facility as desired on the Bastion's map. A special facility can be enlarged to grant additional benefits if its description says so.
### Hirelings
A special facility comes with one or more hirelings who work in the facility, maintain it, and execute Bastion orders there, as described in the next section. A player can assign names and personalities to hirelings in their character's Bastion using the same tools DMs use to *create NPCs* (see *chapter 3*).
Each special facility in a Bastion generates enough income to pay the salary of its hirelings. Hirelings follow the orders they're given and are loyal to the Bastion's owner.
### Orders
On a Bastion turn, a character in their Bastion can issue special orders—called Bastion orders—to one or more of their Bastion's special facilities. A character needn't issue orders to all the special facilities in their Bastion on a given Bastion turn.
The Maintain order is unusual; it is issued to the whole Bastion rather than to one or more special facilities. If a character isn't in their Bastion on a given Bastion turn, the Bastion acts as though it were issued the Maintain order on that turn unless the owner can communicate with the Bastion hirelings using the *Sending* spell or similar magic.
The orders are as follows:
#### Craft
Hirelings in the special facility craft an item that can be made in that facility. During the time required to craft an item, the facility can't be used to craft anything else, even if a special ability allows the facility to carry out two orders at once. The hirelings have proficiencies with Artisan's Tools as specified in the facility's description.
#### Empower
The special facility confers a temporary empowerment to you or someone else.
#### Harvest
Hirelings gather a resource produced in the special facility. During the time required to harvest a resource, the facility can't be used to harvest anything else, even if a special ability allows the facility to carry out two orders at once.
#### Maintain

All the Bastion's hirelings focus on maintaining the Bastion rather than executing orders in special facilities. Issuing this order prohibits other orders from being issued to the Bastion on the current Bastion turn. Each time the Maintain order is issued, the DM rolls once on the *Bastion Events* table at the end of this chapter. Bastion events are resolved before the next Bastion turn.
#### Recruit
Hirelings recruit creatures to the Bastion. These creatures might include one or more Bastion Defenders, whose main purpose is to defend the Bastion if it is attacked (see "*Bastion Events*" at the end of this chapter). The Bastion generates enough income to provide for the needs of its Bastion Defenders.
#### Research
Hirelings in the special facility gather information.
#### Trade
Hirelings buy and sell goods or services stored or produced in this special facility.
## Special Facility Descriptions
Special facilities are presented in alphabetical order. The Special Facilities table lists all the special facilities presented in this section, along with their prerequisites and orders. Some facilities confer additional benefits, specified in their descriptions.
##### Special Facilities
| Level | Special Facility | Prerequisite | Order |
|:-----:|----------------------|---------------------------------------------------------------------------|----------|
| 5 | Arcane Study | Ability to use an *Arcane Focus* or a tool as a Spellcasting Focus | Craft |
| 5 | Armory | None | Trade |
| 5 | Barrack | None | Recruit |
| 5 | Garden | None | Harvest |
| 5 | Library | None | Research |
| 5 | Sanctuary | Ability to use a *Holy Symbol* or *Druidic Focus* as a Spellcasting Focus | Craft |
| 5 | Smithy | None | Craft |
| 5 | Storehouse | None | Trade |
| 5 | Workshop | None | Craft |
| 9 | Gaming Hall | None | Trade |
| 9 | Greenhouse | None | Harvest |
| 9 | Laboratory | None* | Craft |
| 9 | Sacristy | Ability to use a *Holy Symbol* or *Druidic Focus* as a Spellcasting Focus | Craft |
| 9 | Scriptorium | None* | Craft |
| 9 | Stable | None | Trade |
| 9 | Teleportation Circle | None | Recruit |
| 9 | Theater | None | Empower |
| 9 | Training Area | None | Empower |
| 9 | Trophy Room | None | Research |
| 13 | Archive | None | Research |
| 13 | Meditation Chamber | None | Empower |
| 13 | Menagerie | None | Recruit |
| 13 | Observatory | Ability to use a Spellcasting Focus | Empower |
| 13 | Pub | None | Research |
| 13 | Reliquary | Ability to use a *Holy Symbol* or *Druidic Focus* as a Spellcasting Focus | Harvest |
| 17 | Demiplane | Ability to use an *Arcane Focus* or a tool as a Spellcasting Focus | Empower |
| 17 | Guildhall | Expertise in a skill | Recruit |
| 17 | Sanctum | Ability to use a *Holy Symbol* or *Druidic Focus* as a Spellcasting Focus | Empower |
| 17 | War Room | Fighting Style feature or Unarmored Defense feature | Recruit |
*Certain orders that can be issued to these facilities have additional prerequisites.

<table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Arcane Study</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Arcane Study|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="arcane%20study_xdmg" data-rd-name="Arcane Study" data-rd-display-name="Arcane Study" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#arcane%20study_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="arcane%20study_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Arcane Study</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Archive</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Archive|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="archive_xdmg" data-rd-name="Archive" data-rd-display-name="Archive" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#archive_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="archive_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Archive</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Armory</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Armory|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="armory_xdmg" data-rd-name="Armory" data-rd-display-name="Armory" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#armory_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="armory_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Armory</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Barrack</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Barrack|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="barrack_xdmg" data-rd-name="Barrack" data-rd-display-name="Barrack" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#barrack_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="barrack_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Barrack</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Demiplane</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Demiplane|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="demiplane_xdmg" data-rd-name="Demiplane" data-rd-display-name="Demiplane" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#demiplane_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="demiplane_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Demiplane</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Gaming Hall</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Gaming Hall|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="gaming%20hall_xdmg" data-rd-name="Gaming Hall" data-rd-display-name="Gaming Hall" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#gaming%20hall_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="gaming%20hall_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Gaming Hall</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Garden</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Garden|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="garden_xdmg" data-rd-name="Garden" data-rd-display-name="Garden" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#garden_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="garden_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Garden</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Greenhouse</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Greenhouse|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="greenhouse_xdmg" data-rd-name="Greenhouse" data-rd-display-name="Greenhouse" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#greenhouse_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="greenhouse_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Greenhouse</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Guildhall</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Guildhall|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="guildhall_xdmg" data-rd-name="Guildhall" data-rd-display-name="Guildhall" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#guildhall_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="guildhall_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Guildhall</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Laboratory</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Laboratory|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="laboratory_xdmg" data-rd-name="Laboratory" data-rd-display-name="Laboratory" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#laboratory_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="laboratory_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Laboratory</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Library</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Library|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="library_xdmg" data-rd-name="Library" data-rd-display-name="Library" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#library_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="library_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Library</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Meditation Chamber</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Meditation Chamber|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="meditation%20chamber_xdmg" data-rd-name="Meditation Chamber" data-rd-display-name="Meditation Chamber" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#meditation%20chamber_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="meditation%20chamber_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Meditation Chamber</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Menagerie</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Menagerie|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="menagerie_xdmg" data-rd-name="Menagerie" data-rd-display-name="Menagerie" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#menagerie_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="menagerie_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Menagerie</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Observatory</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Observatory|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="observatory_xdmg" data-rd-name="Observatory" data-rd-display-name="Observatory" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#observatory_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="observatory_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Observatory</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Pub</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Pub|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="pub_xdmg" data-rd-name="Pub" data-rd-display-name="Pub" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#pub_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="pub_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Pub</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Reliquary</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Reliquary|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="reliquary_xdmg" data-rd-name="Reliquary" data-rd-display-name="Reliquary" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#reliquary_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="reliquary_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Reliquary</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Sacristy</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Sacristy|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="sacristy_xdmg" data-rd-name="Sacristy" data-rd-display-name="Sacristy" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#sacristy_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="sacristy_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Sacristy</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Sanctuary</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Sanctuary|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="sanctuary_xdmg" data-rd-name="Sanctuary" data-rd-display-name="Sanctuary" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#sanctuary_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="sanctuary_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Sanctuary</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Sanctum</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Sanctum|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="sanctum_xdmg" data-rd-name="Sanctum" data-rd-display-name="Sanctum" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#sanctum_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="sanctum_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Sanctum</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Scriptorium</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Scriptorium|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="scriptorium_xdmg" data-rd-name="Scriptorium" data-rd-display-name="Scriptorium" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#scriptorium_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="scriptorium_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Scriptorium</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Smithy</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Smithy|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="smithy_xdmg" data-rd-name="Smithy" data-rd-display-name="Smithy" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#smithy_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="smithy_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Smithy</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Stable</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Stable|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="stable_xdmg" data-rd-name="Stable" data-rd-display-name="Stable" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#stable_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="stable_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Stable</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Storehouse</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Storehouse|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="storehouse_xdmg" data-rd-name="Storehouse" data-rd-display-name="Storehouse" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#storehouse_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="storehouse_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Storehouse</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Teleportation Circle</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Teleportation Circle|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="teleportation%20circle_xdmg" data-rd-name="Teleportation Circle" data-rd-display-name="Teleportation Circle" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#teleportation%20circle_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="teleportation%20circle_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Teleportation Circle</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Theater</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Theater|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="theater_xdmg" data-rd-name="Theater" data-rd-display-name="Theater" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#theater_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="theater_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Theater</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Training Area</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Training Area|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="training%20area_xdmg" data-rd-name="Training Area" data-rd-display-name="Training Area" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#training%20area_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="training%20area_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Training Area</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Trophy Room</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Trophy Room|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="trophy%20room_xdmg" data-rd-name="Trophy Room" data-rd-display-name="Trophy Room" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#trophy%20room_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="trophy%20room_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Trophy Room</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">War Room</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="War Room|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="war%20room_xdmg" data-rd-name="War Room" data-rd-display-name="War Room" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#war%20room_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="war%20room_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >War Room</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table><table class="rd__b-special rd__b-data rd__b-data--stats">
<thead>
<tr>
<th class="rd__data-embed-header ve-text-left" colspan="6" data-rd-data-embed-header="true">
<div class="w-100 split-v-center">
<div class="ve-flex-v-center w-100 min-w-0">
<span class="rd__data-embed-name ve-hidden">Workshop</span>
<span class="rd__data-embed-name-expanded ve-text-right pr-2 w-100 "></span>
</div>
<span class="rd__data-embed-toggle">[–]</span>
</div>
</th>
</tr>
</thead><tbody class="" data-rd-embedded-data-render-target="true"><tr>
<td colspan="6" data-rd-tag="facility" data-rd-uid="Workshop|XDMG" data-rd-page="bastions.html" data-rd-source="XDMG" data-rd-hash="workshop_xdmg" data-rd-name="Workshop" data-rd-display-name="Workshop" data-rd-style="" data-rd-entry-data="{}">
<i>Loading <a href="bastions.html#workshop_xdmg" onmouseover="Renderer.hover.pHandleLinkMouseOver(event, this)" onmouseleave="Renderer.hover.handleLinkMouseLeave(event, this)" onmousemove="Renderer.hover.handleLinkMouseMove(event, this)" onclick="Renderer.hover.handleLinkClick(event, this)" ondragstart="Renderer.hover.handleLinkDragStart(event, this)" data-vet-page="bastions.html" data-vet-source="XDMG" data-vet-hash="workshop_xdmg" ontouchstart="Renderer.hover.handleTouchStart(event, this)" >Workshop</a>...</i>
<style onload="Renderer.events.handleLoad_inlineStatblock(this)"></style>
</td>
</tr></tbody></table>
## Bastion Events
Immediately after a character issues the *Maintain* order to their Bastion, the DM rolls once on the Bastion Events table to determine what event, if any, befalls the Bastion before the next Bastion Turn. If an event occurs, the DM reads the event aloud to the player whose character controls that Bastion. (All the events are described in the sections following the table.) The event is resolved immediately, with the player and DM working together to expand story details as needed. If multiple characters issue the Maintain order on the same Bastion turn, roll once on the table for each of them, resolving each event separately even if the Bastions are combined.
Bastion events occur only when a Bastion is operating under the Maintain order, which often means that the Bastion's owner isn't present in the Bastion at the time. That means these events can be opportunities for the player to take on the role of the Bastion's hirelings and roleplay their reactions to these events. The DM can even turn a Bastion event into a cutscene where each player takes on the role of one of the Bastion's hirelings (under the guidance of the player whose character owns the Bastion).
##### Bastion Events
| 1d100 | Event |
|:-----:|-----------------------------|
| 01–50 | *All Is Well* |
| 51–55 | *Attack* |
| 56–58 | *Criminal Hireling* |
| 59–63 | *Extraordinary Opportunity* |
| 64–72 | *Friendly Visitors* |
| 73–76 | *Guest* |
| 77–79 | *Lost Hirelings* |
| 80–83 | *Magical Discovery* |
| 84–91 | *Refugees* |
| 92–98 | *Request for Aid* |
| 99–00 | *Treasure* |
### Event Descriptions
The events from the Bastion Events table are detailed here in alphabetical order.
#### All Is Well
Nothing significant happens. Roll on the following table, fleshing out the details as you see fit.
| 1d8 | Details |
|:---:|----------------------------------------------------------------------|
| 1 | Accident reports are way down. |
| 2 | The leak in the roof has been fixed. |
| 3 | No vermin infestations to report. |
| 4 | You-Know-Who lost their spectacles again. |
| 5 | One of your hirelings adopted a stray dog. |
| 6 | You received a lovely letter from a friend. |
| 7 | Some practical joker has been putting rotten eggs in people's boots. |
| 8 | Someone thought they saw a ghost. |
> ##### Bastion Tracker
>
>Players can use the Bastion Tracker sheet as a record of the facilities and other characteristics of their Bastions. Encourage your players to list their hirelings on this sheet and develop them more fully as NPCs on separate sheets (perhaps using the *NPC Tracker* in *chapter 3*). Similarly, the Bastion Tracker provides space to indicate the space of each special facility, but encourage players to draw maps of their Bastions (see "*Bastion Map*" earlier in this chapter).
>
#### Attack
A hostile force attacks your Bastion but is defeated.
Roll 6d6; for each die that rolls a 1, one Bastion Defender dies. Remove these Bastion Defenders from your Bastion's roster. If the Bastion has zero Bastion Defenders, one of the Bastion's special facilities (determined randomly) is damaged and forced to shut down.
A special facility that shuts down can't be used on your next Bastion turn, after which it is repaired and made operational again at no cost to you.
#### Criminal Hireling
One of your Bastion's hirelings has a criminal past that comes to light when officials or bounty hunters visit your Bastion with a warrant for the hireling's arrest. You can retain the hireling by paying a bribe of 1d6 × 100 GP. Otherwise, the hireling is arrested and taken away. If this loss leaves one of your facilities without any hirelings, that facility can't be used on your next Bastion turn. The hireling is then replaced at no cost to you.
#### Extraordinary Opportunity

Your Bastion is given the opportunity to host an important festival or celebration, fund the research of a powerful spellcaster, or appease a domineering noble. Work with the DM to determine the details.
If you seize the opportunity, you must pay 500 GP to cover costs. In return, your Bastion gains a sudden influx of recognition or attention, prompting the DM to roll again on the *Bastion Events* table (rerolling this result if it comes up again).
If you decline the opportunity, you don't pay the money and nothing else happens.
#### Friendly Visitors
Friendly visitors come to your Bastion, seeking to use one of your special facilities. They offer 1d6 × 100 GP for the brief use of that facility. For example, a knight might want your *Smithy* to replace a horseshoe or repair a damaged weapon or suit of armor, or sages might need your Arcane Study to help them settle a dispute. Their use of the facility doesn't interrupt any orders you've issued to it.
#### Guest
A Friendly guest comes to stay at your Bastion. Determine the guest by rolling on the following table, and work with your DM to flesh out the details.
| 1d4 | Guest |
|:---:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | The guest is an individual of great renown who stays for 7 days. At the end of their stay, the guest gives you a letter of recommendation (see "*Marks of Prestige*" in *chapter 3*). |
| 2 | The guest requests sanctuary while avoiding persecution for their beliefs or crimes. They depart 7 days later, but not before offering you a gift of 1d6 × 100 GP. |
| 3 | The guest is a mercenary, giving you one additional Bastion Defender. The guest doesn't require a facility to house them, and they stay until you send them away or they're killed. |
| 4 | The guest is a Friendly monster, such as a brass dragon or a treant. If your Bastion is attacked while this monster is your guest, it defends your Bastion, and you lose no Bastion Defenders. The monster leaves after it defends your Bastion once or when you send it away. |
#### Lost Hirelings
One of your Bastion's special facilities (determined randomly) loses its hirelings. The cause of their departure is up to you. The facility can't be used on your next Bastion turn, but the hirelings are replaced at no cost to you at that point.
#### Magical Discovery
Your hirelings discover or accidentally create an Uncommon magic item of your choice at no cost to you. The magic item must be a Potion or Scroll.
#### Refugees
A group of 2d4 refugees fleeing from a monster attack, a natural disaster, or some other calamity seeks refuge in your Bastion. If your Bastion lacks a basic facility large enough to house them, the refugees camp right outside the Bastion. The refugees offer you 1d6 × 100 GP as payment for your hospitality and protection. They stay until you find them a new home or a hostile force attacks your Bastion.
#### Request for Aid
Your Bastion is called on to help a local leader. Perhaps there's a search on for a missing person, or brigands are plaguing the area. If you help, you must dispatch one or more Bastion Defenders. Roll 1d6 for each Bastion Defender you send. If the total is 10 or higher, the problem is solved and you earn a reward of 1d6 × 100 GP. If the total is less than 10, the problem is still solved, but the reward is halved and one of your Bastion Defenders is killed. Remove that Bastion Defender from your Bastion's roster.
#### Treasure
Your Bastion acquires an art object or a magic item determined by rolling on the table below and then rolling on the specified table in *chapter 7*. How the Bastion acquires this treasure is up to you. It might represent an inheritance, a gift from a guest or an admirer, a theft, or a fortunate discovery. If you're in the Bastion, you can claim the treasure immediately; otherwise, it is placed in storage until you can claim it.
| 1d100 | Treasure |
|:-----:|----------------------------------------------------------------------------------------------------------|
| 01–40 | Roll on the 25 GP *Art Objects* table. |
| 41–63 | Roll on the 250 GP *Art Objects* table. |
| 64–73 | Roll on the 750 GP *Art Objects* table. |
| 74–75 | Roll on the 2,500 GP *Art Objects* table. |
| 76–90 | Roll on a Common Magic Items table of your choice (*Arcana*, *Armaments*, *Implements*, or *Relics*). |
| 91–98 | Roll on an Uncommon Magic Items table of your choice (*Arcana*, *Armaments*, *Implements*, or *Relics*). |
| 99–00 | Roll on a Rare Magic Items table of your choice (*Arcana*, *Armaments*, *Implements*, or *Relics*). |
## Fall of a Bastion
A player character can lose their Bastion in the following ways:
- **Divestiture.** A character can give up their Bastion anytime, releasing the Bastion's hirelings and abandoning the location. The divested Bastion is quickly vacated, is eventually looted, and might even be burned to the ground.
- **Neglect.** If a character issues no orders to their Bastion for a number of consecutive Bastion turns equal to the character's level (typically because the character is dead or otherwise out of commission), the hirelings abandon the Bastion and the site is eventually looted. If the character returns later, they can start a new Bastion, perhaps building it amid the ruins of the old one.
- **Ruination.** Drawing the Ruin card from the *Deck of Many Things* (as described in *chapter 7*) instantly deprives a character of their Bastion. When such an event occurs, the player can decide what terrible fate befalls the Bastion. The Bastion might be sacked by enemies or destroyed by an earthquake, for example.
Regardless of how the Bastion falls, the player can work with the DM to establish a new Bastion and determine how it comes into being. Use the *Special Facility Acquisition* table to determine how many special facilities come with it. The new Bastion also starts with two basic facilities (one Cramped and one Roomy) of the player's choice.
