Skip to content

Instantly share code, notes, and snippets.

@cheapie
Created March 13, 2026 20:49
Show Gist options
  • Select an option

  • Save cheapie/a6eab5de684b832081e73b53d2663f35 to your computer and use it in GitHub Desktop.

Select an option

Save cheapie/a6eab5de684b832081e73b53d2663f35 to your computer and use it in GitHub Desktop.
--BÜSTRA-Anlage
--A product of Advanced Mesecons Devices, a Cheapie Systems company
--This is free and unencumbered software released into the public domain.
--See http://unlicense.org/ for more information
if event.type == "program" then
mem.state = "allred1"
mem.train = false
mem.obstructed = false
mem.waitingforobstruction = false
mem.monitoringon = false
digiline_send("roadmain","RED")
digiline_send("roadside","RED")
digiline_send("rrsignal1","OFF")
digiline_send("rrsignal2","OFF")
digiline_send("rrsignal3","OFF")
digiline_send("monitoring","OFF")
digiline_send("bell","off")
digiline_send("entrygate","up")
digiline_send("exitgate","up")
interrupt(3,"mainredyellow")
local dataoff = "zN3czN3czN3ct0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7AIM7AIM7AIM7AIM7AIM7AIM7AIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLt0SLt0SLt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLO5kTO5kTt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLO5kTO5kTO5kTO5kTt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLO5kTO5kTO5kTO5kTt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLO5kTO5kTt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLt0SLt0SLt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLAIM7AIM7t0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLAIM7AIM7AIM7AIM7t0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLAIM7AIM7AIM7AIM7t0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLAIM7AIM7t0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLt0SLt0SLt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7AIM7AIM7AIM7AIM7AIM7AIM7AIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLzN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3c"
local dataon = "zN3czN3czN3ct0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7AIM7AIM7AIM7AIM7AIM7AIM7AIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLt0SLt0SLt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SL////////t0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SL////////////////t0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SL////////////////t0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SL////////t0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLt0SLt0SLt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLAIM7AIM7t0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLAIM7AIM7AIM7AIM7t0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLAIM7AIM7AIM7AIM7t0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLAIM7AIM7t0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7t0SLt0SLt0SLt0SLt0SLt0SLAIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLAIM7AIM7AIM7AIM7AIM7AIM7AIM7AIM7t0SLzN3czN3czN3czN3czN3czN3ct0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLt0SLzN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3czN3c"
digiline_send("gpu",{
{command="createbuffer",buffer=0,xsize=16,ysize=16},
{command="loadpacked",buffer=0,x=1,y=1,xsize=16,ysize=16,data=dataoff},
{command="createbuffer",buffer=1,xsize=16,ysize=16},
{command="loadpacked",buffer=1,x=1,y=1,xsize=16,ysize=16,data=dataon},
{command="send",buffer=0,channel="screen"},
})
elseif event.channel == "raildetect" then
if not mem.train then
if mem.state == "mainredyellow" then
mem.state = "trainmainredyellow"
digiline_send("rrsignal1","RED")
digiline_send("rrsignal2","YELLOW")
digiline_send("rrsignal3","RED")
digiline_send("bell","on")
interrupt(3,"rrsignalred")
interrupt(1.5,"trainmaingreen")
elseif mem.state == "mainmingreen" or mem.state == "idle" then
mem.state = "trainmaingreen"
digiline_send("rrsignal1","RED")
digiline_send("rrsignal2","YELLOW")
digiline_send("rrsignal3","YELLOW")
digiline_send("bell","on")
interrupt(3,"rrsignalred")
interrupt(5,"gate1")
elseif mem.state == "mainyellow" then
mem.state = "trainmaingreen"
digiline_send("roadmain","GREEN")
digiline_send("rrsignal1","RED")
digiline_send("rrsignal2","YELLOW")
digiline_send("rrsignal3","YELLOW")
digiline_send("bell","on")
interrupt(3,"rrsignalred")
interrupt(5,"gate1")
elseif mem.state == "allred1" or mem.state == "allred2" then
mem.state = "trainmainredyellow"
digiline_send("roadmain","REDYELLOW")
digiline_send("rrsignal1","RED")
digiline_send("rrsignal2","YELLOW")
digiline_send("rrsignal3","RED")
digiline_send("bell","on")
interrupt(1.5,"trainmaingreen")
interrupt(3,"rrsignalred")
elseif mem.state == "sideredyellow" then
mem.state = "trainallred"
digiline_send("roadside","RED")
digiline_send("rrsignal1","RED")
digiline_send("rrsignal2","YELLOW")
digiline_send("rrsignal3","RED")
digiline_send("bell","on")
interrupt(1,"trainmainredyellow")
interrupt(3,"rrsignalred")
elseif mem.state == "sidegreen" or mem.state == "sideyellow" then
mem.state = "trainsideyellow"
digiline_send("roadside","YELLOW")
digiline_send("rrsignal1","YELLOW")
digiline_send("rrsignal2","YELLOW")
digiline_send("rrsignal3","RED")
digiline_send("bell","on")
interrupt(3,"trainsidered")
interrupt(3,"rrsignalred")
end
end
mem.train = true
interrupt(35,"traingone")
elseif event.iid == "traingone" then
mem.train = false
mem.state = "idle"
digiline_send("bell","off")
digiline_send("entrygate","up")
digiline_send("exitgate","up")
mem.monitoringon = false
mem.waitingforobstruction = false
interrupt(1.5,"rrsignaloff")
elseif event.iid == "rrsignaloff" then
digiline_send("rrsignal1","OFF")
digiline_send("rrsignal2","OFF")
digiline_send("rrsignal3","OFF")
elseif event.channel == "obstacle" then
mem.obstructed = true
interrupt(3,"obstructionclear")
elseif event.iid == "obstructionclear" then
mem.obstructed = false
if mem.waitingforobstruction then
digiline_send("exitgate","down")
interrupt(4,"stopbell")
end
mem.waitingforobstruction = false
elseif event.iid == "monitoringon" and mem.monitoringon then
digiline_send("gpu",{command="send",buffer=1,channel="screen"})
interrupt(0.4,"monitoringoff")
elseif event.iid == "monitoringoff" then
digiline_send("gpu",{command="send",buffer=0,channel="screen"})
if mem.monitoringon then interrupt(0.6,"monitoringon") end
end
if mem.train then
if event.iid == "rrsignalred" then
digiline_send("rrsignal1","RED")
digiline_send("rrsignal2","RED")
digiline_send("rrsignal3","RED")
elseif event.iid == "gate1" then
digiline_send("entrygate","down")
interrupt(4,"gate2")
elseif event.iid == "gate2" then
if mem.obstructed then
mem.waitingforobstruction = true
else
digiline_send("exitgate","down")
interrupt(4,"stopbell")
end
elseif event.iid == "stopbell" then
digiline_send("bell","off")
mem.monitoringon = true
interrupt(0,"monitoringon")
elseif mem.state == "trainmainredyellow" and event.iid == "trainmaingreen" then
digiline_send("roadmain","GREEN")
interrupt(5,"gate1")
elseif mem.state == "trainallred" and event.iid == "trainmainredyellow" then
digiline_send("roadmain","REDYELLOW")
mem.state = "trainmainredyellow"
interrupt(1.5,"trainmaingreen")
elseif mem.state == "trainsideyellow" and event.iid == "trainsidered" then
mem.state = "trainallred"
digiline_send("roadside","RED")
interrupt(1,"trainmainredyellow")
end
else
if event.iid == "mainredyellow" and mem.state == "allred1" then
mem.state = "mainredyellow"
digiline_send("roadmain","REDYELLOW")
interrupt(1.5,"maingreen")
elseif event.iid == "maingreen" and mem.state == "mainredyellow" then
mem.state = "mainmingreen"
digiline_send("roadmain","GREEN")
interrupt(15,"idle")
elseif event.iid == "idle" and mem.state == "mainmingreen" then
mem.state = "idle"
elseif event.channel == "roaddetect" and mem.state == "idle" then
mem.state = "mainyellow"
digiline_send("roadmain","YELLOW")
interrupt(4,"mainred")
elseif event.iid == "mainred" and mem.state == "mainyellow" then
mem.state = "allred2"
digiline_send("roadmain","RED")
interrupt(1,"sideredyellow")
elseif event.iid == "sideredyellow" and mem.state == "allred2" then
mem.state = "sideredyellow"
digiline_send("roadside","REDYELLOW")
interrupt(1.5,"sidegreen")
elseif event.iid == "sidegreen" and mem.state == "sideredyellow" then
mem.state = "sidegreen"
digiline_send("roadside","GREEN")
interrupt(10,"sideyellow")
elseif event.iid == "sideyellow" and mem.state == "sidegreen" then
mem.state = "sideyellow"
digiline_send("roadside","YELLOW")
interrupt(3,"sidered")
elseif event.iid == "sidered" and mem.state == "sideyellow" then
mem.state = "allred1"
digiline_send("roadside","RED")
interrupt(1,"mainredyellow")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment