# Valkyrie: a community scenario builder for Descent and Mansions of Madness

> Valkyrie is a community developed tool for creating and playing user generated scenarios for Descent Second Edition and Mansions of Madness Second Edition. It is written in C# on top of Unity, it depends on game data imported from the official Fantasy Flight apps or from a zip file, and it distributes scenarios and content packs through GitHub as container files.

**NPBruce/valkyrie** — Valkyrie GM for Fantasy Flight Board Games

- Repository: https://github.com/NPBruce/valkyrie
- Stars: 551 · Forks: 124
- Language: C#
- License: Apache-2.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/npbruce-valkyrie

## What Valkyrie is for and which games it covers

Valkyrie is described as a custom scenario tool for Fantasy Flight Board Games, and more precisely as a community developed scenario builder for Descent Second Edition and Mansions of Madness Second Edition. The project page is hosted at npbruce.github.io/valkyrie, with a wiki on the repository's wiki and a Discord server for community support.

The scope in one sentence: you build a scenario in the application, you play it in the application, and the scenarios can contain content that the default application does not ship. That last clause is the reason the project exists at all, because the official Fantasy Flight applications are closed tools whose scenario list is fixed, and a player group that wants a specific adventure or a new monster has no way to add one.

So the audience is a community rather than a company. It is the group of players who keep Descent campaigns going, the parents building scenarios for their kids, and the modders who want to try the same system with a different setting. The project describes itself as community developed, and the git history supports that framing, with a release branch named 3.28-major and a separate tag for an Android installation fix.

The primary language is C#, the licence is Apache-2.0, the default branch is master, and the last push was on 2026-06-20.

## The data import step is the gate you have to pass first

The application cannot start empty. The documentation states that the app requires importing data from the official Fantasy Flight games, either the Descent: Road to Legend or the Mansions of Madness app for Android or Steam, or alternatively from a zip file.

That constraint shapes everything about how you would use the project. There is no bundled content, so a fresh install on a machine with no import has nothing to show you. The import source is the official apps, which means you need the base game and its app regardless of which system you actually want to play, and the two supported titles are the two the tool was built around. The zip file route exists as an alternative, which is the path for a player who no longer has the official app installed or who has the data on another machine.

The content of that import is what makes custom content possible. The documentation says content creators can create scenarios that contain custom content such as new tiles and characters that are not included as default content in Valkyrie, and for that to be meaningful the base set has to be present in the same data model. A new tile is defined against the same assets and rules data that the imported base content uses.

This is the practical difference between Valkyrie and the official apps. The official apps are self contained and give you the scenarios they ship. Valkyrie requires you to reconstruct the content layer yourself, through an import, before it can extend it. It is a larger commitment than installing a store app, and the documentation does not describe a fallback where the tool runs in a limited mode without imported data.

## Scenarios travel as GitHub-hosted container files

The distribution model is unusual and worth understanding, because it is what lets a community share scenarios without a central server.

Custom scenarios are hosted on GitHub and then downloaded to the user device as a container file. There is no application store for scenarios and no first-party catalogue. The scenario author publishes to a repository, and the app fetches the container from there.

Content packs work the same way. They can be created for Descent 2nd Edition and Mansions of Madness 2nd Edition, published on GitHub to be available in Valkyrie automatically, and pulled into the application. The documentation says this method means Valkyrie can be expanded with other games as long as they are based on similar systems as Descent 2nd Edition and Mansions of Madness, and it gives a concrete example: a DOOM: The Board Game mod is already available as a custom content pack.

That DOOM example is the most informative line in the project description. It demonstrates that the content format is general enough to carry a different setting, and it is also the boundary of the claim. Similar systems means the data model lines up, so a game with a different rules engine is not a candidate no matter how popular it is.

The consequence for a reader is that a scenario's lifetime depends on where it is hosted. A container file in a GitHub repository keeps working only as long as that repository does, and a content pack is a download from a repository you did not necessarily audit. The scenario and content model is what makes the community possible, and it also means the trust boundary sits with whoever hosts the file.

## What the repository layout reveals about the build

The top level of the repository tells you more about the project than its short description does, and a few entries are worth pointing out.

The `unity/` directory is the application itself, which tells you the client is a Unity project and the C# in the language field is the Unity side of the codebase. The `valkyrie.nsi` file is an NSIS installer script, so the Windows build is produced with the Nullsoft Scriptable Install System, and the `libraries/` directory with a `dotnetzip-license.rtf` file and a `.NET-Ogg-Vorbis-Encoder-LICENSE` file shows third-party components being vendored alongside the project rather than resolved only through a package manager. The presence of a NOTICE file next to LICENSE is the convention that usually travels with Apache-2.0 precisely to record those attributions.

The `web/` directory holds the site that the project page is served from, including a banner image referenced from the project description. The `wiki/` directory holds a copy of the wiki content, and `docs/` holds further documentation, so the documentation is in the repository rather than only on the wiki site.

Two sets of translated HTML files sit at the root, index.html alongside index-de.html, index-es.html, index-fr.html, index-it.html, index-pl.html and index-pt.html, and the same seven-language pattern for scenarios.html. That is a real signal about who the project serves, because a hand-maintained set of translations in six languages implies a player community spread across Europe rather than a single market, and it is a maintenance commitment that comes with them.

