Design of a Wild Shape/Polymorph Decision Aid
In Fifth Edition (5e) Dungeons & Dragons™ (D&D), druids can transform into certain Beast forms using the Wild Shape ability. Similarly, casters of the Polymorph spell can transform allies and enemies into Beasts. Players often find selecting a Beast form onerous (there are 84 forms defined in the System Reference Document (SRD) alone) as this is a multi-dimensional decision problem. We created an online tool to aid in the decision process. Our tool presents two synthetic metrics to capture offensive and defensive strengths in combat and assigns beasts to one of four labels (combat, explore, water, and sky) based on the results of machine clustering. In this article, we discuss the user interface and the data science used by the tool.
Motivation
Game designer Sid Meier has stated that “Games are a series of interesting decisions". In D&D, transforming a creature into another form, as the druid’s power of Wild Shape or the spell Polymorph allow, is an interesting decision by Meier’s definition. The decision is situational, where a player needs to consider the current environment and other constraints, how the new form will impact the group’s ability to explore and combat foes, and if the transformation is worth the resource trade-off.
The choice can be difficult. While both Wild Shape and Polymorph restrict the transformed form into a Beast, a creature type that encompasses real-world natural creatures such as spiders, wolves, dinosaurs, and giant-sized variants, this is not very restrictive in practice as players will have dozens of potential Beast forms to choose among. Further, while the pool of Wild Shape forms has to be selected ahead of time (four to eight slots, with one slot swappable per Long Rest), Polymorph forms are selected at the time of casting. Selecting a form can thus slow down the game, particularly during combat, as the caster looks through their options.
As players, we have experienced this difficulty and wanted to make the selection faster and with greater confidence. Commonly, beginning players follow the rule book’s suggestion of Rat, Riding Horse, Spider, and Wolf (SRD, pg. 42), but as we discuss near the end of the article, we believe this recommendation can be improved. Experienced players tend to create spreadsheets to help them make these decisions and have the statblocks ready at hand during play. Although creating spreadsheets is a signal of engagement, we do not want the process to require this level of commitment.
We decided to build a tool. Our objectives:
- Useful for the 84 beasts in the SRD, but methodologically expandable to other bestiaries. Many authors have created listicles ranking Beast forms, but we would like a solution that can scale to the 400+ products on DM’s Guild with new Beast forms or the 1200+ Homebrew Beasts on D&D Beyond with a rating of 2+.
- Require fewer rules lookups and implicit filters than D&D Beyond.
- Reduce time and effort spent by players by amplifying the distinctions between Beasts.
Examples
In the D&D movie Honor Among Thieves, the druid Doric transforms into a horse to hide in plain sight among a group of mounted knights. The horse form allows Doric to infiltrate the group, whereas other forms might arose suspicion. In this case, the form is highly situational, but normally the druid will need to select forms that fulfill many potential scenarios.
Wild Shape Combat Selection
A player of a 3rd level druid is swapping out a Wild Shape form ahead of a trip into a large, natural cave network. The party is in pursuit of a bandit gang. The party consists mostly of spell-casters and the druid is expected to hold the front-line in combat.
Using the tool, the player first selects “Druid, Level 2-3” under Show Beasts. This filters the list to Beasts with challenge ratings between 0 and 0.25 and removes from the list any Beasts with a Fly speed (per the game’s rules for Wild Shape). The player looks at the Combat Fitness plot.

