mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 00:32:40 +00:00
D&D: codified bestiary tuning pass — derive tuned roster from SRD staging
Adds `gen tuned` to cmd/open5e-import: a deterministic formula that scales every raw SRD stat block down to an engine-ready DnDMonsterTemplate. HP/AC/ AttackBonus are verbatim SRD (AC clamped to the engine min 10); the Attack stat is interpolated from attackByCRPoints, a CR→Attack anchor table lifted from the hand-tuned dndBestiary (CR is the calibration axis the 2026-05-10 rebalance used — raw SRD per-hit damage is ignored). Speed/BlockRate are coarse baselines from SpeedWalk/AC. bestiary_tuned.go merges the 322 generated templates into dndBestiary, but hand-authored roster entries win — the merge only fills IDs the roster does not already define, so playtested numbers and wired abilities are untouched. Abilities are deliberately not wired: every generated entry has a nil Ability, with the SRD multiattack/trait text parked in Notes as raw material for the follow-up ability-wiring pass.
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
// open5e-import gen spells # classify → internal/plugin/dnd_spells_srd_data.go
|
||||
// open5e-import fetch bestiary # vendor data/open5e/monsters.json from the API
|
||||
// open5e-import gen bestiary # classify → internal/plugin/bestiary_srd_data.go
|
||||
// open5e-import gen tuned # tuning formula → internal/plugin/bestiary_tuned_data.go
|
||||
//
|
||||
// `equipment` subcommands are planned; the dispatch below is structured to
|
||||
// grow into them without reshuffling.
|
||||
@@ -31,6 +32,7 @@ const (
|
||||
monstersAPIBase = "https://api.open5e.com/v1/monsters/?document__slug=wotc-srd&limit=50"
|
||||
monstersJSON = "data/open5e/monsters.json"
|
||||
bestiaryGenGo = "internal/plugin/bestiary_srd_data.go"
|
||||
tunedGenGo = "internal/plugin/bestiary_tuned_data.go"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -54,6 +56,8 @@ func main() {
|
||||
must(genSpells())
|
||||
case "bestiary":
|
||||
must(genBestiary())
|
||||
case "tuned":
|
||||
must(genTuned())
|
||||
default:
|
||||
usage()
|
||||
}
|
||||
@@ -63,7 +67,7 @@ func main() {
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Fprintln(os.Stderr, "usage: open5e-import (fetch|gen) (spells|bestiary)")
|
||||
fmt.Fprintln(os.Stderr, "usage: open5e-import fetch (spells|bestiary) | gen (spells|bestiary|tuned)")
|
||||
os.Exit(2)
|
||||
}
|
||||
|
||||
|
||||
236
cmd/open5e-import/tuned.go
Normal file
236
cmd/open5e-import/tuned.go
Normal file
@@ -0,0 +1,236 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// genTuned derives an engine-ready DnDMonsterTemplate for every SRD monster and
|
||||
// writes the generated Go data file. It is the codified "tuning pass": the raw
|
||||
// SRD staging table one-shots gogobee's solo player, so this applies a
|
||||
// deterministic formula to scale each stat block down to the engine's
|
||||
// gameplay-tuned shape.
|
||||
//
|
||||
// Formula (reverse-engineered from the hand-tuned dndBestiary, 2026-05 passes):
|
||||
//
|
||||
// - HP, AC, AttackBonus — verbatim SRD (AC clamped to the engine's min 10).
|
||||
// - Attack — the auto-resolve damage stat, driven by CR alone
|
||||
// via attackByCR (raw SRD per-hit damage is deliberately ignored — CR is
|
||||
// the calibration axis the 2026-05-10 rebalance used).
|
||||
// - Speed, BlockRate — coarse baselines from SpeedWalk / AC; the ability
|
||||
// pass refines them per creature.
|
||||
// - XP, CR — verbatim from the staging table.
|
||||
// - Ability — nil. Trait→MonsterAbility wiring is a follow-up
|
||||
// pass; Notes records the SRD multiattack/trait text so that pass has a
|
||||
// starting point.
|
||||
//
|
||||
// Hand-authored dndBestiary entries WIN: the generated map is merged in only
|
||||
// for IDs the roster doesn't already define (see bestiary_tuned.go).
|
||||
func genTuned() error {
|
||||
raw, err := os.ReadFile(monstersJSON)
|
||||
if err != nil {
|
||||
return fmt.Errorf("read %s (run `fetch bestiary` first?): %w", monstersJSON, err)
|
||||
}
|
||||
var src []open5eMonster
|
||||
if err := json.Unmarshal(raw, &src); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tuned := make([]genTunedMonster, 0, len(src))
|
||||
for _, m := range src {
|
||||
tuned = append(tuned, tuneMonster(classifyMonster(m)))
|
||||
}
|
||||
sort.Slice(tuned, func(i, j int) bool {
|
||||
if tuned[i].CR != tuned[j].CR {
|
||||
return tuned[i].CR < tuned[j].CR
|
||||
}
|
||||
return tuned[i].ID < tuned[j].ID
|
||||
})
|
||||
fmt.Fprintf(os.Stderr, "tuned %d monsters\n", len(tuned))
|
||||
|
||||
out := emitTuned(tuned)
|
||||
if err := os.WriteFile(tunedGenGo, out, 0o644); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Fprintln(os.Stderr, "wrote", tunedGenGo)
|
||||
return nil
|
||||
}
|
||||
|
||||
// genTunedMonster mirrors plugin.DnDMonsterTemplate, minus the Ability pointer
|
||||
// (the generator never wires abilities — that is a hand-authored follow-up).
|
||||
type genTunedMonster struct {
|
||||
ID, Name string
|
||||
CR float64
|
||||
HP, AC int
|
||||
Attack int
|
||||
AttackBonus int
|
||||
Speed int
|
||||
BlockRate float64
|
||||
XPValue int
|
||||
Notes string
|
||||
}
|
||||
|
||||
// tuneMonster applies the tuning formula to one raw SRD stat block.
|
||||
func tuneMonster(b genStatBlock) genTunedMonster {
|
||||
ac := b.AC
|
||||
if ac < 10 { // engine minimum (see the zombie 8→10 note in dnd_bestiary.go)
|
||||
ac = 10
|
||||
}
|
||||
return genTunedMonster{
|
||||
ID: b.Slug,
|
||||
Name: b.Name,
|
||||
CR: b.CR,
|
||||
HP: b.HP,
|
||||
AC: ac,
|
||||
Attack: attackByCR(b.CR),
|
||||
AttackBonus: primaryAttackBonus(b.Attacks),
|
||||
Speed: tunedSpeed(b.SpeedWalk),
|
||||
BlockRate: tunedBlockRate(ac),
|
||||
XPValue: b.XP,
|
||||
Notes: tunedNotes(b),
|
||||
}
|
||||
}
|
||||
|
||||
// attackByCRPoints anchors the Attack-stat curve against the hand-tuned
|
||||
// dndBestiary: each point is an (CR, observed Attack) pair lifted straight from
|
||||
// a playtested roster entry. attackByCR interpolates between anchors and
|
||||
// extrapolates past the top one along the final segment's slope.
|
||||
var attackByCRPoints = []struct {
|
||||
cr float64
|
||||
atk int
|
||||
}{
|
||||
{0, 1}, {0.125, 1}, {0.25, 1}, {0.5, 2}, {1, 2}, {2, 4}, {3, 6}, {4, 7},
|
||||
{5, 8}, {6, 10}, {7, 12}, {8, 13}, {9, 14}, {10, 16}, {11, 18}, {12, 19},
|
||||
{13, 21}, {16, 26}, {19, 31}, {20, 33}, {24, 38},
|
||||
}
|
||||
|
||||
func attackByCR(cr float64) int {
|
||||
pts := attackByCRPoints
|
||||
if cr <= pts[0].cr {
|
||||
return pts[0].atk
|
||||
}
|
||||
last := pts[len(pts)-1]
|
||||
if cr >= last.cr {
|
||||
prev := pts[len(pts)-2]
|
||||
slope := float64(last.atk-prev.atk) / (last.cr - prev.cr)
|
||||
atk := int(math.Round(float64(last.atk) + slope*(cr-last.cr)))
|
||||
if atk < 1 {
|
||||
atk = 1
|
||||
}
|
||||
return atk
|
||||
}
|
||||
for i := 1; i < len(pts); i++ {
|
||||
if cr <= pts[i].cr {
|
||||
lo, hi := pts[i-1], pts[i]
|
||||
t := (cr - lo.cr) / (hi.cr - lo.cr)
|
||||
atk := int(math.Round(float64(lo.atk) + t*float64(hi.atk-lo.atk)))
|
||||
if atk < 1 {
|
||||
atk = 1
|
||||
}
|
||||
return atk
|
||||
}
|
||||
}
|
||||
return last.atk
|
||||
}
|
||||
|
||||
// primaryAttackBonus returns the d20 to-hit modifier of the creature's
|
||||
// hardest-hitting attack — the one the engine's single Attack stat stands in
|
||||
// for. Returns 0 (engine falls back to the tier-scaled bonus) when the stat
|
||||
// block has no parsed weapon attacks.
|
||||
func primaryAttackBonus(attacks []genStatAttack) int {
|
||||
bonus, best := 0, -1
|
||||
for _, a := range attacks {
|
||||
if a.AvgDamage > best {
|
||||
best, bonus = a.AvgDamage, a.AttackBonus
|
||||
}
|
||||
}
|
||||
return bonus
|
||||
}
|
||||
|
||||
// tunedSpeed maps an SRD walk speed (feet) onto the engine's speed scale. The
|
||||
// engine treats speed as an initiative-ordering knob, so a coarse divide-and-
|
||||
// clamp is enough; the ability pass can hand-tune outliers.
|
||||
func tunedSpeed(walk int) int {
|
||||
if walk <= 0 {
|
||||
return 10
|
||||
}
|
||||
s := int(math.Round(float64(walk) / 2.5))
|
||||
if s < 6 {
|
||||
s = 6
|
||||
}
|
||||
if s > 18 {
|
||||
s = 18
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// tunedBlockRate is a baseline damage-halve chance keyed off AC — heavier armor
|
||||
// reads as a better chance to soak a hit. The ability pass overrides this for
|
||||
// creatures whose block is a real mechanic (Parry, shields, etc.).
|
||||
func tunedBlockRate(ac int) float64 {
|
||||
switch {
|
||||
case ac >= 18:
|
||||
return 0.15
|
||||
case ac >= 15:
|
||||
return 0.10
|
||||
case ac >= 13:
|
||||
return 0.05
|
||||
default:
|
||||
return 0.0
|
||||
}
|
||||
}
|
||||
|
||||
// tunedNotes records the SRD multiattack and trait text so the follow-up
|
||||
// ability-wiring pass has the source material in front of it.
|
||||
func tunedNotes(b genStatBlock) string {
|
||||
const prefix = "SRD-tuned baseline — ability not yet wired."
|
||||
var parts []string
|
||||
if b.Multiattack != "" {
|
||||
parts = append(parts, "Multiattack: "+b.Multiattack)
|
||||
}
|
||||
if len(b.Traits) > 0 {
|
||||
parts = append(parts, "Traits: "+strings.Join(b.Traits, ", "))
|
||||
}
|
||||
if len(parts) == 0 {
|
||||
return prefix
|
||||
}
|
||||
return prefix + " " + strings.Join(parts, " ")
|
||||
}
|
||||
|
||||
// emitTuned renders the tuned templates as a generated Go source file.
|
||||
func emitTuned(monsters []genTunedMonster) []byte {
|
||||
var b bytes.Buffer
|
||||
b.WriteString(`// Code generated by cmd/open5e-import. DO NOT EDIT.
|
||||
//
|
||||
// Source: Open5e SRD monster dump (data/open5e/monsters.json), 5e SRD content
|
||||
// under CC-BY-4.0 — see NOTICE. Regenerate with:
|
||||
//
|
||||
// go run ./cmd/open5e-import fetch bestiary
|
||||
// go run ./cmd/open5e-import gen tuned
|
||||
//
|
||||
// Engine-ready DnDMonsterTemplates derived from the raw SRD staging table by
|
||||
// the tuning formula in cmd/open5e-import/tuned.go. Hand-authored dndBestiary
|
||||
// entries take precedence — see bestiary_tuned.go for the merge.
|
||||
|
||||
package plugin
|
||||
|
||||
func buildTunedBestiarySRD() map[string]DnDMonsterTemplate {
|
||||
return map[string]DnDMonsterTemplate{
|
||||
`)
|
||||
for _, m := range monsters {
|
||||
fmt.Fprintf(&b, "\t\t%q: {ID: %q, Name: %q, CR: %s, HP: %d, AC: %d, Attack: %d, AttackBonus: %d, Speed: %d, BlockRate: %s, XPValue: %d, Notes: %q},\n",
|
||||
m.ID, m.ID, m.Name,
|
||||
strconv.FormatFloat(m.CR, 'g', -1, 32),
|
||||
m.HP, m.AC, m.Attack, m.AttackBonus, m.Speed,
|
||||
strconv.FormatFloat(m.BlockRate, 'g', -1, 64),
|
||||
m.XPValue, m.Notes)
|
||||
}
|
||||
b.WriteString("\t}\n}\n")
|
||||
return b.Bytes()
|
||||
}
|
||||
32
internal/plugin/bestiary_tuned.go
Normal file
32
internal/plugin/bestiary_tuned.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package plugin
|
||||
|
||||
// Tuned SRD bestiary — the engine-ready layer derived from the raw staging
|
||||
// table.
|
||||
//
|
||||
// srdStagingBestiary holds verbatim SRD stat blocks, which one-shot gogobee's
|
||||
// solo player and are not a drop-in roster (see bestiary_srd_staging.go).
|
||||
// tunedBestiarySRD is what the codified tuning pass produces from it: a
|
||||
// DnDMonsterTemplate per SRD monster, scaled to the engine's gameplay shape.
|
||||
// The formula lives in cmd/open5e-import/tuned.go; regenerate the data with
|
||||
// `go run ./cmd/open5e-import gen tuned`.
|
||||
//
|
||||
// Caveat — abilities are NOT wired. Every generated entry has a nil Ability;
|
||||
// its Notes field carries the SRD multiattack/trait text as raw material for
|
||||
// the follow-up ability-wiring pass. Until that pass lands, a tuned-only
|
||||
// creature fights with stats but no special mechanic.
|
||||
//
|
||||
// File is intentionally NOT dnd_-prefixed (see memory: no new dnd_* identifiers).
|
||||
|
||||
var tunedBestiarySRD = buildTunedBestiarySRD()
|
||||
|
||||
// Merge the tuned templates into the canonical dndBestiary lookup. Hand-authored
|
||||
// roster entries WIN: a tuned entry is only added for an ID the roster doesn't
|
||||
// already define, so playtested numbers and wired abilities are never clobbered.
|
||||
var _ = func() bool {
|
||||
for id, m := range tunedBestiarySRD {
|
||||
if _, ok := dndBestiary[id]; !ok {
|
||||
dndBestiary[id] = m
|
||||
}
|
||||
}
|
||||
return true
|
||||
}()
|
||||
340
internal/plugin/bestiary_tuned_data.go
Normal file
340
internal/plugin/bestiary_tuned_data.go
Normal file
@@ -0,0 +1,340 @@
|
||||
// Code generated by cmd/open5e-import. DO NOT EDIT.
|
||||
//
|
||||
// Source: Open5e SRD monster dump (data/open5e/monsters.json), 5e SRD content
|
||||
// under CC-BY-4.0 — see NOTICE. Regenerate with:
|
||||
//
|
||||
// go run ./cmd/open5e-import fetch bestiary
|
||||
// go run ./cmd/open5e-import gen tuned
|
||||
//
|
||||
// Engine-ready DnDMonsterTemplates derived from the raw SRD staging table by
|
||||
// the tuning formula in cmd/open5e-import/tuned.go. Hand-authored dndBestiary
|
||||
// entries take precedence — see bestiary_tuned.go for the merge.
|
||||
|
||||
package plugin
|
||||
|
||||
func buildTunedBestiarySRD() map[string]DnDMonsterTemplate {
|
||||
return map[string]DnDMonsterTemplate{
|
||||
"awakened_shrub": {ID: "awakened_shrub", Name: "Awakened Shrub", CR: 0, HP: 10, AC: 10, Attack: 1, AttackBonus: 1, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: False Appearance"},
|
||||
"baboon": {ID: "baboon", Name: "Baboon", CR: 0, HP: 3, AC: 12, Attack: 1, AttackBonus: 1, Speed: 12, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Pack Tactics"},
|
||||
"badger": {ID: "badger", Name: "Badger", CR: 0, HP: 3, AC: 10, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell"},
|
||||
"bat": {ID: "bat", Name: "Bat", CR: 0, HP: 1, AC: 12, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Echolocation, Keen Hearing"},
|
||||
"cat": {ID: "cat", Name: "Cat", CR: 0, HP: 2, AC: 12, Attack: 1, AttackBonus: 0, Speed: 16, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell"},
|
||||
"commoner": {ID: "commoner", Name: "Commoner", CR: 0, HP: 4, AC: 10, Attack: 1, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"crab": {ID: "crab", Name: "Crab", CR: 0, HP: 2, AC: 11, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"deer": {ID: "deer", Name: "Deer", CR: 0, HP: 4, AC: 13, Attack: 1, AttackBonus: 2, Speed: 18, BlockRate: 0.05, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"eagle": {ID: "eagle", Name: "Eagle", CR: 0, HP: 3, AC: 12, Attack: 1, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Sight"},
|
||||
"frog": {ID: "frog", Name: "Frog", CR: 0, HP: 1, AC: 11, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious, Standing Leap"},
|
||||
"giant_fire_beetle": {ID: "giant_fire_beetle", Name: "Giant Fire Beetle", CR: 0, HP: 4, AC: 13, Attack: 1, AttackBonus: 1, Speed: 12, BlockRate: 0.05, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Illumination"},
|
||||
"goat": {ID: "goat", Name: "Goat", CR: 0, HP: 4, AC: 10, Attack: 1, AttackBonus: 3, Speed: 16, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge, Sure-Footed"},
|
||||
"hawk": {ID: "hawk", Name: "Hawk", CR: 0, HP: 1, AC: 13, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0.05, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Sight"},
|
||||
"homunculus": {ID: "homunculus", Name: "Homunculus", CR: 0, HP: 5, AC: 13, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0.05, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Telepathic Bond"},
|
||||
"hyena": {ID: "hyena", Name: "Hyena", CR: 0, HP: 5, AC: 11, Attack: 1, AttackBonus: 2, Speed: 18, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Pack Tactics"},
|
||||
"jackal": {ID: "jackal", Name: "Jackal", CR: 0, HP: 3, AC: 12, Attack: 1, AttackBonus: 1, Speed: 16, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell, Pack Tactics"},
|
||||
"lemure": {ID: "lemure", Name: "Lemure", CR: 0, HP: 13, AC: 10, Attack: 1, AttackBonus: 3, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Devil's Sight, Hellish Rejuvenation"},
|
||||
"lizard": {ID: "lizard", Name: "Lizard", CR: 0, HP: 2, AC: 10, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"octopus": {ID: "octopus", Name: "Octopus", CR: 0, HP: 3, AC: 12, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Hold Breath, Underwater Camouflage, Water Breathing"},
|
||||
"owl": {ID: "owl", Name: "Owl", CR: 0, HP: 1, AC: 11, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Flyby, Keen Hearing and Sight"},
|
||||
"quipper": {ID: "quipper", Name: "Quipper", CR: 0, HP: 1, AC: 13, Attack: 1, AttackBonus: 0, Speed: 16, BlockRate: 0.05, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Blood Frenzy, Water Breathing"},
|
||||
"rat": {ID: "rat", Name: "Rat", CR: 0, HP: 1, AC: 10, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell"},
|
||||
"raven": {ID: "raven", Name: "Raven", CR: 0, HP: 1, AC: 12, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Mimicry"},
|
||||
"scorpion": {ID: "scorpion", Name: "Scorpion", CR: 0, HP: 1, AC: 11, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"sea_horse": {ID: "sea_horse", Name: "Sea Horse", CR: 0, HP: 1, AC: 11, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Water Breathing"},
|
||||
"shrieker": {ID: "shrieker", Name: "Shrieker", CR: 0, HP: 13, AC: 10, Attack: 1, AttackBonus: 0, Speed: 10, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: False Appearance"},
|
||||
"spider": {ID: "spider", Name: "Spider", CR: 0, HP: 1, AC: 12, Attack: 1, AttackBonus: 0, Speed: 8, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Spider Climb, Web Sense, Web Walker"},
|
||||
"vulture": {ID: "vulture", Name: "Vulture", CR: 0, HP: 5, AC: 10, Attack: 1, AttackBonus: 2, Speed: 6, BlockRate: 0, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Sight and Smell, Pack Tactics"},
|
||||
"weasel": {ID: "weasel", Name: "Weasel", CR: 0, HP: 1, AC: 13, Attack: 1, AttackBonus: 0, Speed: 12, BlockRate: 0.05, XPValue: 10, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell"},
|
||||
"bandit": {ID: "bandit", Name: "Bandit", CR: 0.125, HP: 11, AC: 12, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"blood_hawk": {ID: "blood_hawk", Name: "Blood Hawk", CR: 0.125, HP: 7, AC: 12, Attack: 1, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Sight, Pack Tactics"},
|
||||
"camel": {ID: "camel", Name: "Camel", CR: 0.125, HP: 15, AC: 10, Attack: 1, AttackBonus: 5, Speed: 18, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"cultist": {ID: "cultist", Name: "Cultist", CR: 0.125, HP: 9, AC: 12, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Dark Devotion"},
|
||||
"flying_snake": {ID: "flying_snake", Name: "Flying Snake", CR: 0.125, HP: 5, AC: 14, Attack: 1, AttackBonus: 0, Speed: 12, BlockRate: 0.05, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Flyby"},
|
||||
"giant_crab": {ID: "giant_crab", Name: "Giant Crab", CR: 0.125, HP: 13, AC: 15, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0.1, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"giant_rat": {ID: "giant_rat", Name: "Giant Rat", CR: 0.125, HP: 7, AC: 12, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell, Pack Tactics"},
|
||||
"giant_rat_diseased": {ID: "giant_rat_diseased", Name: "Giant Rat (Diseased)", CR: 0.125, HP: 7, AC: 12, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"giant_weasel": {ID: "giant_weasel", Name: "Giant Weasel", CR: 0.125, HP: 9, AC: 13, Attack: 1, AttackBonus: 5, Speed: 16, BlockRate: 0.05, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell"},
|
||||
"guard": {ID: "guard", Name: "Guard", CR: 0.125, HP: 11, AC: 16, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0.1, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"kobold": {ID: "kobold", Name: "Kobold", CR: 0.125, HP: 5, AC: 12, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Sunlight Sensitivity, Pack Tactics"},
|
||||
"mastiff": {ID: "mastiff", Name: "Mastiff", CR: 0.125, HP: 5, AC: 12, Attack: 1, AttackBonus: 3, Speed: 16, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell"},
|
||||
"merfolk": {ID: "merfolk", Name: "Merfolk", CR: 0.125, HP: 11, AC: 11, Attack: 1, AttackBonus: 2, Speed: 6, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"mule": {ID: "mule", Name: "Mule", CR: 0.125, HP: 11, AC: 10, Attack: 1, AttackBonus: 4, Speed: 16, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Beast of Burden, Sure-Footed"},
|
||||
"noble": {ID: "noble", Name: "Noble", CR: 0.125, HP: 9, AC: 15, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0.1, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"poisonous_snake": {ID: "poisonous_snake", Name: "Poisonous Snake", CR: 0.125, HP: 2, AC: 13, Attack: 1, AttackBonus: 0, Speed: 12, BlockRate: 0.05, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"pony": {ID: "pony", Name: "Pony", CR: 0.125, HP: 11, AC: 10, Attack: 1, AttackBonus: 4, Speed: 16, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"stirge": {ID: "stirge", Name: "Stirge", CR: 0.125, HP: 2, AC: 14, Attack: 1, AttackBonus: 5, Speed: 6, BlockRate: 0.05, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"tribal_warrior": {ID: "tribal_warrior", Name: "Tribal Warrior", CR: 0.125, HP: 11, AC: 12, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 25, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Pack Tactics"},
|
||||
"acolyte": {ID: "acolyte", Name: "Acolyte", CR: 0.25, HP: 9, AC: 10, Attack: 1, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Spellcasting"},
|
||||
"axe_beak": {ID: "axe_beak", Name: "Axe Beak", CR: 0.25, HP: 19, AC: 11, Attack: 1, AttackBonus: 4, Speed: 18, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"blink_dog": {ID: "blink_dog", Name: "Blink Dog", CR: 0.25, HP: 22, AC: 13, Attack: 1, AttackBonus: 3, Speed: 16, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell"},
|
||||
"boar": {ID: "boar", Name: "Boar", CR: 0.25, HP: 11, AC: 11, Attack: 1, AttackBonus: 3, Speed: 16, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge, Relentless (Recharges after a Short or Long Rest)"},
|
||||
"constrictor_snake": {ID: "constrictor_snake", Name: "Constrictor Snake", CR: 0.25, HP: 13, AC: 12, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"draft_horse": {ID: "draft_horse", Name: "Draft Horse", CR: 0.25, HP: 19, AC: 10, Attack: 1, AttackBonus: 6, Speed: 16, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"dretch": {ID: "dretch", Name: "Dretch", CR: 0.25, HP: 18, AC: 11, Attack: 1, AttackBonus: 2, Speed: 8, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dretch makes two attacks: one with its bite and one with its claws."},
|
||||
"drow": {ID: "drow", Name: "Drow", CR: 0.25, HP: 13, AC: 15, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0.1, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Fey Ancestry, Innate Spellcasting, Sunlight Sensitivity"},
|
||||
"elk": {ID: "elk", Name: "Elk", CR: 0.25, HP: 13, AC: 10, Attack: 1, AttackBonus: 0, Speed: 18, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge"},
|
||||
"flying_sword": {ID: "flying_sword", Name: "Flying Sword", CR: 0.25, HP: 17, AC: 17, Attack: 1, AttackBonus: 3, Speed: 18, BlockRate: 0.1, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Antimagic Susceptibility, False Appearance"},
|
||||
"giant_badger": {ID: "giant_badger", Name: "Giant Badger", CR: 0.25, HP: 13, AC: 10, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The badger makes two attacks: one with its bite and one with its claws. Traits: Keen Smell"},
|
||||
"giant_bat": {ID: "giant_bat", Name: "Giant Bat", CR: 0.25, HP: 22, AC: 13, Attack: 1, AttackBonus: 4, Speed: 6, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Echolocation, Keen Hearing"},
|
||||
"giant_centipede": {ID: "giant_centipede", Name: "Giant Centipede", CR: 0.25, HP: 4, AC: 13, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"giant_frog": {ID: "giant_frog", Name: "Giant Frog", CR: 0.25, HP: 18, AC: 11, Attack: 1, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious, Standing Leap"},
|
||||
"giant_lizard": {ID: "giant_lizard", Name: "Giant Lizard", CR: 0.25, HP: 19, AC: 12, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Variant: Hold Breath, Variant: Spider Climb"},
|
||||
"giant_owl": {ID: "giant_owl", Name: "Giant Owl", CR: 0.25, HP: 19, AC: 12, Attack: 1, AttackBonus: 3, Speed: 6, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Flyby, Keen Hearing and Sight"},
|
||||
"giant_poisonous_snake": {ID: "giant_poisonous_snake", Name: "Giant Poisonous Snake", CR: 0.25, HP: 11, AC: 14, Attack: 1, AttackBonus: 6, Speed: 12, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"giant_wolf_spider": {ID: "giant_wolf_spider", Name: "Giant Wolf Spider", CR: 0.25, HP: 11, AC: 13, Attack: 1, AttackBonus: 3, Speed: 16, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Spider Climb, Web Sense, Web Walker"},
|
||||
"goblin": {ID: "goblin", Name: "Goblin", CR: 0.25, HP: 7, AC: 15, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0.1, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Nimble Escape"},
|
||||
"grimlock": {ID: "grimlock", Name: "Grimlock", CR: 0.25, HP: 11, AC: 11, Attack: 1, AttackBonus: 5, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Blind Senses, Keen Hearing and Smell, Stone Camouflage"},
|
||||
"panther": {ID: "panther", Name: "Panther", CR: 0.25, HP: 13, AC: 12, Attack: 1, AttackBonus: 4, Speed: 18, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell, Pounce"},
|
||||
"pseudodragon": {ID: "pseudodragon", Name: "Pseudodragon", CR: 0.25, HP: 7, AC: 13, Attack: 1, AttackBonus: 4, Speed: 6, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Senses, Magic Resistance, Limited Telepathy, Variant: Familiar"},
|
||||
"riding_horse": {ID: "riding_horse", Name: "Riding Horse", CR: 0.25, HP: 13, AC: 10, Attack: 1, AttackBonus: 5, Speed: 18, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"skeleton": {ID: "skeleton", Name: "Skeleton", CR: 0.25, HP: 13, AC: 13, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"sprite": {ID: "sprite", Name: "Sprite", CR: 0.25, HP: 2, AC: 15, Attack: 1, AttackBonus: 0, Speed: 6, BlockRate: 0.1, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"steam_mephit": {ID: "steam_mephit", Name: "Steam Mephit", CR: 0.25, HP: 21, AC: 10, Attack: 1, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Death Burst, Innate Spellcasting (1/Day)"},
|
||||
"swarm_of_bats": {ID: "swarm_of_bats", Name: "Swarm of Bats", CR: 0.25, HP: 22, AC: 12, Attack: 1, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Echolocation, Keen Hearing, Swarm"},
|
||||
"swarm_of_rats": {ID: "swarm_of_rats", Name: "Swarm of Rats", CR: 0.25, HP: 24, AC: 10, Attack: 1, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell, Swarm"},
|
||||
"swarm_of_ravens": {ID: "swarm_of_ravens", Name: "Swarm of Ravens", CR: 0.25, HP: 24, AC: 12, Attack: 1, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm"},
|
||||
"violet_fungus": {ID: "violet_fungus", Name: "Violet Fungus", CR: 0.25, HP: 18, AC: 10, Attack: 1, AttackBonus: 2, Speed: 6, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The fungus makes 1d4 Rotting Touch attacks. Traits: False Appearance"},
|
||||
"wolf": {ID: "wolf", Name: "Wolf", CR: 0.25, HP: 11, AC: 13, Attack: 1, AttackBonus: 4, Speed: 16, BlockRate: 0.05, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell, Pack Tactics"},
|
||||
"zombie": {ID: "zombie", Name: "Zombie", CR: 0.25, HP: 22, AC: 10, Attack: 1, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 50, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Undead Fortitude"},
|
||||
"ape": {ID: "ape", Name: "Ape", CR: 0.5, HP: 19, AC: 12, Attack: 2, AttackBonus: 5, Speed: 12, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The ape makes two fist attacks."},
|
||||
"black_bear": {ID: "black_bear", Name: "Black Bear", CR: 0.5, HP: 19, AC: 11, Attack: 2, AttackBonus: 3, Speed: 16, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The bear makes two attacks: one with its bite and one with its claws. Traits: Keen Smell"},
|
||||
"cockatrice": {ID: "cockatrice", Name: "Cockatrice", CR: 0.5, HP: 27, AC: 11, Attack: 2, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"crocodile": {ID: "crocodile", Name: "Crocodile", CR: 0.5, HP: 19, AC: 12, Attack: 2, AttackBonus: 4, Speed: 8, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Hold Breath"},
|
||||
"darkmantle": {ID: "darkmantle", Name: "Darkmantle", CR: 0.5, HP: 22, AC: 11, Attack: 2, AttackBonus: 5, Speed: 6, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Echolocation, False Appearance"},
|
||||
"deep_gnome_svirfneblin": {ID: "deep_gnome_svirfneblin", Name: "Deep Gnome (Svirfneblin)", CR: 0.5, HP: 16, AC: 15, Attack: 2, AttackBonus: 4, Speed: 8, BlockRate: 0.1, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Stone Camouflage, Gnome Cunning, Innate Spellcasting"},
|
||||
"dust_mephit": {ID: "dust_mephit", Name: "Dust Mephit", CR: 0.5, HP: 17, AC: 12, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Death Burst, Innate Spellcasting (1/Day)"},
|
||||
"giant_goat": {ID: "giant_goat", Name: "Giant Goat", CR: 0.5, HP: 19, AC: 11, Attack: 2, AttackBonus: 5, Speed: 16, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge, Sure-Footed"},
|
||||
"giant_sea_horse": {ID: "giant_sea_horse", Name: "Giant Sea Horse", CR: 0.5, HP: 16, AC: 13, Attack: 2, AttackBonus: 3, Speed: 16, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge, Water Breathing"},
|
||||
"giant_wasp": {ID: "giant_wasp", Name: "Giant Wasp", CR: 0.5, HP: 13, AC: 12, Attack: 2, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"gnoll": {ID: "gnoll", Name: "Gnoll", CR: 0.5, HP: 22, AC: 15, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0.1, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Rampage"},
|
||||
"gray_ooze": {ID: "gray_ooze", Name: "Gray Ooze", CR: 0.5, HP: 22, AC: 10, Attack: 2, AttackBonus: 3, Speed: 6, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amorphous, Corrode Metal, False Appearance"},
|
||||
"hobgoblin": {ID: "hobgoblin", Name: "Hobgoblin", CR: 0.5, HP: 11, AC: 18, Attack: 2, AttackBonus: 3, Speed: 12, BlockRate: 0.15, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Martial Advantage"},
|
||||
"ice_mephit": {ID: "ice_mephit", Name: "Ice Mephit", CR: 0.5, HP: 21, AC: 11, Attack: 2, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Death Burst, False Appearance, Innate Spellcasting (1/Day)"},
|
||||
"lizardfolk": {ID: "lizardfolk", Name: "Lizardfolk", CR: 0.5, HP: 22, AC: 15, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0.1, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The lizardfolk makes two melee attacks, each one with a different weapon. Traits: Hold Breath"},
|
||||
"magma_mephit": {ID: "magma_mephit", Name: "Magma Mephit", CR: 0.5, HP: 22, AC: 11, Attack: 2, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Death Burst, False Appearance, Innate Spellcasting (1/Day)"},
|
||||
"magmin": {ID: "magmin", Name: "Magmin", CR: 0.5, HP: 9, AC: 14, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Death Burst, Ignited Illumination"},
|
||||
"orc": {ID: "orc", Name: "Orc", CR: 0.5, HP: 15, AC: 13, Attack: 2, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Aggressive"},
|
||||
"reef_shark": {ID: "reef_shark", Name: "Reef Shark", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 4, Speed: 16, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Pack Tactics, Water Breathing"},
|
||||
"rust_monster": {ID: "rust_monster", Name: "Rust Monster", CR: 0.5, HP: 27, AC: 14, Attack: 2, AttackBonus: 3, Speed: 16, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Iron Scent, Rust Metal"},
|
||||
"sahuagin": {ID: "sahuagin", Name: "Sahuagin", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 3, Speed: 12, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The sahuagin makes two melee attacks: one with its bite and one with its claws or spear. Traits: Blood Frenzy, Limited Amphibiousness, Shark Telepathy"},
|
||||
"satyr": {ID: "satyr", Name: "Satyr", CR: 0.5, HP: 31, AC: 14, Attack: 2, AttackBonus: 3, Speed: 16, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Magic Resistance"},
|
||||
"scout": {ID: "scout", Name: "Scout", CR: 0.5, HP: 16, AC: 13, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The scout makes two melee attacks or two ranged attacks. Traits: Keen Hearing and Sight"},
|
||||
"shadow": {ID: "shadow", Name: "Shadow", CR: 0.5, HP: 16, AC: 12, Attack: 2, AttackBonus: 4, Speed: 16, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amorphous, Shadow Stealth, Sunlight Weakness"},
|
||||
"swarm_of_beetles": {ID: "swarm_of_beetles", Name: "Swarm of Beetles", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm"},
|
||||
"swarm_of_centipedes": {ID: "swarm_of_centipedes", Name: "Swarm of Centipedes", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm"},
|
||||
"swarm_of_insects": {ID: "swarm_of_insects", Name: "Swarm of Insects", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm"},
|
||||
"swarm_of_spiders": {ID: "swarm_of_spiders", Name: "Swarm of Spiders", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm, Spider Climb, Web Sense, Web Walker"},
|
||||
"swarm_of_wasps": {ID: "swarm_of_wasps", Name: "Swarm of Wasps", CR: 0.5, HP: 22, AC: 12, Attack: 2, AttackBonus: 3, Speed: 6, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm"},
|
||||
"thug": {ID: "thug", Name: "Thug", CR: 0.5, HP: 32, AC: 11, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The thug makes two melee attacks. Traits: Pack Tactics"},
|
||||
"warhorse": {ID: "warhorse", Name: "Warhorse", CR: 0.5, HP: 19, AC: 11, Attack: 2, AttackBonus: 6, Speed: 18, BlockRate: 0, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Trampling Charge"},
|
||||
"warhorse_skeleton": {ID: "warhorse_skeleton", Name: "Warhorse Skeleton", CR: 0.5, HP: 22, AC: 13, Attack: 2, AttackBonus: 6, Speed: 18, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"worg": {ID: "worg", Name: "Worg", CR: 0.5, HP: 26, AC: 13, Attack: 2, AttackBonus: 5, Speed: 18, BlockRate: 0.05, XPValue: 100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell"},
|
||||
"animated_armor": {ID: "animated_armor", Name: "Animated Armor", CR: 1, HP: 33, AC: 18, Attack: 2, AttackBonus: 4, Speed: 10, BlockRate: 0.15, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The armor makes two melee attacks. Traits: Antimagic Susceptibility, False Appearance"},
|
||||
"brass_dragon_wyrmling": {ID: "brass_dragon_wyrmling", Name: "Brass Dragon Wyrmling", CR: 1, HP: 16, AC: 16, Attack: 2, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"brown_bear": {ID: "brown_bear", Name: "Brown Bear", CR: 1, HP: 34, AC: 11, Attack: 2, AttackBonus: 5, Speed: 16, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The bear makes two attacks: one with its bite and one with its claws. Traits: Keen Smell"},
|
||||
"bugbear": {ID: "bugbear", Name: "Bugbear", CR: 1, HP: 27, AC: 16, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0.1, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Brute, Surprise Attack"},
|
||||
"copper_dragon_wyrmling": {ID: "copper_dragon_wyrmling", Name: "Copper Dragon Wyrmling", CR: 1, HP: 22, AC: 16, Attack: 2, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"death_dog": {ID: "death_dog", Name: "Death Dog", CR: 1, HP: 39, AC: 12, Attack: 2, AttackBonus: 4, Speed: 16, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dog makes two bite attacks. Traits: Two-Headed"},
|
||||
"dire_wolf": {ID: "dire_wolf", Name: "Dire Wolf", CR: 1, HP: 37, AC: 14, Attack: 2, AttackBonus: 5, Speed: 18, BlockRate: 0.05, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell, Pack Tactics"},
|
||||
"dryad": {ID: "dryad", Name: "Dryad", CR: 1, HP: 22, AC: 11, Attack: 2, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Innate Spellcasting, Magic Resistance, Speak with Beasts and Plants, Tree Stride"},
|
||||
"duergar": {ID: "duergar", Name: "Duergar", CR: 1, HP: 26, AC: 16, Attack: 2, AttackBonus: 4, Speed: 10, BlockRate: 0.1, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Duergar Resilience, Sunlight Sensitivity"},
|
||||
"ghoul": {ID: "ghoul", Name: "Ghoul", CR: 1, HP: 22, AC: 12, Attack: 2, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"giant_eagle": {ID: "giant_eagle", Name: "Giant Eagle", CR: 1, HP: 26, AC: 13, Attack: 2, AttackBonus: 5, Speed: 6, BlockRate: 0.05, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The eagle makes two attacks: one with its beak and one with its talons. Traits: Keen Sight"},
|
||||
"giant_hyena": {ID: "giant_hyena", Name: "Giant Hyena", CR: 1, HP: 45, AC: 12, Attack: 2, AttackBonus: 5, Speed: 18, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Rampage"},
|
||||
"giant_octopus": {ID: "giant_octopus", Name: "Giant Octopus", CR: 1, HP: 52, AC: 11, Attack: 2, AttackBonus: 5, Speed: 6, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Hold Breath, Underwater Camouflage, Water Breathing"},
|
||||
"giant_spider": {ID: "giant_spider", Name: "Giant Spider", CR: 1, HP: 26, AC: 14, Attack: 2, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Spider Climb, Web Sense, Web Walker"},
|
||||
"giant_toad": {ID: "giant_toad", Name: "Giant Toad", CR: 1, HP: 39, AC: 11, Attack: 2, AttackBonus: 4, Speed: 8, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious, Standing Leap"},
|
||||
"giant_vulture": {ID: "giant_vulture", Name: "Giant Vulture", CR: 1, HP: 22, AC: 10, Attack: 2, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The vulture makes two attacks: one with its beak and one with its talons. Traits: Keen Sight and Smell, Pack Tactics"},
|
||||
"harpy": {ID: "harpy", Name: "Harpy", CR: 1, HP: 38, AC: 11, Attack: 2, AttackBonus: 3, Speed: 8, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The harpy makes two attacks: one with its claws and one with its club."},
|
||||
"hippogriff": {ID: "hippogriff", Name: "Hippogriff", CR: 1, HP: 19, AC: 11, Attack: 2, AttackBonus: 5, Speed: 16, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The hippogriff makes two attacks: one with its beak and one with its claws. Traits: Keen Sight"},
|
||||
"imp": {ID: "imp", Name: "Imp", CR: 1, HP: 10, AC: 13, Attack: 2, AttackBonus: 5, Speed: 8, BlockRate: 0.05, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Devil's Sight, Magic Resistance, Variant: Familiar"},
|
||||
"lion": {ID: "lion", Name: "Lion", CR: 1, HP: 26, AC: 12, Attack: 2, AttackBonus: 5, Speed: 18, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell, Pack Tactics, Pounce, Running Leap"},
|
||||
"quasit": {ID: "quasit", Name: "Quasit", CR: 1, HP: 7, AC: 13, Attack: 2, AttackBonus: 4, Speed: 16, BlockRate: 0.05, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Magic Resistance, Variant: Familiar"},
|
||||
"specter": {ID: "specter", Name: "Specter", CR: 1, HP: 22, AC: 12, Attack: 2, AttackBonus: 4, Speed: 18, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Incorporeal Movement, Sunlight Sensitivity"},
|
||||
"spy": {ID: "spy", Name: "Spy", CR: 1, HP: 27, AC: 12, Attack: 2, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The spy makes two melee attacks. Traits: Cunning Action, Sneak Attack (1/Turn)"},
|
||||
"swarm_of_quippers": {ID: "swarm_of_quippers", Name: "Swarm of Quippers", CR: 1, HP: 28, AC: 13, Attack: 2, AttackBonus: 5, Speed: 16, BlockRate: 0.05, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Blood Frenzy, Swarm, Water Breathing"},
|
||||
"tiger": {ID: "tiger", Name: "Tiger", CR: 1, HP: 37, AC: 12, Attack: 2, AttackBonus: 5, Speed: 16, BlockRate: 0, XPValue: 200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell, Pounce"},
|
||||
"ankheg": {ID: "ankheg", Name: "Ankheg", CR: 2, HP: 39, AC: 14, Attack: 4, AttackBonus: 0, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"awakened_tree": {ID: "awakened_tree", Name: "Awakened Tree", CR: 2, HP: 59, AC: 13, Attack: 4, AttackBonus: 6, Speed: 8, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: False Appearance"},
|
||||
"azer": {ID: "azer", Name: "Azer", CR: 2, HP: 39, AC: 17, Attack: 4, AttackBonus: 5, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Heated Body, Heated Weapons, Illumination"},
|
||||
"bandit_captain": {ID: "bandit_captain", Name: "Bandit Captain", CR: 2, HP: 65, AC: 15, Attack: 4, AttackBonus: 5, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The captain makes three melee attacks: two with its scimitar and one with its dagger."},
|
||||
"berserker": {ID: "berserker", Name: "Berserker", CR: 2, HP: 67, AC: 13, Attack: 4, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Reckless"},
|
||||
"black_dragon_wyrmling": {ID: "black_dragon_wyrmling", Name: "Black Dragon Wyrmling", CR: 2, HP: 33, AC: 17, Attack: 4, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"bronze_dragon_wyrmling": {ID: "bronze_dragon_wyrmling", Name: "Bronze Dragon Wyrmling", CR: 2, HP: 32, AC: 17, Attack: 4, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"centaur": {ID: "centaur", Name: "Centaur", CR: 2, HP: 45, AC: 12, Attack: 4, AttackBonus: 6, Speed: 18, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The centaur makes two attacks: one with its pike and one with its hooves or two with its longbow. Traits: Charge"},
|
||||
"cult_fanatic": {ID: "cult_fanatic", Name: "Cult Fanatic", CR: 2, HP: 22, AC: 13, Attack: 4, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The fanatic makes two melee attacks. Traits: Dark Devotion, Spellcasting"},
|
||||
"druid": {ID: "druid", Name: "Druid", CR: 2, HP: 27, AC: 11, Attack: 4, AttackBonus: 2, Speed: 12, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Spellcasting"},
|
||||
"ettercap": {ID: "ettercap", Name: "Ettercap", CR: 2, HP: 44, AC: 13, Attack: 4, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The ettercap makes two attacks: one with its bite and one with its claws. Traits: Spider Climb, Web Sense, Web Walker"},
|
||||
"gargoyle": {ID: "gargoyle", Name: "Gargoyle", CR: 2, HP: 52, AC: 15, Attack: 4, AttackBonus: 4, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The gargoyle makes two attacks: one with its bite and one with its claws. Traits: False Appearance"},
|
||||
"gelatinous_cube": {ID: "gelatinous_cube", Name: "Gelatinous Cube", CR: 2, HP: 84, AC: 10, Attack: 4, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Ooze Cube, Transparent"},
|
||||
"ghast": {ID: "ghast", Name: "Ghast", CR: 2, HP: 36, AC: 13, Attack: 4, AttackBonus: 3, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Stench, Turn Defiance"},
|
||||
"giant_boar": {ID: "giant_boar", Name: "Giant Boar", CR: 2, HP: 42, AC: 12, Attack: 4, AttackBonus: 5, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge, Relentless (Recharges after a Short or Long Rest)"},
|
||||
"giant_constrictor_snake": {ID: "giant_constrictor_snake", Name: "Giant Constrictor Snake", CR: 2, HP: 60, AC: 12, Attack: 4, AttackBonus: 6, Speed: 12, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"giant_elk": {ID: "giant_elk", Name: "Giant Elk", CR: 2, HP: 42, AC: 15, Attack: 4, AttackBonus: 6, Speed: 18, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge"},
|
||||
"gibbering_mouther": {ID: "gibbering_mouther", Name: "Gibbering Mouther", CR: 2, HP: 67, AC: 10, Attack: 4, AttackBonus: 2, Speed: 6, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The gibbering mouther makes one bite attack and, if it can, uses its Blinding Spittle. Traits: Aberrant Ground, Gibbering"},
|
||||
"green_dragon_wyrmling": {ID: "green_dragon_wyrmling", Name: "Green Dragon Wyrmling", CR: 2, HP: 38, AC: 17, Attack: 4, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"grick": {ID: "grick", Name: "Grick", CR: 2, HP: 27, AC: 14, Attack: 4, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The grick makes one attack with its tentacles. Traits: Stone Camouflage"},
|
||||
"griffon": {ID: "griffon", Name: "Griffon", CR: 2, HP: 59, AC: 12, Attack: 4, AttackBonus: 6, Speed: 12, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The griffon makes two attacks: one with its beak and one with its claws. Traits: Keen Sight"},
|
||||
"hunter_shark": {ID: "hunter_shark", Name: "Hunter Shark", CR: 2, HP: 45, AC: 12, Attack: 4, AttackBonus: 6, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Blood Frenzy, Water Breathing"},
|
||||
"merrow": {ID: "merrow", Name: "Merrow", CR: 2, HP: 45, AC: 13, Attack: 4, AttackBonus: 6, Speed: 6, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The merrow makes two attacks: one with its bite and one with its claws or harpoon. Traits: Amphibious"},
|
||||
"mimic": {ID: "mimic", Name: "Mimic", CR: 2, HP: 58, AC: 12, Attack: 4, AttackBonus: 5, Speed: 6, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Adhesive (Object Form Only), False Appearance (Object Form Only), Grappler"},
|
||||
"minotaur_skeleton": {ID: "minotaur_skeleton", Name: "Minotaur Skeleton", CR: 2, HP: 67, AC: 12, Attack: 4, AttackBonus: 6, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge"},
|
||||
"ochre_jelly": {ID: "ochre_jelly", Name: "Ochre Jelly", CR: 2, HP: 45, AC: 10, Attack: 4, AttackBonus: 4, Speed: 6, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amorphous, Spider Climb"},
|
||||
"ogre": {ID: "ogre", Name: "Ogre", CR: 2, HP: 59, AC: 11, Attack: 4, AttackBonus: 6, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"ogre_zombie": {ID: "ogre_zombie", Name: "Ogre Zombie", CR: 2, HP: 85, AC: 10, Attack: 4, AttackBonus: 6, Speed: 12, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Undead Fortitude"},
|
||||
"pegasus": {ID: "pegasus", Name: "Pegasus", CR: 2, HP: 59, AC: 12, Attack: 4, AttackBonus: 6, Speed: 18, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"plesiosaurus": {ID: "plesiosaurus", Name: "Plesiosaurus", CR: 2, HP: 68, AC: 13, Attack: 4, AttackBonus: 6, Speed: 8, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Hold Breath"},
|
||||
"polar_bear": {ID: "polar_bear", Name: "Polar Bear", CR: 2, HP: 42, AC: 12, Attack: 4, AttackBonus: 7, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The bear makes two attacks: one with its bite and one with its claws. Traits: Keen Smell"},
|
||||
"priest": {ID: "priest", Name: "Priest", CR: 2, HP: 27, AC: 13, Attack: 4, AttackBonus: 2, Speed: 10, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Divine Eminence, Spellcasting"},
|
||||
"rhinoceros": {ID: "rhinoceros", Name: "Rhinoceros", CR: 2, HP: 45, AC: 11, Attack: 4, AttackBonus: 7, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge"},
|
||||
"rug_of_smothering": {ID: "rug_of_smothering", Name: "Rug of Smothering", CR: 2, HP: 33, AC: 12, Attack: 4, AttackBonus: 0, Speed: 6, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Antimagic Susceptibility, Damage Transfer, False Appearance"},
|
||||
"saber_toothed_tiger": {ID: "saber_toothed_tiger", Name: "Saber-Toothed Tiger", CR: 2, HP: 52, AC: 12, Attack: 4, AttackBonus: 6, Speed: 16, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Smell, Pounce"},
|
||||
"sea_hag": {ID: "sea_hag", Name: "Sea Hag", CR: 2, HP: 52, AC: 14, Attack: 4, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious, Horrific Appearance, Hag Coven, Shared Spellcasting (Coven Only), Hag Eye (Coven Only)"},
|
||||
"silver_dragon_wyrmling": {ID: "silver_dragon_wyrmling", Name: "Silver Dragon Wyrmling", CR: 2, HP: 45, AC: 17, Attack: 4, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"swarm_of_poisonous_snakes": {ID: "swarm_of_poisonous_snakes", Name: "Swarm of Poisonous Snakes", CR: 2, HP: 36, AC: 14, Attack: 4, AttackBonus: 6, Speed: 12, BlockRate: 0.05, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Swarm"},
|
||||
"wererat": {ID: "wererat", Name: "Wererat", CR: 2, HP: 33, AC: 12, Attack: 4, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Keen Smell"},
|
||||
"white_dragon_wyrmling": {ID: "white_dragon_wyrmling", Name: "White Dragon Wyrmling", CR: 2, HP: 32, AC: 16, Attack: 4, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"will_o_wisp": {ID: "will_o_wisp", Name: "Will-o'-Wisp", CR: 2, HP: 22, AC: 19, Attack: 4, AttackBonus: 4, Speed: 18, BlockRate: 0.15, XPValue: 450, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Consume Life, Ephemeral, Incorporeal Movement, Variable Illumination"},
|
||||
"basilisk": {ID: "basilisk", Name: "Basilisk", CR: 3, HP: 52, AC: 12, Attack: 6, AttackBonus: 5, Speed: 8, BlockRate: 0, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Petrifying Gaze"},
|
||||
"bearded_devil": {ID: "bearded_devil", Name: "Bearded Devil", CR: 3, HP: 52, AC: 13, Attack: 6, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The devil makes two attacks: one with its beard and one with its glaive. Traits: Devil's Sight, Magic Resistance, Steadfast"},
|
||||
"blue_dragon_wyrmling": {ID: "blue_dragon_wyrmling", Name: "Blue Dragon Wyrmling", CR: 3, HP: 52, AC: 17, Attack: 6, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"doppelganger": {ID: "doppelganger", Name: "Doppelganger", CR: 3, HP: 52, AC: 14, Attack: 6, AttackBonus: 6, Speed: 12, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The doppelganger makes two melee attacks. Traits: Shapechanger, Ambusher, Surprise Attack"},
|
||||
"giant_scorpion": {ID: "giant_scorpion", Name: "Giant Scorpion", CR: 3, HP: 52, AC: 15, Attack: 6, AttackBonus: 4, Speed: 16, BlockRate: 0.1, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The scorpion makes three attacks: two with its claws and one with its sting."},
|
||||
"gold_dragon_wyrmling": {ID: "gold_dragon_wyrmling", Name: "Gold Dragon Wyrmling", CR: 3, HP: 60, AC: 17, Attack: 6, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious"},
|
||||
"green_hag": {ID: "green_hag", Name: "Green Hag", CR: 3, HP: 82, AC: 17, Attack: 6, AttackBonus: 6, Speed: 12, BlockRate: 0.1, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amphibious, Innate Spellcasting, Mimicry, Hag Coven, Shared Spellcasting (Coven Only), Hag Eye (Coven Only)"},
|
||||
"hell_hound": {ID: "hell_hound", Name: "Hell Hound", CR: 3, HP: 45, AC: 15, Attack: 6, AttackBonus: 0, Speed: 18, BlockRate: 0.1, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell, Pack Tactics"},
|
||||
"killer_whale": {ID: "killer_whale", Name: "Killer Whale", CR: 3, HP: 90, AC: 12, Attack: 6, AttackBonus: 0, Speed: 18, BlockRate: 0, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Echolocation, Hold Breath, Keen Hearing"},
|
||||
"knight": {ID: "knight", Name: "Knight", CR: 3, HP: 52, AC: 18, Attack: 6, AttackBonus: 5, Speed: 12, BlockRate: 0.15, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The knight makes two melee attacks. Traits: Brave"},
|
||||
"manticore": {ID: "manticore", Name: "Manticore", CR: 3, HP: 68, AC: 14, Attack: 6, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The manticore makes three attacks: one with its bite and two with its claws or three with its tail spikes. Traits: Tail Spike Regrowth"},
|
||||
"minotaur": {ID: "minotaur", Name: "Minotaur", CR: 3, HP: 76, AC: 14, Attack: 6, AttackBonus: 6, Speed: 16, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Charge, Labyrinthine Recall, Reckless"},
|
||||
"mummy": {ID: "mummy", Name: "Mummy", CR: 3, HP: 58, AC: 11, Attack: 6, AttackBonus: 5, Speed: 8, BlockRate: 0, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The mummy can use its Dreadful Glare and makes one attack with its rotting fist."},
|
||||
"nightmare": {ID: "nightmare", Name: "Nightmare", CR: 3, HP: 68, AC: 13, Attack: 6, AttackBonus: 6, Speed: 18, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Confer Fire Resistance, Illumination"},
|
||||
"owlbear": {ID: "owlbear", Name: "Owlbear", CR: 3, HP: 59, AC: 13, Attack: 6, AttackBonus: 7, Speed: 16, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The owlbear makes two attacks: one with its beak and one with its claws. Traits: Keen Sight and Smell"},
|
||||
"phase_spider": {ID: "phase_spider", Name: "Phase Spider", CR: 3, HP: 32, AC: 13, Attack: 6, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Ethereal Jaunt, Spider Climb, Web Walker"},
|
||||
"veteran": {ID: "veteran", Name: "Veteran", CR: 3, HP: 58, AC: 17, Attack: 6, AttackBonus: 5, Speed: 12, BlockRate: 0.1, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The veteran makes two longsword attacks."},
|
||||
"werewolf": {ID: "werewolf", Name: "Werewolf", CR: 3, HP: 58, AC: 11, Attack: 6, AttackBonus: 4, Speed: 12, BlockRate: 0, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Keen Hearing and Smell"},
|
||||
"wight": {ID: "wight", Name: "Wight", CR: 3, HP: 45, AC: 14, Attack: 6, AttackBonus: 4, Speed: 12, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The wight makes two longsword attacks or two longbow attacks. Traits: Sunlight Sensitivity"},
|
||||
"winter_wolf": {ID: "winter_wolf", Name: "Winter Wolf", CR: 3, HP: 75, AC: 13, Attack: 6, AttackBonus: 0, Speed: 18, BlockRate: 0.05, XPValue: 700, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Keen Hearing and Smell, Pack Tactics, Snow Camouflage"},
|
||||
"black_pudding": {ID: "black_pudding", Name: "Black Pudding", CR: 4, HP: 85, AC: 10, Attack: 7, AttackBonus: 5, Speed: 8, BlockRate: 0, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Amorphous, Corrosive Form, Spider Climb"},
|
||||
"chuul": {ID: "chuul", Name: "Chuul", CR: 4, HP: 93, AC: 16, Attack: 7, AttackBonus: 6, Speed: 12, BlockRate: 0.1, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The chuul makes two pincer attacks. Traits: Amphibious, Sense Magic"},
|
||||
"couatl": {ID: "couatl", Name: "Couatl", CR: 4, HP: 97, AC: 19, Attack: 7, AttackBonus: 6, Speed: 12, BlockRate: 0.15, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Innate Spellcasting, Magic Weapons, Shielded Mind"},
|
||||
"elephant": {ID: "elephant", Name: "Elephant", CR: 4, HP: 76, AC: 12, Attack: 7, AttackBonus: 8, Speed: 16, BlockRate: 0, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Trampling Charge"},
|
||||
"ettin": {ID: "ettin", Name: "Ettin", CR: 4, HP: 85, AC: 12, Attack: 7, AttackBonus: 7, Speed: 16, BlockRate: 0, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The ettin makes two attacks: one with its battleaxe and one with its morningstar. Traits: Two Heads, Wakeful"},
|
||||
"ghost": {ID: "ghost", Name: "Ghost", CR: 4, HP: 45, AC: 11, Attack: 7, AttackBonus: 5, Speed: 16, BlockRate: 0, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Ethereal Sight, Incorporeal Movement"},
|
||||
"lamia": {ID: "lamia", Name: "Lamia", CR: 4, HP: 97, AC: 13, Attack: 7, AttackBonus: 5, Speed: 12, BlockRate: 0.05, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The lamia makes two attacks: one with its claws and one with its dagger or Intoxicating Touch. Traits: Innate Spellcasting"},
|
||||
"red_dragon_wyrmling": {ID: "red_dragon_wyrmling", Name: "Red Dragon Wyrmling", CR: 4, HP: 75, AC: 17, Attack: 7, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired."},
|
||||
"succubusincubus": {ID: "succubusincubus", Name: "Succubus/Incubus", CR: 4, HP: 66, AC: 15, Attack: 7, AttackBonus: 0, Speed: 12, BlockRate: 0.1, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Telepathic Bond, Shapechanger"},
|
||||
"wereboar": {ID: "wereboar", Name: "Wereboar", CR: 4, HP: 78, AC: 10, Attack: 7, AttackBonus: 5, Speed: 12, BlockRate: 0, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Charge (Boar or Hybrid Form Only), Relentless (Recharges after a Short or Long Rest)"},
|
||||
"weretiger": {ID: "weretiger", Name: "Weretiger", CR: 4, HP: 120, AC: 12, Attack: 7, AttackBonus: 5, Speed: 12, BlockRate: 0, XPValue: 1100, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Keen Hearing and Smell, Pounce (Tiger or Hybrid Form Only)"},
|
||||
"air_elemental": {ID: "air_elemental", Name: "Air Elemental", CR: 5, HP: 90, AC: 15, Attack: 8, AttackBonus: 8, Speed: 18, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The elemental makes two slam attacks. Traits: Air Form"},
|
||||
"barbed_devil": {ID: "barbed_devil", Name: "Barbed Devil", CR: 5, HP: 110, AC: 15, Attack: 8, AttackBonus: 6, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The devil makes three melee attacks: one with its tail and two with its claws. Traits: Barbed Hide, Devil's Sight, Magic Resistance"},
|
||||
"bulette": {ID: "bulette", Name: "Bulette", CR: 5, HP: 94, AC: 17, Attack: 8, AttackBonus: 7, Speed: 16, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Standing Leap"},
|
||||
"earth_elemental": {ID: "earth_elemental", Name: "Earth Elemental", CR: 5, HP: 126, AC: 17, Attack: 8, AttackBonus: 8, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The elemental makes two slam attacks. Traits: Earth Glide, Siege Monster"},
|
||||
"fire_elemental": {ID: "fire_elemental", Name: "Fire Elemental", CR: 5, HP: 102, AC: 13, Attack: 8, AttackBonus: 6, Speed: 18, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The elemental makes two touch attacks. Traits: Fire Form, Illumination, Water Susceptibility"},
|
||||
"flesh_golem": {ID: "flesh_golem", Name: "Flesh Golem", CR: 5, HP: 93, AC: 10, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The golem makes two slam attacks. Traits: Berserk, Aversion of Fire, Immutable Form, Lightning Absorption, Magic Resistance, Magic Weapons"},
|
||||
"giant_crocodile": {ID: "giant_crocodile", Name: "Giant Crocodile", CR: 5, HP: 85, AC: 14, Attack: 8, AttackBonus: 8, Speed: 12, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The crocodile makes two attacks: one with its bite and one with its tail. Traits: Hold Breath"},
|
||||
"giant_shark": {ID: "giant_shark", Name: "Giant Shark", CR: 5, HP: 126, AC: 13, Attack: 8, AttackBonus: 9, Speed: 18, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Blood Frenzy, Water Breathing"},
|
||||
"gladiator": {ID: "gladiator", Name: "Gladiator", CR: 5, HP: 112, AC: 16, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The gladiator makes three melee attacks or two ranged attacks. Traits: Brave, Brute"},
|
||||
"gorgon": {ID: "gorgon", Name: "Gorgon", CR: 5, HP: 114, AC: 19, Attack: 8, AttackBonus: 8, Speed: 16, BlockRate: 0.15, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Trampling Charge"},
|
||||
"half_red_dragon_veteran": {ID: "half_red_dragon_veteran", Name: "Half-Red Dragon Veteran", CR: 5, HP: 65, AC: 18, Attack: 8, AttackBonus: 0, Speed: 12, BlockRate: 0.15, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The veteran makes two longsword attacks."},
|
||||
"hill_giant": {ID: "hill_giant", Name: "Hill Giant", CR: 5, HP: 105, AC: 13, Attack: 8, AttackBonus: 8, Speed: 16, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The giant makes two greatclub attacks."},
|
||||
"night_hag": {ID: "night_hag", Name: "Night Hag", CR: 5, HP: 112, AC: 17, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Innate Spellcasting, Magic Resistance, Night Hag Items, Hag Coven, Shared Spellcasting (Coven Only), Hag Eye (Coven Only)"},
|
||||
"otyugh": {ID: "otyugh", Name: "Otyugh", CR: 5, HP: 114, AC: 14, Attack: 8, AttackBonus: 6, Speed: 12, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The otyugh makes three attacks: one with its bite and two with its tentacles. Traits: Limited Telepathy"},
|
||||
"roper": {ID: "roper", Name: "Roper", CR: 5, HP: 93, AC: 20, Attack: 8, AttackBonus: 7, Speed: 6, BlockRate: 0.15, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The roper makes four attacks with its tendrils, uses Reel, and makes one attack with its bite. Traits: False Appearance, Grasping Tendrils, Spider Climb"},
|
||||
"salamander": {ID: "salamander", Name: "Salamander", CR: 5, HP: 90, AC: 15, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The salamander makes two attacks: one with its spear and one with its tail. Traits: Heated Body, Heated Weapons"},
|
||||
"shambling_mound": {ID: "shambling_mound", Name: "Shambling Mound", CR: 5, HP: 136, AC: 15, Attack: 8, AttackBonus: 7, Speed: 8, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The shambling mound makes two slam attacks. Traits: Lightning Absorption"},
|
||||
"triceratops": {ID: "triceratops", Name: "Triceratops", CR: 5, HP: 95, AC: 13, Attack: 8, AttackBonus: 9, Speed: 18, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Trampling Charge"},
|
||||
"troll": {ID: "troll", Name: "Troll", CR: 5, HP: 84, AC: 15, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The troll makes three attacks: one with its bite and two with its claws. Traits: Keen Smell, Regeneration, Variant: Loathsome Limbs"},
|
||||
"unicorn": {ID: "unicorn", Name: "Unicorn", CR: 5, HP: 67, AC: 12, Attack: 8, AttackBonus: 7, Speed: 18, BlockRate: 0, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The unicorn makes two attacks: one with its hooves and one with its horn. Traits: Charge, Innate Spellcasting, Magic Resistance, Magic Weapons"},
|
||||
"vampire_spawn": {ID: "vampire_spawn", Name: "Vampire Spawn", CR: 5, HP: 82, AC: 15, Attack: 8, AttackBonus: 6, Speed: 12, BlockRate: 0.1, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The vampire makes two attacks, only one of which can be a bite attack. Traits: Regeneration, Spider Climb, Vampire Weaknesses"},
|
||||
"water_elemental": {ID: "water_elemental", Name: "Water Elemental", CR: 5, HP: 114, AC: 14, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The elemental makes two slam attacks. Traits: Water Form, Freeze"},
|
||||
"werebear": {ID: "werebear", Name: "Werebear", CR: 5, HP: 135, AC: 10, Attack: 8, AttackBonus: 7, Speed: 12, BlockRate: 0, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: In bear form, the werebear makes two claw attacks. Traits: Shapechanger, Keen Smell"},
|
||||
"wraith": {ID: "wraith", Name: "Wraith", CR: 5, HP: 67, AC: 13, Attack: 8, AttackBonus: 6, Speed: 18, BlockRate: 0.05, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Incorporeal Movement, Sunlight Sensitivity"},
|
||||
"xorn": {ID: "xorn", Name: "Xorn", CR: 5, HP: 73, AC: 19, Attack: 8, AttackBonus: 6, Speed: 8, BlockRate: 0.15, XPValue: 1800, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The xorn makes three claw attacks and one bite attack. Traits: Earth Glide, Stone Camouflage, Treasure Sense"},
|
||||
"chimera": {ID: "chimera", Name: "Chimera", CR: 6, HP: 114, AC: 14, Attack: 10, AttackBonus: 0, Speed: 12, BlockRate: 0.05, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The chimera makes three attacks: one with its bite, one with its horns, and one with its claws."},
|
||||
"drider": {ID: "drider", Name: "Drider", CR: 6, HP: 123, AC: 19, Attack: 10, AttackBonus: 6, Speed: 12, BlockRate: 0.15, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The drider makes three attacks, either with its longsword or its longbow. Traits: Fey Ancestry, Innate Spellcasting, Spider Climb, Sunlight Sensitivity, Web Walker"},
|
||||
"invisible_stalker": {ID: "invisible_stalker", Name: "Invisible Stalker", CR: 6, HP: 104, AC: 14, Attack: 10, AttackBonus: 6, Speed: 18, BlockRate: 0.05, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The stalker makes two slam attacks. Traits: Invisibility, Faultless Tracker"},
|
||||
"mage": {ID: "mage", Name: "Mage", CR: 6, HP: 40, AC: 12, Attack: 10, AttackBonus: 5, Speed: 12, BlockRate: 0, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Spellcasting"},
|
||||
"mammoth": {ID: "mammoth", Name: "Mammoth", CR: 6, HP: 126, AC: 13, Attack: 10, AttackBonus: 10, Speed: 16, BlockRate: 0.05, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Trampling Charge"},
|
||||
"medusa": {ID: "medusa", Name: "Medusa", CR: 6, HP: 127, AC: 15, Attack: 10, AttackBonus: 5, Speed: 12, BlockRate: 0.1, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The medusa makes either three melee attacks - one with its snake hair and two with its shortsword - or two ranged attacks with its longbow. Traits: Petrifying Gaze"},
|
||||
"vrock": {ID: "vrock", Name: "Vrock", CR: 6, HP: 104, AC: 15, Attack: 10, AttackBonus: 6, Speed: 16, BlockRate: 0.1, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The vrock makes two attacks: one with its beak and one with its talons. Traits: Magic Resistance"},
|
||||
"wyvern": {ID: "wyvern", Name: "Wyvern", CR: 6, HP: 110, AC: 13, Attack: 10, AttackBonus: 7, Speed: 8, BlockRate: 0.05, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The wyvern makes two attacks: one with its bite and one with its stinger."},
|
||||
"young_brass_dragon": {ID: "young_brass_dragon", Name: "Young Brass Dragon", CR: 6, HP: 110, AC: 17, Attack: 10, AttackBonus: 0, Speed: 16, BlockRate: 0.1, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws."},
|
||||
"young_white_dragon": {ID: "young_white_dragon", Name: "Young White Dragon", CR: 6, HP: 133, AC: 17, Attack: 10, AttackBonus: 0, Speed: 16, BlockRate: 0.1, XPValue: 2300, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws. Traits: Ice Walk"},
|
||||
"giant_ape": {ID: "giant_ape", Name: "Giant Ape", CR: 7, HP: 157, AC: 12, Attack: 12, AttackBonus: 9, Speed: 16, BlockRate: 0, XPValue: 2900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The ape makes two fist attacks."},
|
||||
"oni": {ID: "oni", Name: "Oni", CR: 7, HP: 110, AC: 16, Attack: 12, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 2900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The oni makes two attacks, either with its claws or its glaive. Traits: Innate Spellcasting, Magic Weapons, Regeneration"},
|
||||
"shield_guardian": {ID: "shield_guardian", Name: "Shield Guardian", CR: 7, HP: 142, AC: 17, Attack: 12, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 2900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The guardian makes two fist attacks. Traits: Bound, Regeneration, Spell Storing"},
|
||||
"stone_giant": {ID: "stone_giant", Name: "Stone Giant", CR: 7, HP: 126, AC: 17, Attack: 12, AttackBonus: 9, Speed: 16, BlockRate: 0.1, XPValue: 2900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The giant makes two greatclub attacks. Traits: Stone Camouflage"},
|
||||
"young_black_dragon": {ID: "young_black_dragon", Name: "Young Black Dragon", CR: 7, HP: 127, AC: 18, Attack: 12, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 2900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws. Traits: Amphibious"},
|
||||
"young_copper_dragon": {ID: "young_copper_dragon", Name: "Young Copper Dragon", CR: 7, HP: 119, AC: 17, Attack: 12, AttackBonus: 0, Speed: 16, BlockRate: 0.1, XPValue: 2900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws."},
|
||||
"assassin": {ID: "assassin", Name: "Assassin", CR: 8, HP: 78, AC: 15, Attack: 13, AttackBonus: 6, Speed: 12, BlockRate: 0.1, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The assassin makes two shortsword attacks. Traits: Assassinate, Evasion, Sneak Attack (1/Turn)"},
|
||||
"cloaker": {ID: "cloaker", Name: "Cloaker", CR: 8, HP: 78, AC: 14, Attack: 13, AttackBonus: 6, Speed: 6, BlockRate: 0.05, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The cloaker makes two attacks: one with its bite and one with its tail. Traits: Damage Transfer, False Appearance, Light Sensitivity"},
|
||||
"frost_giant": {ID: "frost_giant", Name: "Frost Giant", CR: 8, HP: 138, AC: 15, Attack: 13, AttackBonus: 9, Speed: 16, BlockRate: 0.1, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The giant makes two greataxe attacks."},
|
||||
"hezrou": {ID: "hezrou", Name: "Hezrou", CR: 8, HP: 136, AC: 16, Attack: 13, AttackBonus: 7, Speed: 12, BlockRate: 0.1, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The hezrou makes three attacks: one with its bite and two with its claws. Traits: Magic Resistance, Stench"},
|
||||
"hydra": {ID: "hydra", Name: "Hydra", CR: 8, HP: 172, AC: 15, Attack: 13, AttackBonus: 8, Speed: 12, BlockRate: 0.1, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The hydra makes as many bite attacks as it has heads. Traits: Hold Breath, Multiple Heads, Reactive Heads, Wakeful"},
|
||||
"spirit_naga": {ID: "spirit_naga", Name: "Spirit Naga", CR: 8, HP: 75, AC: 15, Attack: 13, AttackBonus: 7, Speed: 16, BlockRate: 0.1, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Rejuvenation, Spellcasting"},
|
||||
"tyrannosaurus_rex": {ID: "tyrannosaurus_rex", Name: "Tyrannosaurus Rex", CR: 8, HP: 136, AC: 13, Attack: 13, AttackBonus: 10, Speed: 18, BlockRate: 0.05, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The tyrannosaurus makes two attacks: one with its bite and one with its tail."},
|
||||
"young_bronze_dragon": {ID: "young_bronze_dragon", Name: "Young Bronze Dragon", CR: 8, HP: 142, AC: 18, Attack: 13, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws. Traits: Amphibious"},
|
||||
"young_green_dragon": {ID: "young_green_dragon", Name: "Young Green Dragon", CR: 8, HP: 136, AC: 18, Attack: 13, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 3900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws. Traits: Amphibious"},
|
||||
"bone_devil": {ID: "bone_devil", Name: "Bone Devil", CR: 9, HP: 142, AC: 19, Attack: 14, AttackBonus: 8, Speed: 16, BlockRate: 0.15, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The devil makes three attacks: two with its claws and one with its sting. Traits: Devil's Sight, Magic Resistance"},
|
||||
"clay_golem": {ID: "clay_golem", Name: "Clay Golem", CR: 9, HP: 133, AC: 14, Attack: 14, AttackBonus: 8, Speed: 8, BlockRate: 0.05, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The golem makes two slam attacks. Traits: Acid Absorption, Berserk, Immutable Form, Magic Resistance, Magic Weapons"},
|
||||
"cloud_giant": {ID: "cloud_giant", Name: "Cloud Giant", CR: 9, HP: 200, AC: 14, Attack: 14, AttackBonus: 12, Speed: 16, BlockRate: 0.05, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The giant makes two morningstar attacks. Traits: Keen Smell, Innate Spellcasting"},
|
||||
"fire_giant": {ID: "fire_giant", Name: "Fire Giant", CR: 9, HP: 162, AC: 18, Attack: 14, AttackBonus: 11, Speed: 12, BlockRate: 0.15, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The giant makes two greatsword attacks."},
|
||||
"glabrezu": {ID: "glabrezu", Name: "Glabrezu", CR: 9, HP: 157, AC: 17, Attack: 14, AttackBonus: 9, Speed: 16, BlockRate: 0.1, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The glabrezu makes four attacks: two with its pincers and two with its fists. Traits: Innate Spellcasting, Magic Resistance"},
|
||||
"treant": {ID: "treant", Name: "Treant", CR: 9, HP: 138, AC: 16, Attack: 14, AttackBonus: 10, Speed: 12, BlockRate: 0.1, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The treant makes two slam attacks. Traits: False Appearance, Siege Monster"},
|
||||
"young_blue_dragon": {ID: "young_blue_dragon", Name: "Young Blue Dragon", CR: 9, HP: 152, AC: 18, Attack: 14, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws."},
|
||||
"young_silver_dragon": {ID: "young_silver_dragon", Name: "Young Silver Dragon", CR: 9, HP: 168, AC: 18, Attack: 14, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 5000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws."},
|
||||
"aboleth": {ID: "aboleth", Name: "Aboleth", CR: 10, HP: 135, AC: 17, Attack: 16, AttackBonus: 9, Speed: 6, BlockRate: 0.1, XPValue: 5900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The aboleth makes three tentacle attacks. Traits: Amphibious, Mucous Cloud, Probing Telepathy"},
|
||||
"deva": {ID: "deva", Name: "Deva", CR: 10, HP: 136, AC: 17, Attack: 16, AttackBonus: 8, Speed: 12, BlockRate: 0.1, XPValue: 5900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The deva makes two melee attacks. Traits: Angelic Weapons, Innate Spellcasting, Magic Resistance"},
|
||||
"guardian_naga": {ID: "guardian_naga", Name: "Guardian Naga", CR: 10, HP: 127, AC: 18, Attack: 16, AttackBonus: 8, Speed: 16, BlockRate: 0.15, XPValue: 5900, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Rejuvenation, Spellcasting"},
|
||||
"stone_golem": {ID: "stone_golem", Name: "Stone Golem", CR: 10, HP: 178, AC: 17, Attack: 16, AttackBonus: 10, Speed: 12, BlockRate: 0.1, XPValue: 5900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The golem makes two slam attacks. Traits: Immutable Form, Magic Resistance, Magic Weapons"},
|
||||
"young_gold_dragon": {ID: "young_gold_dragon", Name: "Young Gold Dragon", CR: 10, HP: 178, AC: 18, Attack: 16, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 5900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws. Traits: Amphibious"},
|
||||
"young_red_dragon": {ID: "young_red_dragon", Name: "Young Red Dragon", CR: 10, HP: 178, AC: 18, Attack: 16, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 5900, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon makes three attacks: one with its bite and two with its claws."},
|
||||
"behir": {ID: "behir", Name: "Behir", CR: 11, HP: 168, AC: 17, Attack: 18, AttackBonus: 0, Speed: 18, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The behir makes two attacks: one with its bite and one to constrict."},
|
||||
"chain_devil": {ID: "chain_devil", Name: "Chain Devil", CR: 11, HP: 85, AC: 16, Attack: 18, AttackBonus: 8, Speed: 12, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The devil makes two attacks with its chains. Traits: Devil's Sight, Magic Resistance"},
|
||||
"djinni": {ID: "djinni", Name: "Djinni", CR: 11, HP: 161, AC: 17, Attack: 18, AttackBonus: 9, Speed: 12, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The djinni makes three scimitar attacks. Traits: Elemental Demise, Innate Spellcasting, Variant: Genie Powers"},
|
||||
"efreeti": {ID: "efreeti", Name: "Efreeti", CR: 11, HP: 200, AC: 17, Attack: 18, AttackBonus: 7, Speed: 16, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The efreeti makes two scimitar attacks or uses its Hurl Flame twice. Traits: Elemental Demise, Innate Spellcasting, Variant: Genie Powers"},
|
||||
"gynosphinx": {ID: "gynosphinx", Name: "Gynosphinx", CR: 11, HP: 136, AC: 17, Attack: 18, AttackBonus: 9, Speed: 16, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The sphinx makes two claw attacks. Traits: Inscrutable, Magic Weapons, Spellcasting"},
|
||||
"horned_devil": {ID: "horned_devil", Name: "Horned Devil", CR: 11, HP: 178, AC: 18, Attack: 18, AttackBonus: 10, Speed: 8, BlockRate: 0.15, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The devil makes three melee attacks: two with its fork and one with its tail. Traits: Devil's Sight, Magic Resistance"},
|
||||
"remorhaz": {ID: "remorhaz", Name: "Remorhaz", CR: 11, HP: 195, AC: 17, Attack: 18, AttackBonus: 11, Speed: 12, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Heated Body"},
|
||||
"roc": {ID: "roc", Name: "Roc", CR: 11, HP: 248, AC: 15, Attack: 18, AttackBonus: 13, Speed: 8, BlockRate: 0.1, XPValue: 7200, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The roc makes two attacks: one with its beak and one with its talons. Traits: Keen Sight"},
|
||||
"archmage": {ID: "archmage", Name: "Archmage", CR: 12, HP: 99, AC: 12, Attack: 19, AttackBonus: 6, Speed: 12, BlockRate: 0, XPValue: 8400, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Magic Resistance, Spellcasting"},
|
||||
"erinyes": {ID: "erinyes", Name: "Erinyes", CR: 12, HP: 153, AC: 18, Attack: 19, AttackBonus: 8, Speed: 12, BlockRate: 0.15, XPValue: 8400, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The erinyes makes three attacks Traits: Hellish Weapons, Magic Resistance"},
|
||||
"adult_brass_dragon": {ID: "adult_brass_dragon", Name: "Adult Brass Dragon", CR: 13, HP: 172, AC: 18, Attack: 21, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 10000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"adult_white_dragon": {ID: "adult_white_dragon", Name: "Adult White Dragon", CR: 13, HP: 200, AC: 18, Attack: 21, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 10000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Ice Walk, Legendary Resistance (3/Day)"},
|
||||
"nalfeshnee": {ID: "nalfeshnee", Name: "Nalfeshnee", CR: 13, HP: 184, AC: 18, Attack: 21, AttackBonus: 10, Speed: 8, BlockRate: 0.15, XPValue: 10000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The nalfeshnee uses Horror Nimbus if it can. Traits: Magic Resistance"},
|
||||
"rakshasa": {ID: "rakshasa", Name: "Rakshasa", CR: 13, HP: 110, AC: 16, Attack: 21, AttackBonus: 7, Speed: 16, BlockRate: 0.1, XPValue: 10000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The rakshasa makes two claw attacks Traits: Limited Magic Immunity, Innate Spellcasting"},
|
||||
"storm_giant": {ID: "storm_giant", Name: "Storm Giant", CR: 13, HP: 230, AC: 16, Attack: 21, AttackBonus: 0, Speed: 18, BlockRate: 0.1, XPValue: 10000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The giant makes two greatsword attacks. Traits: Amphibious, Innate Spellcasting"},
|
||||
"vampire": {ID: "vampire", Name: "Vampire", CR: 13, HP: 144, AC: 16, Attack: 21, AttackBonus: 9, Speed: 12, BlockRate: 0.1, XPValue: 10000, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Shapechanger, Legendary Resistance (3/Day), Misty Escape, Regeneration, Spider Climb, Vampire Weaknesses"},
|
||||
"adult_black_dragon": {ID: "adult_black_dragon", Name: "Adult Black Dragon", CR: 14, HP: 195, AC: 19, Attack: 23, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 11500, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"adult_copper_dragon": {ID: "adult_copper_dragon", Name: "Adult Copper Dragon", CR: 14, HP: 184, AC: 18, Attack: 23, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 11500, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"ice_devil": {ID: "ice_devil", Name: "Ice Devil", CR: 14, HP: 180, AC: 18, Attack: 23, AttackBonus: 10, Speed: 16, BlockRate: 0.15, XPValue: 11500, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The devil makes three attacks: one with its bite, one with its claws, and one with its tail. Traits: Devil's Sight, Magic Resistance"},
|
||||
"adult_bronze_dragon": {ID: "adult_bronze_dragon", Name: "Adult Bronze Dragon", CR: 15, HP: 212, AC: 19, Attack: 24, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 13000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"adult_green_dragon": {ID: "adult_green_dragon", Name: "Adult Green Dragon", CR: 15, HP: 207, AC: 19, Attack: 24, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 13000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"mummy_lord": {ID: "mummy_lord", Name: "Mummy Lord", CR: 15, HP: 97, AC: 17, Attack: 24, AttackBonus: 9, Speed: 8, BlockRate: 0.1, XPValue: 13000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The mummy can use its Dreadful Glare and makes one attack with its rotting fist. Traits: Magic Resistance, Rejuvenation, Spellcasting"},
|
||||
"purple_worm": {ID: "purple_worm", Name: "Purple Worm", CR: 15, HP: 247, AC: 18, Attack: 24, AttackBonus: 9, Speed: 18, BlockRate: 0.15, XPValue: 13000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The worm makes two attacks: one with its bite and one with its stinger. Traits: Tunneler"},
|
||||
"adult_blue_dragon": {ID: "adult_blue_dragon", Name: "Adult Blue Dragon", CR: 16, HP: 225, AC: 19, Attack: 26, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 15000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"adult_silver_dragon": {ID: "adult_silver_dragon", Name: "Adult Silver Dragon", CR: 16, HP: 243, AC: 19, Attack: 26, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 15000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"iron_golem": {ID: "iron_golem", Name: "Iron Golem", CR: 16, HP: 210, AC: 20, Attack: 26, AttackBonus: 0, Speed: 12, BlockRate: 0.15, XPValue: 15000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The golem makes two melee attacks. Traits: Fire Absorption, Immutable Form, Magic Resistance, Magic Weapons"},
|
||||
"marilith": {ID: "marilith", Name: "Marilith", CR: 16, HP: 189, AC: 18, Attack: 26, AttackBonus: 9, Speed: 16, BlockRate: 0.15, XPValue: 15000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The marilith can make seven attacks: six with its longswords and one with its tail. Traits: Magic Resistance, Magic Weapons, Reactive"},
|
||||
"planetar": {ID: "planetar", Name: "Planetar", CR: 16, HP: 200, AC: 19, Attack: 26, AttackBonus: 12, Speed: 16, BlockRate: 0.15, XPValue: 15000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The planetar makes two melee attacks. Traits: Angelic Weapons, Divine Awareness, Innate Spellcasting, Magic Resistance"},
|
||||
"adult_gold_dragon": {ID: "adult_gold_dragon", Name: "Adult Gold Dragon", CR: 17, HP: 256, AC: 19, Attack: 28, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 18000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"adult_red_dragon": {ID: "adult_red_dragon", Name: "Adult Red Dragon", CR: 17, HP: 256, AC: 19, Attack: 28, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 18000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"androsphinx": {ID: "androsphinx", Name: "Androsphinx", CR: 17, HP: 199, AC: 17, Attack: 28, AttackBonus: 12, Speed: 16, BlockRate: 0.1, XPValue: 18000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The sphinx makes two claw attacks. Traits: Inscrutable, Magic Weapons, Spellcasting"},
|
||||
"dragon_turtle": {ID: "dragon_turtle", Name: "Dragon Turtle", CR: 17, HP: 341, AC: 20, Attack: 28, AttackBonus: 0, Speed: 8, BlockRate: 0.15, XPValue: 18000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon turtle makes three attacks: one with its bite and two with its claws. Traits: Amphibious"},
|
||||
"balor": {ID: "balor", Name: "Balor", CR: 19, HP: 262, AC: 19, Attack: 31, AttackBonus: 14, Speed: 16, BlockRate: 0.15, XPValue: 22000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The balor makes two attacks: one with its longsword and one with its whip. Traits: Death Throes, Fire Aura, Magic Resistance, Magic Weapons"},
|
||||
"ancient_brass_dragon": {ID: "ancient_brass_dragon", Name: "Ancient Brass Dragon", CR: 20, HP: 297, AC: 20, Attack: 33, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 25000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"ancient_white_dragon": {ID: "ancient_white_dragon", Name: "Ancient White Dragon", CR: 20, HP: 333, AC: 20, Attack: 33, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 25000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Ice Walk, Legendary Resistance (3/Day)"},
|
||||
"pit_fiend": {ID: "pit_fiend", Name: "Pit Fiend", CR: 20, HP: 300, AC: 19, Attack: 33, AttackBonus: 14, Speed: 12, BlockRate: 0.15, XPValue: 25000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The pit fiend makes four attacks: one with its bite, one with its claw, one with its mace, and one with its tail. Traits: Fear Aura, Magic Resistance, Magic Weapons, Innate Spellcasting"},
|
||||
"ancient_black_dragon": {ID: "ancient_black_dragon", Name: "Ancient Black Dragon", CR: 21, HP: 367, AC: 22, Attack: 34, AttackBonus: 15, Speed: 16, BlockRate: 0.15, XPValue: 33000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"ancient_copper_dragon": {ID: "ancient_copper_dragon", Name: "Ancient Copper Dragon", CR: 21, HP: 350, AC: 21, Attack: 34, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 33000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"lich": {ID: "lich", Name: "Lich", CR: 21, HP: 135, AC: 17, Attack: 34, AttackBonus: 12, Speed: 12, BlockRate: 0.1, XPValue: 33000, Notes: "SRD-tuned baseline — ability not yet wired. Traits: Legendary Resistance (3/Day), Rejuvenation, Spellcasting, Turn Resistance"},
|
||||
"solar": {ID: "solar", Name: "Solar", CR: 21, HP: 243, AC: 21, Attack: 34, AttackBonus: 15, Speed: 18, BlockRate: 0.15, XPValue: 33000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The solar makes two greatsword attacks. Traits: Angelic Weapons, Divine Awareness, Innate Spellcasting, Magic Resistance"},
|
||||
"ancient_bronze_dragon": {ID: "ancient_bronze_dragon", Name: "Ancient Bronze Dragon", CR: 22, HP: 444, AC: 22, Attack: 36, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 41000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"ancient_green_dragon": {ID: "ancient_green_dragon", Name: "Ancient Green Dragon", CR: 22, HP: 385, AC: 21, Attack: 36, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 41000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"ancient_blue_dragon": {ID: "ancient_blue_dragon", Name: "Ancient Blue Dragon", CR: 23, HP: 481, AC: 22, Attack: 37, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 50000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"ancient_silver_dragon": {ID: "ancient_silver_dragon", Name: "Ancient Silver Dragon", CR: 23, HP: 487, AC: 22, Attack: 37, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 50000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"kraken": {ID: "kraken", Name: "Kraken", CR: 23, HP: 472, AC: 18, Attack: 37, AttackBonus: 7, Speed: 8, BlockRate: 0.15, XPValue: 50000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The kraken makes three tentacle attacks, each of which it can replace with one use of Fling. Traits: Amphibious, Freedom of Movement, Siege Monster"},
|
||||
"ancient_gold_dragon": {ID: "ancient_gold_dragon", Name: "Ancient Gold Dragon", CR: 24, HP: 546, AC: 22, Attack: 38, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 62000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Amphibious, Legendary Resistance (3/Day)"},
|
||||
"ancient_red_dragon": {ID: "ancient_red_dragon", Name: "Ancient Red Dragon", CR: 24, HP: 546, AC: 22, Attack: 38, AttackBonus: 0, Speed: 16, BlockRate: 0.15, XPValue: 62000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The dragon can use its Frightful Presence. Traits: Legendary Resistance (3/Day)"},
|
||||
"tarrasque": {ID: "tarrasque", Name: "Tarrasque", CR: 30, HP: 676, AC: 25, Attack: 46, AttackBonus: 19, Speed: 16, BlockRate: 0.15, XPValue: 155000, Notes: "SRD-tuned baseline — ability not yet wired. Multiattack: The tarrasque can use its Frightful Presence. Traits: Legendary Resistance (3/Day), Magic Resistance, Reflective Carapace, Siege Monster"},
|
||||
}
|
||||
}
|
||||
71
internal/plugin/bestiary_tuned_test.go
Normal file
71
internal/plugin/bestiary_tuned_test.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package plugin
|
||||
|
||||
import "testing"
|
||||
|
||||
// TestTunedBestiarySRD_Populated guards the generated tuned table: every SRD
|
||||
// monster should derive a structurally sane DnDMonsterTemplate. Regenerate with
|
||||
// `go run ./cmd/open5e-import gen tuned` if the SRD set or formula changes.
|
||||
func TestTunedBestiarySRD_Populated(t *testing.T) {
|
||||
if len(tunedBestiarySRD) < 300 {
|
||||
t.Fatalf("tunedBestiarySRD has %d entries, want the full SRD set (~322)", len(tunedBestiarySRD))
|
||||
}
|
||||
for id, m := range tunedBestiarySRD {
|
||||
if m.ID != id {
|
||||
t.Errorf("%s: ID field = %q, want map key", id, m.ID)
|
||||
}
|
||||
if m.Name == "" {
|
||||
t.Errorf("%s: empty Name", id)
|
||||
}
|
||||
if m.HP <= 0 {
|
||||
t.Errorf("%s: HP=%d, want positive", id, m.HP)
|
||||
}
|
||||
if m.AC < 10 {
|
||||
t.Errorf("%s: AC=%d, want >= 10 (engine minimum)", id, m.AC)
|
||||
}
|
||||
if m.Attack < 1 {
|
||||
t.Errorf("%s: Attack=%d, want >= 1", id, m.Attack)
|
||||
}
|
||||
if m.Speed < 6 || m.Speed > 18 {
|
||||
t.Errorf("%s: Speed=%d, want within [6,18]", id, m.Speed)
|
||||
}
|
||||
if m.Ability != nil {
|
||||
t.Errorf("%s: Ability is set — the generator never wires abilities", id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestTunedBestiarySRD_MergedIntoRoster confirms the init-time merge ran and
|
||||
// that hand-authored dndBestiary entries win over the generated baseline.
|
||||
func TestTunedBestiarySRD_MergedIntoRoster(t *testing.T) {
|
||||
// A tuned-only creature (no hand-authored entry) should be in the roster.
|
||||
if _, ok := dndBestiary["tarrasque"]; !ok {
|
||||
t.Error("tarrasque missing from dndBestiary — tuned merge did not run")
|
||||
}
|
||||
// Owlbear is hand-authored; the roster entry must keep the playtested
|
||||
// values (and its wired Ability), not the generated baseline.
|
||||
ob, ok := dndBestiary["owlbear"]
|
||||
if !ok {
|
||||
t.Fatal("owlbear missing from dndBestiary")
|
||||
}
|
||||
if ob.Ability == nil {
|
||||
t.Error("owlbear lost its hand-authored Ability — tuned baseline clobbered the roster entry")
|
||||
}
|
||||
}
|
||||
|
||||
// TestAttackByCR_KnownAnchors spot-checks the Attack curve against playtested
|
||||
// roster values so a formula regression surfaces as a mismatch.
|
||||
func TestTunedBestiarySRD_KnownEntry(t *testing.T) {
|
||||
ab, ok := tunedBestiarySRD["aboleth"]
|
||||
if !ok {
|
||||
t.Fatal("aboleth missing from tuned bestiary")
|
||||
}
|
||||
// HP/AC verbatim SRD; Attack from the CR-10 anchor; AttackBonus from the
|
||||
// hardest-hitting attack (Tentacle, +9).
|
||||
if ab.HP != 135 || ab.AC != 17 || ab.Attack != 16 || ab.AttackBonus != 9 {
|
||||
t.Errorf("aboleth = HP %d / AC %d / Attack %d / AB %d, want 135 / 17 / 16 / 9",
|
||||
ab.HP, ab.AC, ab.Attack, ab.AttackBonus)
|
||||
}
|
||||
if ab.XPValue != 5900 {
|
||||
t.Errorf("aboleth XPValue = %d, want 5900", ab.XPValue)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user