The `workflowScripts/` directory points to automated release work, and the two log files at the root, compile-check.log and compile-results.log, are the sort of artefact a maintainer leaves behind to show what a build actually did. There is also a `claude.md` and an `.agent/` directory, so parts of the development process are run with an AI assistant, which is worth knowing if you are contributing.

## Where Valkyrie is the wrong choice

The first limit is the dependency on data you do not control. The application needs the official game's data imported before it is useful, so this is not a standalone program you can evaluate in a minute. If you do not own the base game, or you have moved to a different platform that the import does not cover, the tool cannot do much.

The second limit is the platform story. The project is a Unity application with an NSIS installer script, which points to a Windows desktop build, and one of the recent tags is named for a blocked Android installation. Android is a secondary case here, handled as a fix rather than as a first-class target, which is the opposite of how the official apps are distributed.

The third limit is the documentation. The project has a wiki and a Discord server, which for a community project is a reasonable arrangement, but the source of truth for how to import data and how to publish a content pack is a wiki page rather than a document in the repository, and that content can change under you between versions of the application.

The fourth is the packaging and support position. There is no home page listed for the repository, the releases are numbered like a community build rather than a product release, and the releases include a fix tag with a long descriptive name, which is what a maintainer does when they are not running a formal release process.

Compare that with the official apps, which are supported, updated and have the content already in them. The difference in approach is that the official apps give you a fixed, curated scenario set, while Valkyrie gives you the ability to author and import scenarios and to add content the publisher did not make. If you want to play the official adventures, the official app is the better answer. If you want to run a scenario that only your group has, or a game with a setting the publisher has not released, this is the only route the project description points to.

## Licence, release state and what to check before you install it

Valkyrie is released under Apache-2.0, with the LICENSE and NOTICE files in the repository root and the vendored third-party licences kept alongside the libraries they cover. Apache-2.0 is permissive and includes an express patent grant, which is a sensible fit for a tool that is likely to be modified to add content, since a modder can publish their changes without a licensing negotiation. Read the LICENSE and NOTICE files yourself for the exact terms and for the attributions they carry.

The release history is short and recent. The tags are 3.27-major on 2026-06-04, 1877AndroidInstallationBlocked on 2026-06-17 and 3.28-major on 2026-06-20, and the last push was on 2026-06-20. The repository is not archived. The version numbering with a major suffix is unusual for an application, and combined with the descriptive third tag it points to a project where the build is the deliverable rather than a formal release train.

What to check before you install it is concrete. Read the wiki and the Discord server linked from the project page, because that is where the import procedure lives. Confirm that the game data you need can be imported from the platform you own, since the documented sources are the Android and Steam apps or a zip file, and the zip route is the one to test first if you are unsure.

Then decide how you will track scenarios. Because scenarios and content packs are pulled from GitHub as container files, a good archive habit matters, since a scenario hosted in a repository that later goes away is a scenario you no longer have. And install the build from the 3.28-major tag rather than an arbitrary file, so that the data import you validated against the documentation matches the version that is actually running.

## Conclusion

Valkyrie fits a player who owns Descent Second Edition or Mansions of Madness Second Edition, wants to build or run scenarios that the official apps do not include, and is willing to import game data and install the community build. It does not fit someone who expects a complete game, because the application needs data imported from the official Android or Steam apps before it can do anything, and it does not fit a publisher who needs a supported product, since the project publishes no home page and its releases are community builds. Before you use it, read the wiki and the Discord server linked from the project page, confirm the game data import step works with the app version you own, and check the release you install against the 3.28-major tag from 2026-06-20.

## FAQ

### What is Valkyrie used for?

Valkyrie is a community developed scenario builder for Descent Second Edition and Mansions of Madness Second Edition. It lets you create and play user generated scenarios, including scenarios with custom content such as new tiles and characters that the default application does not include.

### What does Valkyrie need before it can be used?

The application requires importing data from the official Fantasy Flight games, either the Descent: Road to Legend or Mansions of Madness app for Android or Steam, or alternatively from a zip file. Without imported data the application has no content to work with.

### How are scenarios and custom content shared?

Custom scenarios are hosted on GitHub and downloaded to the user device as a container file, and content packs published on GitHub become available in Valkyrie automatically. This also lets the tool be extended to other games built on similar systems, with a DOOM: The Board Game mod already available as a custom content pack.

### What licence does Valkyrie use?

Valkyrie is released under Apache-2.0, with the LICENSE and NOTICE files in the repository root and third-party licences such as dotnetzip-license.rtf and the .NET Ogg Vorbis encoder licence kept alongside the vendored libraries. The recent tags are 3.27-major from 2026-06-04 and 3.28-major from 2026-06-20.

### Where can I find the Valkyrie documentation and community support?

The project page is at npbruce.github.io/valkyrie, the wiki is on the repository's wiki, and community support runs through a Discord server linked from the project description. The documentation also points to the wiki as the place covering scenario and content pack authoring.

## Sources

- [Issues](https://github.com/NPBruce/valkyrie/issues)
- [License: Apache-2.0](https://github.com/NPBruce/valkyrie/blob/master/LICENSE)
- [NPBruce/valkyrie on GitHub](https://github.com/NPBruce/valkyrie)
- [README](https://github.com/NPBruce/valkyrie/blob/master/README.md)
- [Releases](https://github.com/NPBruce/valkyrie/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/npbruce-valkyrie
