# Adventure Architect System Design
## Definitions
**Adventure**: a combination of an Event and a Room
**Event**: A `microevent` which drives a combat encounter
**Room**: The physical geometry placed in the level
## MS7 Demo
Floors 1+2: Select an event + room from a pre-configured list
Flor 3: Pre-determined "boss" event + room
## Production
### Inputs
* Player count
* Players' combined progression flags
* Players' current quests
* Zone
* Floor
* Difficulty?
### Selection process
1. Using the inputs, select all rows which meet requirements from table `ZanzibarAdventures`
2. Repeat step 1 for each additional portal, maintaining a list of `ExclusionGroups` from each selected adventure.
3. For each selected **Adventure**, select and assign an **Event** from table `ZanzibarMicroevents` using `WhitelistMicroeventTags`
4. For each **Adventure** + **Event** combination, select and assign a **Room** from `ZanzibarRooms` using `WhitelistRoomTags` from `ZanzibarAdventures` and the room requirements columns from `ZanzibarMicroevents`
### Table examples
#### ZanzibarAdventures
| Id | MinPlayerCount | MinFloor | ExclusionGroups | WhitelistMicroeventTags | WhitelistRoomTags |
| -------- | -------- | -------- | -- | -- | -- |
| HighValueCatacombs | 2 | 1 | HighValue | HighValue | Catacombs |
#### ZanzibarMicroevents
| Id | Tags | MicroeventGameplayTag | MinRoomSize | MinRoomSpawnPoints |
| -------- | -------- | -------- | -- | -- |
| HighValueTarget | HighValue | Microevent.HighValue | Medium | 5 |
#### ZanzibarRooms
| Id | Tags | LevelName | Size | SpawnPoints |
| -------- | -------- | -------- | -- | -- |
| MediumCatacombs | Catacombs | Level.Catacombs.Medium | Medium | 8 |