Novelation Scripting Language – First Draft

What’s new in Novelation

Hey everyone! Just wanted to give you an update on how Novelation is coming. Due to feedback the Novelation UI was completely reworked, and the system is far more flexible than it used to be! Gone are the days of restrictive naming conventions and the busy work of setting up a new screen. The old system was flawed, and it tended to hide some of its inner workings to appear more user friendly. This didn’t give the kind of control you would want on your project, so everything is now visible and editable by the user. On top of all this there has been a lot of back end work done to make Novelation more modular, thus preparing it for its future of updated features.

If you missed what Novelation is, check out the post here for details!

Novelation Scripting Language

The Novelation Scripting Language, or NSL for short, is the scripting language that Novelation uses to interpret your story into a visual and audible experience. Think of it as the script to a stage play, with you as the writer and director, and Novelation as the actors. It is designed to read like a stage play so that it is easily read even in a larger story. It needs to be simple enough to write, to avoid strict rules and use simple wording that is easy to remember. So I would like to show you the first iteration of NSL. Be warned, it is a very rough idea of what NSL is going to be.

//anything that begins with these two slashes '//' is ignored, which is useful for placing comments!

//this is the label denoting a new scene, in this case the starting scene.
#scene start:
screen 'MainStage' //this changes the screen we are on to the 'MainStage' screen.
background 'Backgrounds/Battle1' // this changes the background to the 'Battle1' background.
music 'Music/Calm' //this starts playing the music file 'Calm' on a loop.

//This simply puts the text in a text box with no name box
"The world seemed still, but there was a foul odour in the air. Something was coming."

//This does the same thing as above, but all the character data from the character Frii is attached to it.
//This includes things such as: Font, color, name, and direct access to character images.
Frii: "Looks like I'm not alone after all. This should be fun!"

sound 'Sounds/Enemies/Roar' //this plays a one shot sound file, in this case 'Roar'.

//This takes things one step further, because we are setting some parameters for our dialogue.
//Parameters are set by placing a comma after the initial function and supplying the variable you wish to alter.
//In this case we are assigning the dialogue with a sound file for voice acting, as well as overriding the font and color for the text.
//By default the font, color, ect. are determined by the character's data. If no character is specified it uses the global settings.
Frii: "There you are, show me what ya got!", sound = 'Frii/Cocky', font = 'Fonts/Default', color = '255, 0, 0, 255'

//In this case we are using 'Beast' as a character name without actually having a character named 'Beast'.
//This will use the default font and color settings unless specified.
'Beast': "Leave, outsider!"

scene 'battle' //this leads to the 'battle' scene, so it will exit our current scene.


//this is another scene. Scenes are highlighted in purple for easy searching
#scene battle:
screen 'MainStage' //we are already on this screen, so this will actually do nothing. Though it is nice to always specify this for when you are testing out individual scenes.
background 'Backgrounds/Battle2', transition = 'Fade' //This will change our background to 'Battle2'. We have set the transition to fade effect.
music 'Music/Combat' //Currently we are playing 'Calm' on a loop, but only one music will be played at a time so 'Calm' will stop playing and 'Combat' will start playing on a loop.

//so this seems similar to a previous example, but notice how for the font we are setting it to 'Frii.font'?
//this sets the font to the font that the character 'Frii' uses, even though we aren't officially using the 'Frii' character.
'Frii': "Woah, that was a close one!", sound = 'Frii/CloseOne', font = Frii.font, color = Frii.color

//this is just a standard line
"The beast goes in for another attack."

//Notice how we are setting the 'wait' parameter to false? By default it is set to true for sounds.
//When wait it true it will wait for the sound to finish playing before continuing, but in this case it will start playing it and skip straight to the next action

sound 'Sound/slash', wait = false

wait 500 //this will cause a delay of 500 milliseconds before moving on

//whatever is between the <i> and </i> will be italicized
Frii: "Ok, <i>now</i> this is getting personal!", sound = 'Frii/Personal'

//There is a scene after this one, however, because we never told it to go to it this is where our game will end.
#scene victory:
screen 'mainstage'
Frii: "Hah, I knew I would win!"
screen 'Credits' //this will go to our credits screen, and because nothing is after this the game would also end here (if this scene could be reached).

And here is a clean version of it without the comments:

#scene start:
screen 'MainStage'
background 'Backgrounds/Battle1'
music 'Music/Calm'

"The world seemed still, but there was a foul odor in the air. Something was coming."

Frii: "Looks like I'm not alone after all. This should be fun!"

sound 'Sounds/Enemies/Roar'

Frii: "There you are, show me what ya got!", sound = 'Frii/Cocky', font = 'Fonts/Default', color = '255, 0, 0, 255'

'Beast': "Leave, outsider!"

scene 'battle'


#scene battle:
screen 'MainStage'
background 'Backgrounds/Battle2', transition = 'Fade'
music 'Music/Combat'

'Frii': "Woah, that was a close one!", sound = 'Frii/CloseOne', font = Frii.font, color = Frii.color

"The beast goes in for another attack."

sound 'Sound/slash', wait = false

wait 500

Frii: "Ok, <i>now</i> this is getting personal!", sound = 'Frii/Personal'


#scene victory:
screen 'mainstage'
Frii: "Hah, I knew I would win!"

screen 'Credits'

Leave a Reply

Your email address will not be published. Required fields are marked *