Giter Club home page Giter Club logo

combat-estimate's Introduction

Latest Release Download Count

Forge Installs

NOTE: This module's functionality has been folded into Stochastic Fantastic. Please download this module instead (Github).

How to use Combat-Estimate

  1. Create a combat on your scene
  2. Open the combat blade on the side bar
  3. Click Combat Estimate

  1. Profit! That's really it! The dialog should load very quickly and display a rough estimate of how much damage each creature will do on each attack if it hits, as well as how likely they are to hit against enemy armor classes (Saving throws are still a work in progress).

Legendary Actions

V1 support for calculating legendary actions is out! This will even determine for legendary actions like a Dragon's Wing Attack, which isn't classified as an area-of-effect attack by Foundry, determine how many enemies you're likely to hit just based on the size of the effect.

Supported Features

  1. Multi-attack/extra attack for non-player character creatures & players with classes
  2. Calculating saving throw percentage chance at failure
  3. Half-damage on save
  4. Damage immunities, resistances and vulnerabilities
  5. Legendary actions

Current Limitations and planned work:

  1. Lair actions
  2. Player class features: Great weapon master, sharpshooter, etc.
  3. Taking into account active spell slots
  4. Having a "conserve resources" / "go all out" mode.

combat-estimate's People

Contributors

etriebe avatar varriount avatar

Stargazers

 avatar xex avatar  avatar

Watchers

 avatar

Forkers

varriount

combat-estimate's Issues

Hostile Combatants not showing

Foundry VTT | Created Combat with id [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created Combatant with id [WHM2HOERdzJpfbtk] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [SM6mmfTyT4Btjwim]
backend.mjs:306 Foundry VTT | Created Combatant with id [kR52LnhFXrLCGEyl] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [yNlNMFDaCMaKjeiE]
backend.mjs:306 Foundry VTT | Created Combatant with id [8YE0hEtw1tcI92zP] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [IuOUnF2SsVjRUkox]
backend.mjs:306 Foundry VTT | Created Combatant with id [t0wG3YVP8fi8v8gZ] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [xNtnlUxlVQLkgAKx]
backend.mjs:306 Foundry VTT | Created Combatant with id [WFDRwZsaYGg39nHc] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [GER4EwKh11MyfZae]
backend.mjs:306 Foundry VTT | Created Combatant with id [pUfqRvKgf4mHuk10] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [L4P8npjktOdYH09a]
backend.mjs:306 Foundry VTT | Created Combatant with id [unLSvvvgsDq5eY3H] in parent Combat [kpmjU1wrl0rvrD9v]
backend.mjs:306 Foundry VTT | Created ChatMessage with id [DDN7TWiQC9axbIfD]
foundry.js:3053 Foundry VTT | Rendering CombatEstimateDialog
dialog.js:71 Combatant Tarhun is friendly
ActorUtils.js:584 Unable to parse attack Fire Breath Weapon: SyntaxError: Invalid or unexpected token
getBestSingleAttack @ ActorUtils.js:584
getCombatDataPerRound @ ActorUtils.js:241
PCActor5e @ PCActor5e.js:12
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
dialog.js:71 Combatant Barrington is friendly
dialog.js:71 Combatant Sir Snuggles is friendly
dialog.js:71 Combatant Bruss is friendly
ActorUtils.js:234 Attempted to guess attack for Bruss the Oriented: 3 Handaxe attacks.
dialog.js:71 Combatant Jis Pin is friendly
ActorUtils.js:234 Attempted to guess attack for Jis Pin: 2 Elven Burst-Bow attacks.
dialog.js:71 Combatant Landuin is friendly
ActorUtils.js:234 Attempted to guess attack for Landuin Lor'lin: 1 Scrumptious (Rapier) attacks.
dialog.js:79 Combatant Adult Sea Dragon is hostile
ActorUtils.js:926 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'match')
[Detected 1 package: combat-estimate]
at Function.getDamageWithResistance (ActorUtils.js:926)
at Function.getInfoForAttackObject (ActorUtils.js:1062)
at CombatEstimateDialog.getActorCombatSummary (dialog.js:154)
at CombatEstimateDialog.populateCombatants (dialog.js:108)
at CombatEstimateDialog.activateListeners (dialog.js:37)
at CombatEstimateDialog._render (foundry.js:3090)
at async CombatEstimateDialog._render (foundry.js:3764)
MissingEnemies

Not showing anything

Getting this when I try to use the module:

Screen Shot 2022-05-06 at 12 35 47 PM

ANd this is the error the console is throwing:

Uncaught (in promise) ReferenceError: SFLOCALCONSTS is not defined
[Detected 1 package: combat-estimate]
    at Function.getSystemVariableForObject (FoundryUtils.js:40:7)
    at Function.getCreatureTypeForActor (ActorUtils.js:11:25)
    at new NPCActor5e (NPCActor5e.js:14:40)
    at Function.getActorObject (ActorUtils.js:44:14)
    at CombatEstimateDialog.populateCombatants (dialog.js:80:31)
    at CombatEstimateDialog.activateListeners (dialog.js:37:8)
    at CombatEstimateDialog._render (foundry.js:3090:10)
    at async CombatEstimateDialog._render (foundry.js:3764:5)

Cannot Read Properties (SAVE)

Getting the following error on a specific PC and legendary creature.
image

Can provide PC Json at request

Foundry V10 latest
System DND5e Latest

NaN Values

After latest fix, getting NaN numbers in CE which causes failure in rounds to down calculation. For both NPC and PC.

image

Also might I add that you are awesome for how quick you look into these!

>100% Accuracy

The accuracy formula seems to not be bounded appropriately as you can't have >100% accuracy (as seen on Farrock's trident, circled below, and Finnian's spellbook).

image

Most creatures don't work - error reading 'match'

Trying to use the module and almost any combination of creatures I try gives me a blank list of friendly and hostile combatants and the following error in the console:

