diff --git a/vns-docs/docs/tutorials/basic_tutorial.md b/vns-docs/docs/tutorials/basic_tutorial.md index 963e5a1..df73ed0 100644 --- a/vns-docs/docs/tutorials/basic_tutorial.md +++ b/vns-docs/docs/tutorials/basic_tutorial.md @@ -1,31 +1,47 @@ # Basic Tutorials: -### The Basics of VNS +## The Basics of VNS -VNS are written in a plain text file with the `.vns` extension. Imagine a script filled with descriptions, dialogues, and choices. VNS uses special tags to turn this script into an immersive experience, complete with characters, backgrounds, music, and branching narratives. +VNS (Visual Novel Script) is a scripting language used to create interactive visual novels. These scripts are written in plain text files with the `.vns` extension. Imagine crafting a story filled with descriptions, dialogues, choices, and multimedia elements like images and music. VNS uses special tags to transform your script into an immersive experience featuring characters, backgrounds, music, and branching narratives. -### **Let's dive into the building blocks:** +## Let's dive into the building blocks: -**1. The tag party:** +### 1. Tags: +Tags are the core elements of VNS. They instruct the program on how to display content. Enclosed in square brackets, tags help define scenes, characters, backgrounds, and more. -Tags are the secret sauce of VNS. They tell the engine what to display. +### 2. Essential tags: +Here are some of the most commonly used tags in VNS: +- **ID:** `[id]string` -**2. Essential tags:** + Defines the unique identifier of the script. -- **ID:** `[id]string` defines the ID of the script -- **Language:** `[language]string` specifies the language of the script. -- **Section:** `[section]string` specifies the section of all the following dialogues. -- **Background Image:** `[bgi]string` specifies the background image for the current and following dialogues. -- **Background Music:** `[bgm]string` specifies the background music for the current and following dialogues. -- **Show Character(s):** `[show]*string(s)` introduce the character to the current and following dialogues. +- **Language:** `[language]string` + Specifies the language of the script. +- **Section:** `[section]string` -**3. A glimpse into storytelling:** + Denotes a new section in the script. -Imagine this simple scene: +- **Background Image:** `[bgi]string` + + Sets the background image for the current and subsequent dialogues. + +- **Background Music:** `[bgm]string` + + Sets the background music for the current and subsequent dialogues. + +- **Show Character(s):** `[show]string(s)` + + Introduces (new) character image(s) to the scene. + +### 3. A glimpse into storytelling: + +Let's put these tags into action with a simple example. + +#### Example Script ```vns [id]1 @@ -34,13 +50,27 @@ Imagine this simple scene: [bgm]music1.ogg [bgi]bg1.png -[show]example.png +[show]character.png -Example: +Alex: - Hellow world! ``` -Restult: +#### Explanation + +- `[id]1`: Sets the script ID to "1". +- `[language]English`: Specifies that the script is in English. +- `[section]dialog_example`: Begins a new section called "dialog_example". +- `[bgm]music1.ogg`: Plays "music1.ogg" as background music. +- `[bgi]bg1.png`: Displays "bg1.png" as the background image. +- `[show]character.png`: Shows "character.png" on the screen. +- `Alex:`: Indicates that the following dialogue is spoken by "Alex". +- `- Hello, world!`: The dialogue line spoken by the character. + +#### Expected Output + +When compiled, the script should produce a JSON representation like this: + ```json { "compiler": {...}, @@ -50,12 +80,12 @@ Restult: "background_image": "bg1.png", "background_music": "music1.ogg", "character_images": [ - "example.png" + "character.png" ], "contents": [ "Hellow world!" ], - "narrator": "Example" + "narrator": "Alex" } } }, @@ -63,13 +93,13 @@ Restult: "language": "English" } ``` -See how tags build a scene, introduce characters? +This JSON structure represents how the script is interpreted, showing the background, music, characters, and dialogue content. -**Ready to explore more?** +## Ready to explore more? -This is just the beginning! Check out the VNS documentation for in-depth details. Remember, practice makes perfect. Start simple, experiment, and most importantly, have fun creating your unique stories! +This is just the beginning! Check out the documentation for in-depth details. Remember, practice makes perfect. Start simple, experiment, and most importantly, have fun creating your unique stories! diff --git a/vns-docs/docs/tutorials/comments_and_notes.md b/vns-docs/docs/tutorials/comments_and_notes.md index 46499d1..9f36bfc 100644 --- a/vns-docs/docs/tutorials/comments_and_notes.md +++ b/vns-docs/docs/tutorials/comments_and_notes.md @@ -6,7 +6,7 @@ // Comments are essential for readability and maintenance. ``` -Comments are lines of text in a script that are not executed by the compiler. They are used to annotate the code for better understanding by developers, collaborators, and future maintainers. Comments can include explanations of script logic, TODOs, or any relevant information regarding the script's functionality or design. +Comments are lines of text in a script that are ignored during execution. They provide helpful annotations, making the code more understandable to developers, collaborators, and future maintainers. Typical uses of comments include explaining code logic, outlining TODOs, and offering relevant insights into the script’s functionality or design. # Notes: @@ -16,4 +16,4 @@ Comments are lines of text in a script that are not executed by the compiler. Th # They are retained in the source file and can provide context for future modifications. ``` -Notes serve a purpose similar to comments but are often more informal and targeted at specific discussions or reminders. They can include explanations, insights, or reminders for developers working on the scripts. Unlike comments, which are typically removed during compilation , notes are retained in the source file to provide ongoing context. \ No newline at end of file +Notes serve a purpose similar to comments but are often targeted at specific dialogue instances or sections within the code. They can include explanations, insights, or reminders for developers working on the scripts. Unlike standard comments, which are typically ignored or removed during compilation or execution, notes will be processed and retained to provide ongoing context. \ No newline at end of file diff --git a/vns-docs/docs/tutorials/dialogues.md b/vns-docs/docs/tutorials/dialogues.md index ab158a9..7b17e79 100644 --- a/vns-docs/docs/tutorials/dialogues.md +++ b/vns-docs/docs/tutorials/dialogues.md @@ -8,9 +8,13 @@ Character name: - Additional dialogue text ``` -Each dialogue begins with the name of the character speaking, followed by a colon. Subsequently, the dialogue lines are presented with a hyphen and a space at the beginning of each line. +Each section starts with the character's name followed by a colon. The dialogue lines are then listed with a hyphen and a space before each line. This clear structure helps maintain readability and ensures it’s easy to track the speaker throughout the script. -This format ensures clarity and consistency in representing conversations within the script. By adhering to this structure, it becomes easier for readers to follow the flow of dialogue and understand who is speaking at any given moment. Additionally, the use of consistent formatting aids in maintaining the script's readability and comprehensibility. +## Key Points: + +- **Character Name**: Placed at the start of the dialogue block, followed by a colon. +- **Dialogue Line(s)**: Begin with a hyphen and space before each line of dialogue. +- **Consistency**: Using this consistent structure enhances the script’s flow and makes conversations easy to follow. ### Example: @@ -19,3 +23,5 @@ Mabel: - Hello, my name is Mabel! - How are you doing today? ``` + +By adhering to this format, the script remains organized, making it simpler for readers to navigate through conversations and understand the speaker at all times. diff --git a/vns-docs/docs/tutorials/tags/bgi.md b/vns-docs/docs/tutorials/tags/bgi.md index 81ff18e..285a002 100644 --- a/vns-docs/docs/tutorials/tags/bgi.md +++ b/vns-docs/docs/tutorials/tags/bgi.md @@ -1,5 +1,16 @@ # Background image: -`[bgi]string`, ex: `[bgi]bg1.png` +Specifies the background image for the current and following dialogues. -Specifies the background image for the current and following dialogues. \ No newline at end of file +### Syntax + +``` +[bgi]string +``` + +### Example + +```vns +[bgi]park.png +``` +This sets the background image to "park.png" located in the specified directory. diff --git a/vns-docs/docs/tutorials/tags/bgm.md b/vns-docs/docs/tutorials/tags/bgm.md index e425389..a311de1 100644 --- a/vns-docs/docs/tutorials/tags/bgm.md +++ b/vns-docs/docs/tutorials/tags/bgm.md @@ -1,5 +1,17 @@ # Background music: -`[bgm]string`, ex: `[bgm]bgm1.ogg` - Specifies the background music for the current and following dialogues. + +### Syntax + +``` +[bgm]string +``` + +### Example + +```vns +[bgm]theme.mp3 +``` + +This sets the background music to "theme.mp3" located in the specified directory. diff --git a/vns-docs/docs/tutorials/tags/block.md b/vns-docs/docs/tutorials/tags/block.md index 0872111..d8fa749 100644 --- a/vns-docs/docs/tutorials/tags/block.md +++ b/vns-docs/docs/tutorials/tags/block.md @@ -2,4 +2,19 @@ `[block]` -The player can't go back to the previous conversation. \ No newline at end of file +Prevents the player from returning to the previous conversation. + +### Syntax + +``` +Me: +- I will only say this once. +- I like you! +... + +[block] + +... +Me: +- And I will not say it one more time. +``` diff --git a/vns-docs/docs/tutorials/tags/display.md b/vns-docs/docs/tutorials/tags/display.md index b9664d9..5fcc8aa 100644 --- a/vns-docs/docs/tutorials/tags/display.md +++ b/vns-docs/docs/tutorials/tags/display.md @@ -1,5 +1,19 @@ # Display character(s): -`[display]*strings`, ex: `[display]character1.png character2.png` +This command is used to display character images for current or upcoming dialogues. Unlike the `[show]` tag, which adds new character images while retaining existing ones, the `[display]` tag first clears any previously shown images before displaying the specified character image(s). This ensures that only the designated character images appear on the screen. -Displays character images corresponding to the ongoing and forthcoming dialogues. Unlike the [show] tag, which introduces new character images in addition to existing character images, this tag will first clear any existing character images before introducing the designated character image(s). \ No newline at end of file +### Syntax + +``` +[display]image1 image2 ... +``` + +*image1*, *image2*, etc., represent the filenames of the character images to be displayed. + +### Example + +```vns +[display]character1.png character2.png +``` + +In this example, any previously displayed images will be cleared, and the images `character1.png` and `character2.png` will be shown. \ No newline at end of file diff --git a/vns-docs/docs/tutorials/tags/end.md b/vns-docs/docs/tutorials/tags/end.md index e8f7248..f9c5a05 100644 --- a/vns-docs/docs/tutorials/tags/end.md +++ b/vns-docs/docs/tutorials/tags/end.md @@ -1,5 +1,14 @@ -# Current dialogue branch ends here: +# End of Current Dialogue Branch -`[end]` +The `[end]` tag is used to mark the conclusion of the current dialogue branch. Once this tag is encountered, the program will recognize that the dialogue or narrative path has finished. -Marks the end of current dialogue branch. \ No newline at end of file +### Syntax + +``` +Me: +- I guess this is the end of the story. + +[end] +``` + +By using `[end]`, you signal that no further dialogue or choices will follow in this particular branch, and the story can transition or conclude as necessary. \ No newline at end of file diff --git a/vns-docs/docs/tutorials/tags/hide.md b/vns-docs/docs/tutorials/tags/hide.md index 2655f05..abd80ac 100644 --- a/vns-docs/docs/tutorials/tags/hide.md +++ b/vns-docs/docs/tutorials/tags/hide.md @@ -1,5 +1,33 @@ -# Hide character(s): +# Hide Character(s) -`[hide]*strings`, ex: `[hide]character1.png character2.png` or `[hide]*` for hiding all. +The `[hide]` tag is used to remove character images from the screen, either selectively or all at once, for the current and subsequent dialogues. -Hides the character(s) for the current and following dialogues. \ No newline at end of file +### Syntax + +``` +[hide]image1 image2 ... +``` + +*image1*, *image2*, etc., represent the filenames of the character images to be hidden. + +To hide all characters at once, use: + +``` +[hide]* +``` + +### Example + +```vns +[hide]character1.png character2.png +``` + +In this example, the images `character1.png` and `character2.png` will be hidden, while other character images (if any) remain visible. + +Alternatively, using: + +```vns +[hide]* +``` + +will hide all currently displayed character images. diff --git a/vns-docs/docs/tutorials/tags/id.md b/vns-docs/docs/tutorials/tags/id.md index 9fdb926..2650817 100644 --- a/vns-docs/docs/tutorials/tags/id.md +++ b/vns-docs/docs/tutorials/tags/id.md @@ -1,5 +1,19 @@ -# ID: +# Script ID -`[id]string`, ex: `[id]1` +The `[id]` tag assigns a unique identifier to the current dialogue script file. Each script file must have a distinct ID to ensure proper identification and organization within the system. -Specifies a (unique) ID for the current dialogue script file. Every script file must have an ID. \ No newline at end of file +### Syntax + +``` +[id]unique_identifier +``` + +*unique_identifier* is a string representing the unique ID for the script. + +### Example + +```vns +[id]1 +``` + +In this example, the script is assigned the ID `1`, ensuring it can be referenced and managed uniquely. diff --git a/vns-docs/docs/tutorials/tags/label.md b/vns-docs/docs/tutorials/tags/label.md index 9e40751..8d67809 100644 --- a/vns-docs/docs/tutorials/tags/label.md +++ b/vns-docs/docs/tutorials/tags/label.md @@ -1,5 +1,19 @@ -# Label: +# Label -`[label]string`, ex: `[label]jump_point1` +The `[label]` tag is used to create a reference point within the dialogue script. This label can be targeted by branching commands, allowing the flow of the conversation to jump to this specific point. -Creates a label for the branch command. The value will be used as the key for the subsequent conversation. \ No newline at end of file +### Syntax + +``` +[label]label_name +``` + +*label_name* represents the unique identifier for this point in the dialogue. + +### Example + +```vns +[label]jump_point1 +``` + +In this example, `jump_point1` serves as a reference label that can be used later to direct the conversation flow to this specific part of the script. diff --git a/vns-docs/docs/tutorials/tags/language.md b/vns-docs/docs/tutorials/tags/language.md index 63fcbb0..6b614db 100644 --- a/vns-docs/docs/tutorials/tags/language.md +++ b/vns-docs/docs/tutorials/tags/language.md @@ -1,5 +1,19 @@ -# Language: +# Language -`[language]string`, ex: `[language]English` +The `[language]` tag defines the language used in the current dialogue script. Each script file must specify its language to ensure proper localization and presentation. -Specifies the language of the current dialogue. Every script file must specifies a language. \ No newline at end of file +### Syntax + +``` +[language]language_name +``` + +*language_name* represents the name of the language being used in the script (e.g., English, Japanese, etc.). + +### Example + +```vns +[language]English +``` + +In this example, the language for the script is set to English. diff --git a/vns-docs/docs/tutorials/tags/option.md b/vns-docs/docs/tutorials/tags/option.md index 52854af..3ad5ab1 100644 --- a/vns-docs/docs/tutorials/tags/option.md +++ b/vns-docs/docs/tutorials/tags/option.md @@ -1,5 +1,20 @@ -# Option(s): +# Option(s) -`[option]message->label`, ex: `[scene]Can you hear me?->yes_reply` +The `[option]` tag adds interactive choices to the current dialogue, allowing players to select an option and branch the story to a specific label based on their choice. -Adding option(s) to current dialogues, and branch to the specified label according to the option chosen by the player. \ No newline at end of file +### Syntax + +``` +[option]option_text->label_name +``` + +- *option_text* is the message displayed as a choice for the player. +- *label_name* is the target label the script will jump to after the option is selected. + +### Example + +```vns +[option]Can you hear me?->yes_reply +``` + +In this example, the option "Can you hear me?" is presented to the player. If chosen, the story will branch to the label `yes_reply`. diff --git a/vns-docs/docs/tutorials/tags/scene.md b/vns-docs/docs/tutorials/tags/scene.md index 3aca1b4..4f528d3 100644 --- a/vns-docs/docs/tutorials/tags/scene.md +++ b/vns-docs/docs/tutorials/tags/scene.md @@ -1,5 +1,19 @@ -# New scene: +# New Scene -`[scene]string`, ex: `[scene]bg2.png` +The `[scene]` tag is used to transition to a new scene by displaying a specified background image. This command clears the previous scene and introduces the new one, setting the stage for the next part of the story. -Enters a new scene and displays the specified background image. \ No newline at end of file +### Syntax + +``` +[scene]background_image +``` + +*background_image* is the filename of the image to be displayed as the new scene's background. + +### Example + +```vns +[scene]bg2.png +``` + +In this example, the background image `bg2.png` is loaded to start a new scene. diff --git a/vns-docs/docs/tutorials/tags/section.md b/vns-docs/docs/tutorials/tags/section.md index 815441b..ff92187 100644 --- a/vns-docs/docs/tutorials/tags/section.md +++ b/vns-docs/docs/tutorials/tags/section.md @@ -1,5 +1,19 @@ -# Section: +# Section -`[section]string`, ex: `[section]dialog_example` +The `[section]` tag is used to define a specific section that groups all subsequent dialogues. It helps organize the script by segmenting it into different sections for easier management and navigation. -Specifies the section of all the following dialogues. \ No newline at end of file +### Syntax + +``` +[section]section_name +``` + +*section_name* represents the identifier for the section that will encompass all following dialogues. + +### Example + +```vns +[section]dialog_example +``` + +In this example, `dialog_example` becomes the section that contains all dialogues and actions following this tag. diff --git a/vns-docs/docs/tutorials/tags/show.md b/vns-docs/docs/tutorials/tags/show.md index 224c927..7089200 100644 --- a/vns-docs/docs/tutorials/tags/show.md +++ b/vns-docs/docs/tutorials/tags/show.md @@ -1,5 +1,19 @@ -# Show character(s): +# Show Character(s) -`[show]*str`, ex: `[show]character1.png character2.png` +The `[show]` tag is used to display one or more character images on the screen, corresponding to the ongoing and upcoming dialogues. Unlike the `[display]` tag, this does not clear existing images but adds the specified character images alongside any already present. -Introduces character image(s) corresponding to the ongoing and forthcoming dialogues. \ No newline at end of file +### Syntax + +``` +[show]character_image1 character_image2 ... +``` + +*character_image1*, *character_image2*, etc., represent the filenames of the character images to be shown. + +### Example + +```vns +[show]character1.png character2.png +``` + +In this example, the character images `character1.png` and `character2.png` are introduced, without removing any previously displayed characters. diff --git a/vns-docs/docs/vep/1-Variables.md b/vns-docs/docs/vep/1-Variables.md new file mode 100644 index 0000000..23a8b61 --- /dev/null +++ b/vns-docs/docs/vep/1-Variables.md @@ -0,0 +1,54 @@ +# VEP 1 - Variables +![Static Badge](https://img.shields.io/badge/vns-2.2-blue?style=for-the-badge) ![Static Badge](https://img.shields.io/badge/Status-Final-green?style=for-the-badge "Accepted and implementation complete, or no longer active") + +[TOC] + +## Abstract: + +This VEP proposes a standardized system for variable creation and management within the Visual Novel Script (VNS). By defining clear rules for local, global, and persistent variables, developers can streamline their code and facilitate future feature implementation within VNS. + +## Rationale and Goals: +Variables are fundamental components of any programming language, enabling developers to store and manipulate data. The primary objective of this proposal is to establish a unified approach to variable handling in VNS. This will not only enhance code readability and maintainability but also pave the way for implementing advanced features like conditional statements and explicit branching. + +## Definition: +In VNS, variables will be categorized into three types: +- **Local Variables**: These variables are confined to specific sections and are not shared between sections. Each section can have its own set of local variables, allowing for encapsulation and modularization of code. However, developers must implement a robust system for persisting local variables if progress saving is enabled. +- **Global Variables**: Global variables persist across sections within a particular dialogue. They are visible and accessible throughout the entire dialogue, facilitating data sharing between sections. Global variables should be carefully managed, especially when implementing progress-saving functionality. +- **Persistent Variables**: Persistent variables transcend individual dialogues and persist across sessions or even across the entire program/system. These variables require explicit management and should be saved persistently, typically on the client's device. + +## Syntax: +Variables in VNS can store signed numbers (floats, ints), boolean, or strings. The syntax for creating and updating variables is as follows: + + // Local Variable Syntax: + variable_name = 1 + does_variable_exist = false + // Global Variable Syntax: + @variable_name = -3.1415926 // (Global variables must start with '@') + // Persistent Variable Syntax: + &variable_name = "Hello world" // (Persistent variables must start with '&') + +## Optional Syntax: +Additional syntax options are provided for convenience and flexibility: + + variable_name ++ // Increment/Decrement: Use ++ and -- to increment or decrement number variables. + variable_name += 2 // Comment Number Operations + variable1 = variable2 // Variable Assignment + variable1 = variable2 + 21 // Complex Math Operations + +## Rejected Idea(s): +### Persistent variables should start with '%' +When considering the proposal that persistent variables should start with the symbol '%', it's important to acknowledge the conflict this introduces with established conventions in many programming languages. The '%' symbol is widely recognized as the modulo operator, a fundamental mathematical operator used to find the remainder of a division between two numbers. This operator is a staple in programming languages such as Python, Java, C++, and many others, serving as an essential tool for various calculations and logic operations. + +Introducing '%' as a prefix for persistent variables could lead to confusion and readability issues in code. Developers accustomed to seeing '%' used in the context of arithmetic operations might misinterpret its purpose when used as a variable prefix. This could hinder the understanding of code, especially for beginners or those working in a collaborative environment where clear and intuitive code is crucial. + +Furthermore, repurposing common symbols can complicate the parsing and interpretation of code by compilers and interpreters. These tools are designed to recognize specific patterns and symbols with predefined meanings. Introducing a dual role for '%' could require significant adjustments in the parsing logic, potentially leading to increased complexity and a higher likelihood of bugs in language processors. + +## Conclusion: +By adopting this standardized variable naming system and syntax, developers can improve code organization, readability, and maintainability in VNS projects. This proposal also lays the foundation for future enhancements and feature implementations within VNS. + +## VEP Development Process +A live draft for this VEP lives on GitHub. There is also an issue tracker, where much of the technical discussion takes place. +The draft on GitHub is updated regularly in small increments. The official VEPS repo is (usually) only updated when a new draft is posted to the Linpg Foundation. + +## Copyright +This document has been placed in the public domain. \ No newline at end of file diff --git a/vns-docs/docs/vep/2-Language Standard and Compiler Version Management.md b/vns-docs/docs/vep/2-Language Standard and Compiler Version Management.md new file mode 100644 index 0000000..75286dd --- /dev/null +++ b/vns-docs/docs/vep/2-Language Standard and Compiler Version Management.md @@ -0,0 +1,51 @@ +# VEP 2 - Language Standard and Compiler Version Management +![Static Badge](https://img.shields.io/badge/vns-2.3-blue?style=for-the-badge) ![Static Badge](https://img.shields.io/badge/Status-Final-green?style=for-the-badge "Accepted and implementation complete, or no longer active") + +[TOC] + +## Abstract +This VEP proposes a new tag, `[vns]`, for specifying the version of the VNS language standard to be used for the current script file. + +## Motivation +VNS languages have maintained backward compatibility across revisions, but this may not always be the case. Specifically, the removal of the `[br]` tag in VNS 2 can cause scripts using this tag to malfunction in later versions. Additionally, minor differences in behavior and outcomes due to bugs or other factors can cause games to fail. To mitigate these issues, a mechanism for specifying the language version is necessary. This version specification will also help developers perform version checks, thus preventing conflicts and incompatibility. Moreover, with the introduction of VNS-server, this feature will enable the server to select the most appropriate compiler for the compiling process. + +## Specification + +### Syntax +By default, specifying the language standard for a script file is optional, assuming the script should work regardless of the VNS compiler version. + +The `[vns]` tag specifies the language standard version: +``` +[vns] {>=, <=, !<=, !>=} +``` + +### Examples +- `[vns]2.3`: This script is written according to VNS 2.3 standard and should only be compiled using the VNS 2.3 compiler. +- `[vns]<=2.3`: If the script works between versions 2.0 and 2.3, this tag can be used. Note that compilers released before VNS 2.3 will not support this tag, unless using VNS-server. +- `[vns]>=2.3`: If the script uses features introduced in VNS 2.3 and is not compatible with earlier versions. +- `[vns]!<=2.3`: This script works with versions 1.0 through 2.3. + +Forward compatibility can be assumed between revisions, but forward and backward compatibility cannot be assumed between major version changes. Although not recommended, forced compatibility can be indicated using an exclamation mark. + +### Backward Compatibility +The introduction of the [vns] tag will not affect existing scripts as it introduces new functionality without altering the behavior of current tags. + +### Rejected Ideas +#### Allow Specifying Patch +Specifying patch numbers is unnecessary due to the relatively short release cycle of patches, which only include bug fixes and guarantee forward and backward compatibility. + +#### Using `==` for Enforcing a Specific Version +Using `==` is redundant and may cause confusion. To avoid this, equality is assumed when no comparison operator is used, simplifying the syntax for non-programmers and improving readability. + +#### Support for `>`, `<`, or `!=` +These operators can create unclear compatibility and introduce scripts that cannot run, such as `[vns]<2.0` when 2.0 is the first release of the VNS 2 standard. Additionally, the unlikely event of a tag being removed and reintroduced makes `!=` redundant. Higher version enforcement is preferable for maintaining script integrity. + +## Conclusion +The introduction of the `[vns]` tag for specifying the version of the VNS language standard addresses the need for clearer compatibility and version management in VNS scripts. By allowing script writers to specify the exact version or range of versions their scripts are compatible with, we can prevent issues arising from changes in language features and behavior between versions. This proposal not only helps maintain backward compatibility but also supports forward compatibility, facilitating smoother transitions and integrations with tools like VNS-server. By adopting this proposal, the VNS language will enhance its robustness and reliability, ensuring that scripts perform consistently across different versions of the compiler. + +## VEP Development Process +A live draft for this VEP lives on GitHub. There is also an issue tracker, where much of the technical discussion takes place. +The draft on GitHub is updated regularly in small increments. The official VEPS repo is (usually) only updated when a new draft is posted to the Linpg Foundation. + +## Copyright +This document has been placed in the public domain. \ No newline at end of file diff --git a/vns-docs/docs/vep/3-Introducing [jump] Tag.md b/vns-docs/docs/vep/3-Introducing [jump] Tag.md new file mode 100644 index 0000000..628d6c0 --- /dev/null +++ b/vns-docs/docs/vep/3-Introducing [jump] Tag.md @@ -0,0 +1,56 @@ +# VEP 3 - Introducing [jump] Tag +![Static Badge](https://img.shields.io/badge/vns-2.3-blue?style=for-the-badge) ![Static Badge](https://img.shields.io/badge/Status-Final-green?style=for-the-badge "Accepted and implementation complete, or no longer active") + +[TOC] + +### Abstract +This VEP proposes a new tag for branching dialogues, [jump], to enable developers to jump from the current dialog to another specified dialog within a scenario. This enhancement aims to facilitate more complex and nested dialog structures, offering enhanced narrative flexibility when combined with existing tags such as [end], [block], and labels. + +### Motivation +In the development of Visual Novel Scripts (VNS), complex storytelling often requires dynamic transitions between dialogues that are not linear. The existing tags support basic flow control but lack the ability to efficiently implement more intricate dialogue pathways that can enhance player engagement and narrative depth. The introduction of the [jump] tag addresses this gap by allowing explicit and clear transitions, improving both the writing experience and gameplay mechanics. + +### Specification +#### Syntax +The [jump] tag will follow a straightforward syntax: +`[jump]/[jmp]