Combat Fitness Chart: Beasts available for Level 2 Druids
In combat, dealing damage is less important than holding the line, so the player looks at options with higher defensiveness scores (Tank). The top four options by Tank are the Giant Crab, Giant Lizard, Giant Badger, and the Giant Frog (we present the data using an inline table rather than a screenshot for accessibility):
Beast Name | CR | Role | DPR | Tank | Senses | Actions | Specials |
---|---|---|---|---|---|---|---|
Giant Crab | ⅛ | Water | 2.80 | 52.00 | Blindsight 30 ft. | Claw | Amphibious, Stealth +3 |
Giant Lizard | ¼ | Explore | 4.50 | 47.50 | Darkvision 60 ft. | Bite | Spider Climb |
Giant Badger | ¼ | Fight | 4.80 | 42.96 | Darkvision 60 ft. | Bite | Perception +3, Resists: Poison |
Giant Frog | ¼ | Water | 3.50 | 40.00 | Darkvision 30 ft. | Bite, Swallow | Amphibious, Standing Leap, Perception +2, Stealth +4 |
The player chooses the Giant Lizard. Although all four forms have something to recommend themselves, the Giant Lizard has Spider Climb, which allows it to climb along the walls and ceilings of the cave. The Lizard has excellent ability to operate in the dark environment of the cave, although if the bandits were known to use obscuration, the Giant Crab’s blindsight might be preferred. Similarly, if the bandits were known for using poison, the Giant Badger’s resistance would be a great asset.
Polymorph Selection
The party of a seventh-level wizard are exploring an underwater kelp forest. The wizard considers casting Polymorph on their sixth-level ranger to explore the area faster. Within the tool, the player chooses “Beasts with max CR 6” (the level of the ranger) and sets “Require Movement Speeds” Swim.

Combat Fitness Chart: Beasts with CR 6 and below with Swim
Since the purpose is exploration rather than pure combat, the player looks at a range of beasts, sorting by challenge rating, and focusing on senses. The Killer Whale pops out of the list with a Blindsight range of 120 ft which will allow it to rapidly map the underwater terrain, even with obscuration from the kelp plants. If the Killer Whale encounters combat, it is still one of the more deadly underwater creatures even though it only has a CR of 3. Unlike Wild Shape, Polymorph uses the Beast’s stat block skills so the Perception +3 and Stealth +4 also assist the purpose of exploration.
Beast Name | CR | Role | DPR | Tank | Senses | Actions | Specials |
---|---|---|---|---|---|---|---|
Giant Crocodile | 5 | Water | 37.05 | 283.33 | - | Multiattack, Bite, Tail | Hold Breath, Stealth +5 |
Giant Shark | 5 | Water | 22.00 | 262.86 | Blindsight 60 ft. | Multiattack, Bite | Water Breathing, Perception +3 |
Archelon | 4 | Water | 11.90 | 600.00 | - | Multiattack, Bite | Amphibious, Stealth +5 |
Hippopotamus | 4 | Water | 14.40 | 273.33 | - | Multiattack, Bite | Hold Breath, Perception +3 |
Killer Whale | 3 | Water | 17.85 | 225.00 | Blindsight 120 ft. | Bite | Hold Breath, Perception +3, Stealth +4 |
Giant Constrictor Snake | 2 | Water | 9.35 | 150.00 | Blindsight 10 ft. | Multiattack, Bite, Constrict | Perception +2, Stealth +4 |
Hunter Shark | 2 | Water | 11.90 | 112.50 | Blindsight 60 ft. | Bite | Water Breathing, Perception +2 |
Plesiosaurus | 2 | Water | 9.35 | 194.29 | - | Bite | Hold Breath, Perception +3, Stealth +4 |
A Note on References
Wizards of the Coast publishes the D&D rules in two different ways: a set of commercially available books and the System Reference Document. The former contain rules and flavor which make D&D a recognizable set of fantasy worlds while the latter solely enumerates mechanics and “generic” spells and monsters. For example, beholders are an iconic monster in D&D and are detailed in the commercial books but are not included in the SRD. Wizards of the Coast licenses the SRD under the Creative Commons (specifically, CC-BY-4.0), allowing other publishers to produce products compatible with the ruleset. Thus, following the license, we reference the SRD, not the Player’s Handbook or Monster Manual.
A Note on Editions and Versions
The D&D rules have evolved over many editions. Fifth edition is the current edition at the time of writing. The first version of Fifth Edition was released in 2014 and is covered in the SRD version 5.1. A second version of Fifth Edition was released in 2024 and is covered in the SRD version 5.2. Our tool uses the mechanics and stat blocks described in SRD version 5.2.1.
User Interface
The tool’s user interface is displayed in the figure below. Filter controls are featured along the top and below the fold is a visualization of combat fitness and a table with the matching beasts.
When a player interacts with the tool, we expect they come either oriented as a druid character or as a caster of Polymorph. Thus, the first and primary filter (“Show Beasts”) either operates to filter by the Wild Shape criteria for a druid’s level or the challenge rating filter for Polymorph. Since subclasses, homebrew, and other spells (such as Animal Shapes) may modify what is considered a valid Beast target, we provide some additional options to cover likely cases. However, the list is not inclusive of all possibilities. For example, Animal Shapes restricts forms to Large and smaller in size, but none of our controls filter by size. As an 8th level spell, few players will ever cast Animal Shapes and we have tried to balance likelihood of use versus flexibility.
The existence of a movement speed operates as the secondary filter. Movement speeds act as a proxy for environment (creatures without a Climb or Swim speed can do both, but at a penalty) and, in our experience, druids will often reserve a slot for access to an unusual environment.
The third filter is a free-form field that restricts by textual prefix matched against a creature’s list of actions, traits, and similar fields. Our hypothesis is that the third criteria players will use will tend to focus on specific abilities. Since the universe of “specials” is small, we could use a drop-down, but we have left it as an open-field since we may need a more flexible filter, such as one that allows exclusive filters (“not”).

