Novelty's asset management system is based on XML. XML is - similar to HTML - a so called markup language. It shouldn't be confused with a programming language. It's not programming at all so don't get discouraged if you've worried it may be too advanced for you. It's a descriptive language, used to describe objects and their properties. Novelty uses a subset of XML, fittingly named NoveltyML.
In this page we're going to look at how easy it is to write NoveltyML, but first lets start with the basics of XML.
Let's take a look at a small example to find out more about XML and how it works:
<Car brand="Volvo" model="S40" />
This is a tag. The name of the tag is Car and it has two attributes: brand and model.
The tag is flanked by brackets (< and />). The slash (/) at the end means that this tag is closed and has no children (see below).
The values of the attributes are typed with quotation marks. It's okay to type single words and numbers without the quotes but it's recommended you use them anyways for consistency.
In XML, all tags are apart of a hierarchy where the top tag is called the "root". There can only be one root tag per XML document.
<Car brand="Volvo" model="S40" >
<Tire pressure="1.0" />
<Tire pressure="0.8" />
<Tire pressure="0.95" />
<Tire pressure="1" />
</Car>
Here we've added four tires to the car, each with their individual pressure attribute. The Tire tags are "children" of Car, which naturally is the "parent" of the tires.
Because Car now has children the slash (/) has moved from the end of that tag. We close the tag below the children with </Car>.
As mentioned previously, NoveltyML is a subset of XML, which means it has it's own set of tags and attributes. Obviously the car-tire example above doesn't apply in the context of visual novels. You'll find information about all of the available tags and how to use them in the NoveltyML reference.
In Novelty, you will use NoveltyML to compose assets for your visual novels. It's a very powerful language that lets you compose your objects in any way you can imagine. Here is an example of NoveltyML:
<Texture name="My texture" source="Assets\Textures\My texture.png" />
To aid you in composing NoveltyML there is a dedicated tool for that, called the Novelty XML Designer. You'll find it in the same directory as Novelty.
In NoveltyML, objects are able to hold children. Child objects are attached to their parents and will move, rotate and scale along with them. This is very useful when building complex objects.
<Image name="Parent" texture="My texture" >
<Image name="Child" texture="Other texture" />
</Image>