XVNML 1.0.0-pre-release

This is a prerelease version of XVNML.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package XVNML --version 1.0.0-pre-release
NuGet\Install-Package XVNML -Version 1.0.0-pre-release
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="XVNML" Version="1.0.0-pre-release" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add XVNML --version 1.0.0-pre-release
#r "nuget: XVNML, 1.0.0-pre-release"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install XVNML as a Cake Addin
#addin nuget:?package=XVNML&version=1.0.0-pre-release&prerelease

// Install XVNML as a Cake Tool
#tool nuget:?package=XVNML&version=1.0.0-pre-release&prerelease

XVNML

XVNML (formally known as X-tensible Visual Novel Markup Language), is an open-source mark-up language that can be easily paired with any game engine that requires a nice and structure way of storing Stored-Based information and dialogue. It puts together the normal mark up languages you may be used to, but adds a couple extra features (like Skriptr) to make it versitale in you game development work flow.

Screenshot_20221205_234724

Screenshot_20221030_161330

Roadmap

At it's current stage, these are the following states that this project is in:

  • You can easily import the .dll of XVNML, and add it into any .NET-based game engine or environment (such as Unity).
  • For Unity in particular, there will be a free package that demonstrates and utilizes XVNML called XVNML2U.
  • There still needs to be helpers to make integrating to game engines a lot easier.
  • There will be a Native Visual Novel Game Engine that'll be fully dedicated to XVNML and Skriptr called HanaC.
  • The XVNMLExt for VSCode is yet to be polished as of the time of writting this.

How to Use XVNML

All of your XVNML content are represented by an object called XVNMLObj. You instaniate this class, and pass it in a directory to a file you want it to parse. It'll then go through and parse the information for you, as well as extra any Skriptr used for dialogue. After the parsing, you can grab an element by using the GetElement method on the root tag of the XVNML file.

image

Pre-Built Tags

By default, you have a total of 28 pre-built tags that can be parsed by the XVNML utility.

  • Audio
  • AudioDefinition
  • Author
  • Cast
  • CastDefinition
  • Copyright
  • Date
  • Dependency
  • DependencyGroup
  • Description
  • Dialogue
  • DialogueGroup
  • Image
  • ImageDefinitions
  • Keycode
  • KeycodeDefinitions
  • Metadata
  • Portrait
  • PortraitDefinitions
  • Proxy
  • Scene
  • SceneDefinition
  • Source
  • Tags
  • Title
  • Url
  • Voice
  • VoiceDefinition

Out of all of these valid tags, Proxy and Source are Root Tags. This means whenever you type your XVNMLObj instance and access the root, it'll either be Proxy or Source, depending on how the file was structured.

User Defined Tags

You also have the ability to create custom tags (hence the X in XVNML). Creating a custom class is as easy as associating your C# class with a particular tag.

image

Once you've created a class that derives from the UserDefined class, you can associate that class with a tag inside your .XVNML file. You can even specifiy its scoop:

  • PragmaOnce ⇒ Should only be mentioned 1 time in a file.
  • PragmaLocalOnce ⇒ Should only be mentioned 1 time inside a scope of another tag.
  • Multiple ⇒ Can be used anywhere, and can be use multiple times thoughout the whole .XVNML document

XVNML file as Sources and Resource Referencing

XVNML files can also be used as sources for other tags. Tag the list of cast members in the CastDefinition tag: image Using a configuration file to find out the relative path of your project, you can take the information from one XVNML and embed it into a tag. For example, this is what the information looks like inside "Raven.cast.xvnml":

image

It'll take the information from the "cast" tag inside the Raven.cast.xvnml file, and then embed it into the cast tag from the requesting file. It's a very awesome feature exclusive to XVNML. However, the only downside to this is that the "name" parameter for the "cast" tags in both files must match. They will fail to match otherwise.

Skriptr

Skriptr is a scripting language entirely unique to XVNML. In order to utlize this handy feature, all of it's contents must be inside a "dialogue" tag. Again, you can have another XVNML file as a source and have the dialogue embed to the dialogue asking for it that way (again, the names of those tags must both match).

image

You are also able to run macros (commands that performs a single action). Information of the command used, as well as the arguments passed will be stored inside your XVNMLObj instance. A macro is denoted by surrounding curly braces. The macro name is first defined, and then the argument(s) being passed for it (if the macro requires them).

image

Documentation/Learning Material

To learn more about XVNML, and how you can integrate it inside a game engine (or your own game engine), be sure to check out the wiki. There will be extensive detail as to how everything functions, and the approach to take when implementing it into your project. Again, there will be different subprojects that takes XVNML and addes support to already existing game engines; the first one being Unity with XVNML2U. Be sure to keep an eye out for updates.

There will also be a VSCode extension of XVNML coming soon (which is simply just the syntax highlighting). I plan on creating a website dedicated to learning XVNML, Skriptr, adding macros, setting the proxy (target) and mroe. But in the meantime, be sure to support the development of this mark-up language.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.1

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.3.1-pre-release 52 4/17/2024
1.0.3-pre-release 52 4/12/2024
1.0.2.12-pre-release 70 9/13/2023
1.0.2.11-pre-release 71 9/13/2023
1.0.2.1-pre-release 60 9/13/2023
1.0.1.22-pre-release 72 7/17/2023
1.0.1.3-pre-release 67 8/3/2023
1.0.1.1-pre-release 66 7/11/2023
1.0.1-pre-release 69 7/11/2023
1.0.0.3-pre-release 66 6/27/2023
1.0.0.2-pre-release 58 6/26/2023
1.0.0.1-pre-release 59 6/22/2023
1.0.0-pre-release 58 6/21/2023