Live at completecompendium.com
Quick Links
This is a project to compile and catalog all monsters from the Advanced Dungeons & Dragons 2nd Edition tabletop roleplaying game. There are currently 23 campaign settings, over 200 books, and over 2000 unique monster pages, with still more to be catalogued.
These thousands of monster pages were scraped with the help of the Wayback machine from an old website at lomion.de/cmm
that contained (almost) every AD&D 2nd Edition monster. The drawback was the site was minimally navigable, having only an appendix list. This project seeks to finish what the original creator started and catalog every monster, book, and setting from oldschool D&D.
/harvester/cmm
is the location of the data used to generate this static site at build time. /harvester
contains a C++ program that can run in a Docker container to harvest the monster data and output JSON data.
Within /harvester/cmm/
are a collection of HTML files, each being a monster page with its filename being that monster page's monster_key
(e.g. aarakath
or zombie
). These HTML pages reference assets within sibling asset folders like monster images.
There are a few undertakings that need to be done to complete the compendium. I will use GitHub's Issue tracking with tasks to track them all. These are:
There are a few needed procedures for completing the compendium.
A straightforward task done during Book Verification, this involves checking the sourcebook manually for existing monsters, usually checking a PDF or real book if possible. For each monster in the book, check if the monster exists
Place missing primary monster images in /static/images/monsters/img/<monster_key>.gif
. They have to be in a .gif
format.
If a new monster is found in a book not found in the complete compendium's collection then a new book must be added.
Adding a new book involves modifications to the following data files:
/data/all_tsr.json
/data/settings.json
Remark: There must be a monster page with the new book's
publish_id
, the publication id on the side of the book. If there isn't, the book won't show up right. Should make a test for this.
Steps for adding a new book:
publish_id
number to /data/all_tsr.json
as a key to a book object - include title
, year
, author
's, and setting
. The setting
options can be found in the file /data/settings.json
.setting
option in /data/settings.json
. In the entry for the setting, like Forgotten Realms or Dark Sun, add the new book's publish_id
to the array of source_books
./static/images/Books/Hi Resolution
named <publish_id>.jpg
.A brand new monster requires a new HTML file to be created for it at /harvester/cmm/
. There are HTML templates based on different formats, like a single monster and multiple subtypes of monster.
/harvester/cmm/workspace/
, copy a template to that directory and make some replacements described in the README there. Make all of the replacements listed. When deciding on a new monster_key, they shouldn't be more than 8 characters. /static/images/monsters/img/
named <monster_key>.gif
/harvester/cmm/
directory.node .\scripts\copy_monster_data.js
to copy the output of the harvester once it's done. gatsby develop
and see if the monster shows up correctly.Run web app development build
gatsby develop
Most straightforward method with the least hassle. Run all these in the project directory.
The data extraction process consists of the following commands:
docker build -t monster-harvester -f harvester/Dockerfile .
docker create --name harvester-container monster-harvester
docker ps -a
docker cp <container_id>:/usr/local/harvester/build/bin/json_files output
Copies the json files created by the harvester to the folder ./output/json_files/
Run Harvester all in one command,
docker build -t monster-harvester -f harvester/Dockerfile .; docker create --name harvester-container monster-harvester; Foreach-Object { docker cp "harvester-container:/usr/local/harvester/build/bin/json_files" output }
node .\scripts\copy_monster_data.js
docker run -it --entrypoint /bin/bash monster-harvester