User Interface at 67% Zoom
The Combat Fitness Plot (shown expanded in the screenshot) positions beasts matching the filter by their DPR (damage per round) and Tank (hit points scaled by difficulty of being hit) scores, or roughly their offensive and defensive strength. (See “Interpreting Combat Effectiveness” section below for more details on these metrics.) The plot can be hidden since 1) players may not be interested in the combat fitness scores 2) most displays will require vertical scrolling to show the current filter, plot, and table and 3) encourage players to focus on the table. We have kept the plot because, in our experience, we found it quickly summarizes the basic combat effectiveness of creatures and helps players focus on differentiating factors.
Our table has columns for challenge rating, suggested role label, DPR score, tank score, list of unusual senses, list of actions, bonus actions, and reactions, and a list of specials which includes skills, traits, and similar fields. In comparison, the leading D&D data source, D&D Beyond, displays columns for challenge rating, creature type, size, alignment, habitat, and tags (which is usually blank). Both tables include links to full descriptions of a creature. D&D Beyond’s choice of columns (which are fixed in their UI) are meant for high-level encounter design. A game master building an encounter may be interested in monster alignment and habitat to fit world-building flavor, and is not restricted to Beast as a creature type, but these fields are irrelevant to a druid or caster. (Also, from a license perspective, creature habitat is not in the SRD.)
Interpreting Combat Effectiveness: DPR and Tank Scores
Combat in 5e is highly tactical, incorporating positioning, cover, constrained movement, choice of attacks, and varied spells and special abilities. However, Beasts, being modeled after real-world creatures, tend to have more straight-forward combat tactics than, say, a Gibbering Mouther which creates difficult terrain, can mind control opponents to act randomly, and has a rechargeable area of effect attack. Thus, our hypothesis is that we can capture a useful portion of a Beast’s combat effectiveness with two metrics.
We propose two metrics: Damage Per Round (DPR) and Tank. DPR is the expected damage to an opponent with AC 10 if the Beast uses all their attacks against the same foe. Tank is the creature’s hit points adjusted by their AC as if they were being attacked by an average human (Attack +0). Both metrics ignore any situational adjustments or special abilities. For instance, in combat Giant Frogs and Giant Toads will attempt to swallow opponents, rendering them Grappled and thus impaired on their attacks, but in our model, they never do. Similarly, apes are unusual among Beasts because they have a ranged attack (throwing rocks), but this model does not consider the advantages of attacking at range.
Challenge Rating
Challenge Rating is a pre-existing metric that serves to “summarize the threat” (SRD, pg 178) of a monster. While useful (we include it in the tool’s table), we feel it is insufficient as a metric of combat effectiveness. First, it insufficiently differentiates monsters. A 2nd level Druid will have access to Beasts with three challenge ratings: 0, ⅛, and ¼ with roughly a dozen Beasts in each category. However, a Giant Crab and a Venomous Snake, both CR ⅛, operate differently in combat, with the Giant Crab acting as a defensive sponge of attacks, while the Venomous Snake is more of a glass cannon. CR is too imprecise.
Damage Per Round (DPR)
Damage Per Round models a creature’s melee and direct damage attacks using their attack bonuses and expected damage scores. This score underestimates the deadliness of creatures with special abilities and unusual traits, while sometimes overestimating the damage output. For instance, many snakes inflict both Piercing and Poison damage and thus measure highly on DPR. However, if the opponent has Poison resistance, a snake will be of little threat. Plotting DPR against Challenge Rating shows a large variance of scores within a single CR category. The Pearson correlation score between the two metrics, across all monsters, is 0.59, a moderately positive correlation.

