Activating a Scroll in Pathfinder First Edition

Inspired by a flowchart linked to in response to a post in /r/Pathfinder_RPG regarding how to activate a Scroll, I decided to transcribe the flowchart back into Dot and clean it up a bit.

Flowchart for activating a scroll in Pathfinder 1ed
# How to activate a scroll in Pathfinder First Edition.
# dot-ified, edited by, and Copyright (c), 2019-09-02, CC-BY-SA
# from
# via
digraph {
  node [shape=box,fontsize=10];
  edge [fontsize=8];
  title [label=<
    <font point-size="24">Activating a Scroll in Pathfinder (1ed)</font>
    <font point-size="10">CC-BY-SA</font>
    <font point-size="10"></font>
  title -> decipheredP;
  decipheredP [shape=box,label="Has the scroll been deciphered yet?"];
  decipheredP -> decipherHowP [label="no",color=red];
  decipheredP -> castSpellTypeP [label="yes",color=green];
  decipherHowP [label="How will you decipher it?"];
  decipherHowP -> spellcraftDecipher;
  decipherHowP -> umdDecipher;
  decipherHowP -> readMagicDecipher;
  { rank=same; spellcraftDecipher umdDecipher readMagicDecipher }
  spellcraftDecipher [label="\
Full Round Action\n\
DC: 20 + spell level"];
  spellcraftDecipher -> castSpellTypeP [label="success",color=green];
  spellcraftDecipher -> decipherFailure [label="failure",color=red];
  umdDecipher [label="\
Use Magic Device\n\
10 rounds / 1 minute\n\
DC: 25 + spell level"];
  umdDecipher -> castSpellTypeP [label="success",color=green];
  umdDecipher -> decipherFailure [label="failure",color=red];
  decipherFailure [fillcolor=yellow,style=filled,label="try again tomorrow"];
  readMagicDecipher [label="\
Read Magic\n\
nearly instant\n\
  readMagicDecipher -> castSpellTypeP [label="auto-success",color=green];
  castSpellTypeP [label="\
Can you cast spells of\n\
the type (arcane/divine)?"];
  castSpellTypeP -> classSpellListP [label="yes",color=green];
  castSpellTypeP -> emulateClassFeature [label="no",color=red];
  emulateClassFeature [label="\
Emulate a Class Feature\n\
Use Magic Device roll.\n\
Your effective level in that\n\
class is your result minus 20.\n\
Was that enough?"];
  emulateClassFeature -> classSpellListP [label="yes",color=green];
  emulateClassFeature -> emulateClassFeatureMeh [label="kinda?"];
  emulateClassFeature -> emulateClassFeatureTooLow [label="no",color=red];
  { rank=same; emulateClassFeatureMeh emulateClassFeatureTooLow }
  emulateClassFeatureMeh [shape=round,label=" \
Enough to cast spells, but lower\n\
than the scroll's caster level. You\n\
can still cast it, but remember for\n\
later what your caster level is,\n\
you'll have to make an extra roll.",color=blue];
  emulateClassFeatureMeh -> classSpellListP;
  emulateClassFeatureTooLow [shape=round,label="Not even enough\nto cast spells"];
  emulateClassFeatureTooLow -> tryAgainNextRound [color=red];
  tryAgainNextRound [fillcolor=yellow,style=filled,label="\
You can try again next round.\n\
If you rolled a 1, you can't try\n\
again until tomorrow."];
  { rank=same; classSpellListP umdClassSpellCheck }
  classSpellListP [label="Is the spell on your class' spell list?"];
  classSpellListP -> abilityScoreP [label="yes",color=green];
  classSpellListP -> umdClassSpellCheck [label="no",color=red];
  umdClassSpellCheck [label="\
Use Magic Device check\n\
DC: 20 + the scroll's caster level."];
  umdClassSpellCheck -> abilityScoreP [label="success",color=green];
  umdClassSpellCheck -> tryAgainNextRound [label="failure",color=red];
  { rank=same; abilityScoreP umdAbilityCheck }
  abilityScoreP [label="\
Do you have the appropriate\n\
ability score at 10 + the spell level?"];
  abilityScoreP -> casterLevelAboveScrollP [label="yes",color=green];
  abilityScoreP -> umdAbilityCheck [label="no",color=red];
  umdAbilityCheck [label="\
Use Magic Device check\n\
Your emulated score is your result - 15.\n\
Was that enough?"];
  umdAbilityCheck -> casterLevelAboveScrollP [label="success",color=green];
  umdAbilityCheck -> tryAgainNextRound [label="failure",color=red];
  { rank=same; casterLevelAboveScrollP casterLevelCheck }
  casterLevelAboveScrollP [label="\
Is your caster level higher than the\n\
caster level of the scroll?",color=blue];
  casterLevelAboveScrollP -> activateScroll [label="yes",color=green];
  casterLevelAboveScrollP -> casterLevelCheck [label="no",color=red];
  casterLevelCheck [label="\
Caster Level Check (D20 + caster level)\n\
DC: scroll's caster level + 1"];
  casterLevelCheck -> activateScroll [label="success",color=green];
  casterLevelCheck -> wisdomSave [label="failure",color=red];
  wisdomSave [label="Wisdom Check\nDC: 5"];
  wisdomSave -> tryAgainNextRound [label="success",color=green];
  wisdomSave -> scrollMishap [label="failure",color=red];
  activateScroll [fillcolor=green,style=filled,label="You activate the scroll! Congrats!", ];
  scrollMishap [color=red,style=filled,label="Scroll mishap! Scroll is wasted!\nFeels bad, man.",];
  # This casuses the order to be "[mishap] [activate] [try-again]", which screws up the edges. :P
  # { rank=same; activateScroll scrollMishap tryAgainNextRound }