Page tree
Skip to end of metadata
Go to start of metadata

In the HALion Script language, the elements that make up the program, MIDI and note expression events, the definitions of parameters, etc., are all represented by objects. HALion Script provides dedicated functions for modifying these objects. To understand the principles of writing scripts that operate on objects, some terminology from object-oriented programming will be helpful.

Objects and Classes

Object-oriented programming (OOP) is a style of programming based on the concept of objects. In OOP objects are organized in classes. A class provides data fields and methods for an object. The data fields describe what the object is and the methods describe what it can do. A concrete occurance of an object is called an instance. The elements in the Program Tree are instances of different types of objects, for example, Bus objects, Layer objects,  Zone objects, etc. MIDI and note expression events are represented by Event objects and each parameter has a ParameterDefinition object.

On this page:

Class Reference

The classes/objects of the HALion Script language are structured in the following class hierarchy.

HALion Script Class Hierarchy

Classes deeper down inherit the data fields and methods of classes higher up in the class hierarchy. For example, the classes BusInstance, Layer, Effect, and so on, inherit all data fields and methods of the Element class. Subclasses add functionality to their parent class by providing more data fields and methods.

Addressing Objects

The Lua Script MIDI module itself can be addressed with this. Further objects can be addressed with this.parentthis.program or with the get/find functions.

thisReturns the object of the script module itself.MidiModule
this.parentReturns the object of the parent element, which can be a Layer or the Program.Layer or Program
this.programReturns the object of the Program.Program

After addressing an object, you can read its fields through dot-notation. In the following example, the name and the type of different objects are printed with .name and .type

Example 1

-- print the name and type of different objects
print(, this.type)
print(, this.parent.type)
print(, this.program.type)
print(this.program:getChild().name, this.program:getChild().type)

For more information on the available fields, see the description of the classes in the Class Reference.

Calling Methods

To operate on an element in the Program Tree, you must first adress its object and then call the desired method. The basic syntax is as follows:


Example 2

zone = this.parent:getZone() -- get the object of the first Zone after the script module
zone:setName("MyZone") -- setName operates on the Zone object

Using type() on Objects

For the HALion Script language the type() function of Lua has been extended to return the type of an object.

Example 3

-- print the name of all zones in the program
elements = this.program:findChildren(true)
for i, element in ipairs(elements) do
	if type(element) == "Zone" then
  • No labels


  1. in der Class Hierarchy, soll da Program wirklich eingerückt sein?

    1. Ja, weil Program in der Class Hierarchy unter Layer steht. Der Baum wird übrigens automatisch erzeugt. Stimmt also so (wink)