Skip to main content

Scripting Syntax

The idea behind Drafft is that it should be engine- and language-agnostic. You are free to use whatever language you prefer for your scripts. However, certain features, due to their nature, need to identify the purpose of each line. For this, the Drafft syntax (UAF) was created. It is used for very specific purposes and can be ignored if not needed:

Commands

Commands are just functions. The benefit of using drafft syntax is that they will appear in the resulting screenplay.

<Commands(param, param)>

Special Cases

Fade commands <FadeOut(?params)> and <FadeIn(?params)> also get some special treatment in the screenplay output.

Examples

<Wait(5)>
<Focus(actor)>
<FadeOut()>
<WalkTo(x,y,z)>

Commands can also be renamed at export to a syntax more useful for the target engine. See Export Mappings

Actor Line (with speech tag)

::Actor:: Actor Line [expression]
[#speechTag]::Actor:: Actor Line [expression]

This is the most important concept in drafft, this line represent a line of speech an actor says. It has several uses:

  • Identifying actors to make the actor database.
  • Identifying speech lines to auto generate tags for voice-overs.
  • Include this line on the resulting screenplay.
  • Include expressions in screenplay.

Actor lines can also be renamed at export to a syntax more useful for the target engine. See Export Mappings

Examples

::Tyler:: The first rule of Fight Club is: You do not talk about Fight Club.[serious]
[#line001]::Travis:: You talkin' to me?

Comments

// Comment

Comments are lines that are commonly ignored in the target engine. Drafft will include comments in the screenplay.

Example

// INT. SUBURBAN HOME - KITCHEN - NIGHT
// FILBERT (9), wiry, lost in his own imaginary world. Dressed as a Knight. A toy sword in his other hand.

Inline JSON

Since v1.0.13 it is possible to inline standard JSON in both speech and commands lines. %json variable will contain parsed content.

Examples:

::Reporter:: Now let's take a look at the weather for today.
<CutTo(Location1)> {"weather":"rainy"}
::FieldReporter:: Not looking very good here. {"props":["umbrella","raincoat", "microphone"]}
<CutTo(Studio)>
::Reporter:: What's the traffic on your side Mike?
<CutTo(Location2)> {"traffic": {"cars": "low", "trucks":"none"}}
::Mike:: Low traffic in this area.

JSON can be transformed at export time as well, see Export Mappings