Casebook Authoring Documentation

Reference for all built-in casebook functions and global data (casebook v6.36).

BUILT-IN FUNCTION DEFINITIONS


$_entryApplyOptions

  • Internal function for applying options to entry
  • Usage: _entryApplyOptions(id= NONE, autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • id: "id as parameter for overiding"; type=AstValString
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$addressLead

  • display the address of a lead by its id
  • Usage: addressLead(id)
  • Parameters:
    • id: "ID of lead"; type=AstValString; required

$adjustTrack

  • adjust track value
  • Usage: adjustTrack(id, val="", min= NONE, max= NONE)
  • Parameters:
    • id: "track id (A,B,C,D)"; type=AstValString; required
    • val: "value to adust"; type=AstValNumber; default=""
    • min: "min value"; type=AstValNumber
    • max: "max value"; type=AstValNumber

$advanceTime

  • Instruct player to advance clock by some clicks
  • Usage: advanceTime(time=60, box="default")
  • Parameters:
    • time: "Duration (in minutes)"; type=AstValNumber; default=60
    • box: "Put this text in a standalone box"; type=[]; default="default"

$afterDay

  • Text saying if after day
  • Usage: afterDay(day)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required

$authorNote

  • An author note which is not shown in normal case book build only in author report
  • Usage: authorNote(label=""): {targetblock}
  • Parameters:
    • label: "label for note for author report"; type=AstValString; default=""
    • :{targetblock} - a braced group of text to operate on

$autoHint

  • generate an autohint
  • Usage: autoHint(id="", demerits=3)
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; default=""
    • demerits: "Demerits to mark"; type=AstValNumber; default=3

$autoHintDependencies

  • tell player about hint dependencies
  • Usage: autoHintDependencies(id="")
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; default=""

$beforeDay

  • Text saying if before day
  • Usage: beforeDay(day)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required

$block

  • Keep together as a block
  • Usage: block(align="t"): {targetblock}
  • Parameters:
    • align: "alignment of minipage block"; type=['t', 'b', 'c']; default="t"
    • :{targetblock} - a braced group of text to operate on

$blurb

  • Add some text
  • Usage: blurb(type, box= NONE, textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE)
  • Parameters:
    • type: "The blurb type"; type=AstValString; required
    • box: "box style"; type=AstValString
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString

$blurbCoverPage

  • Creates a cover page blurb
  • Usage: blurbCoverPage(): {targetblock}

$blurbDay

  • Say some stuff about the day
  • Usage: blurbDay(day, type="", box= NONE, textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE)
  • Parameters:
    • day: "Number of the day"; type=AstValNumber; required
    • type: "What type of info to show"; type=['dayTimeStart', 'dayDateStart', 'dayDateNoYear', 'calendar', 'timeStart']; default=""
    • box: "box style"; type=AstValString
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString

$blurbStop

  • Add some instructions to stop
  • Usage: blurbStop(type, day=-1, rest= NONE, text= NONE, goLead= NONE)
  • Parameters:
    • type: "The stop blurb type"; type=['dayStart', 'dayStartEvent', 'dayEnd', 'nextDay', 'nightStart', 'nightEnd', 'conclusion', 'questions', 'questionPause', 'resolvePause', 'solution', 'leads', 'documents', 'hints', 'end', 'begin', 'noMore', 'dayStartThenConclusion']; required
    • day: "Number of the day"; type=AstValNumber; default=-1
    • rest: "Suggest player takes a rest?"; type=AstValBool
    • text: "Alternate text"; type=AstValString
    • goLead: "id of lead to go to"; type=AstValString

$box

  • Put contents in box
  • Usage: box(box="default", textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE): {targetblock}
  • Parameters:
    • box: "box style"; type=AstValString; default="default"
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$break

  • Add a page/column break
  • Usage: break(type="")
  • Parameters:
    • type: "Break type"; type=['column', 'page']; default=""

$calendar

  • Draw a calendar of one or more months
  • Usage: calendar(start, end, style="", strikeStart="", strikeEnd="", circle="", box= NONE, textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE)
  • Parameters:
    • start: "Start date"; type=AstValString; required
    • end: "End date"; type=AstValString; required
    • style: "style of calendar (not supported yet, but eventually small and large)"; type=AstValString; default=""
    • strikeStart: "date strikes start"; type=AstValString; default=""
    • strikeEnd: "date strikes end"; type=AstValString; default=""
    • circle: "date to circle"; type=AstValString; default=""
    • box: "box style"; type=AstValString
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString

$censor

  • censors a small section of text so it is unreadable
  • Usage: censor(text)
  • Parameters:
    • text: "Text to redact if you don't want to put it in a target block"; type=AstValString; required

$cipher

  • generate some cipher text
  • Usage: cipher(method, key= NONE, debug=false, removePunctuation=false, spellDigits=false, format=true, case= NONE): {targetblock}
  • Parameters:
    • method: "Name of cipher method"; type=AstValString; required
    • key: "The cipher key to use"; type=[, ]
    • debug: "Debug by showing info about the cipher at top in plaintext."; type=AstValBool; default=False
    • removePunctuation: "Remove punctuation? (spells out periods as 'stop')"; type=AstValBool; default=False
    • spellDigits: "Change digits to spelled version"; type=AstValBool; default=False
    • format: "Format the message nicely when appropriate"; type=AstValBool; default=True
    • case: "convert to upper or lower case"; type=['lower', 'upper', 'title', 'sentence']
    • :{targetblock} - a braced group of text to operate on

$circleTag

  • Mark a tag
  • Usage: circleTag(id, box= NONE, related= NONE)
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; required
    • box: "box style"; type=AstValString
    • related: "add text saying related to this"; type=AstValString

$circleUnderlinedTag

  • instruct user to circle an underlined tag and then extra
  • Usage: circleUnderlinedTag(id, check="all", box= NONE, count= NONE, noif=false, related= NONE): {targetblock}
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False
    • related: "add text saying related to this"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$configureBuildDebug

  • Configure the draft build
  • Usage: configureBuildDebug(targets= NONE, zip= NONE)
  • Parameters:
    • targets: "Comma separated target list"; type=AstValString
    • zip: "zip files?"; type=AstValBool

$configureBuildDraft

  • Configure the draft build
  • Usage: configureBuildDraft(targets= NONE, zip= NONE)
  • Parameters:
    • targets: "Comma separated target list"; type=AstValString
    • zip: "zip files?"; type=AstValBool

$configureBuildPreferred

  • Configure the draft build
  • Usage: configureBuildPreferred(targets= NONE, zip= NONE)
  • Parameters:
    • targets: "Comma separated target list"; type=AstValString
    • zip: "zip files?"; type=AstValBool

$configureCampaign

  • Configure game campaign/series options
  • Usage: configureCampaign(name= NONE, position, type="connected")
  • Parameters:
    • name: "Campaign name"; type=AstValString
    • position: "Position in campaign sequence"; type=[, ]; required
    • type: "Is it a connected campaign or a series (connected|series)?"; type=['connected', 'series']; default="connected"

$configureClock

  • Configure game clock options
  • Usage: configureClock(clockMode=true)
  • Parameters:
    • clockMode: "True means that players will track how much time passes as they visit leads"; type=AstValBool; default=True

$configureDay

  • Configure a day
  • Usage: configureDay(day, type="normal", start=9, end=18, date= NONE, hintAlly="", allyFreeStart=-1, allyFreeEnd=-1, autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • day: "Number of the day"; type=AstValNumber; required
    • type: "Day type"; type=AstValString; default="normal"
    • start: "24 hour clock hour or string"; type=[, ]; default=9
    • end: "24 hour clock hour"; type=[, ]; default=18
    • date: "Date in form mm/dd/yyyy"; type=AstValString
    • hintAlly: "is there an ally they can visit for more help"; type=['', 'financialPrecinct']; default=""
    • allyFreeStart: "start time where hint is free"; type=[, ]; default=-1
    • allyFreeEnd: "end time where hint is free"; type=[, ]; default=-1
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureDivider

  • Configure divider options
  • Usage: configureDivider(id="lead", path= NONE, pgfornament= NONE, width="3cm", rule=false, align="center")
  • Parameters:
    • id: "Divider id"; type=AstValString; default="lead"
    • path: "Path to image (or specify 'none' for none or 'rule' for rule)"; type=AstValString
    • pgfornament: "PgfOrnament id"; type=AstValNumber
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]; default="3cm"
    • rule: "put a side rule on either side of the image"; type=AstValBool; default=False
    • align: "Alignment"; type=['left', 'center', 'right']; default="center"

$configureDocuments

  • Configure document options and documents section
  • Usage: configureDocuments(defaultLocation="back", printLocation="inline", printStyle="simple", autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • defaultLocation: "Default location of documents [back,custom text]"; type=AstValString; default="back"
    • printLocation: "Where to print documents [inline, end, pdf]"; type=['inline', 'end', 'pdf']; default="inline"
    • printStyle: "Style to print documents [simple, triFold]"; type=['simple', 'triFold']; default="simple"
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureEnd

  • Configure end section
  • Usage: configureEnd(autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureFeatures

  • Configure game features
  • Usage: configureFeatures(contacts= NONE, campaign= NONE, criminalHist= NONE, events= NONE, fingerprints= NONE, irp= NONE, newspapers= NONE, trueCrime= NONE, beta= NONE, experimental= NONE, old= NONE, recommended= NONE, historical= NONE, fantastical= NONE, supernatural= NONE, youtube= NONE, ciphers= NONE, classic= NONE, documents= NONE, broken= NONE, days= NONE, clocked= NONE, ai= NONE)
  • Parameters:
    • contacts: "Supports contacts/allies"; type=AstValBool
    • campaign: "Part of a campaign"; type=AstValBool
    • criminalHist: "Uses Criminal History directory"; type=AstValBool
    • events: "Uses Event mechanic"; type=AstValBool
    • fingerprints: "Uses Fingerprint directory"; type=AstValBool
    • irp: "Uses IRP (Investigative Resource Point) mechanic"; type=AstValBool
    • newspapers: "Has newspaper documents"; type=AstValBool
    • trueCrime: "Based on a true crime"; type=AstValBool
    • beta: "Looking for beta testers"; type=AstValBool
    • experimental: "Has experimental mechanics"; type=AstValBool
    • old: "Older case using older mechanics"; type=AstValBool
    • recommended: "Recommende case that showcases the system"; type=AstValBool
    • historical: "A focus on real history"; type=AstValBool
    • fantastical: "Fantastical elements"; type=AstValBool
    • supernatural: "Supernatral elements"; type=AstValBool
    • youtube: "Playthrough on YouTube"; type=AstValBool
    • ciphers: "Ciphers & Coders"; type=AstValBool
    • classic: "Classic Mechanics"; type=AstValBool
    • documents: "Has standalone documents"; type=AstValBool
    • broken: "Is broken"; type=AstValBool
    • days: "Number of days in case"; type=AstValNumber
    • clocked: "Do you keep track of time?"; type=AstValBool
    • ai: "Uses AI-generated content"; type=AstValBool

$configureFront

  • Configure front section
  • Usage: configureFront(autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureGameInfo

  • Configure game options
  • Usage: configureGameInfo(name, title, subtitle="", authors, version, versionDate, status="", difficulty, duration)
  • Parameters:
    • name: "Simple unique name of the case (used for filenames, etc.)"; type=AstValString; required
    • title: "Case title"; type=AstValString; required
    • subtitle: "Case subtitle"; type=AstValString; default=""
    • authors: "Authors of the case (name separated by commas)"; type=AstValString; required
    • version: "Case version (dotted string like 1.0)"; type=AstValString; required
    • versionDate: "Date of this version (day/month/year)"; type=AstValString; required
    • status: "Status of the game (playable, inprogress, etc.)"; type=AstValString; default=""
    • difficulty: "From 1 to 5 (e.g. 3.5)"; type=AstValNumber; required
    • duration: "Estimated play time in hours"; type=AstValNumber; required

$configureGameInfoExtra

  • Configure game options
  • Usage: configureGameInfoExtra(gameSystem="nyNoir", gameDate="", cautions="", url="", copyright="", extraCredits="", keywords="", ai="")
  • Parameters:
    • gameSystem: "Game system (nyNoir, shcd)"; type=AstValString; default="nyNoir"
    • gameDate: "Date of the first day of the case in game time; as a string (mm/dd/yyyy)"; type=AstValString; default=""
    • cautions: "Any cautions to players (eg. adult language)"; type=AstValString; default=""
    • url: "Website url to learn more"; type=AstValString; default=""
    • copyright: "Copyright line"; type=AstValString; default=""
    • extraCredits: "Extra credits to show in listing and on cover page"; type=AstValString; default=""
    • keywords: "Keywords"; type=AstValString; default=""
    • ai: "Statement on use of AI"; type=AstValString; default=""

$configureGamePage

  • Configure gamebook layout and look
  • Usage: configureGamePage(thumbnail= NONE, thumbnailStyle= NONE, info= NONE, language= NONE)
  • Parameters:
    • thumbnail: "Thumbnail image"; type=AstValString
    • thumbnailStyle: "Style for the thumbnail"; type=AstValString
    • info: "Additional information and download instructions"; type=AstValString
    • language: "Language of case (default is English)"; type=AstValString

$configureGameSummary

  • Configure game summary options
  • Usage: configureGameSummary(summary="")
  • Parameters:
    • summary: "Summary to show in listing and on cover page"; type=AstValString; default=""

$configureHints

  • Configure hint options and hints section
  • Usage: configureHints(autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureLeadDb

  • Configure location data options (what database to use for looking up locations)
  • Usage: configureLeadDb(version="v2", versionPrevious="", seed= NONE, leadPlugin= NONE)
  • Parameters:
    • version: "Version of the location data"; type=AstValString; default="v2"
    • versionPrevious: "Version of the previous location data (used to help check for migration problems)"; type=AstValString; default=""
    • seed: "Random number generator seed used for randomizing unused leads"; type=AstValString
    • leadPlugin: "name of plugin used for things like generating dynamic lead numbers, etc."; type=AstValString

$configureLeads

  • Configure leads options and leads section
  • Usage: configureLeads(autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureLocale

  • Configure locale options
  • Usage: configureLocale(language="en")
  • Parameters:
    • language: "Language code [en|fr|es|...]"; type=AstValString; default="en"

$configureParser

  • Configure parser options
  • Usage: configureParser()

$configureRenderer

  • Configure renderer options
  • Usage: configureRenderer(doubleSided=true, latexPaperSize="letter", latexFontSize=10, autoStyleQuotes=false, timeStyle="box", defaultTimeStyle="bold", zeroTimeStyle="hide")
  • Parameters:
    • doubleSided: "Lay out page numbers for double sided printing (alternating corners)"; type=AstValBool; default=True
    • latexPaperSize: "Latex paper size"; type=['letter', 'A4', 'B6', 'A5']; default="letter"
    • latexFontSize: "Latex font size"; type=AstValNumber; default=10
    • autoStyleQuotes: "Auto style unicode left and right quote markers for more subtle font look (can cause hard-to-diagnose latex compilation errors)"; type=AstValBool; default=False
    • timeStyle: "How to display elapsed time in leads"; type=['box', 'header', 'hide']; default="box"
    • defaultTimeStyle: "Whether to hide or dim default times"; type=['hide', 'normal', 'bold', 'red']; default="bold"
    • zeroTimeStyle: "Whether to say explicitly when leads have 0 time"; type=['hide', 'normal', 'bold', 'red']; default="hide"

$configureReport

  • Configure reports options and reports section
  • Usage: configureReport(autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureSection

  • Configure an arbitrary section
  • Usage: configureSection(id, autoLead= NONE, time= NONE, timePos= NONE, sectionColumns= NONE, leadColumns= NONE, sectionBreak= NONE, leadBreak= NONE, heading= NONE, toc= NONE, childToc= NONE, childPlugins= NONE, dividers= NONE, address= NONE, copy= NONE, render= NONE, blank= NONE, mStyle= NONE, continuedFrom= NONE, headingStyle= NONE, childHeadingStyle= NONE, layout= NONE, label= NONE, sortGroup= NONE, sortKey= NONE, multiPage= NONE, autoLeadImages= NONE, arriveFrom= NONE, colBreak= NONE)
  • Parameters:
    • id: "Section ID"; type=AstValString; required
    • autoLead: "Automatically assign a lead id"; type=AstValBool
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end', 'hidden']
    • sectionColumns: "Number of columns in Section main text"; type=AstValNumber
    • leadColumns: "Number of columns in layout for child leads"; type=AstValNumber
    • sectionBreak: "Break style for section"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • leadBreak: "Break style for child leads"; type=['', 'none', 'before', 'after', 'solo', 'beforeFacing', 'afterFacing', 'soloFacing', 'soloAfterFacing']
    • heading: "Heading text shown on page (blank for none)"; type=AstValString
    • toc: "Label for table of contents (blank to hide from table of contents)"; type=AstValString
    • childToc: "Label for table of contents for children (blank to hide from table of contents)"; type=AstValString
    • childPlugins: "Name of the plugins to run on children"; type=AstValString
    • dividers: "Should we show dividers between child entries"; type=AstValBool
    • address: "Address line under heading/label; set to 'auto' to auto grab from database or '' blank to mean none"; type=AstValString
    • copy: "Entry id to copy contents from, or 'next' to copy from next lead"; type=AstValString
    • render: "If set false this lead will not render"; type=AstValBool
    • blank: "If set true then we will not show the header or add this to toc"; type=AstValBool
    • mStyle: "Set to a string keyword that informs mind map drawing"; type=AstValString
    • continuedFrom: "Add label saying 'continued from this lead"; type=AstValString
    • headingStyle: "style for rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • childHeadingStyle: "default style for child lead rendering heading"; type=['header', 'footer', 'alsoFooter', 'huge']
    • layout: "rendering layout styles"; type=AstValString
    • label: "Label as parameter"; type=AstValString
    • sortGroup: "sort group"; type=[, ]
    • sortKey: "sort key"; type=AstValString
    • multiPage: "Should we show page N of M in header"; type=[, ]
    • autoLeadImages: "Insert images related to leads (building illustrations) automatically?"; type=AstValBool
    • arriveFrom: "Specify what lead players should arrive here from (for calculated puzzles)"; type=AstValString
    • colBreak: "Set to true or false to override default column breaking"; type=AstValBool

$configureTags

  • Configure tag options
  • Usage: configureTags(alwaysNumber=true, consistentNumber=true, mode="sequential", sortRequire=true)
  • Parameters:
    • alwaysNumber: "Always use marker ids like A1,B1,...A2,B2 instead of A,B..A2,B2, even if < 26 markers; default true; note the caselog.pdf need to amtch)"; type=AstValBool; default=True
    • consistentNumber: "If alwaysNumber is false, you can set this to change A,B,... to A1,B1,... if and only if there are enough markers to reach A2, etc."; type=AstValBool; default=True
    • mode: "mode to use when generating obfuscated labels"; type=['sequential', 'firstLetter', 'hashed']; default="sequential"
    • sortRequire: "When presenting list of required tags for the day, sort them by (obfuscated) tag label; default true; set this to false if you set sequential false and order of hint checking is important; if false, order in requirement list will match order that tags were declared"; type=AstValBool; default=True

$criminalHistory

  • summarizes a criminal history
  • Usage: criminalHistory(id, show= NONE, hide= NONE, bullets=true): {targetblock}
  • Parameters:
    • id: "lead id"; type=AstValString; required
    • show: "which features of the criminal to show (blank for all)"; type=AstValString
    • hide: "which features of the criminal to hide (blank for none)"; type=AstValString
    • bullets: "use bullets on rows"; type=AstValBool; default=True
    • :{targetblock} - a braced group of text to operate on

$currentLead

  • return the current lead id as a string
  • Usage: currentLead()

$date

  • format a date into a nice string
  • Usage: date(date, year=true)
  • Parameters:
    • date: "Date in form mm/dd/yyyy"; type=AstValString; required
    • year: "should show year?"; type=AstValBool; default=True

$dayDate

  • format a day's date into a nice string
  • Usage: dayDate(day, type="dayDate")
  • Parameters:
    • day: "Day number"; type=AstValNumber; required
    • type: "What type of info to show"; type=['dayTimeStart', 'dayDate', 'dayDateNoYear', 'mmddyyyy', 'dayOfWeek', 'timeStart']; default="dayDate"

$dayInstructions

  • Generate instructions for the day
  • Usage: dayInstructions(day, when)
  • Parameters:
    • day: "Number of the day"; type=AstValNumber; required
    • when: "From [start|end]"; type=['start', 'end']; required

$debug

  • debug print value
  • Usage: debug(expression)
  • Parameters:
    • expression: "Expression to print in debug mode"; required

$debugFonts

  • do a test of all available fonts
  • Usage: debugFonts(size= NONE, scale= NONE, color= NONE, hyphenate=true, monoSpace=false, showInfo=true, verbose=false, infoFull=false, toc=true): {targetblock}
  • Parameters:
    • size: "base font size"; type=[, ]
    • scale: "scale the font, use number from 0.1 to 10.0"; type=AstValNumber
    • color: "override default color with color name"; type=AstValString
    • hyphenate: "set to false to avoid splitting end of line words"; type=AstValBool; default=True
    • monoSpace: "set to true to force monospacing of font; defaults false)"; type=AstValBool; default=False
    • showInfo: "show font metadata (family, designer, license, embedding, whether monospaced, etc) for each font; defaults true"; type=AstValBool; default=True
    • verbose: "show the full multi-line font metadata; defaults false, which shows a compact one-line summary (identity, glyph count, monospacing, embedding) instead"; type=AstValBool; default=False
    • infoFull: "when verbose, show the full untruncated license text; defaults false"; type=AstValBool; default=False
    • toc: "add hierarchical table-of-contents/bookmark entries for the font folders and each font filename; defaults true (the visible folder/subfolder headers are always shown regardless)"; type=AstValBool; default=True
    • :{targetblock} - a braced group of text to operate on

$debugImages

  • show all known images that can be embedded in the casebook, each rendered along with the relative path used to embed it
  • Usage: debugImages(width=0.5, height=0.25, filter= NONE, location="all", showInfo=true, toc=true)
  • Parameters:
    • width: "Width of each image (fraction where 0.5 is half page width) or string ending in [in|cm]; defaults 0.5"; type=[, ]; default=0.5
    • height: "Max height cap of each image (fraction of page height) or string ending in [in|cm]; defaults 0.25"; type=[, ]; default=0.25
    • filter: "only show images whose relative path contains this substring (case-insensitive)"; type=AstValString
    • location: "which image directories to include; defaults all"; type=['all', 'local', 'shared']; default="all"
    • showInfo: "show file size and pixel dimensions next to each image path; defaults true"; type=AstValBool; default=True
    • toc: "add table-of-contents/bookmark entries for the image sections and folders; defaults true"; type=AstValBool; default=True

$declareConst

  • Declarts a variable
  • Usage: declareConst(var, val, desc="")
  • Parameters:
    • var: "The variable name to set"; type=AstValIdentifier; required
    • val: "Initial value for the variable"; required
    • desc: "Description"; default=""

$declareVar

  • Declarts a variable
  • Usage: declareVar(var, val= NONE, desc="")
  • Parameters:
    • var: "The variable name to set"; type=AstValIdentifier; required
    • val: "Initial value for the variable"
    • desc: "Description"; default=""

$defineConcept

  • Defines a tag
  • Usage: defineConcept(id, label="")
  • Parameters:
    • id: "The dotted identifier used to refer to the tag"; type=AstValString; required
    • label: "Longer label describing the tag"; type=AstValString; default=""

$defineFont

  • Defines a font
  • Usage: defineFont(id, path="", size= NONE, scale= NONE, color= NONE, hyphenate=false, monoSpace=false, lineSpace= NONE, ignoreDupe=false)
  • Parameters:
    • id: "The id that will refer to the font"; type=AstValString; required
    • path: "Path to the font within the shared fonts dir (specify 'default' to base on default font)"; type=AstValString; default=""
    • size: "base font size (optional; prefer use of scale)"; type=[, ]
    • scale: "scale the font, use number from 0.1 to 10.0"; type=AstValNumber
    • color: "override default color with color name see https://www.latextemplates.com/svgnames-colors)"; type=AstValString
    • hyphenate: "set to true to let latex hyphenate and split long words at end of lines; defaults false)"; type=AstValBool; default=False
    • monoSpace: "set to true to force monospacing of font; defaults false)"; type=AstValBool; default=False
    • lineSpace: "line spacing multiplier applied when this font is used (e.g. 1.5 for 1.5x); leave blank for normal"; type=AstValNumber
    • ignoreDupe: "if true this will be ignored if a font with this id already exists; otherwise an error will be thrown"; type=AstValBool; default=False

$defineFunc

  • define a new function
  • Usage: defineFunc(id, params= NONE, description= NONE, customData= NONE, targetBlockCount= NONE): {targetblock}
  • Parameters:
    • id: "Id name of the function"; type=AstValIdentifier; required
    • params: "List of parameters"; type=AstValList
    • description: "description of function"; type=AstValString
    • customData: "customData set during function definition"
    • targetBlockCount: "number or 'none' or 'any'"; type=[lib.casebook.jrastvals.AstValString | lib.casebook.jrastvals.AstValNumber]
    • :{targetblock} - a braced group of text to operate on

$defineQuestion

  • Create a question
  • Usage: defineQuestion(id= NONE, summary= NONE, points= NONE, type= NONE, size= NONE, lines= NONE, choices= NONE): {targetblock}
  • Parameters:
    • id: "Id of the question (like Q1)"; type=AstValString
    • summary: "Summary of question for repeating in answer"; type=AstValString
    • points: "Max points the question is worse"; type=[, ]
    • type: "Question type"; type=AstValString
    • size: "How much size for answer space"; type=AstValNumber
    • lines: "How many lines for answer spaces"; type=AstValNumber
    • choices: "List of choices, separated by | character"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$defineTag

  • Defines a tag
  • Usage: defineTag(tagId, deadline=-1, label="", location= NONE, obfuscatedLabel= NONE, dependencies= NONE)
  • Parameters:
    • tagId: "The dotted identifier used to refer to the tag"; type=AstValString; required
    • deadline: "Deadline day # for the tag (leave blank for no deadline)"; type=AstValNumber; default=-1
    • label: "Longer label describing the tag"; type=AstValString; default=""
    • location: "Override default (document) location; use 'back' for back of book"; type=AstValString
    • obfuscatedLabel: "Override default (document) obfuscated label; set to 'label' to use the label"; type=AstValString
    • dependencies: "list of tags we are dependent on when giving hints"; type=AstValString

$designateFile

  • Designate an uploaded file (local or shared) to be copied into certain builds
  • Usage: designateFile(path, tag="publish", rename="")
  • Parameters:
    • path: "Relative path to uploaded file"; type=AstValString; required
    • tag: "Tag which says how to use the file"; type=['debug', 'publish']; default="publish"
    • rename: "Rename copied version of file when it is moved to publish set, etc."; type=AstValString; default=""

$didCircleTag

  • Check if user circled tag
  • Usage: didCircleTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$didGainTag

  • Check if user gained tag
  • Usage: didGainTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$didMarkTag

  • Check if user marked tag
  • Usage: didMarkTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$didStrikeTag

  • Check if user underlined tag
  • Usage: didStrikeTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$didUnderlineNotCircleTag

  • Check if user marked tag
  • Usage: didUnderlineNotCircleTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$didUnderlineTag

  • Check if user underlined tag
  • Usage: didUnderlineTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$dither

  • Return cached path to ditherized version of an image file, ditherizing it the first time
  • Usage: dither(path, mode="bw")
  • Parameters:
    • path: "Image file path"; type=AstValString; required
    • mode: "Ditherization mode"; type=AstValString; default="bw"

$divider

  • divider insert
  • Usage: divider(id= NONE)
  • Parameters:
    • id: "Divider id"; type=AstValString

$dropCaps

  • Drop cap effect for some text (make first letter BIG)
  • Usage: dropCaps(style="letter", lines=3, multi="wrap", fIndent=0.25, nIndent=0.75, lHang=0): {targetblock}
  • Parameters:
    • style: "drop cap style"; type=['letter', 'word', 'none', 'bold']; default="letter"
    • lines: "height in lines"; type=AstValNumber; default=3
    • multi: "how to handle multiple paragraphs"; type=['none', 'wrap', 'gap']; default="wrap"
    • fIndent: "findent"; type=AstValNumber; default=0.25
    • nIndent: "nIndent"; type=AstValNumber; default=0.75
    • lHang: "lHang"; type=AstValNumber; default=0
    • :{targetblock} - a braced group of text to operate on

$effect

  • Build and cache (add to game file list) an effect version of image
  • Usage: effect(path, effect)
  • Parameters:
    • path: "Image file path"; type=AstValString; required
    • effect: "Effect key"; type=AstValString; required

$effectUp

  • text effect that makes first letter bold and bigger, and remaining words uppercase
  • Usage: effectUp(text, enabled=true, style= NONE)
  • Parameters:
    • text: "the text to operate one"; type=AstValString; required
    • enabled: "set to false to disable"; type=AstValBool; default=True
    • style: "optional style (not supported yet)"; type=AstValString

$embedFile

  • Embed another pdf/text file in output
  • Usage: embedFile(path, pages="-", scale= NONE, pageStyle="", toc= NONE, layout= NONE)
  • Parameters:
    • path: "Relative path to file to embed"; type=AstValString; required
    • pages: "Comma separated page list"; type=AstValString; default="-"
    • scale: "Scaled for embed"; type=AstValNumber
    • pageStyle: "Page style to use for the page (use 'empty' to hide footer)"; type=AstValString; default=""
    • toc: "Table of contents label"; type=AstValString
    • layout: "Layout style"; type=['default', 'bookletNonStitched', 'bookletStitched']

$embedLead

  • Return inline
  • Usage: embedLead(id="")
  • Parameters:
    • id: "Lead id"; type=AstValString; default=""

$evalFunctionTargetsAsString

  • render function targets at this location
  • Usage: evalFunctionTargetsAsString()

$event

  • Boilerplate language to schedule an event
  • Usage: event(lead= NONE, day= NONE, time= NONE, when= NONE, mandatory= NONE, label= NONE, duration= NONE, whenOvertime= NONE, deadline= NONE): {targetblock}
  • Parameters:
    • lead: "What lead player should read at schedule time"; type=AstValString
    • day: "Day number when"; type=AstValNumber
    • time: "Time when"; type=AstValString
    • when: "When they can read/visit the lead"; type=AstValString
    • mandatory: "is it mandatory"; type=AstValBool
    • label: "Label of the event"; type=AstValString
    • duration: "Duration of the inline event for the lead"; type=AstValNumber
    • whenOvertime: "Provide optional info for when to say what happend if scheduled past evening event (specify custom text or one of: evening|nextDay|skip)"; type=AstValString
    • deadline: "Optional deadline text"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$fileUrl

  • generate a public absolute url to an attached file
  • Usage: fileUrl(path= NONE)
  • Parameters:
    • path: "path (name) of attached game file to make a link to (useful with multimedia files)"; type=AstValString

$fingerPrint

  • insert a fingerprint image (DEPRECATED; instead use $image($fingerprintPath(..)))
  • Usage: fingerPrint(id, finger, impression="2", style="", width="1in", align= NONE, showId=false, caption= NONE)
  • Parameters:
    • id: "lead id"; type=AstValString; required
    • finger: "finger id in form L# or R# where # is finger number from 1-5"; type=AstValString; required
    • impression: "the impression id (1=rolled clean in book, 2=dirtyslightlydif)"; type=AstValString; default="2"
    • style: "style variant"; type=AstValString; default=""
    • width: "Width (fraction where 0.5 is half page width) or string ending in [in|cm]"; type=[, ]; default="1in"
    • align: "Alignment"; type=['left', 'center', 'right']
    • showId: "show the person ID?"; type=AstValBool; default=False
    • caption: "Alternative caption when not showing id"; type=AstValString

$fingerPrintPath

  • get the path to the image of a fingerprint, so it can be used in an $image() function call
  • Usage: fingerPrintPath(id, finger, impression="2")
  • Parameters:
    • id: "lead id"; type=AstValString; required
    • finger: "finger id in form L# or R# where # is finger number from 1-5"; type=AstValString; required
    • impression: "the impression id (1=rolled clean in book, 2=dirtyslightlydif)"; type=AstValString; default="2"

$fingerPrintSet

  • insert a fingerprint image
  • Usage: fingerPrintSet(id, style="", showId=false, caption= NONE)
  • Parameters:
    • id: "lead id"; type=AstValString; required
    • style: "style variant"; type=AstValString; default=""
    • showId: "show the person ID?"; type=AstValBool; default=False
    • caption: "Alternative caption when not showing id"; type=AstValString

$flatAlpha

  • Return cached path to alpha flattened (white background) version of an image file
  • Usage: flatAlpha(path)
  • Parameters:
    • path: "Image file path"; type=AstValString; required

$footnote

  • Create a footnote
  • Usage: footnote(text, symbol= NONE, side=false)
  • Parameters:
    • text: "Footnote text"; type=AstValString; required
    • symbol: "Optional symbol index to use instead of arabic number (symbol 1 is asterisk) "; type=AstValNumber
    • side: "Set to true to show note on side margin instead of at bottom"; type=AstValBool; default=False

$form

  • Form field insert
  • Usage: form(type, size= NONE, choices= NONE)
  • Parameters:
    • type: "Form field type"; type=['short', 'mini', 'score', 'long', 'multiline', 'multipleChoice', 'checkAll']; required
    • size: "Size of field"; type=AstValNumber
    • choices: "List of choices, separated by | character"; type=AstValString

$formCheckList

  • Show choices in a list with checkboxes
  • Usage: formCheckList(choices, other=false)
  • Parameters:
    • choices: "Choices separated by | character"; type=AstValString; required
    • other: "Include an other option at end?"; type=AstValBool; default=False

$formLine

  • Single line form field
  • Usage: formLine(margin="1in", pt=1, after= NONE)
  • Parameters:
    • margin: "Margin to subtract from remainder of length on current line"; type=[, ]; default="1in"
    • pt: "Point thickness of line (default 1 for 1pt)"; type=AstValNumber; default=1
    • after: "Text to display at end of line"; type=AstValString

$formNumber

  • Short number line or box
  • Usage: formNumber(width="1cm", after= NONE)
  • Parameters:
    • width: "Width of box"; type=[, ]; default="1cm"
    • after: "Text to display at end of line"; type=AstValString

$formRadioList

  • Show choices in a list with checkboxes
  • Usage: formRadioList(choices, other=false)
  • Parameters:
    • choices: "Choices separated by | character"; type=AstValString; required
    • other: "Include an other option at end?"; type=AstValBool; default=False

$formShort

  • Short line form field
  • Usage: formShort(width="2in", pt=1, after= NONE)
  • Parameters:
    • width: "Width of short form"; type=[, ]; default="2in"
    • pt: "Point thickness of line (default 1 for 1pt)"; type=AstValNumber; default=1
    • after: "Text to display at end of line"; type=AstValString

$formText

  • Multi line text form field
  • Usage: formText(lines=2, width= NONE, pt=0.5)
  • Parameters:
    • lines: "Number of lines"; type=AstValNumber; default=2
    • width: "Width of form line"; type=[, ]
    • pt: "Point thickness of line (default 0.5 for 0.5pt)"; type=AstValNumber; default=0.5

$format

  • Format text
  • Usage: format(style="font", font= NONE, size= NONE, hyphenate=true, lineSpace= NONE, tight= NONE, box= NONE, textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE): {targetblock}
  • Parameters:
    • style: "style for formatting"; type=['', 'font', 'radio', 'news', 'handwriting', 'typewriter', 'choice', 'warning', 'culture', 'dayTest', 'quote', 'tornYellow', 'tornGray', 'compact', 'ttcompact', 'tight', 'group']; default="font"
    • font: "font id previously set with defineFont()"; type=AstValString
    • size: "size of font from [tiny|script|footnote|small|normal|large|Large|LARGE|huge|Huge|fs## (point size)]"; type=[, ]
    • hyphenate: "set to false to avoid splitting end of line words"; type=AstValBool; default=True
    • lineSpace: "Change line spacing"; type=AstValNumber
    • tight: "tight paragraph spacing"; type=AstValBool
    • box: "box style"; type=AstValString
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$formatList

  • format a (numbered) list
  • Usage: formatList(indent=true, divider= NONE): {targetblock}
  • Parameters:
    • indent: "Indent the paragraphs?"; type=AstValBool; default=True
    • divider: "Divider to use between items"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$gainDecoy

  • Create and have the player gain a decoy red herring tag
  • Usage: gainDecoy(id="", box= NONE, deadline=-1, obfuscatedLabel= NONE)
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; default=""
    • box: "box style"; type=AstValString
    • deadline: "Deadline day # for the tag (leave blank for no deadline)"; type=AstValNumber; default=-1
    • obfuscatedLabel: "Override default (document) obfuscated label; set to 'label' to use the label"; type=AstValString

$gainTag

  • Mark a tag
  • Usage: gainTag(id, box= NONE, related= NONE)
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; required
    • box: "box style"; type=AstValString
    • related: "add text saying related to this"; type=AstValString

$get

  • Gets a variable if its set, or default val if not
  • Usage: get(var, val= NONE)
  • Parameters:
    • var: "The variable name to set"; type=AstValIdentifier; required
    • val: "The default value if the variable is not set"

$goLead

  • Add text to go to lead
  • Usage: goLead(id, style="default", back=false, bullet= NONE)
  • Parameters:
    • id: "ID of lead"; type=AstValString; required
    • style: "style to show lead info"; type=['default', 'full', 'nolabel', 'plainid', 'page', 'pageparen', 'pagenum']; default="default"
    • back: "tell them to come back after they visit lead"; type=AstValBool; default=False
    • bullet: "use a bullet if on its own line"; type=AstValBool

$hasTag

  • Check if user has tag
  • Usage: hasTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$headerHere

  • Signify that the lead header should go HERE (instead of at top of lead)
  • Usage: headerHere()

$hrule

  • generate an hrule
  • Usage: hrule()

$image

  • Insert an image
  • Usage: image(path, style= NONE, width= NONE, height= NONE, borderWidth= NONE, padding= NONE, align= NONE, caption= NONE, captionPos="bottom", captionSize= NONE, rule=false, angle= NONE, wrap=false)
  • Parameters:
    • path: "Relative path to file image"; type=AstValString; required
    • style: "Choose from a preset style"; type=['frame', 'plain', 'bordered']
    • width: "Width (fraction where 0.5 is half page width) or string ending in [in|cm]"; type=[, ]
    • height: "Height (fraction where 0.5 is half page height; use 'remaining' to size to remaining space on page)"; type=AstValString
    • borderWidth: "border width (in points; 0 for none); default 0"; type=AstValNumber
    • padding: "padding width (in points; 0 for none); default 0"; type=AstValNumber
    • align: "Alignment"; type=['left', 'center', 'right']
    • caption: "caption to show under image"; type=AstValString
    • captionPos: "Position for caption'"; type=['top', 'bottom']; default="bottom"
    • captionSize: "Size of caption (default='normal')"; type=AstValString
    • rule: "put a side rule on either side of the image"; type=AstValBool; default=False
    • angle: "rotation angle; default 0"; type=AstValNumber
    • wrap: "Wrap subsequent text around image (must use align left)"; type=[, , ]; default=False

$imageBehind

  • put an image behind text or other contents
  • Usage: imageBehind(path, width=1, opacity=1.0, opacityImage= NONE, opacityText= NONE, padding=0.025, height= NONE, scale="stretch", align="center", shadow=false, caption= NONE, captionPos="top", captionSize= NONE, paddingTop= NONE, font= NONE, size= NONE): {targetblock}
  • Parameters:
    • path: "Relative path to file image"; type=AstValString; required
    • width: "Width (fraction where 0.5 is half page width) or string ending in [in|cm]"; type=[, ]; default=1
    • opacity: "fraction (0 to 1)"; type=AstValNumber; default=1.0
    • opacityImage: "fraction (0 to 1)"; type=AstValNumber
    • opacityText: "fraction (0 to 1)"; type=AstValNumber
    • padding: "padding fraction (default 0.025)"; type=AstValNumber; default=0.025
    • height: "Force height (fraction of page; leave blank to match text"; type=AstValNumber
    • scale: "Scaling mode "; type=['zoom', 'stretch', 'image']; default="stretch"
    • align: "Alignment"; type=['center', 'left']; default="center"
    • shadow: "Add drop shadow to image background?"; type=AstValBool; default=False
    • caption: "caption to show under image"; type=AstValString
    • captionPos: "Position for caption"; type=['top', 'bottom']; default="top"
    • captionSize: "Size of caption; default='normal'"; type=AstValString
    • paddingTop: "extra Padding at top"; type=AstValString
    • font: "font id previously set with defineFont()"; type=AstValString
    • size: "size of font from "; type=[, ]
    • :{targetblock} - a braced group of text to operate on

$imageMask

  • mask text with an image pair; useful for things like a burned note effect
  • Usage: imageMask(path, width=1, align="center", caption= NONE, captionPos="bottom", captionSize= NONE): {targetblock}
  • Parameters:
    • path: "Relative path to file image"; type=AstValString; required
    • width: "Width (fraction where 0.5 is half page width) or string ending in [in|cm]"; type=[, ]; default=1
    • align: "Alignment"; type=['center', 'left']; default="center"
    • caption: "caption to show under image"; type=AstValString
    • captionPos: "Position for caption"; type=['top', 'bottom']; default="bottom"
    • captionSize: "Size of caption (default='normal')"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$imageOverlay

  • put an image in fromt of text or other contents
  • Usage: imageOverlay(path, width=1, height, opacity=1.0, align="center", caption= NONE, captionPos="top", captionSize= NONE): {targetblock}
  • Parameters:
    • path: "Relative path to file image"; type=AstValString; required
    • width: "Width (fraction where 0.5 is half page width) or string ending in [in|cm]"; type=[, ]; default=1
    • height: "Height (fraction of page or string ending in [in|cm]"; type=[, ]; required
    • opacity: "fraction (0 to 1)"; type=AstValNumber; default=1.0
    • align: "Alignment"; type=['center', 'left']; default="center"
    • caption: "caption to show under image"; type=AstValString
    • captionPos: "Position for caption"; type=['top', 'bottom']; default="top"
    • captionSize: "Size of caption; default='normal'"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$imagePathFromLead

  • return path to image related to this lead or blank string if not found
  • Usage: imagePathFromLead(lead= NONE)
  • Parameters:
    • lead: "Lead id string"; type=AstValString

$inline

  • Create inline
  • Usage: inline(link="", label="", time= NONE, timePos="", demerits=0, why="", back=false, mLabel=""): {targetblock}
  • Parameters:
    • link: "Text link"; type=AstValString; default=""
    • label: "Label for new lead"; type=AstValString; default=""
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end']; default=""
    • demerits: "Demerit checkboxes"; type=AstValNumber; default=0
    • why: "why text (shown after demerit instruction)"; type=AstValString; default=""
    • back: "direct them to return after visiting inline lead?"; type=AstValBool; default=False
    • mLabel: "Label for mindmap link"; type=AstValString; default=""
    • :{targetblock} - a braced group of text to operate on

$inlineHint

  • Create inline
  • Usage: inlineHint(link="", label="", time= NONE, timePos="", demerits=2, why="", back=false, mLabel=""): {targetblock}
  • Parameters:
    • link: "Text link"; type=AstValString; default=""
    • label: "Label for new lead"; type=AstValString; default=""
    • time: "Duration of lead (in minutes)"; type=AstValNumber
    • timePos: "Position to add time instruction"; type=['', 'start', 'end']; default=""
    • demerits: "Demerit checkboxes"; type=AstValNumber; default=2
    • why: "why text (shown after demerit instruction)"; type=AstValString; default=""
    • back: "direct them to return after visiting inline lead?"; type=AstValBool; default=False
    • mLabel: "Label for mindmap link"; type=AstValString; default=""
    • :{targetblock} - a braced group of text to operate on

$instructionsEndLastDay

  • Display boilerplate instructions to wrap up your case
  • Usage: instructionsEndLastDay(day, overtime=false, demerits= NONE, demeritsPerLead=0, goLead= NONE)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required
    • overtime: "Allow player to go into overtime"; type=AstValBool; default=False
    • demerits: "Demerits for going into overtime"; type=AstValNumber
    • demeritsPerLead: "Demerits per overtime lead"; type=AstValNumber; default=0
    • goLead: "id of lead to go to to end case"; type=AstValString

$instructionsEvening

  • Display boilerplate instructions about how an evening event works
  • Usage: instructionsEvening(day, next, reputationBonus=true, reputationBonusAll=0, customBonus= NONE, forceHintEvery=2, final=false, demeritsPerLead=0, timeAdvances=false, overtimeEnd="midnight", recommendedTags= NONE, recommended=0, required=0)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required
    • next: "Next lead to go to after they finish"; type=AstValString; required
    • reputationBonus: "Instruct them about reputation bonuses"; type=AstValBool; default=True
    • reputationBonusAll: "Give them extra if they found all"; type=AstValNumber; default=0
    • customBonus: "Custom bonus text"; type=AstValString
    • forceHintEvery: "Instruct them they must read hints for required marker"; type=AstValNumber; default=2
    • final: "Final evening"; type=AstValBool; default=False
    • demeritsPerLead: "Demerits per overtime lead"; type=AstValNumber; default=0
    • timeAdvances: "Does time advance in overtime"; type=AstValBool; default=False
    • overtimeEnd: "When does overtime end"; type=AstValString; default="midnight"
    • recommendedTags: "comma separated tag list"; type=AstValString
    • recommended: "How many tags are recommended"; type=AstValNumber; default=0
    • required: "How many tags are required"; type=AstValNumber; default=0

$instructionsGame

  • Display boilerplate instructions about how to play
  • Usage: instructionsGame(directoryVersion="latest", dayCount= NONE, basicLog=false, caseLog=true, dailyLog=true, freeLeads=true, campaignLog=false, trackTime=true, events=true, flexTime=true, markers=true, fingerPrints=false, criminalHist=false, additionalMaterial=false, contacts=false, researchGuide=true, irp=false, canvas=false, wrapUp=true, hints=true, hintsCipher=false, tipsBasic=true, tipsHard=false, missingLeads=false, embedPdfs=true, extraText= NONE)
  • Parameters:
    • directoryVersion: "what version of directory do they need"; type=AstValString; default="latest"
    • dayCount: "how many days; leave blank to auto calculate"; type=AstValNumber
    • basicLog: "require a basic log sheet"; type=AstValBool; default=False
    • caseLog: "require a case log sheet with markers, etc."; type=[, ]; default=True
    • dailyLog: "require a daily time log sheet"; type=AstValBool; default=True
    • freeLeads: "leads not in book are free"; type=AstValBool; default=True
    • campaignLog: "require the campaign log"; type=AstValBool; default=False
    • trackTime: "include instructions about tracking time"; type=AstValBool; default=True
    • events: "include instructions about events"; type=AstValBool; default=True
    • flexTime: "include instructions about flextime mode"; type=AstValBool; default=True
    • markers: "show info about markers"; type=AstValBool; default=True
    • fingerPrints: "include fingerprints instructions"; type=AstValBool; default=False
    • criminalHist: "include criminal history instructions"; type=AstValBool; default=False
    • additionalMaterial: "include other directory/materials reminder"; type=AstValBool; default=False
    • contacts: "include instructions about contacts"; type=AstValBool; default=False
    • researchGuide: "include research Guide"; type=AstValBool; default=True
    • irp: "include instructions about IRP points"; type=AstValBool; default=False
    • canvas: "include instructions about canvasing"; type=AstValBool; default=False
    • wrapUp: "include instructions about wrapping up and having a final opportunity"; type=AstValBool; default=True
    • hints: "show info about hints"; type=AstValBool; default=True
    • hintsCipher: "include tips about ciphers, etc."; type=AstValBool; default=False
    • tipsBasic: "include normal tips"; type=AstValBool; default=True
    • tipsHard: "include tips about it being a hard case"; type=AstValBool; default=False
    • missingLeads: "include reminder about paying for missing leads of some time"; type=AstValBool; default=False
    • embedPdfs: "embed pdfs for case log, etc."; type=AstValBool; default=True
    • extraText: "extra text in Markdown format (use \n for linebreaks)"; type=AstValString

$instructionsIrps

  • Display boilerplate instructions about irps
  • Usage: instructionsIrps(start= NONE, gain= NONE, use=false, lastUse=false, max= NONE, when= NONE): {targetblock}
  • Parameters:
    • start: "Tell player they are starting with this number of IRPs"; type=AstValNumber
    • gain: "Tell player they are gaining this number of IRPs"; type=AstValNumber
    • use: "Tell player to use them now"; type=AstValBool; default=False
    • lastUse: "Is it players last chance to use irps"; type=AstValBool; default=False
    • max: "Max irps player may spend now"; type=AstValNumber
    • when: "When they can read/visit the leads? (blank for no comment)"; type=[, ]
    • :{targetblock} - a braced group of text to operate on

$instructionsPostQuestionsResume

  • Display boilerplate instructions to let player go back and read leads again
  • Usage: instructionsPostQuestionsResume(day, demerits=0, tag= NONE, halve=true)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required
    • demerits: "Demerits for going into overtime"; type=AstValNumber; default=0
    • tag: "tagid to make them mark if they choose to skip bonus day"; type=AstValString
    • halve: "Tell them to halve their score if they change"; type=AstValBool; default=True

$instructionsPuzzle

  • Display boilerplate instructions about a constructed puzzle lead
  • Usage: instructionsPuzzle(label= NONE, penalty= NONE, textBelow= NONE): {targetblock}
  • Parameters:
    • label: "optional label of puzzle to use in blurb about looking it up"; type=AstValString
    • penalty: "optional penalty markdown text if they lookup a bad lead"; type=AstValString
    • textBelow: "Whether to put the text above or below the generic instructions"; type=AstValBool
    • :{targetblock} - a braced group of text to operate on

$instructionsRecommendedTags

  • Display boilerplate instructions to recommend player finds some non-required tags
  • Usage: instructionsRecommendedTags(tags= NONE, recommended=0, required=0)
  • Parameters:
    • tags: "comma separated tag list"; type=AstValString
    • recommended: "How many tags are recommended"; type=AstValNumber; default=0
    • required: "How many tags are required"; type=AstValNumber; default=0

$instructionsScheduledEvent

  • Display boilerplate instructions not to read entry unless triggering an event
  • Usage: instructionsScheduledEvent()

$instructionsStartDay

  • Tell the player some brief instructions of how to play using new event system
  • Usage: instructionsStartDay(day, box="default", bonus=false, bonusReputation=0, bonusTag= NONE)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required
    • box: "Box style"; type=[, ]; default="default"
    • bonus: "Is this a bonus day?"; type=AstValBool; default=False
    • bonusReputation: "reputation for skipping bonus day"; type=AstValNumber; default=0
    • bonusTag: "tag to make them mark if they choose to skip bonus day"; type=AstValString

$leave

  • Text saying to leave because there is nothing for you here
  • Usage: leave(reason= NONE, otherwise=true)
  • Parameters:
    • reason: "Reason player should leave"; type=AstValString
    • otherwise: "Show a divider and otherwise"; type=AstValBool; default=True

$lederLine

  • Display right-aligned element
  • Usage: lederLine(leftText, rightText)
  • Parameters:
    • leftText: "Text for left side"; type=AstValString; required
    • rightText: "Text for right side"; type=AstValString; required

$lipsum

  • Add some test text
  • Usage: lipsum(start=1, end=-1, length=0)
  • Parameters:
    • start: "starting paragraph index"; type=AstValNumber; default=1
    • end: "ending paragraph index"; type=AstValNumber; default=-1
    • length: "maxlimum length in characters (0 for no limit)"; type=AstValNumber; default=0

$literalFunctionTargetsAsString

  • render function targets at this location
  • Usage: literalFunctionTargetsAsString()

$logic

  • Add mindmap node
  • Usage: logic(target="", label="")
  • Parameters:
    • target: "target lead or concept"; type=AstValString; default=""
    • label: "Link label"; type=AstValString; default=""

$logicConcept

  • Add mindmap node
  • Usage: logicConcept(target="", label="")
  • Parameters:
    • target: "target lead or concept"; type=AstValString; default=""
    • label: "Link label"; type=AstValString; default=""

$logicFollowedBy

  • Add mindmap node
  • Usage: logicFollowedBy(source, label="")
  • Parameters:
    • source: "Lead id"; type=AstValString; required
    • label: "Link label"; type=AstValString; default=""

$logicFollows

  • Add mindmap node
  • Usage: logicFollows(target, label="")
  • Parameters:
    • target: "Lead id"; type=AstValString; required
    • label: "Link label"; type=AstValString; default=""

$logicImpliedBy

  • Add mindmap node
  • Usage: logicImpliedBy(source, label="")
  • Parameters:
    • source: "Lead id"; type=AstValString; required
    • label: "Link label"; type=AstValString; default=""

$logicImplies

  • Add mindmap node
  • Usage: logicImplies(target, label="")
  • Parameters:
    • target: "Lead id"; type=AstValString; required
    • label: "Link label"; type=AstValString; default=""

$logicIrrelevant

  • Add mindmap node
  • Usage: logicIrrelevant(label="")
  • Parameters:
    • label: "Link label"; type=AstValString; default=""

$logicProceed

  • Add mindmap node
  • Usage: logicProceed(target= NONE, label="")
  • Parameters:
    • target: "target lead or concept"; type=AstValString
    • label: "Link label"; type=AstValString; default=""

$logicSuggestedBy

  • Add mindmap node
  • Usage: logicSuggestedBy(source, label="")
  • Parameters:
    • source: "Lead id"; type=AstValString; required
    • label: "Link label"; type=AstValString; default=""

$logicSuggests

  • Add mindmap node
  • Usage: logicSuggests(target, label="")
  • Parameters:
    • target: "Lead id"; type=AstValString; required
    • label: "Link label"; type=AstValString; default=""

$marginNote

  • Add a short bit of text to the left or right margin; note that this doesn't seem to work right currently; left margins not showing?
  • Usage: marginNote(pos="left"): {targetblock}
  • Parameters:
    • pos: "position of note"; type=['left', 'right']; default="left"
    • :{targetblock} - a braced group of text to operate on

$mark

  • Mark checkboxes
  • Usage: mark(type= NONE, count=0, demerits=0, culture=0, reputation=0, extra=0, helpful= NONE, why= NONE, upto=false)
  • Parameters:
    • type: "type of mark to make"; type=AstValString
    • count: "How many to mark"; type=AstValNumber; default=0
    • demerits: "Demerits to mark"; type=AstValNumber; default=0
    • culture: "Culture boxes to mark"; type=AstValNumber; default=0
    • reputation: "Reputation boxes to mark"; type=AstValNumber; default=0
    • extra: "Extra boxes to mark"; type=AstValNumber; default=0
    • helpful: "Instruct to mark only if helpful"; type=AstValBool
    • why: "Label clarifying why"; type=AstValString
    • upto: "Say up to (max)"; type=AstValBool; default=False

$mentionTags

  • Just list some tags by their obfuscated ids (e.g. used when listing tags available for completionists)
  • Usage: mentionTags(tags="")
  • Parameters:
    • tags: "list of tags"; type=AstValString; default=""

$missingTag

  • Is player missing a tag
  • Usage: missingTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$modifyText

  • modify text
  • Usage: modifyText(case= NONE): {targetblock}
  • Parameters:
    • case: "force case to uppercase, titlecase, or sentence case? [upper|title|sentence]"; type=['lower', 'upper', 'title', 'sentence']
    • :{targetblock} - a braced group of text to operate on

$newsArticle

  • an article
  • Usage: newsArticle(style= NONE, block= NONE, dropCaps= NONE, headline= NONE, byline= NONE, headlineStyle= NONE, bylineStyle= NONE, divider= NONE, effectsOn= NONE, size= NONE): {targetblock}
  • Parameters:
    • style: "style variant"; type=AstValString
    • block: "require this entire article to fit in a single block (column) together, dont split it"; type=AstValBool
    • dropCaps: "Drop Caps style"; type=['letter', 'word']
    • headline: "headline text"; type=AstValString
    • byline: "byline text"; type=AstValString
    • headlineStyle: "headline style variant"; type=AstValString
    • bylineStyle: "byline style variant"; type=AstValString
    • divider: "true to show divider at end of article, or specifiy divider id"; type=[, ]
    • effectsOn: "use in interior commands like effectUp"; type=AstValBool
    • size: "base font size"; type=[, ]
    • :{targetblock} - a braced group of text to operate on

$newsBannerBox

  • banner bax for right hand margin
  • Usage: newsBannerBox(): {targetblock}

$newsByLine

  • byline for article
  • Usage: newsByLine(style="script", fit=false, bold=true): {targetblock}
  • Parameters:
    • style: "style variant"; type=AstValString; default="script"
    • fit: "should force to fit on one line?"; type=AstValBool; default=False
    • bold: "bold text?"; type=AstValBool; default=True
    • :{targetblock} - a braced group of text to operate on

$newsEndLine

  • helper to jsut say continued on Page X
  • Usage: newsEndLine(text= NONE)
  • Parameters:
    • text: "text string (e.g. Continued on Page Four)"; type=AstValString

$newsGroup

  • group of articles
  • Usage: newsGroup(columns=3, raggedColumns= NONE): {targetblock}
  • Parameters:
    • columns: "number of columns"; type=AstValNumber; default=3
    • raggedColumns: "disable column balancing?"; type=AstValBool
    • :{targetblock} - a braced group of text to operate on

$newsHeadline

  • headline for article
  • Usage: newsHeadline(style="Large", fit=false, bold= NONE, underline= NONE, italic= NONE, case= NONE): {targetblock}
  • Parameters:
    • style: "style variant"; type=AstValString; default="Large"
    • fit: "should force to fit on one line?"; type=AstValBool; default=False
    • bold: "bold text?"; type=AstValBool
    • underline: "underline text?"; type=AstValBool
    • italic: "italic text?"; type=AstValBool
    • case: "force case to uppercase, titlecase, or sentence case? [upper|title|sentence]"; type=['lower', 'upper', 'title', 'sentence']
    • :{targetblock} - a braced group of text to operate on

$newsPaper

  • a newspaper page
  • Usage: newsPaper(style="nyTimes", day= NONE, date= NONE, dateString= NONE, dateStringExtra= NONE, columns= NONE, raggedColumns= NONE, priceString= NONE, issueString= NONE, bannerPath= NONE, bannerLines=true, font= NONE, fontSize= NONE, landscape=false, parSpaceHead=0.4, parSpaceBody=0.6, lineSpace=1.2, articleStyle= NONE, headlineStyle= NONE, bylineStyle= NONE, dropCaps= NONE, dropCapsMulti="none", indent=true, block= NONE, divider= NONE, effectsOn= NONE): {targetblock}
  • Parameters:
    • style: "style variant"; type=AstValString; default="nyTimes"
    • day: "day number"; type=AstValNumber
    • date: "date as string"; type=AstValString
    • dateString: "arbitrary date string"; type=AstValString
    • dateStringExtra: "arbitrary date string to add to date"; type=AstValString
    • columns: "number of columns"; type=AstValNumber
    • raggedColumns: "disable column balancing?"; type=AstValBool
    • priceString: "price string (right hand margin)"; type=AstValString
    • issueString: "issue string (left hand margin)"; type=AstValString
    • bannerPath: "Relative path to file image"; type=AstValString
    • bannerLines: "Put issue text etc inside banner lines below banner? If false they will be set above the banner bottom margin"; type=AstValBool; default=True
    • font: "font id"; type=AstValString
    • fontSize: "size in points"; type=AstValString
    • landscape: "display paper in landscape mode?"; type=AstValBool; default=False
    • parSpaceHead: "Change paragraph spacing for headline"; type=AstValNumber; default=0.4
    • parSpaceBody: "Change paragraph spacing for body of article"; type=AstValNumber; default=0.6
    • lineSpace: "Change line spacing"; type=AstValNumber; default=1.2
    • articleStyle: "article style variant"; type=AstValString
    • headlineStyle: "headline style variant"; type=AstValString
    • bylineStyle: "byline style variant"; type=AstValString
    • dropCaps: "Drop Caps style for articles"; type=['letter', 'word', 'none', 'bold']
    • dropCapsMulti: "how to handle multiple paragraphs"; type=['none', 'wrap', 'gap']; default="none"
    • indent: "indent paragraphs?"; type=AstValBool; default=True
    • block: "require this all articles fit in a single (column) without splitting contents over a column"; type=AstValBool
    • divider: "true to show divider at end of article, or specifiy divider id"; type=[, ]
    • effectsOn: "use in interior commands like effectUp"; type=AstValBool
    • :{targetblock} - a braced group of text to operate on

$newsRule

  • an image for an article
  • Usage: newsRule(style="nytimes")
  • Parameters:
    • style: "style variant"; type=AstValString; default="nytimes"

$onAfterDay

  • Text saying if on or after day
  • Usage: onAfterDay(day)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required

$onDay

  • Text saying if on day
  • Usage: onDay(day)
  • Parameters:
    • day: "Day number"; type=AstValNumber; required

$otherwise

  • Text saying otherwise
  • Usage: otherwise()

$pageBackground

  • Set the current page background (useful for covers, etc.)
  • Usage: pageBackground(path, opacity=1.0)
  • Parameters:
    • path: "Relative path to image OR pdf file to use as the background image"; type=AstValString; required
    • opacity: "Opacity of the background image"; type=AstValNumber; default=1.0

$pageStyle

  • set the current page style
  • Usage: pageStyle(style)
  • Parameters:
    • style: "Page style to use for the page (use 'empty' to hide footer)"; type=AstValString; required

$pointsLine

  • Display a line with form after leder
  • Usage: pointsLine(text)
  • Parameters:
    • text: "Text for left side"; type=AstValString; required

$pre

  • format a text block (usually triple quotes) as code without justification and respecting linebreaks
  • Usage: pre(text= NONE, monoSpace=true, markdown=false, box= NONE, textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE): {targetblock}
  • Parameters:
    • text: "Text to format"; type=AstValString
    • monoSpace: "set to true to force monospacing of font; defaults false)"; type=AstValBool; default=True
    • markdown: "text should be formatted in markdown format"; type=AstValBool; default=False
    • box: "box style"; type=AstValString
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$preBox

  • format a text block (usually triple quotes) as code without justification and respecting linebreaks
  • Usage: preBox(text= NONE, monoSpace=true, markdown=false, box="default", textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE): {targetblock}
  • Parameters:
    • text: "Text to format"; type=AstValString
    • monoSpace: "set to true to force monospacing of font; defaults false)"; type=AstValBool; default=True
    • markdown: "text should be formatted in markdown format"; type=AstValBool; default=False
    • box: "box style"; type=AstValString; default="default"
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$print

  • print value
  • Usage: print(expression)
  • Parameters:
    • expression: "Expression to print"; required

$qrCode

  • generate a qr code for a url
  • Usage: qrCode(url= NONE, path= NONE, caption= NONE, height="1.75cm", style= NONE, hideUrl=false, hideIcon=false, box= NONE, backgroundLoop=false)
  • Parameters:
    • url: "url for qr code (leave this blank if specifying a path to an uploaded file for the game)"; type=AstValString
    • path: "path (name) of attached game file to make a link to (useful with multimedia files); specify this OR url directly"; type=AstValString
    • caption: "text caption; use [icon], [url], and or [verbiage] to expand"; type=AstValString
    • height: "Height (e.g. 2cm)"; type=AstValString; default="1.75cm"
    • style: "qrcode style"; type=['default', 'hide']
    • hideUrl: "hide the url?"; type=AstValBool; default=False
    • hideIcon: "hide the mediatype icon?"; type=AstValBool; default=False
    • box: "box style (defaults to none, set to default to show a box)"; type=AstValString
    • backgroundLoop: "if true, mark the url so the built-in pdf reader opens the audio in a separate tab and loops it"; type=AstValBool; default=False

$questionAnswer

  • Display answer to a question
  • Usage: questionAnswer(id= NONE, summary= NONE): {targetblock}
  • Parameters:
    • id: "Id of the question (like Q1)"; type=AstValString
    • summary: "Override summary"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$questionTotal

  • Display a line for them to record their total score from questions
  • Usage: questionTotal()

$quote

  • Quote format text
  • Usage: quote(cite="", style="default", font= NONE, size= NONE, box= NONE, textColor= NONE, symbol= NONE, symbolColor= NONE, symbolSize= NONE, pos= NONE, width= NONE, backgroundColor= NONE): {targetblock}
  • Parameters:
    • cite: "citation credit (author); only used for quote type"; type=AstValString; default=""
    • style: "style variant"; type=AstValString; default="default"
    • font: "font id previously set with defineFont()"; type=AstValString
    • size: "size of font"; type=[, ]
    • box: "box style"; type=AstValString
    • textColor: "color of Text"; type=AstValString
    • symbol: "symbol"; type=AstValString
    • symbolColor: "symbol color"; type=AstValString
    • symbolSize: "symbol size"; type=AstValString
    • pos: "position alignment of enclosing box"; type=AstValString
    • width: "Width as a decimal percentage (0.1 to 1.0) or string ending in [in|cm]"; type=[, ]
    • backgroundColor: "background color"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$redact

  • redact some text so it is unreadable
  • Usage: redact(text= NONE): {targetblock}
  • Parameters:
    • text: "Text to redact if you don't want to put it in a target block"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$referDb

  • Lookup a lead by NAME and display a link to it
  • Usage: referDb(id= NONE, style="default")
  • Parameters:
    • id: "search string to look for"; type=AstValString
    • style: "style to show lead info"; type=['default', 'full', 'nolabel', 'plainid', 'page', 'pageparen', 'pagenum']; default="default"

$referLead

  • Add text to refer to lead
  • Usage: referLead(id, style="default", back=false, bullet= NONE)
  • Parameters:
    • id: "ID of lead"; type=AstValString; required
    • style: "style to show lead info"; type=['default', 'full', 'nolabel', 'plainid', 'page', 'pageparen', 'pagenum']; default="default"
    • back: "tell them to come back after they visit lead"; type=AstValBool; default=False
    • bullet: "use a bullet if on its own line"; type=AstValBool

$referTag

  • refer to tag(s) by its obfuscated label
  • Usage: referTag(id, combine="all")
  • Parameters:
    • id: "ID of tag"; type=AstValString; required
    • combine: "combine style [and,or] for multiple tags"; type=['', 'any', 'all']; default="all"

$renderFunctionTargets

  • render function targets at this location
  • Usage: renderFunctionTargets()

$reportCoverageLeads

  • In debug build, request a report on coverage of specific leads that have no entries
  • Usage: reportCoverageLeads(leads, label= NONE)
  • Parameters:
    • leads: "comma separated list of leads"; type=AstValString; required
    • label: "optional label for report"; type=AstValString

$reportCoverageName

  • In debug build, request a report on coverage of people leads referring to a certain name
  • Usage: reportCoverageName(range= NONE, neighborhood= NONE, nearLead= NONE, last= NONE, first= NONE, label= NONE)
  • Parameters:
    • range: "How far to look"; type=['in', 'near', 'global']
    • neighborhood: "Neighborhood code (2-letters) to check in"; type=AstValString
    • nearLead: "use neighborhood of this lead"; type=AstValString
    • last: "last Name to search for"; type=AstValString
    • first: "last Name to search for"; type=AstValString
    • label: "optional label for report"; type=AstValString

$reportCoverageYellowCategory

  • In debug build, request a report on coverage of leads referring to certain yellow categories
  • Usage: reportCoverageYellowCategory(range= NONE, neighborhood= NONE, nearLead= NONE, pcat= NONE, pcatg= NONE, likeLead= NONE, label= NONE)
  • Parameters:
    • range: "How far to look"; type=['in', 'near', 'global']
    • neighborhood: "Neighborhood code (2-letters) to check in"; type=AstValString
    • nearLead: "use neighborhood of this lead"; type=AstValString
    • pcat: "yellow pages pcat code(s) separate with |"; type=AstValString
    • pcatg: "yellow pages pcatg code(s) separate with |"; type=AstValString
    • likeLead: "use pcat and pcatg from this lead"; type=AstValString
    • label: "optional label for report"; type=AstValString

$requireTag

  • Tell user they should leave if they dont have tag and come back when they do
  • Usage: requireTag(id, check="all", box= NONE, count= NONE, noif=false)
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False

$reserveLead

  • Reserve a lead from the unused list so it will not be used by the auto lead generator
  • Usage: reserveLead(id= NONE)
  • Parameters:
    • id: "ID of lead"; type=AstValString

$returnLead

  • Add text to go to lead
  • Usage: returnLead(id= NONE, style="default", back=false, bullet= NONE)
  • Parameters:
    • id: "ID of lead"; type=AstValString
    • style: "style to show lead info"; type=['default', 'full', 'nolabel', 'plainid', 'page', 'pageparen', 'pagenum']; default="default"
    • back: "tell them to come back after they visit lead"; type=AstValBool; default=False
    • bullet: "use a bullet if on its own line"; type=AstValBool

$scheduleIrp

  • Boilerplate language to schedule an irp expenditure to read a lead
  • Usage: scheduleIrp(lead, cost=1, when= NONE)
  • Parameters:
    • lead: "What lead player should read at schedule time"; type=AstValString; required
    • cost: "Cost in IRP"; type=AstValNumber; default=1
    • when: "When they can read/visit the lead"; type=[, ]

$set

  • Sets a variable to a value
  • Usage: set(var, val)
  • Parameters:
    • var: "The variable name to set"; type=AstValIdentifier; required
    • val: "The new value for the variable"; required

$setDefault

  • Sets a variable to a value IF its not already set
  • Usage: setDefault(var, val)
  • Parameters:
    • var: "The variable name to set"; type=AstValIdentifier; required
    • val: "The new value for the variable"; required

$setTrack

  • set track value
  • Usage: setTrack(id, val="", min= NONE, max= NONE)
  • Parameters:
    • id: "track id (A,B,C,D)"; type=AstValString; required
    • val: "value to set"; type=[, ]; default=""
    • min: "min value"; type=AstValNumber
    • max: "max value"; type=AstValNumber

$strikeCircledTag

  • instruct user to strike a circled tag and then extra
  • Usage: strikeCircledTag(id, check="all", box= NONE, count= NONE, noif=false, related= NONE): {targetblock}
  • Parameters:
    • id: "ID of tag (separate multiple by commas inside the single string)"; type=AstValString; required
    • check: "check style for multiple tags"; type=['', 'any', 'all', 'some']; default="all"
    • box: "box style"; type=AstValString
    • count: "number of markers they must have"; type=AstValNumber
    • noif: "hide the preliminary if"; type=AstValBool; default=False
    • related: "add text saying related to this"; type=AstValString
    • :{targetblock} - a braced group of text to operate on

$strikeTag

  • Strike through a tag
  • Usage: strikeTag(id, box= NONE, related= NONE)
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; required
    • box: "box style"; type=AstValString
    • related: "add text saying related to this"; type=AstValString

$supressContinuedOn

  • suppress the auto continued on next page
  • Usage: supressContinuedOn()

$symbol

  • Insert symbol (unicode/icon) text
  • Usage: symbol(id, color= NONE, size= NONE)
  • Parameters:
    • id: "Symbol id"; type=AstValString; required
    • color: "color"; type=AstValString
    • size: "size"; type=AstValString

$telegramWesternUnion

  • put an image behind text or other contents
  • Usage: telegramWesternUnion(path="props/telegram/westernUnion1.png", width=1, opacity=1.0, opacityImage= NONE, opacityText=0.25, padding=0.075, height= NONE, scale="image", align="left", shadow=false, caption= NONE, captionPos="top", captionSize= NONE, paddingTop="1in", font="telegramFont", size= NONE): {targetblock}
  • Parameters:
    • path: "Relative path to file image"; type=AstValString; default="props/telegram/westernUnion1.png"
    • width: "Width (fraction where 0.5 is half page width) or string ending in [in|cm]"; type=[, ]; default=1
    • opacity: "fraction (0 to 1)"; type=AstValNumber; default=1.0
    • opacityImage: "fraction (0 to 1)"; type=AstValNumber
    • opacityText: "fraction (0 to 1)"; type=AstValNumber; default=0.25
    • padding: "padding fraction (default 0.025)"; type=AstValNumber; default=0.075
    • height: "Force height (fraction of page; leave blank to match text"; type=AstValNumber
    • scale: "Scaling mode "; type=['zoom', 'stretch', 'image']; default="image"
    • align: "Alignment"; type=['center', 'left']; default="left"
    • shadow: "Add drop shadow to image background?"; type=AstValBool; default=False
    • caption: "caption to show under image"; type=AstValString
    • captionPos: "Position for caption"; type=['top', 'bottom']; default="top"
    • captionSize: "Size of caption; default='normal'"; type=AstValString
    • paddingTop: "extra Padding at top"; type=AstValString; default="1in"
    • font: "font id previously set with defineFont()"; type=AstValString; default="telegramFont"
    • size: "size of font from "; type=[, ]
    • :{targetblock} - a braced group of text to operate on

$timeHere

  • Show lead time here (instead of normally at start or end)
  • Usage: timeHere()

$toc

  • Generate and insert table of contents
  • Usage: toc(columns= NONE)
  • Parameters:
    • columns: "Number of columns for table of contents (leave blank for automatic based on page width)"; type=AstValNumber

$underlineTag

  • Underline a tag
  • Usage: underlineTag(id, box= NONE, related= NONE)
  • Parameters:
    • id: "ID of tag (or list of ids)"; type=AstValString; required
    • box: "box style"; type=AstValString
    • related: "add text saying related to this"; type=AstValString

$url

  • generate a clickable link to a url
  • Usage: url(url= NONE, caption= NONE)
  • Parameters:
    • url: "url to link to"; type=AstValString
    • caption: "optional caption to override the url text displayed"; type=AstValString

$vspace

  • add or remove vertical space
  • Usage: vspace(amount, force=false)
  • Parameters:
    • amount: "postive to add space, negative to remove; should be formatted as a number and then 'em' or 'pt' (eg. -5.5pt)"; type=AstValString; required
    • force: "force the space and dont allow latex to tweak"; type=AstValBool; default=False




GLOBAL DATA


documentData

  • defaultLocation: back
  • printLocation: inline
  • printStyle: simple

info

  • name: None
  • title: None
  • subtitle: None
  • authors: None
  • version: None
  • versionDate: None
  • status: None
  • difficulty: None
  • duration: None
  • cautions: None
  • ai: None
  • summary: None
  • extraCredits: None
  • url: None
  • copyright: None
  • keywords: None
  • gameSystem: None
  • gameDate: None
  • campaignName: None
  • campaignPosition: None
  • clockMode: True
  • features: {}
  • gamePage: {}

leadDbData

  • version: None
  • versionPrevious: None
  • seed: 0
  • leadPlugin: None

localeData

  • language: en

parserData

  • DICT: EMPTY

rendererData

  • doubleSided: True
  • latexPaperSize: letter
  • latexFontSize: 10
  • isNarrowPaperSize: False
  • autoStyleQuotes: False
  • bypassErrorOnMissingImage: None
  • timeStyle: box
  • defaultTimeStyle: bold
  • zeroTimeStyle: hide

tagData

  • alwaysNumber: True
  • consistentNumber: True
  • mode: sequential
  • sortRequire: True

targetBuildDebug

  • targets:
  • zip: False

targetBuildDraft

  • targets:
  • zip: False

targetBuildPreferred

  • targets:
  • zip: False

task

  • VALUE: NULL