Boxplot of DPR by Challenge Rating
(The CR-1 outlier is the “Pirate”, a non-Beast monster whose attack is written in an unusual format which does not match our Beast-oriented stat block regular expression. Calculating DPR for monsters, particularly higher challenge-rating monsters, is difficult due to the variety of attacks and special defenses.)
Tank
Tank is the equivalent hit points of a creature if we adjusted their AC to 10. This model ignores other defensive traits like resistances and immunities, but these are rare among Beasts. 5e’s design incorporates a concept called “bounded accuracy” where the curve of improvements in AC is suppressed so more attacks will hit. To compensate, hit points are increased compared to previous editions. When we plot Tank scores by Challenge Rating, we can see that the percentiles follow a curve. Across all monsters in the SRD, the Tank score has a Pearson correlation score of 0.88 with the monster’s Challenge Rating, a strong, positive correlation.

Boxplot of Tank by Challenge Rating
(The CR-1 Tank outlier is “Animated Armor,” a Construct made of Plate Armor that is tough and has a high armor class.)
Clustering Beasts by Role
Early users provided feedback that it would be useful if beasts were labeled with a specialty or role. Although manually assigning labels is certainly feasible for the 84 beasts in the SRD, we wanted a method that could scale to the far greater number of beasts that exist in homebrew and in non-core rulebooks. Thus, we decided to use a machine clustering approach to discover existing but implicit groupings of Beasts.
Based on our experiences and Internet commentary, we expected the algorithm to find three roles: a combat role (with mostly carnivores), a reconnaissance role (with flyers, burrowers, and stealthy creatures like cats), and a mobility or utility role (with horses, mules, and other beasts of burden). Instead, the algorithm found four clusters (roles). Two of the roles reasonably match the combat and reconnaissance roles, but the other two roles were environment-based: water-based creatures and flying creatures.
As a contrast, the 2016 Unearthed Arcana: Druid document has “combat, climbing, stealth, and serving as a mount” as the list of suggested roles. We similarly found a cluster for combat. Our Explore cluster contains most of the “climbing” beasts and those that can serve as stealthy explorers, although Stealth by itself was too common a skill to be a differentiator between clusters. (Since Stealth is a skill, the Wild Shaped creature will have the greater Stealth score of the original form and the beast form.) Mechanically, a mount is any creature at least one size larger than the rider and with “appropriate anatomy” (SRD, pg. 15). Our algorithm did not find a “mount” cluster because “appropriate anatomy” is flavor, not a quantitative element found in the monster’s stat block. The lists of mounts in the SRD are tied with historical examples, such as mastiffs, horses, and camels. However, would a game master really rule that a character couldn’t ride a (willing) polar bear because it lacked an “appropriate anatomy”? Thus, “serving as a mount” seems to be a role only if a game master requires it.
Philosophically, is an unsupervised approach more valid than a supervised approach where we specified the clusters and let the computer fit a classification function? Unsupervised is a bit of misnomer because we chose the features that went into the algorithm and iterated until the results seemed “good,” based on both our understanding of the beasts and quality metrics. Although there is some bias, we believe our methodology is defensible as evidenced by the fact that the results were not what we expected initially. (One bias, we will admit, is a focus on the mechanical stat block aspects of each Beast. A mobility role may appear if we included features such as “saddles for this beast can be bought” or carrying capacity.)
If we had chosen a supervised approach, we would need validated labels for each beast in the training set. However, although there are suggested roles in the rulebooks, there are no canonical roles for each Beast. Each guide approaches the decision differently. We could create and validate labels under some role schema, but we would then be bending the data to our labels, rather than letting labels emerge from the data.
Thus, we think our clusters, delivered through an unsupervised approach, are more indicative of the reality of the rules than ad-hoc clusters imposed on the beasts.
Methodology
Through iteration, we tested a variety of encodings for beasts, evaluating the results visually using a two-dimensional principal components analysis (PCA) plot and using the silhouette metric. The groupings of columns were chosen based on their similar nature within the game. Some traits were very common so they became their own columns, such as “Pack Tactics”. The Oddball column may be seen as a violation of the approach, but beasts with Oddball traits did not congregate to their own cluster.
After experimentation, we ended up with the following set of twelve columns:
COLUMNS = ['Has Burrow', 'Has Climb', 'Has Fly', 'Has Swim',
'Combat', 'Nimble', 'Pack', 'LandWater',
'Oddball', 'Jumping', 'Web', 'Water Breathing']
Notably, neither Challenge Rating and Tank (as both a score by itself or as an “outsized” binary value) were found to be useful features. For is_outsized_dpr
, we treated a challenge rating greater than 1 as always outsized, while we measured the lower challenge ratings versus the median values within the SRD. Because there are so few examples of Beasts with higher challenge ratings, we found that the error in the measured median was too great. Furthermore, Perception and Stealth skills were too common to usefully differentiate clusters.
Our encoding logic:
def is_outsized_dpr(m) -> bool:
if m['challenge_rating'] > 1:
return True
else:
med_dpr = {0.0: 0.75, 0.125: 3.0, 0.25: 4.5, 0.5: 4.2, 1.0: 6.4}
return m['damageness'] >= med_dpr[m['challenge_rating']]
def intersection_size(a, b) -> int:
set_a = set(a)
set_b = set(b)
return len(set_a.intersection(set_b))
def monster2array(m: dict):
arr = np.zeros(len(COLUMNS))
arr[COLUMNS.index('Has Burrow')] = int('Burrow' in m['speeds'])
arr[COLUMNS.index('Has Climb')] = int('Climb' in m['speeds'])
arr[COLUMNS.index('Has Fly')] = int('Fly' in m['speeds'])
arr[COLUMNS.index('Has Swim')] = int('Swim' in m['speeds'])
arr[COLUMNS.index('Combat')] = int(is_outsized_dpr(m))
+ int('Multiattack' in m['actions_summary'])
+ int('Bloodied Fury' in m['specials'])
arr[COLUMNS.index('Nimble')] = intersection_size(m['specials'], ['Agile', 'Flyby'])
arr[COLUMNS.index('Pack')] = int('Pack Tactics' in m['specials'])
arr[COLUMNS.index('LandWater')] = intersection_size(m['specials'], ['Amphibious', 'Hold Breath'])
arr[COLUMNS.index('Oddball')] = intersection_size(m['specials'], ['Beast of Burden', 'Compression',
'Illumination', 'Mimicry', 'Resists: Cold', 'Resists: Fire', 'Resists: Poison'])
arr[COLUMNS.index('Jumping')] = intersection_size(m['specials'], ['Jumper', 'Running Leap',
'Standing Leap'])
arr[COLUMNS.index('Web')] = intersection_size(m['specials'], ['Spider Climb', 'Web Walker'])
arr[COLUMNS.index('Water Breathing')] = int('Water Breathing' in m['specials'])
return arr
In order to render each factor of equal weight, we linearly scaled each column independently to values between 0 and 1, inclusive. Linear scaling yielded greater quality than standardizing values.
We ran the resulting matrix through PCA and then used DBSCAN to find clusters within the PCA output. We also evaluated K-Means and HDBSCAN, but found DBSCAN to be superior in quality.
def computePY(X):
pca = PCA(n_components=2, whiten=True)
reduced = pca.fit_transform(X)
dbscan = DBSCAN()
Y = dbscan.fit_predict(reduced)
return reduced, Y
With a silhouette score of 0.81, DBSCAN found four clusters and one noise cluster (figure below). The first cluster (lavender) features tigers, wolfs, triceratops, and other dinosaurs. We labeled that cluster the “Fight” cluster due to their higher damage output and greater resilience. The second cluster (white) features cats, lizards, and spiders. We labeled this cluster the “Explore” cluster due to their stealth and enhanced movement (many have a climb speed). The third cluster (light green) is the “Water” cluster due to the creatures living in or near the water. The fourth cluster (dark green) is the “Sky” cluster where each beast has a flying speed. The final cluster (labeled -1 by DBSCAN and colored dark red) is a noise cluster. The Black Bear is an intermediary, having both a climb speed and a swim speed and an outsized damage output. Mathematically, the DBSCAN algorithm prefers rejecting the Black Bear from existing clusters rather than weakening a cluster.