ActorUtils.js:919 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'match')
    at ActorUtils.getDamageWithResistance (ActorUtils.js:919:37)
    at ActorUtils.getInfoForAttackObject (ActorUtils.js:1048:47)
    at CombatEstimateDialog.getActorCombatSummary (dialog.js:154:18)
    at CombatEstimateDialog.populateCombatants (dialog.js:91:33)
    at CombatEstimateDialog.activateListeners (dialog.js:37:8)
    at CombatEstimateDialog._render (foundry.js:3090:10)
    at async CombatEstimateDialog._render (foundry.js:3764:5)

Attack action

Level 15 fighter shows x2 attacks in calc, should be x3.

Referential Legendary Action not Working

While #10 is resolved in the sense that it's no longer drawing a blank on the popup, it still seems to not be calculating the legendary action in a meaningful way.

Here is the json of the creature in question (which is not the one found on D&D Beyond):

{
  "name": "Gelatinous Titan",
  "type": "npc",
  "img": "tokens/Gelatinous%20Titan%20Token.png",
  "data": {
    "abilities": {
      "str": {
        "value": 18,
        "proficient": 0,
        "bonuses": {
          "check": 0,
          "save": ""
        },
        "mod": 5
      },
      "dex": {
        "value": 7,
        "proficient": 0,
        "bonuses": {
          "check": 0,
          "save": ""
        },
        "mod": -2
      },
      "con": {
        "value": 28,
        "proficient": 1,
        "bonuses": {
          "check": 0,
          "save": ""
        },
        "mod": 9
      },
      "int": {
        "value": 1,
        "proficient": 0,
        "bonuses": {
          "check": 0,
          "save": ""
        },
        "mod": -5
      },
      "wis": {
        "value": 6,
        "proficient": 1,
        "bonuses": {
          "check": 0,
          "save": ""
        },
        "mod": -2
      },
      "cha": {
        "value": 1,
        "proficient": 0,
        "bonuses": {
          "check": 0,
          "save": ""
        },
        "mod": -5
      }
    },
    "attributes": {
      "ac": {
        "flat": null,
        "calc": "default",
        "formula": null,
        "min": 0,
        "value": null
      },
      "hp": {
        "value": 8,
        "min": 0,
        "max": 273,
        "temp": null,
        "tempmax": null,
        "formula": "14d10 + 126"
      },
      "init": {
        "value": 0,
        "bonus": 0,
        "mod": 0,
        "total": -2,
        "prof": 0
      },
      "movement": {
        "burrow": null,
        "climb": null,
        "fly": null,
        "swim": null,
        "walk": 15,
        "units": "ft",
        "hover": false
      },
      "attunement": {
        "max": 3
      },
      "senses": {
        "darkvision": 0,
        "blindsight": 360,
        "tremorsense": 0,
        "truesight": 0,
        "units": "ft",
        "special": ""
      },
      "spellcasting": "str",
      "prof": 4,
      "spelldc": 8
    },
    "details": {
      "biography": {
        "value": "<div class=\"rd__b  rd__b--1\"><div class=\"rd__b  rd__b--2\"><p>Gelatinous cubes scour dungeon passages in silent, predictable patterns, leaving perfectly clean paths in their wake. They consume living tissue while leaving bones and other materials undissolved.</p><p>A gelatinous cube is all but transparent, making it hard to spot until it attacks. A cube that is well fed can be easier to spot, since its victims' bones, coins, and other objects can be seen suspended inside the creature.</p><div class=\"rd__b  rd__b--3\"><span class=\"rd__h rd__h--3\" data-title-index=\"45\"> <span class=\"entry-title-inner\">Oozes.</span></span> <p>Oozes thrive in the dark, shunning areas of bright light and extreme temperatures. They flow through the damp underground, feeding on any creature or object that can be dissolved, slinking along the ground, dripping from walls and ceilings, spreading across the edges of underground pools, and squeezing through cracks.</p><div class=\"rd__spc-inline-post\"></div><p>The first warning an adventurer receives of an ooze's presence is often the searing pain of its acidic touch. Oozes are drawn to movement and warmth. Organic material nourishes them, and when prey is scarce they feed on grime, fungus, and offal. Veteran explorers know that an immaculately clean passageway is a likely sign that an ooze lairs nearby.</p><div class=\"rd__b  rd__b--3\"><span class=\"rd__h rd__h--3\" data-title-index=\"46\"> <span class=\"entry-title-inner\">Slow Death.</span></span> <p> An ooze kills its prey slowly. Some varieties, such as black puddings and gelatinous cubes, engulf creatures to prevent escape. The only upside of this torturous death is that a victim's comrades can come to the rescue before it is too late.</p><div class=\"rd__spc-inline-post\"></div><p>Since not every ooze digests every type of substance, some have coins, metal gear, bones, and other debris suspended within their quivering bodies. A slain ooze can be a rich source of treasure for its killers.</p><p>Whether this is true or not, the Faceless Lord is one of the few beings that can control oozes and imbue them with a modicum of intelligence. Most of the time, oozes have no sense of tactics or self-preservation. They are direct and predictable, attacking and eating without cunning. Under the control of Juiblex, they exhibit glimmers of sentience and malevolent intent.</p></div><div class=\"rd__b  rd__b--3\"><span class=\"rd__h rd__h--3\" data-title-index=\"47\"> <span class=\"entry-title-inner\">Unwitting Servants.</span></span> <p> Although an ooze lacks the intelligence to ally itself with other creatures, others that understand an ooze's need to feed might lure it into a location where it can be of use to them. Clever monsters keep oozes around to defend passageways or consume refuse. Likewise, an ooze can be enticed into a pit trap, where its captors feed it often enough to prevent it from coming after them. Crafty creatures place torches and flaming braziers in strategic areas to dissuade an ooze from leaving a particular tunnel or room.</p><div class=\"rd__spc-inline-post\"></div></div><div class=\"rd__b  rd__b--3\"><span class=\"rd__h rd__h--3\" data-title-index=\"48\"> <span class=\"entry-title-inner\">Spawn of Juiblex.</span></span> <p> According to the Demonomicon of Iggwilv and other sources, oozes are scattered fragments or offspring of the demon lord Juiblex.</p><div class=\"rd__spc-inline-post\"></div></div><div class=\"rd__b  rd__b--3\"><span class=\"rd__h rd__h--3\" data-title-index=\"49\"> <span class=\"entry-title-inner\">Ooze Nature.</span></span> <p> An ooze doesn't require sleep.</p><div class=\"rd__spc-inline-post\"></div></div></div></div></div>",
        "public": ""
      },
      "alignment": "unaligned",
      "race": "",
      "type": {
        "value": "ooze",
        "subtype": "",
        "swarm": null,
        "custom": ""
      },
      "environment": "Underdark",
      "cr": 13,
      "spellLevel": 5,
      "xp": {
        "value": 7200
      },
      "source": "MM",
      "class": {},
      "gender": "",
      "age": "",
      "height": "",
      "weight": "",
      "eyes": "",
      "skin": "",
      "hair": "",
      "notes1name": "",
      "notes2name": "",
      "notes3name": "",
      "notes4name": ""
    },
    "traits": {
      "size": "grg",
      "di": {
        "value": [
          "acid"
        ],
        "custom": ""
      },
      "dr": {
        "value": [],
        "custom": ""
      },
      "dv": {
        "value": [],
        "custom": ""
      },
      "ci": {
        "value": [
          "blinded",
          "charmed",
          "deafened",
          "exhaustion",
          "frightened",
          "prone"
        ],
        "custom": ""
      },
      "languages": {
        "value": [],
        "custom": ""
      }
    },
    "currency": {
      "pp": 0,
      "gp": 0,
      "ep": 0,
      "sp": 0,
      "cp": 0
    },
    "skills": {
      "acr": {
        "value": 0,
        "ability": "dex",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "ani": {
        "value": 0,
        "ability": "wis",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "arc": {
        "value": 0,
        "ability": "int",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "ath": {
        "value": 0,
        "ability": "str",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "dec": {
        "value": 0,
        "ability": "cha",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "his": {
        "value": 0,
        "ability": "int",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "ins": {
        "value": 0,
        "ability": "wis",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "itm": {
        "value": 0,
        "ability": "cha",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "inv": {
        "value": 0,
        "ability": "int",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "med": {
        "value": 0,
        "ability": "wis",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "nat": {
        "value": 0,
        "ability": "int",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "prc": {
        "value": 0,
        "ability": "wis",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "prf": {
        "value": 0,
        "ability": "cha",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "per": {
        "value": 0,
        "ability": "cha",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "rel": {
        "value": 0,
        "ability": "int",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "slt": {
        "value": 0,
        "ability": "dex",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "ste": {
        "value": 0,
        "ability": "dex",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      },
      "sur": {
        "value": 0,
        "ability": "wis",
        "bonuses": {
          "check": 0,
          "passive": ""
        }
      }
    },
    "spells": {
      "spell1": {
        "value": 4,
        "override": null,
        "max": 0
      },
      "spell2": {
        "value": 3,
        "override": null,
        "max": 0
      },
      "spell3": {
        "value": 2,
        "override": null,
        "max": 0
      },
      "spell4": {
        "value": 0,
        "override": null,
        "max": 0
      },
      "spell5": {
        "value": 0,
        "override": null,
        "max": 0
      },
      "spell6": {
        "value": 0,
        "override": null,
        "max": 0
      },
      "spell7": {
        "value": 0,
        "override": null,
        "max": 0
      },
      "spell8": {
        "value": 0,
        "override": null,
        "max": 0
      },
      "spell9": {
        "value": 0,
        "override": null,
        "max": 0
      },
      "pact": {
        "value": 0,
        "override": null
      },
      "spell0": {
        "value": 0,
        "max": 0
      }
    },
    "bonuses": {
      "mwak": {
        "attack": "",
        "damage": ""
      },
      "rwak": {
        "attack": "",
        "damage": ""
      },
      "msak": {
        "attack": "",
        "damage": ""
      },
      "rsak": {
        "attack": "",
        "damage": ""
      },
      "abilities": {
        "check": "",
        "save": "",
        "skill": ""
      },
      "spell": {
        "dc": ""
      }
    },
    "resources": {
      "legact": {
        "value": 3,
        "max": 3
      },
      "legres": {
        "value": 2,
        "max": 3
      },
      "lair": {
        "value": true,
        "initiative": 20
      }
    }
  },
  "token": {
    "name": "Gelatinous Titan",
    "img": "tokens/Gelatinous%20Titan%20Token.png",
    "displayName": 0,
    "actorLink": true,
    "width": 16,
    "height": 16,
    "scale": 1,
    "mirrorX": false,
    "mirrorY": false,
    "lockRotation": false,
    "rotation": 0,
    "alpha": 1,
    "vision": true,
    "dimSight": 0,
    "brightSight": 60,
    "sightAngle": 0,
    "light": {
      "alpha": 0.5,
      "angle": 0,
      "bright": 0,
      "coloration": 1,
      "dim": 0,
      "gradual": true,
      "luminosity": 0.5,
      "saturation": 0,
      "contrast": 0,
      "shadows": 0,
      "animation": {
        "speed": 5,
        "intensity": 5,
        "reverse": false
      },
      "darkness": {
        "min": 0,
        "max": 1
      },
      "color": null
    },
    "disposition": -1,
    "displayBars": 40,
    "bar1": {
      "attribute": "attributes.hp"
    },
    "bar2": {
      "attribute": ""
    },
    "flags": {
      "token-hud-wildcard": {
        "default": ""
      },
      "perfect-vision": {
        "visionRules": "default",
        "monoVisionColor": "",
        "sightLimit": null,
        "light": {}
      },
      "core": {}
    },
    "randomImg": false,
    "tint": null,
    "elevation": 0,
    "actorData": {},
    "effects": []
  },
  "items": [
    {
      "_id": "CP7zEgScJcs3ReUK",
      "name": "Pseudopod",
      "type": "weapon",
      "img": "icons/creatures/slimes/slime-movement-dripping-pseudopods-green.webp",
      "data": {
        "description": {
          "value": "<div class=\"rd__b  rd__b--3\">\n<p><em>Melee Weapon Attack:</em> [[/r 1d20+9]] (+9) to hit, reach 5 ft., one creature. <em>Hit:</em> 10 ([[/r 3d6]]) acid damage.</p>\n<div class=\"rd__spc-inline-post\"> </div>\n</div>",
          "chat": "",
          "unidentified": ""
        },
        "source": "MM",
        "quantity": 1,
        "weight": 0,
        "price": 0,
        "attunement": 0,
        "equipped": true,
        "rarity": "",
        "identified": true,
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": 5,
          "long": 0,
          "units": "ft"
        },
        "uses": {
          "value": null,
          "max": "",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "str",
        "actionType": "mwak",
        "attackBonus": "0",
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [
            [
              "3d6",
              "acid"
            ]
          ],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "spell"
        },
        "armor": {
          "value": 10
        },
        "hp": {
          "value": 0,
          "max": 0,
          "dt": null,
          "conditions": ""
        },
        "weaponType": "natural",
        "baseItem": "",
        "properties": {
          "ada": false,
          "amm": false,
          "fin": false,
          "fir": false,
          "foc": false,
          "hvy": false,
          "lgt": false,
          "lod": false,
          "mgc": false,
          "rch": false,
          "rel": false,
          "ret": false,
          "sil": false,
          "spc": false,
          "thr": false,
          "two": false,
          "ver": false
        },
        "proficient": true,
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "betterRolls5e": {
          "quickDamage": {
            "context": {
              "0": ""
            },
            "value": {
              "0": true
            },
            "altValue": {
              "0": true
            }
          },
          "quickOther": {
            "context": "",
            "value": true,
            "altValue": true
          },
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickAttack": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickVersatile": {
            "value": false,
            "altValue": false
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          },
          "quickCharges": {
            "value": {
              "quantity": false
            },
            "altValue": {
              "quantity": false
            }
          }
        },
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        },
        "rest-recovery": {
          "data": {
            "recovery": {
              "enabled": false
            }
          }
        },
        "midi-qol": {
          "effectActivation": false
        },
        "midiProperties": {
          "nodam": false,
          "fulldam": false,
          "halfdam": false,
          "rollOther": false,
          "critOther": false,
          "magicdam": false,
          "magiceffect": false,
          "concentration": false,
          "toggleEffect": false
        }
      }
    },
    {
      "_id": "5zOEuhLe4C5F3Jpr",
      "name": "Engulf",
      "type": "feat",
      "img": "icons/magic/water/pseudopod-swirl-blue.webp",
      "data": {
        "description": {
          "value": "<div class=\"rd__b  rd__b--3\">\n<p>The cube moves up to its speed. While doing so, it can enter Large or smaller creatures' spaces. Whenever the cube enters a creature's space, the creature must make a DC 17 Dexterity saving throw.</p>\n<div class=\"rd__spc-inline-post\"> </div>\n<p>On a successful save, the creature can choose to be pushed 5 feet back or to the side of the cube. A creature that chooses not to be pushed suffers the consequences of a failed saving throw.</p>\n<p>On a failed save, the cube enters the creature's space, and the creature takes 10 ([[/r 3d6]]) acid damage and is engulfed. The Gelatinous Titan can't breathe, is @condition[restrained], and takes 21 ([[/r 6d6]]) acid damage at the start of each of the cube's turns. When the cube moves, the Gelatinous Titan moves with it.</p>\n<p>An Gelatinous Titan can try to escape by taking an action to make a DC 17 Strength check. On a success, the creature escapes and enters a space of its choice within 5 feet of the cube.</p>\n</div>",
          "chat": "",
          "unidentified": ""
        },
        "source": "MM",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "",
        "actionType": "other",
        "attackBonus": null,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [
            [
              "3d6",
              "acid"
            ],
            [
              "6d6",
              "acid"
            ]
          ],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "dex",
          "dc": 16,
          "scaling": "spell"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        },
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "betterRolls5e": {
          "quickOther": {
            "context": "",
            "value": true,
            "altValue": true
          },
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickSave": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          },
          "quickDamage": {
            "context": {
              "0": "",
              "1": "turn start"
            },
            "value": {
              "0": true,
              "1": true
            },
            "altValue": {
              "0": true,
              "1": true
            }
          }
        },
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        }
      }
    },
    {
      "_id": "4xKAePgFqi8Ti0qU",
      "name": "Ooze Cube",
      "type": "feat",
      "img": "icons/magic/water/barrier-ice-water-cube.webp",
      "data": {
        "description": {
          "value": "<div class=\"rd__b  rd__b--3\"><p>The cube takes up its entire space. Other creatures can enter the space, but a creature that does so is subjected to the cube's Engulf and has disadvantage on the saving throw.</p><div class=\"rd__spc-inline-post\"></div><p>Creatures inside the cube can be seen but have total cover.</p><p>A creature within 5 feet of the cube can take an action to pull a creature or object out of the cube. Doing so requires a successful DC 16 Strength check, and the creature making the attempt takes 42 ([[/r 12d6]]) acid damage.</p><p>The cube can hold only one Large creature or up to four Medium or smaller creatures inside it at a time.</p></div>",
          "chat": "",
          "unidentified": ""
        },
        "source": "MM",
        "activation": {
          "type": "",
          "cost": 0,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": null
        },
        "consume": {
          "type": null,
          "target": null,
          "amount": null
        },
        "ability": "",
        "actionType": "other",
        "attackBonus": null,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "flat"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        }
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {}
    },
    {
      "_id": "7xrwzUJ5PxmmJr9B",
      "name": "Transparent",
      "type": "feat",
      "img": "icons/magic/control/silhouette-hold-change-blue.webp",
      "data": {
        "description": {
          "value": "<div class=\"rd__b  rd__b--3\"><p>Even when the cube is in plain sight, it takes a successful DC 19 Wisdom (Perception) check to spot a cube that has neither moved nor attacked. A creature that tries to enter the cube's space while unaware of the cube is surprised by the cube.</p><div class=\"rd__spc-inline-post\"></div></div>",
          "chat": "",
          "unidentified": ""
        },
        "source": "MM",
        "activation": {
          "type": "",
          "cost": 0,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": null
        },
        "consume": {
          "type": null,
          "target": null,
          "amount": null
        },
        "ability": "",
        "actionType": "other",
        "attackBonus": null,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "flat"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        }
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {}
    },
    {
      "_id": "Vr5tyOaYPCJvrgip",
      "name": "Topple",
      "type": "feat",
      "img": "modules/taring-kyburn/icons/skills/Engineerskill_23.png",
      "data": {
        "description": {
          "value": "<p>The Gelatinous Titan topples over, immediately moving up to its side length (<strong>80 feet</strong>) without provoking opportunity attacks.</p>\n<p>If it lands on the ground, any creatures caught beneath it must succeed on a <strong>DC 17 Strength</strong> saving throw or be knocked prone. On a success, a creature can use its reaction to immediately move up to its speed out of the way. On a failure, a creature takes 3d8 bludgeoning damage and is <strong>Engulfed</strong>.</p>\n<p>The enormous movement causes a tremendous wave of water to rush throughout the system. Anyone in the water must succeed on a <strong>DC 17 Strength</strong> save or be shoved <strong>20 feet</strong> backward and take <strong>3d8</strong> bludgeoning damage, half on success.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": null,
          "max": "",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "",
        "actionType": "save",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [
            [
              "3d8",
              "bludgeoning"
            ]
          ],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "str",
          "dc": null,
          "scaling": "spell"
        },
        "requirements": "",
        "recharge": {
          "value": 6,
          "charged": false
        },
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        },
        "betterRolls5e": {
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickOther": {
            "value": true,
            "altValue": true,
            "context": ""
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          },
          "quickSave": {
            "value": true,
            "altValue": true
          },
          "quickDamage": {
            "context": {
              "0": ""
            },
            "value": {
              "0": true
            },
            "altValue": {
              "0": true
            }
          },
          "quickCharges": {
            "value": {
              "charge": true
            },
            "altValue": {
              "charge": true
            }
          }
        }
      }
    },
    {
      "_id": "ETJvLtBMafy0M9ke",
      "name": "Melf's Acid Arrow",
      "type": "spell",
      "img": "modules/owlmarble-magic/icons/evocation.png",
      "data": {
        "description": {
          "value": "<p>A shimmering green arrow streaks toward a target within range and bursts in a spray of acid. Make a ranged spell attack against the target. On a hit, the target takes [[/r 4d4]] acid damage immediately and [[/r 2d4]] acid damage at the end of its next turn. On a miss, the arrow splashes the target with acid for half as much of the initial damage and no damage at the end of its next turn.</p><strong>Higher Levels</strong><p>When you cast this spell using a spell slot of 3rd level or higher, the damage (both initial and later) increases by 1d4 for each slot level above 2nd.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "PHB - 259",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": "inst"
        },
        "target": {
          "value": null,
          "width": null,
          "units": "any",
          "type": "space"
        },
        "range": {
          "value": 90,
          "long": 0,
          "units": "ft"
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "",
        "actionType": "rsak",
        "attackBonus": "0",
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [
            [
              "4d4",
              "acid"
            ],
            [
              "2d4",
              "acid"
            ]
          ],
          "versatile": "",
          "value": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "spell",
          "value": ""
        },
        "level": 2,
        "school": "evo",
        "components": {
          "value": "",
          "vocal": true,
          "somatic": true,
          "material": true,
          "ritual": false,
          "concentration": false
        },
        "materials": {
          "value": "powdered rhubarb leaf and an adder's stomach",
          "consumed": false,
          "cost": 0,
          "supply": 0
        },
        "preparation": {
          "mode": "atwill",
          "prepared": true
        },
        "scaling": {
          "mode": "level",
          "formula": "1d4"
        },
        "classes": [
          "Wizard"
        ],
        "attunement": null
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "exportSource": {
          "world": "none",
          "system": "dnd5e",
          "coreVersion": "0.8.8",
          "systemVersion": "1.3.6"
        },
        "core": {
          "sourceId": "Compendium.owlmarble-magic.spells.QoM18E2hZcFL24Bo"
        },
        "betterRolls5e": {
          "quickDamage": {
            "context": {
              "0": "",
              "1": ""
            },
            "value": {
              "0": true,
              "1": true
            },
            "altValue": {
              "0": true,
              "1": true
            }
          },
          "quickOther": {
            "context": "",
            "value": true,
            "altValue": true
          },
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickAttack": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickVersatile": {
            "value": false,
            "altValue": false
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          }
        }
      }
    },
    {
      "_id": "gf2dGPbzWIkutIXW",
      "name": "Acid Splash",
      "type": "spell",
      "img": "modules/owlmarble-magic/icons/conjuration.png",
      "data": {
        "description": {
          "value": "<p>You hurl a bubble of acid. Choose one creature you can see within range, or choose two creatures you can see within range that are within 5 feet of each other. A target must succeed on a Dexterity saving throw or take [[/r 1d6]] acid damage.</p><p>This spell's damage increases by [[/r 1d6]] when you reach 5th level ([[/r 2d6]]), 11th level ([[/r 3d6]]), and 17th level ([[/r 4d6]]).</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "PHB - 211",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": "inst"
        },
        "target": {
          "value": 1,
          "width": null,
          "units": "",
          "type": "creature"
        },
        "range": {
          "value": 60,
          "long": 0,
          "units": "ft"
        },
        "uses": {
          "value": 0,
          "max": 0,
          "per": ""
        },
        "consume": {
          "type": "",
          "target": null,
          "amount": null
        },
        "ability": "",
        "actionType": "save",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": null
        },
        "damage": {
          "parts": [
            [
              "1d6",
              "acid"
            ]
          ],
          "versatile": "",
          "value": ""
        },
        "formula": "",
        "save": {
          "ability": "dex",
          "dc": 0,
          "scaling": "spell"
        },
        "level": 0,
        "school": "con",
        "components": {
          "value": "",
          "vocal": true,
          "somatic": true,
          "material": false,
          "ritual": false,
          "concentration": false
        },
        "materials": {
          "value": "",
          "consumed": false,
          "cost": 0,
          "supply": 0
        },
        "preparation": {
          "mode": "prepared",
          "prepared": true
        },
        "scaling": {
          "mode": "cantrip",
          "formula": ""
        },
        "classes": [
          "Sorcerer",
          "Wizard",
          "Artificer"
        ],
        "attunement": null
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "exportSource": {
          "world": "none",
          "system": "dnd5e",
          "coreVersion": "0.8.8",
          "systemVersion": "1.3.6"
        },
        "core": {
          "sourceId": "Compendium.owlmarble-magic.spells.wUXkwgExHWl2O7kF"
        }
      }
    },
    {
      "_id": "t87wrguozJRZZ9bp",
      "name": "Acid Rain",
      "type": "spell",
      "img": "modules/owlmarble-magic/icons/conjuration.png",
      "data": {
        "description": {
          "value": "<p>You create a shower of caustic acidic rain upon everything in a 40-foot cube centered on a point you can see within range, dealing 3d8 acid damage.  A creature can make a Constitution saving throw to take half damage instead.</p><p><strong>Higher Levels</strong>: For each spell level this is cast at above 3rd, increase the size of the cube by 5 feet.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "OMM - 3",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": "inst"
        },
        "target": {
          "value": 40,
          "width": null,
          "units": "ft",
          "type": "cube"
        },
        "range": {
          "value": 120,
          "long": 0,
          "units": "ft"
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "",
        "actionType": "save",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": null
        },
        "damage": {
          "parts": [
            [
              "3d8",
              "acid"
            ]
          ],
          "versatile": "",
          "value": ""
        },
        "formula": "",
        "save": {
          "ability": "con",
          "dc": 0,
          "scaling": "spell"
        },
        "level": 3,
        "school": "con",
        "components": {
          "value": "",
          "vocal": true,
          "somatic": true,
          "material": true,
          "ritual": false,
          "concentration": false
        },
        "materials": {
          "value": "a flask of vinegar",
          "consumed": false,
          "cost": 0,
          "supply": 0
        },
        "preparation": {
          "mode": "atwill",
          "prepared": true
        },
        "scaling": {
          "mode": "level",
          "formula": ""
        },
        "classes": [
          "Druid",
          "Sorcerer",
          "Wizard"
        ],
        "attunement": null
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "exportSource": {
          "world": "none",
          "system": "dnd5e",
          "coreVersion": "0.8.8",
          "systemVersion": "1.3.6"
        },
        "core": {
          "sourceId": "Compendium.owlmarble-magic.spells.irRfPBRIQbQX3d2f"
        },
        "betterRolls5e": {
          "quickDamage": {
            "context": {
              "0": ""
            },
            "value": {
              "0": true
            },
            "altValue": {
              "0": true
            }
          },
          "quickOther": {
            "context": "",
            "value": true,
            "altValue": true
          },
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickSave": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickVersatile": {
            "value": false,
            "altValue": false
          },
          "quickTemplate": {
            "value": true,
            "altValue": true
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          }
        }
      }
    },
    {
      "_id": "Pa0SkEIRzw7loWik",
      "name": "Tasha's Caustic Brew",
      "type": "spell",
      "img": "modules/owlmarble-magic/icons/evocation.png",
      "data": {
        "description": {
          "value": "<p>A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes [[/r 2d4]] acid damage at start of each of its turns.</p><strong>Higher Levels</strong><p>When you cast this spell using a spell slot of 2nd level or higher, the damage increases by [[/r 2d4]] for each slot level above 1st.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "TCE - 115",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": 1,
          "units": "minute"
        },
        "target": {
          "value": 30,
          "width": null,
          "units": "ft",
          "type": "line"
        },
        "range": {
          "value": null,
          "long": null,
          "units": "self"
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "",
        "actionType": "save",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": null
        },
        "damage": {
          "parts": [
            [
              "2d4",
              "acid"
            ]
          ],
          "versatile": "",
          "value": ""
        },
        "formula": "",
        "save": {
          "ability": "dex",
          "dc": 0,
          "scaling": "spell"
        },
        "level": 1,
        "school": "evo",
        "components": {
          "value": "",
          "vocal": true,
          "somatic": true,
          "material": true,
          "ritual": false,
          "concentration": true
        },
        "materials": {
          "value": "a bit of rotten food",
          "consumed": false,
          "cost": 0,
          "supply": 0
        },
        "preparation": {
          "mode": "atwill",
          "prepared": true
        },
        "scaling": {
          "mode": "level",
          "formula": "2d4"
        },
        "classes": [
          "Artificer",
          "Sorcerer",
          "Wizard"
        ],
        "attunement": null
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "exportSource": {
          "world": "none",
          "system": "dnd5e",
          "coreVersion": "0.8.8",
          "systemVersion": "1.3.6"
        },
        "core": {
          "sourceId": "Compendium.owlmarble-magic.spells.nwabdQm5Kv8Nhadu"
        },
        "betterRolls5e": {
          "quickDamage": {
            "context": {
              "0": ""
            },
            "value": {
              "0": true
            },
            "altValue": {
              "0": true
            }
          },
          "quickOther": {
            "context": "",
            "value": true,
            "altValue": true
          },
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickSave": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickVersatile": {
            "value": false,
            "altValue": false
          },
          "quickTemplate": {
            "value": true,
            "altValue": true
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          }
        }
      }
    },
    {
      "_id": "nQYuUlq0TQ6lLql9",
      "name": "Wall of Ooze",
      "type": "feat",
      "img": "modules/taring-kyburn/icons/skills/Skill_371.png",
      "data": {
        "description": {
          "value": "<p>The Gelatinous Titan creates a labyrinth of ooze walls composed of 10 panels that must originate with the Titan or another panel. Each panel has 10 hit points and is 10x10x1 feet.</p>\n<p>The panels are transparent. If a creature moves through a wall, it must succeed on a DC 17 Strength saving throw or become stuck, as if Engulfed by the titan (3d6 acid now, 6d6 later). On a success, the creature expends 5 extra feet of movement and is not stuck.</p>\n<p>The walls last for 1 minute or until this ability is used again.</p>\n<p>For the duration, the walls count as the Titan's space for the purpose of originating effects such as <strong>Pseudopod </strong>and <strong>Acid Arrow</strong>.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "",
        "activation": {
          "type": "lair",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": null,
          "max": "",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": null,
        "actionType": "",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "spell"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        },
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        },
        "betterRolls5e": {
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickOther": {
            "value": true,
            "altValue": true
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          }
        }
      }
    },
    {
      "_id": "pwPKimpEYyzTpF07",
      "name": "Multiattack",
      "type": "feat",
      "img": "icons/skills/melee/blade-tips-triple-steel.webp",
      "data": {
        "description": {
          "value": "<p>The Gelatinous Titan can make 3 Pseudopod attacks. It can replace these to cast spells without components or concentration:</p>\n<ul>\n<li>1 Attack: @Compendium[owlmarble-magic.spells.nwabdQm5Kv8Nhadu]{Tasha's Caustic Brew}</li>\n<li>2 Attacks: @Compendium[owlmarble-magic.spells.QoM18E2hZcFL24Bo]{Melf's Acid Arrow}</li>\n<li>3 Attacks: @Compendium[owlmarble-magic.spells.irRfPBRIQbQX3d2f]{Acid Rain}</li>\n</ul>",
          "chat": "",
          "unidentified": ""
        },
        "source": "",
        "activation": {
          "type": "action",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": 0,
          "max": "0",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": null,
        "actionType": "",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "spell"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        },
        "attunement": null,
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "core": {
          "sourceId": "Compendium.dnd5e.monsterfeatures.EqoLg8T8EHvhJgKE"
        },
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        },
        "betterRolls5e": {
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickOther": {
            "value": true,
            "altValue": true
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          }
        }
      }
    },
    {
      "_id": "KLt2GjgSfZ46TjqJ",
      "name": "Pseudopod",
      "type": "feat",
      "img": "modules/taring-kyburn/icons/skills/green_28.jpg",
      "data": {
        "description": {
          "value": "<p>The Gelatinous Titan makes a pseudopod attack.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "",
        "activation": {
          "type": "legendary",
          "cost": 1,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": "inst"
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": 5,
          "long": null,
          "units": "ft"
        },
        "uses": {
          "value": null,
          "max": "",
          "per": ""
        },
        "consume": {
          "type": "",
          "target": "",
          "amount": null
        },
        "ability": "",
        "actionType": "",
        "attackBonus": "0",
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "spell"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        },
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        },
        "betterRolls5e": {
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickOther": {
            "value": true,
            "altValue": true,
            "context": ""
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          },
          "quickAttack": {
            "value": true,
            "altValue": true
          }
        },
        "rest-recovery": {
          "data": {
            "recovery": {
              "enabled": false
            }
          }
        },
        "journal-backlinks": {
          "references": {}
        }
      }
    },
    {
      "_id": "l5Bjg9glAItTwyD6",
      "name": "Titan Movement",
      "type": "feat",
      "img": "modules/taring-kyburn/icons/skills/57_run.png",
      "data": {
        "description": {
          "value": "<p>Each 5 degrees of rotation consumes 5 feet of movement for the cube.</p>",
          "chat": "",
          "unidentified": ""
        },
        "source": "",
        "activation": {
          "type": "",
          "cost": 0,
          "condition": ""
        },
        "duration": {
          "value": null,
          "units": ""
        },
        "target": {
          "value": null,
          "width": null,
          "units": "",
          "type": ""
        },
        "range": {
          "value": null,
          "long": null,
          "units": ""
        },
        "uses": {
          "value": null,
          "max": "",
          "per": null
        },
        "consume": {
          "type": "",
          "target": null,
          "amount": null
        },
        "ability": null,
        "actionType": "",
        "attackBonus": 0,
        "chatFlavor": "",
        "critical": {
          "threshold": null,
          "damage": ""
        },
        "damage": {
          "parts": [],
          "versatile": ""
        },
        "formula": "",
        "save": {
          "ability": "",
          "dc": null,
          "scaling": "spell"
        },
        "requirements": "",
        "recharge": {
          "value": null,
          "charged": false
        },
        "cptooltipmode": [
          "hid",
          "hid"
        ]
      },
      "effects": [],
      "folder": null,
      "sort": 0,
      "permission": {
        "default": 0,
        "YzZjZDc3YWI5MmI4": 3
      },
      "flags": {
        "magicitems": {
          "enabled": false,
          "equipped": false,
          "attuned": false,
          "charges": "0",
          "chargeType": "c1",
          "destroy": false,
          "destroyFlavorText": "reaches 0 charges: it crumbles into ashes and is destroyed.",
          "rechargeable": false,
          "recharge": "0",
          "rechargeType": "t1",
          "rechargeUnit": "r1",
          "sorting": "l"
        },
        "betterRolls5e": {
          "quickDesc": {
            "value": true,
            "altValue": true
          },
          "quickProperties": {
            "value": true,
            "altValue": true
          },
          "quickOther": {
            "value": true,
            "altValue": true
          },
          "quickFlavor": {
            "value": true,
            "altValue": true
          }
        }
      }
    }
  ],
  "effects": [],
  "flags": {
    "srd5e": {
      "page": "bestiary.html",
      "source": "MM",
      "hash": "gelatinous%20cube_mm"
    },
    "tidy5e-sheet": {},
    "journal-backlinks": {
      "referencedBy": {
        "JournalEntry": [
          "3VFm154YcqiviPlW",
          "0EUct3sI3cU2HMce",
          "6pDdaHoMNdShYKpX"
        ],
        "Item": [
          "uTBYv1s6O1oR7C5u"
        ]
      },
      "references": {}
    },
    "core": {
      "sourceId": "Actor.ve5utgNjMJgjpFys"
    },
    "exportSource": {
      "world": "the-chainbreaker",
      "system": "dnd5e",
      "coreVersion": "9.269",
      "systemVersion": "1.6.1"
    }
  }
}

Blank Estimate with legendary creature

Works as long as creature does not have legendary.
Legendary Able Monsters generate attached error.

Monsters imported with MrPrimatesDDB Importer
image

Foundry V10 latest

Blank Encounter with Legendary Monster

image

Console will be included below, but first the spells that aren't loading (even though I suspect they're unrelated problems):

Frostbite (Brain Freeze)

image
image

Mind Sliver

image
image

Gelatinous Titan Legendary Action

I can provide more info about this creature if needed, but I figured this was the place to start since legendary action support was just added.
image
image

Console

Foundry VTT | Rendering CombatEstimateDialog
dialog.js:71 Combatant 1469 is friendly
ActorUtils.js:550 Unable to parse spell attack Frostbite
getSpellDataPerRound @ ActorUtils.js:550
PCActor5e @ PCActor5e.js:14
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
ActorUtils.js:551 SyntaxError: Invalid or unexpected token
    at Function.getAverageDamageFromDescription (ActorUtils.js:1091)
    at Function.getInfoForSpellObject (ActorUtils.js:760)
    at Function.getSpellDataPerRound (ActorUtils.js:531)
    at new PCActor5e (PCActor5e.js:14)
    at Function.getPCActorObject (ActorUtils.js:62)
    at CombatEstimateDialog.populateCombatants (dialog.js:72)
    at CombatEstimateDialog.activateListeners (dialog.js:37)
    at CombatEstimateDialog._render (foundry.js:3090)
    at async CombatEstimateDialog._render (foundry.js:3764)
getSpellDataPerRound @ ActorUtils.js:551
PCActor5e @ PCActor5e.js:14
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
ActorUtils.js:550 Unable to parse spell attack Frostbite (Brain Freeze)
getSpellDataPerRound @ ActorUtils.js:550
PCActor5e @ PCActor5e.js:14
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
ActorUtils.js:551 SyntaxError: Invalid or unexpected token
    at Function.getAverageDamageFromDescription (ActorUtils.js:1091)
    at Function.getInfoForSpellObject (ActorUtils.js:760)
    at Function.getSpellDataPerRound (ActorUtils.js:531)
    at new PCActor5e (PCActor5e.js:14)
    at Function.getPCActorObject (ActorUtils.js:62)
    at CombatEstimateDialog.populateCombatants (dialog.js:72)
    at CombatEstimateDialog.activateListeners (dialog.js:37)
    at CombatEstimateDialog._render (foundry.js:3090)
    at async CombatEstimateDialog._render (foundry.js:3764)
getSpellDataPerRound @ ActorUtils.js:551
PCActor5e @ PCActor5e.js:14
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
ActorUtils.js:550 Unable to parse spell attack Mind Sliver
getSpellDataPerRound @ ActorUtils.js:550
PCActor5e @ PCActor5e.js:14
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
ActorUtils.js:551 SyntaxError: Invalid or unexpected token
    at Function.getAverageDamageFromDescription (ActorUtils.js:1091)
    at Function.getInfoForSpellObject (ActorUtils.js:760)
    at Function.getSpellDataPerRound (ActorUtils.js:531)
    at new PCActor5e (PCActor5e.js:14)
    at Function.getPCActorObject (ActorUtils.js:62)
    at CombatEstimateDialog.populateCombatants (dialog.js:72)
    at CombatEstimateDialog.activateListeners (dialog.js:37)
    at CombatEstimateDialog._render (foundry.js:3090)
    at async CombatEstimateDialog._render (foundry.js:3764)
getSpellDataPerRound @ ActorUtils.js:551
PCActor5e @ PCActor5e.js:14
getPCActorObject @ ActorUtils.js:62
populateCombatants @ dialog.js:72
activateListeners @ dialog.js:37
_render @ foundry.js:3090
async function (async)
_render @ foundry.js:3062
_render @ foundry.js:3764
render @ foundry.js:3021
(anonymous) @ module.js:32
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
dialog.js:79 Combatant Gelatinous Titan is hostile
appbar.js:54 CombatEstimateDialog {options: {}, appId: 126, _element: S.fn.init(1), position: {}, _dragDrop: Array(0), }
FoundryUtils.js:75 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data')
[Detected 1 package: combat-estimate]
    at Function.getDataObjectFromObject (FoundryUtils.js:75)
    at Function.getLegendaryActions (ActorUtils.js:283)
    at new NPCActor5e (NPCActor5e.js:18)
    at Function.getActorObject (ActorUtils.js:44)
    at CombatEstimateDialog.populateCombatants (dialog.js:80)
    at CombatEstimateDialog.activateListeners (dialog.js:37)
    at CombatEstimateDialog._render (foundry.js:3090)
    at async CombatEstimateDialog._render (foundry.js:3764)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.