The game features an in-depth programming language that allows you to write and execute software that can manage and manipulate the state of other objects in-game. The name of this programming language is called Pilot.lua, which is a reference to rbx.lua.
The main parts of programming are
- Microcontroller - An object that stores and runs code when triggered by polysilicon and powered.
- Port - Allows the microcontroller to interact with other objects, trigger and configure, etc.
- Screen - A programmable object that can display user interface objects such as TextLabel, ImageLabel, etc.
- Disk - Stores values in a directory-like format.
The code below is code for a smart turret that takes chat commands and targets players accordingly, with the command "target playername"
local Gyro = GetPartFromPort(1, "Gyro") -- Gets gyro attached to port 1
local Microphone = GetPartFromPort(2, "Microphone") -- Gets microphone attached to port 2
local Commanders = { -- List of usernames allowed to use the smart turret
["Robuyasu"] = true;
}
-- Connects to the microphone, adding an event to it that will listen for chat input
Microphone:ConnectToEvent("Chatted", function(Player, Message)
-- This simply makes sure that the player speaking is allowed to run a command
if not Commanders[Player] then return end
if Message:lower():sub(0, 6) == "target" then -- If the message starts with target
local Victim = Message:sub(8) -- Gets the rest of the message
Gyro:Configure({Seek=Victim}) -- Configures the seeker to target that person
end
end)
There are many functions in Pilot.lua that allow you to interact with other objects. These are the following default functions listed.
- GetPort(ID) - Returns a port instance that can be used in other functions.
- GetPartFromPort(ID or Port Instance, ClassName) Returns a part if found directly attached to a port. An example would be GetPartFromPort(2, "Screen")
- TriggerPort(ID or Port Instance)
All objects will contain certain programmable properties and functions. However, all instances will contain the following properties:
- Configurable properties, for example an ionrocket's thrust speed property
- ClassName, which is simply the name of the object
- Object:Trigger(), which simply triggers the object
- Object:Configure({Property=NewValue}), which configures the part to the given dictionary/table
- Object:ConnectToEvent, which is similar to roblox connections (part.Touched:Connect). An example includes TouchTrigger:ConnectToEvent("Touched", function() end)
Certain parts however will have their own special properties.
- Screen
- Screen:CreateElement(GUIClassName, Properties), an example includes Screen:CreateElement("TextLabel", {Text = "Hello World!"; TextScaled = true});
- Screen:ClearElements(), which clears all elements in a gui
Alternatively, a wiki exclusive to Pilot.lua can be found here: https://github.com/iimurpyh/pilot.lua/wiki. You can also visit https://wos.mawesome4ever.com for a list of all the parts, a brief description and their programmable properties/events which are all pulled using a script so there might be a few kinks.
Programmable Parts
There are several parts which have functions and variables exclusive to that part only.