Clusters of Beasts using DBSCAN
We believe the resulting clusters are reasonable. The algorithm certainly found movement speeds as a highly explanatory feature. The banana shape of the Water cluster suggests the cluster could be broken up, and, in fact, the “Water Breathing” limiting trait divides the group between the purely water-based beasts and the amphibious beasts. The “Sky” cluster is highly cohesive because the beasts are very similar to each other. In the 2024 edition of the rules, most of the “Giant” Beast variants were re-categorized as “Celestials”, which reduced the mechanical diversity. With more examples, the existing clusters might be further divided. Ultimately, validating that this scheme scales to other collections of beasts will require stress-testing.
Table: Beasts by Role
Fight | Explore | Water | Sky | Noise / Hybrid |
---|---|---|---|---|
Allosaurus | Ape | Archelon | Bat | Black Bear |
Ankylosaurus | Baboon | Constrictor Snake | Blood Hawk | |
Badger | Brown Bear | Crab | Eagle | |
Boar | Cat | Crocodile | Giant Bat | |
Camel | Giant Ape | Frog | Giant Wasp | |
Deer | Giant Centipede | Giant Constrictor Snake | Hawk | |
Dire Wolf | Giant Fire Beetle | Giant Crab | Owl | |
Draft Horse | Giant Goat | Giant Crocodile | Pteranodon | |
Elephant | Giant Lizard | Giant Frog | Raven | |
Elk | Giant Rat | Giant Octopus | Vulture | |
Giant Badger | Giant Spider | Giant Seahorse | ||
Giant Boar | Giant Weasel | Giant Shark | ||
Giant Hyena | Giant Wolf Spider | Giant Toad | ||
Giant Scorpion | Goat | Giant Venomous Snake | ||
Hyena | Lizard | Hippopotamus | ||
Jackal | Panther | Hunter Shark | ||
Lion | Rat | Killer Whale | ||
Mammoth | Spider | Octopus | ||
Mastiff | Weasel | Piranha | ||
Mule | Plesiosaurus | |||
Pony | Polar Bear | |||
Rhinoceros | Reef Shark | |||
Riding Horse | Seahorse | |||
Saber-Toothed Tiger | Venomous Snake | |||
Scorpion | ||||
Tiger | ||||
Triceratops | ||||
Tyrannosaurus Rex | ||||
Warhorse | ||||
Wolf |
Is Rat, Riding Horse, Spider, and Wolf a Good Recommendation?
The rulebook suggests a level 2 druid adopt the Rat, Riding Horse, Spider, and Wolf as their initial four Wild Shape forms (SRD, pg. 42). Using our system, how does this recommendation hold up?
Based on our cluster-based roles, the Rat and Spider belong to the Explore role, while the Riding Horse and Wolf belong to the Fight Role. Since second level druids cannot take a Beast form with Flying movement, the Sky role is off-limits. However, there are many beasts in the Water role that are permitted.
The Rat and Spider are very similar: both have a challenge rating of 0, are Tiny in size, have equivalent Walk and Climb speeds, and have Darkvision to 30 ft. The Spider has a superior DPR, although a Rat can use Agile to move through combat. Thus, there seems little reason to spend slots on both at the same time.
Within the Explore role, the Giant Wolf Spider has a strong Stealth score, has 40 ft movement in both Walk and Climb, has one of the best DPRs of any form available at this level, and has both Blindsight and Darkvision. Being Medium in size, it cannot fit through as tight of spaces as a Tiny or Small creature which may be a strong factor against it for certain caves or lairs.
In the Combat role, while both the Riding Horse and Wolf have a challenge rating of ¼, the fitness chart shows both as similar scoring and in the middle of options (below). The Wolf’s DPR of 3.75 may be deceptively low if among allies when it may use its Pack Attack ability, but the Panther, which is more aligned with the Explore role, is a more dangerous opponent one-on-one.

