diff --git a/draft/README.md b/draft/README.md new file mode 100644 index 0000000..581a085 --- /dev/null +++ b/draft/README.md @@ -0,0 +1,85 @@ +# Interactive Story Draft (ISD) Specification + +- **File Format:** `.isd` + +The Interactive Story Draft (ISD) format is a intermediate language designed for drafting interactive fiction before implementation in Twine’s Harlowe or similar engines. It allows authors to structure branching narratives, define conditions, and track variables efficiently. + +--- + +### Specifications + +1. **Passages:** + + - **Syntax:** `:: PassageName` + - **Description:** Defines a new passage or section in the story. + +2. **Links:** + + - **Syntax:** `[[Link Text -> TargetPassage]]` + - **Description:** Creates a navigational link to another passage. + +3. **Variables:** + + - **Syntax:** `$variableName` + - **Description:** Represents a variable to track states or information. + +4. **Variable Assignment:** + + - **Syntax:** `(set: $variableName to value)` + - **Description:** Assigns a value to a variable. + +5. **Conditional Statements:** + + - **Syntax:** `(if: condition)[Text if true]` + - **Description:** Displays text or content based on a condition. + +6. **Else Clause:** + + - **Syntax:** `(else:)[Text if false]` + - **Description:** Follows an `(if:)` statement to handle the false condition. + +7. **Random Number Generation:** + + - **Syntax:** `(set: $variableName to (random: min, max))` + - **Description:** Sets a variable to a random number between `min` and `max`. + +8. **Text Styling:** + + - **Syntax:** `''italic''`, `'''bold'''`, `^^superscript^^`, `~~subscript~~` + - **Description:** Applies basic text formatting. + +### Usage + +``` +:: Introduction +Welcome to your adventure! You find yourself at a crossroads. + +[[Take the left path -> LeftPath]] +[[Take the right path -> RightPath]] + +:: LeftPath +You walk down the left path and encounter a mysterious stranger. + +(set: $hasKey to true) +The stranger gives you a key. + +[[Continue -> Crossroads]] + +:: RightPath +You walk down the right path and find a locked door. + +(if: $hasKey)[ + You use the key to unlock the door and discover a treasure! +] +(else:)[ + The door is locked. You need a key to open it. +] + +[[Return to the crossroads -> Crossroads]] + +:: Crossroads +You're back at the crossroads. + +[[Take the left path -> LeftPath]] +[[Take the right path -> RightPath]] +``` diff --git a/draft/sample.isd b/draft/sample.isd new file mode 100644 index 0000000..a86a23d --- /dev/null +++ b/draft/sample.isd @@ -0,0 +1,31 @@ +:: Introduction +Welcome to your adventure! You find yourself at a crossroads. + +[[Take the left path -> LeftPath]] +[[Take the right path -> RightPath]] + +:: LeftPath +You walk down the left path and encounter a mysterious stranger. + +(set: $hasKey to true) +The stranger gives you a key. + +[[Continue -> Crossroads]] + +:: RightPath +You walk down the right path and find a locked door. + +(if: $hasKey)[ + You use the key to unlock the door and discover a treasure! +] +(else:)[ + The door is locked. You need a key to open it. +] + +[[Return to the crossroads -> Crossroads]] + +:: Crossroads +You're back at the crossroads. + +[[Take the left path -> LeftPath]] +[[Take the right path -> RightPath]] diff --git a/StarterKit.twee b/src/StarterKit.twee similarity index 100% rename from StarterKit.twee rename to src/StarterKit.twee