Scripting API

Home Scripting API Index

The Language


The NoLimits Roller Coaster Simulation Scripting Language (we internally call it NLVM) is a very basic object oriented programming language, with sharing lots of features of the Java™ programming language, with influences from C# and C++. It was originally designed as a subset of Java™, but there are some noticeable differences. Subset means, it has the same main language features, but not all of them.

Instead of developing a completely new language, we decided to develop a language that shares a lot of similarities with those popular languages, so people with experiences in one of them can start right away. Also since explaining a programming language is a very difficult task, you might want to check out some tutorials from the internet that focus on the languages mentioned above, instead of reading our miserable tries to explain our own language. Since our language is more or less a subset, everything you learn for the other languages (you should focus on learning Java™) can directly be applied to our language.

Here is an incomplete list of features that are different from Java™:

Internal Data Types

bool - Boolean (false or true)
byte - 8 bit signed integer (-128...+127)
short - 16 bit signed integer (-32768...+32767)
int - 32 bit signed integer (-2147483648...+2147483647)
long - 64 bit signed integer (-2^63....+2^63-1)
char - 16 bit unsigned unicode character (e.g. 'a')
float - 32 bit floating point (e.g. 1.234f)
double - 64 bit floating point (e.g. 1.2345678)
Reference - References are pointers/handles to instances of a class (null for undefined reference). All classes extent from the base class nlvm.lang.Object.

Arrays of internal data types can be created. Arrays can be multi-dimensional. An array is a reference type.


An identifier in the programming language is used for variables, class names, pages names and such. It can be made up of specific characters: A-Z, a-z, 0-9, and the underscore '_' are allowed characters for identifiers, it is not allowed to start the identifier with a digit (0-9).

Those are examples of valid identifiers:


Those are examples of not allowed identifiers:

2Test (starts with a digit character)
$Bla (contains a character '$' that is not allowed)
übel (contains a character 'ü' that is not allowed)
My variable (contains a space character, spaces are not allowed)


Keywords are reserved names that cannot be used as identifiers. Each keyword performs a specific function.

abstractUsed to label a class or method to lack the full implementation (similar to interfaces)
breakUsed to exit out of a loop or switch statement
boolInternal data type
charInternal data type
defaultSpecial switch label for default cases
doDo-While loop statement
doubleInternal data type
elseIf/Else statements
extendsUsed for classes that want to inherit from other classes
finalAccess modifier used to label classes, methods, or fields that they cannot be extended, overriden, or changed.
floatInternal data type
forFOR Loop statement
extendsUsed for classes that want to implement an interface class
ifIf/Else statements
importCan be used to shorten full class names, by skipping package names of imported packages
intInternal data type
interfaceUsed to declare a special type of class that has only abstract methods and has no fields
longInternal data type
newUsed to allocate instance of class or array
packageUsed to declare the current package in the first line of a source file
privateAccess modifier used to label methods and fields so that they can be accessed from the owning class only.
protectedAccess modifier used to label methods and fields so that they can be accessed from the owning class and inheriting classes only.
publicAccess modifier used to label classes, methods and fields so that they can be accessed from everywhere.
returnUsed to exit from a method and optionally provide the returned value from a function
shortInternal data type
staticUsed to label a method or field to be accessed without an object instance
switchSwitch statement
voidUsed to represent that a method has no return type
whileWhile and Do-While loop statements

Structure of a Class File

A class file is divided into:
package mypackage;

import com.nolimitscoaster.*;

public class MyClass extends Script


Optional Package Declaration

This is used to declare the package this class is located in, using the keyword package and then comes the full package name. If ommited, the package of the class will be the root package.

Optional Package Declaration

The import section can be used to make use of other classes without using the full class name. In the example above, all classes from the 'com.nolimitscoaster' package are imported. There are multiple classes located in this package. Later on these classes can be used by the class name only, omitting the full class name:

Example: The class 'com.nolimitscoaster.Script' can now be used as 'Script' only inside the class defintion.

Class Definition

The class definition consists of an access modifier (typically public), the class name, an optional extents clause and the class definition block.

Access Modifiers

Access modifiers are used to hide classes, methods or fields from access by other classes. There are several access modifiers (public, protected, private, package private) available. See the Java™ documentation for details about access modifiers.

The Extents Clause

The extends clause is used when the class should be derived from another class. In the example above, the class MyClass is deriving from the com.nolimitscoaster.Script class. When omitted, the class will derive from the base class of all classes which is nlvm.lang.Object.

The Class Definition Block

Inside the block defined by '{' and '}', there can be multiple fields (variables and constants), and methods (functions or procedures) defined.

Java and Oracle are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.