Combat Fitness Chart: Beasts available for Level 2 Druids
Although horses can have situational uses, there are many forms that will deal more damage and last longer in combat than the horse and the wolf. Including Water roles that can operate outside of water (i.e. lack Waterbreathing), the Giant Crab is tough and hard to hit, Giant Venomous Snake and the Giant Wolf Spider both hit hard with Poison damage.
Thus, the game’s recommendations seem too similar to each other. We believe slots should be chosen with greater diversity. We recommend:
- Rat or Spider, Tiny Beasts that can explore extensively while not arousing attention
- Giant Wolf Spider, a Medium Beast that can perform reconnaissance in force
- Giant Lizard, a Large Beast that can climb along ceilings and is one of the top fighters (alternatively, Giant Badger a Medium Beast with Burrow speed)
- Riding Horse (or Draft Horse or Mule), Large beasts (or Medium in the case of the Mule) that provide mobility, carrying capacity, and brute strength. Horses also blend in with most social encounters.
If water is anticipated, the Venomous Snake or Crab can be exchanged for the Spider. The Venomous Snake has greater combat ability and movement than the Crab, but the Crab has Blindsight at 30 ft (versus 10 ft for the snake) so crabs explore faster and are better able to avoid enemies. Crabs are also less threatening, but might be pursued for food.
Implementation
For the data analysis, we used scikit-learn and Plotly within a Jupyter notebook. Given the small size of the data, we did not attempt any neural net-based approaches. For the web-based tool, we used Typescript, React, and Plotly, with Vite/Vitest for building and testing, respectively.
We used commercial LLMs to extract structured data from the SRD PDF into JSON and then transformed the data via scripts into a more convenient form. We found the LLMs would stop processing the PDF after a non-deterministic number of pages, regardless of instructions in the prompt, which required us to split the SRD PDF into roughly ten page sections. While the SRD monster descriptions typically follow very regular sentence formulations, and thus is amenable to processing via regular expressions, we did need special casing for some aberrant examples. We considered using pre-existing extracts of the SRD but, as of September 2025, were unable to find any high-quality extracts that cover SRD version 5.2, released in April 2025.
Conclusion
Compared to other online guides, we find that Beasts can be grouped into Combat and Exploration roles, but that, mechanically, there does not seem to be an identifiable Mobility or Utility role. Movement speeds are a more prominent differentiator in the data. Our tool, by labeling Beasts using four roles, by featuring rules-relevant columns rather than flavor-based columns in the user interface, and by clarifying combat effectiveness through the DPR and Tank scores, allows players to efficiently select Beast forms during play.