Name | pyvns JSON |
Version |
2.0
JSON |
| download |
home_page | |
Summary | VNS (Visual Novel Script), a universal scripting language for creating scripts for visual novel games. |
upload_time | 2023-11-21 02:06:32 |
maintainer | |
docs_url | None |
author | |
requires_python | >=3.10 |
license | |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Visual Novel Script
Visual Novel Script, short for VNS, is a universal scripting language created with the goal of creating a language that allows visual novel developers to write once and compile everywhere, across different platforms, game libraries, and programming languages.
VNS provides a number of features that make it easy to create visual novels, such as:
- A simple and easy-to-learn syntax
- Support for branching dialogue and choices
- Support for music and sound effects
Unlike Ren'py, writing visual novel script is more like writing a story instead of a program, and the developers also have the choice to create their own implementation.
# How it started:
The development of the VNS can be traced all the way back to the initial stages of Linpg's development. During this period, the team faced the challenge of finding an efficient method to store the dialogue. Each conversation required the storage of multiple variables, including the narrator, the actual dialogue content, associated character images, ambient background music, and various other components:

Ultimately, the team opted for a design inspired by doubly linked list, but implemented using dictionary (HashMap for Java forks). This approach not only facilitated easier access to the data but also streamlined the saving process, enabling compatibility with formats like JSON or YAML. This method preserved readability while efficiently managing the dialogue. Today, the current system closely resembles our initial design, with only a few subtle refinements:
```yaml
compiledAt: ...
dialogs:
dialog1:
head:
background_image: bg1.jpg
background_music: bgm1.mp3
character_images:
- alice.png
contents:
- Hello
narrator: Alice
next:
target: ~01
type: default
previous: null
~01:
background_image: bg1.jpg
background_music: bgm1.mp3
character_images:
- alice.png
contents:
- Can you hear me?
narrator: Alice
next:
target: ~02
type: default
previous: head
~02:
...
dialog2:
...
...
id: 1
language: English
```
Although the overall data is easy to read, it is somewhat inconvenient to write. We came up with a dedicated dialogue editor to resolve the issue, but it's still a bit of a hassle. That is the reason why we begin to inquire about the possibility of simplifying the process.
Would it be possible to make it feel like we're writing the dialogue in a Microsoft Word document? Thus, VNS is born.
# Tutorials:
VNS are written in a plain text file with the `.vns` extension. The script file contains a series of tags, which are used to specify the different elements of the visual novel, such as the characters, backgrounds, dialogue, music, and so on.
## Tags with value
`[tag]value`
The `[tag]` represents the kind of value you are trying to represent, and the value is, well, the value.
### ID:
`[id]str`, ex: `[id]1`
Specifies a (unique) ID for the current dialogue file. Every script file must have an ID.
### Language:
`[language]str`, ex: `[language]English`
Specifies the language of the current dialogue. Every script file must specifies a language.
### Section:
`[section]str`, ex: `[section]dialog_example`
Specifies the section of all the following dialogues.
### Background image:
`[bgi]str`, ex: `[bgi]bg1.png`
Specifies the background image for the current and following dialogues.
### Background music:
`[bgm]str`, ex: `[bgm]bgm1.ogg`
Specifies the background music for the current and following dialogues.
### Display character(s)
`[display]*str`, ex: `[display]character1.png character2.png`
Displays the character(s) for the current and following dialogues.
### Hide character(s)
`[hide]*str`, ex: `[hide]character1.png character2.png` or `[hide]*` for hiding all.
Hides the character(s) for the current and following dialogues.
### New scene
`[scene]str`, ex: `[scene]bg2.png`
Enters a new scene and displays the specified background image.
### Option(s)
`[option]message->label`, ex: `[scene]Can you hear me?->yes_reply`
Adding option(s) to current dialogues, and branch to the specified label according to the option chosen by the player.
### Label
`[label]str`, ex: `[label]jump_point1`
Creates a label for the branch command. The value will be used as the key for the subsequent conversation.
## Tags without value
### End
`[end]`
Marks the end of the script.
### **Block**
`[block]`
The player can't go back to the previous conversation.
### Comments:
`# this is a comment`
Commenting the script to make it easier to understand.
### Notes:
`// this is a note`
Notes are very similar to comments. It's used to make a note for a specific conversation and is saved to the file that is compiled.
## Dialogue:
Conversations are written in the form of this:
```vns
Character name:
- Dialogue text
- More dialogue text
```
The character name is followed by a colon and then one or more lines of dialogue text. Each line of dialogue text must start with a hyphen and a space.
## **Example**:
Here is a simple example of a VNS script:
```vns
[id]1
[language]English
[section]dialog_example
[bgi]bg1.png
[display]character1.png character2.png
Mabel:
- Hello my name is Mabel!
- How are you doing today!
[hide]character1.png
Dipper:
- Hi Mabel! I'm doing well, thanks for asking.
```
This script would display the background image `bg1.png` and the character images `character1.png` and `character2.png`. Mabel would then say "Hello my name is Mabel!" and "How are you doing today!". Next, `character1.png` would be hidden and Dipper would say "Hi Mabel! I'm doing well, thanks for asking." Finally, the script would end.
Raw data
{
"_id": null,
"home_page": "",
"name": "pyvns",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "",
"keywords": "",
"author": "",
"author_email": "Linpg Foundation <yudong9912@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/e4/30/bebb7e8fde3d3361f7f7d4a33929c31e32048466c480a07a0d3f240a0716/pyvns-2.0.tar.gz",
"platform": null,
"description": "# Visual Novel Script\n\nVisual Novel Script, short for VNS, is a universal scripting language created with the goal of creating a language that allows visual novel developers to write once and compile everywhere, across different platforms, game libraries, and programming languages.\n\nVNS provides a number of features that make it easy to create visual novels, such as:\n\n- A simple and easy-to-learn syntax\n- Support for branching dialogue and choices\n- Support for music and sound effects\n\nUnlike Ren'py, writing visual novel script is more like writing a story instead of a program, and the developers also have the choice to create their own implementation.\n\n# How it started:\n\nThe development of the VNS can be traced all the way back to the initial stages of Linpg's development. During this period, the team faced the challenge of finding an efficient method to store the dialogue. Each conversation required the storage of multiple variables, including the narrator, the actual dialogue content, associated character images, ambient background music, and various other components:\n\n\n\nUltimately, the team opted for a design inspired by doubly linked list, but implemented using dictionary (HashMap for Java forks). This approach not only facilitated easier access to the data but also streamlined the saving process, enabling compatibility with formats like JSON or YAML. This method preserved readability while efficiently managing the dialogue. Today, the current system closely resembles our initial design, with only a few subtle refinements:\n\n```yaml\ncompiledAt: ...\ndialogs:\n dialog1:\n head:\n background_image: bg1.jpg\n background_music: bgm1.mp3\n character_images:\n - alice.png\n contents:\n - Hello\n narrator: Alice\n next:\n target: ~01\n type: default\n previous: null\n ~01:\n background_image: bg1.jpg\n background_music: bgm1.mp3\n character_images:\n - alice.png\n contents:\n - Can you hear me?\n narrator: Alice\n next:\n target: ~02\n type: default\n previous: head\n ~02:\n ...\n dialog2:\n ...\n ...\nid: 1\nlanguage: English\n```\n\nAlthough the overall data is easy to read, it is somewhat inconvenient to write. We came up with a dedicated dialogue editor to resolve the issue, but it's still a bit of a hassle. That is the reason why we begin to inquire about the possibility of simplifying the process.\n\nWould it be possible to make it feel like we're writing the dialogue in a Microsoft Word document? Thus, VNS is born.\n\n# Tutorials:\n\nVNS are written in a plain text file with the `.vns` extension. The script file contains a series of tags, which are used to specify the different elements of the visual novel, such as the characters, backgrounds, dialogue, music, and so on.\n\n## Tags with value\n\n`[tag]value`\n\nThe `[tag]` represents the kind of value you are trying to represent, and the value is, well, the value. \n\n### ID:\n\n`[id]str`, ex: `[id]1`\n\nSpecifies a (unique) ID for the current dialogue file. Every script file must have an ID.\n\n### Language:\n\n`[language]str`, ex: `[language]English`\n\nSpecifies the language of the current dialogue. Every script file must specifies a language.\n\n### Section:\n\n`[section]str`, ex: `[section]dialog_example`\n\nSpecifies the section of all the following dialogues.\n\n### Background image:\n\n`[bgi]str`, ex: `[bgi]bg1.png`\n\nSpecifies the background image for the current and following dialogues.\n\n### Background music:\n\n`[bgm]str`, ex: `[bgm]bgm1.ogg`\n\nSpecifies the background music for the current and following dialogues.\n\n### Display character(s)\n\n`[display]*str`, ex: `[display]character1.png character2.png`\n\nDisplays the character(s) for the current and following dialogues.\n\n### Hide character(s)\n\n`[hide]*str`, ex: `[hide]character1.png character2.png` or `[hide]*` for hiding all.\n\nHides the character(s) for the current and following dialogues.\n\n### New scene\n\n`[scene]str`, ex: `[scene]bg2.png`\n\nEnters a new scene and displays the specified background image.\n\n### Option(s)\n\n`[option]message->label`, ex: `[scene]Can you hear me?->yes_reply`\n\nAdding option(s) to current dialogues, and branch to the specified label according to the option chosen by the player. \n\n### Label\n\n`[label]str`, ex: `[label]jump_point1`\n\nCreates a label for the branch command. The value will be used as the key for the subsequent conversation.\n\n## Tags without value\n\n### End\n\n`[end]`\n\nMarks the end of the script.\n\n### **Block**\n\n`[block]`\n\nThe player can't go back to the previous conversation.\n\n### Comments:\n\n`# this is a comment`\n\nCommenting the script to make it easier to understand.\n\n### Notes:\n\n`// this is a note`\n\nNotes are very similar to comments. It's used to make a note for a specific conversation and is saved to the file that is compiled.\n\n## Dialogue:\n\nConversations are written in the form of this:\n\n```vns\nCharacter name:\n- Dialogue text\n- More dialogue text\n```\n\nThe character name is followed by a colon and then one or more lines of dialogue text. Each line of dialogue text must start with a hyphen and a space.\n\n## **Example**:\n\nHere is a simple example of a VNS script:\n\n```vns\n[id]1\n[language]English\n[section]dialog_example\n\n[bgi]bg1.png\n[display]character1.png character2.png\n\nMabel:\n- Hello my name is Mabel!\n- How are you doing today!\n\n[hide]character1.png\n\nDipper:\n- Hi Mabel! I'm doing well, thanks for asking.\n```\n\nThis script would display the background image `bg1.png` and the character images `character1.png` and `character2.png`. Mabel would then say \"Hello my name is Mabel!\" and \"How are you doing today!\". Next, `character1.png` would be hidden and Dipper would say \"Hi Mabel! I'm doing well, thanks for asking.\" Finally, the script would end.\n",
"bugtrack_url": null,
"license": "",
"summary": "VNS (Visual Novel Script), a universal scripting language for creating scripts for visual novel games.",
"version": "2.0",
"project_urls": {
"Bug Tracker": "https://github.com/LinpgFoundation/vns/issues",
"Homepage": "https://github.com/LinpgFoundation/vns"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a0e88a907cf1d5a50460aa9ee65f0d5679ed3f0e29829ca31b0ef0beeccf3b6c",
"md5": "0581eed440512096c1064ca05b7f6216",
"sha256": "e44015823683e61fa2ac3e081ce81f12c104642aaed06caf70841cfd6cdc7293"
},
"downloads": -1,
"filename": "pyvns-2.0-cp310-cp310-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0581eed440512096c1064ca05b7f6216",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1179635,
"upload_time": "2023-11-21T02:06:16",
"upload_time_iso_8601": "2023-11-21T02:06:16.596206Z",
"url": "https://files.pythonhosted.org/packages/a0/e8/8a907cf1d5a50460aa9ee65f0d5679ed3f0e29829ca31b0ef0beeccf3b6c/pyvns-2.0-cp310-cp310-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0902f49e58e04bca54ef8bebe7a47a4e2cd03c4359b4ded5f74b565d6439803a",
"md5": "6ed5300cdb62cd83eaea3bd288d690fe",
"sha256": "9c9d5a2f3686305a8acb221b32d7db9f93f991c698f53f4996c8546d401dbea3"
},
"downloads": -1,
"filename": "pyvns-2.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "6ed5300cdb62cd83eaea3bd288d690fe",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 268239,
"upload_time": "2023-11-21T02:06:18",
"upload_time_iso_8601": "2023-11-21T02:06:18.691472Z",
"url": "https://files.pythonhosted.org/packages/09/02/f49e58e04bca54ef8bebe7a47a4e2cd03c4359b4ded5f74b565d6439803a/pyvns-2.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "54da1de7bc04924b62575ffbf3706b1ba1bffe2568da3b797e0466d95a03ad88",
"md5": "b7ddc69e1b3a455fc88113a9aac99e3e",
"sha256": "f53c49e41179b341881978afc50db99614b970c58fe45369d11f8640c5be4776"
},
"downloads": -1,
"filename": "pyvns-2.0-cp311-cp311-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b7ddc69e1b3a455fc88113a9aac99e3e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1267367,
"upload_time": "2023-11-21T02:06:21",
"upload_time_iso_8601": "2023-11-21T02:06:21.739952Z",
"url": "https://files.pythonhosted.org/packages/54/da/1de7bc04924b62575ffbf3706b1ba1bffe2568da3b797e0466d95a03ad88/pyvns-2.0-cp311-cp311-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "43682550369cc4701ac93814c846177e85b2e7e3c8a2545812f13979f276f116",
"md5": "a4f2cfb8be750fc994f78f93f733c7d9",
"sha256": "dec5deff78639dc02f58e699e67857f0a64a8e75f221755ce7f309cd070d5f21"
},
"downloads": -1,
"filename": "pyvns-2.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "a4f2cfb8be750fc994f78f93f733c7d9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 268235,
"upload_time": "2023-11-21T02:06:23",
"upload_time_iso_8601": "2023-11-21T02:06:23.960001Z",
"url": "https://files.pythonhosted.org/packages/43/68/2550369cc4701ac93814c846177e85b2e7e3c8a2545812f13979f276f116/pyvns-2.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f71572abbf96bcc6b635f29048f9b23c0e6fe81056a74299b7b390621655bcda",
"md5": "5d6e9069dcef71dcb6c6fae6c527ee7a",
"sha256": "adaa60baf73891d72b50f70620848f585050fffd76b10df23eed81ce3b26e123"
},
"downloads": -1,
"filename": "pyvns-2.0-cp312-cp312-manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5d6e9069dcef71dcb6c6fae6c527ee7a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1389147,
"upload_time": "2023-11-21T02:06:28",
"upload_time_iso_8601": "2023-11-21T02:06:28.009388Z",
"url": "https://files.pythonhosted.org/packages/f7/15/72abbf96bcc6b635f29048f9b23c0e6fe81056a74299b7b390621655bcda/pyvns-2.0-cp312-cp312-manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7c352f804146ab11bfdb6406a2d27988390b3904322cfe44bcb79c6fbe2d5c9b",
"md5": "98f05972d981bdb371e27cb8b4aa94e1",
"sha256": "f30a9a5135d1134febeb4c822290ccec4bbacfb42ce2a2f307e18e83e7c7e23b"
},
"downloads": -1,
"filename": "pyvns-2.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "98f05972d981bdb371e27cb8b4aa94e1",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 272068,
"upload_time": "2023-11-21T02:06:30",
"upload_time_iso_8601": "2023-11-21T02:06:30.357088Z",
"url": "https://files.pythonhosted.org/packages/7c/35/2f804146ab11bfdb6406a2d27988390b3904322cfe44bcb79c6fbe2d5c9b/pyvns-2.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e430bebb7e8fde3d3361f7f7d4a33929c31e32048466c480a07a0d3f240a0716",
"md5": "dc7bacdf24b81bf1787d97616c681ef4",
"sha256": "65f2c4315413a2c45777ecfe1a6a3f520a7e1baa90b51541d95cf4a7096f16ca"
},
"downloads": -1,
"filename": "pyvns-2.0.tar.gz",
"has_sig": false,
"md5_digest": "dc7bacdf24b81bf1787d97616c681ef4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 269358,
"upload_time": "2023-11-21T02:06:32",
"upload_time_iso_8601": "2023-11-21T02:06:32.662114Z",
"url": "https://files.pythonhosted.org/packages/e4/30/bebb7e8fde3d3361f7f7d4a33929c31e32048466c480a07a0d3f240a0716/pyvns-2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-11-21 02:06:32",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "LinpgFoundation",
"github_project": "vns",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pyvns"
}