User Tools

Site Tools


Minetest Forum
Content Database
Git Repository
Bug Tracker


Environment-Based Train Information System


After the Digilines Train Information System system was used, a server admin thought it would be nicer to not have ugly blue wires all over the place, so decided to wirelessly transmit signals instead.

The environment system uses the S table to convey information, which is then formatted locally.

It calculates distance based on Co-ordinates.


Here, the code uses two seperate scripts. This makes the code a lot more bother to setup, but at least it is less bother then using Digilines.


The LuaATC tracks wait for a train to run over them, and check if the distance of the train is less then the previous train (this prevents later trains being registered earlier)

The track extracts information, such as the LuaController's distance from an arbitrary point in the station,the length of the train, or the line.


The display refreshes every 2 seconds, putting the information with values from the table onto the board. If the information changes, then within 2 seconds the board changes.

The skippingrc is set to the standard on 56i-mtserver, where C stands for “Chronic Skipper”, which is a train stoppage class where trains only stop at select interchanges.


LuaATC tracks

placeTrack = POS(0,0,0) -- Co-ordinates for the track you are working on
placeStation = POS(0,0,0) -- Co-ordinates for a track of your choice in the station
distance = math.sqrt((placeTrack.x-placeStation.x)^2+(placeTrack.y-placeStation.y)^2+(placeTrack.z-placeStation.z)^2) -- Comment this out if using a different distance calculation and have a raw number
-- distance = xx -- Uncomment this and fill in your number in place of xx if you have a raw number
if event.type == "train" then
    if distance < F.tbl.distance then -- Show information for closer trains before further trains
        F.tbl = {
            distance = distance,
            length = train_length(), 
            line = get_line(), 
            rc = get_rc(), 


channel = "p1" -- Channel of displays for specific platform. Allows station-wide digline systems.
platform = "" -- Platform number
services = "" -- Services for the platform in line names (maybe "IPR, NX2" for Re platform 1 on 56i-mtserver).
skippingrc = "C" -- Put in the RC which means the train skips
interrupt(2) -- Set in environment code.
{distance = distance, length = length, line = line, rc = rc, skipping = skipping}
Table format for info
Platform 3 - EW services
30 m Away, 6 cars
EW line, RC By
Stopping here
Information shown
if F.tbl.rc == skippingrc then
    stopping = "Skipping Station. Stand back"
    stopping = "Stopping Here."
info = "Platform " .. platform .. " - " .. services .. " services" .. "\n" .. F.tbl.distance .. " m away, " .. F.tbl.length .. " cars" .. "\n" .. F.tbl.line .. " line, " .. F.tbl.rc .. "\n" .. stopping
digiline_send(channel, info)
usage/atlatc/examples/tis/environment.txt · Last modified: 2022-06-28 12:09 by 56independent