summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Crossroads/init_code.lua47
-rw-r--r--Crossroads/nodes/(1377,10,1353).lua1
-rw-r--r--Crossroads/nodes/(1384,26,775).lua1
-rw-r--r--Crossroads/nodes/(1703,10,781).lua1
-rw-r--r--Crossroads/nodes/(1709,10,781).lua1
-rw-r--r--Crossroads/nodes/(1717,10,781).lua1
-rw-r--r--Crossroads/nodes/(1723,10,790).lua1
-rw-r--r--Crossroads/nodes/(1747,26,1024).lua1
-rw-r--r--Crossroads/nodes/(1768,10,598).lua2
-rw-r--r--Crossroads/nodes/(1768,10,706).lua2
-rw-r--r--Crossroads/nodes/(1768,10,760).lua2
-rw-r--r--Crossroads/nodes/(1769,10,652).lua2
-rw-r--r--Crossroads/nodes/(1791,-6,1007).lua1
-rw-r--r--Crossroads/nodes/(1791,-6,1010).lua1
-rw-r--r--Crossroads/nodes/(2057,-108,1012).lua1
-rw-r--r--auto_yards/init_code.lua132
-rw-r--r--auto_yards/nodes/(-1908,16,835).lua1
-rw-r--r--auto_yards/nodes/(-1910,16,837).lua1
-rw-r--r--auto_yards/nodes/(-1912,16,839).lua1
-rw-r--r--auto_yards/nodes/(-1925,16,833).lua1
-rw-r--r--auto_yards/nodes/(-1928,16,834).lua1
-rw-r--r--auto_yards/nodes/(-1933,16,806).lua1
-rw-r--r--auto_yards/nodes/(-1933,16,833).lua1
-rw-r--r--auto_yards/nodes/(-1936,16,834).lua1
-rw-r--r--auto_yards/nodes/(-1946,16,801).lua1
-rw-r--r--auto_yards/nodes/(-1947,16,837).lua2
-rw-r--r--auto_yards/nodes/(-1954,16,797).lua1
-rw-r--r--auto_yards/nodes/(-1957,3,-1059).lua1
-rw-r--r--auto_yards/nodes/(-1958,16,808).lua1
-rw-r--r--auto_yards/nodes/(-1959,16,811).lua1
-rw-r--r--auto_yards/nodes/(-1965,16,793).lua1
-rw-r--r--auto_yards/nodes/(-1966,16,796).lua1
-rw-r--r--auto_yards/nodes/(-1976,16,782).lua1
-rw-r--r--auto_yards/nodes/(-1982,17,780).lua51
-rw-r--r--auto_yards/nodes/(-2004,2,-1101).lua18
-rw-r--r--auto_yards/nodes/(-2029,19,733).lua10
-rw-r--r--auto_yards/nodes/(-2030,3,-1091).lua1
-rw-r--r--auto_yards/nodes/(-2038,20,730).lua6
-rw-r--r--auto_yards/nodes/(-4023,12,-2660).lua16
-rw-r--r--auto_yards/nodes/(-513,26,2455).lua2
-rw-r--r--auto_yards/nodes/(-522,26,2469).lua2
-rw-r--r--auto_yards/nodes/(-528,26,2475).lua2
-rw-r--r--auto_yards/nodes/(-574,26,2469).lua2
-rw-r--r--auto_yards/nodes/(-575,26,2465).lua2
-rw-r--r--auto_yards/nodes/(-594,26,2485).lua28
-rw-r--r--auto_yards/nodes/(-604,26,2469).lua1
-rw-r--r--auto_yards/nodes/(-614,26,2469).lua1
-rw-r--r--auto_yards/nodes/(-623,26,2469).lua2
-rw-r--r--auto_yards/nodes/(-623,26,2472).lua2
-rw-r--r--auto_yards/nodes/(-623,26,2475).lua2
-rw-r--r--auto_yards/nodes/(-630,26,2454).lua73
-rw-r--r--auto_yards/nodes/(-633,26,2456).lua4
-rw-r--r--auto_yards/nodes/(-643,26,2475).lua83
-rw-r--r--auto_yards/nodes/(-668,20,2478).lua3
-rw-r--r--auto_yards/nodes/(1178,16,3851).lua11
-rw-r--r--auto_yards/nodes/(417,17,4).lua62
-rw-r--r--auto_yards/nodes/(417,18,4).lua3
-rw-r--r--durt/nodes/(-1373,10,-2507).lua6
-rw-r--r--durt/nodes/(-1433,11,-2563).lua25
-rw-r--r--durt/nodes/(-1442,11,-2568).lua17
-rw-r--r--durt/nodes/(-1444,11,-2546).lua24
-rw-r--r--durt/nodes/(-1446,11,-2568).lua7
-rw-r--r--durt/nodes/(-1457,11,-2573).lua35
-rw-r--r--durt/nodes/(-1468,11,-2561).lua5
-rw-r--r--durt/nodes/(-1515,7,-2621).lua5
-rw-r--r--durt/nodes/(-1515,7,-2625).lua22
-rw-r--r--durt/nodes/(-2120,21,869).lua5
-rw-r--r--durt/nodes/(-2141,21,865).lua3
-rw-r--r--durt/nodes/(-4129,13,-5726).lua1
-rw-r--r--durt/nodes/(-4224,18,-5973).lua11
-rw-r--r--durt/nodes/(-4224,18,-5985).lua41
-rw-r--r--durt/nodes/(-4227,18,-5926).lua41
-rw-r--r--durt/nodes/(-4227,18,-5936).lua7
-rw-r--r--durt/nodes/(1906,7,9136).lua2
-rw-r--r--durt/nodes/(1907,0,9142).lua5
-rw-r--r--durt/nodes/(1907,8,9129).lua3
-rw-r--r--durt/nodes/(1949,7,9112).lua2
-rw-r--r--ers/init_code.lua640
-rw-r--r--ers/nodes/(-3693,11,-3604).lua14
-rw-r--r--ers/nodes/(-3693,11,-3608).lua14
-rw-r--r--ers/nodes/(1595,-14,1496).lua13
-rw-r--r--ers/nodes/(1605,14,1414).lua12
-rw-r--r--ers/nodes/(1608,14,1414).lua12
-rw-r--r--ers/nodes/(1636,4,1331).lua12
-rw-r--r--ers/nodes/(1656,2,1271).lua4
-rw-r--r--ers/nodes/(1656,2,1279).lua4
-rw-r--r--ers/nodes/(1656,2,1282).lua4
-rw-r--r--ers/nodes/(1656,2,1285).lua4
-rw-r--r--ers/nodes/(1656,2,1294).lua4
-rw-r--r--ers/nodes/(1656,2,1297).lua4
-rw-r--r--ers/nodes/(1656,2,1300).lua4
-rw-r--r--ers/nodes/(1656,2,1308).lua14
-rw-r--r--ers/nodes/(1657,6,1237).lua2
-rw-r--r--ers/nodes/(1658,1,1238).lua40
-rw-r--r--ers/nodes/(1658,2,1304).lua4
-rw-r--r--ers/nodes/(1658,6,1237).lua13
-rw-r--r--ers/nodes/(1661,2,1273).lua4
-rw-r--r--ers/nodes/(1670,-3,1499).lua12
-rw-r--r--ers/nodes/(1670,2,1244).lua14
-rw-r--r--ers/nodes/(1670,2,1247).lua14
-rw-r--r--ers/nodes/(1670,2,1250).lua14
-rw-r--r--ers/nodes/(1670,2,1253).lua14
-rw-r--r--ers/nodes/(1670,2,1256).lua14
-rw-r--r--ers/nodes/(1670,2,1262).lua14
-rw-r--r--ers/nodes/(1682,-14,1402).lua12
-rw-r--r--ers/nodes/(1693,2,1270).lua4
-rw-r--r--ers/nodes/(1694,2,1300).lua4
-rw-r--r--ers/nodes/(1695,2,1273).lua4
-rw-r--r--ers/nodes/(1695,2,1297).lua4
-rw-r--r--ers/nodes/(1699,2,1262).lua14
-rw-r--r--ers/nodes/(1699,2,1276).lua4
-rw-r--r--ers/nodes/(1699,2,1279).lua4
-rw-r--r--ers/nodes/(1700,2,1244).lua14
-rw-r--r--ers/nodes/(1700,2,1247).lua14
-rw-r--r--ers/nodes/(1700,2,1250).lua14
-rw-r--r--ers/nodes/(1700,2,1253).lua14
-rw-r--r--ers/nodes/(1700,2,1259).lua14
-rw-r--r--ers/nodes/(1700,2,1282).lua4
-rw-r--r--ers/nodes/(1700,2,1285).lua4
-rw-r--r--ers/nodes/(1700,2,1288).lua4
-rw-r--r--ers/nodes/(1700,2,1291).lua4
-rw-r--r--ers/nodes/(1700,2,1304).lua4
-rw-r--r--ers/nodes/(1701,2,1256).lua14
-rw-r--r--ers/nodes/(1702,2,1269).lua8
-rw-r--r--ers/nodes/(1702,2,1270).lua6
-rw-r--r--ers/nodes/(1704,2,1269).lua6
-rw-r--r--ers/nodes/(1747,-14,1440).lua12
-rw-r--r--ers/nodes/(1750,-14,1449).lua12
-rw-r--r--ers/nodes/(1929,3,7928).lua1
-rw-r--r--ers/nodes/(1932,3,7927).lua1
-rw-r--r--ers/nodes/(1935,3,7924).lua1
-rw-r--r--ers/nodes/(1938,3,7921).lua1
-rw-r--r--ers/nodes/(1944,3,7915).lua1
-rw-r--r--ers/nodes/(1947,3,7912).lua1
-rw-r--r--ers/nodes/(1950,3,7909).lua1
-rw-r--r--ers/nodes/(1986,2,1743).lua14
-rw-r--r--ers/nodes/(1986,2,1759).lua13
-rw-r--r--ers/nodes/(1991,2,1794).lua28
-rw-r--r--ers/nodes/(1993,2,1743).lua14
-rw-r--r--ers/nodes/(1993,2,1759).lua13
-rw-r--r--ers/nodes/(2001,2,1759).lua13
-rw-r--r--ers/nodes/(2016,2,1743).lua14
-rw-r--r--ers/nodes/(2016,2,1759).lua13
-rw-r--r--ers_mtn/init_code.lua39
-rw-r--r--ers_mtn/nodes/(1779,10,1235).lua91
-rw-r--r--ers_mtn/nodes/(1787,3,1264).lua16
-rw-r--r--ers_mtn/nodes/(1793,3,1264).lua16
-rw-r--r--ers_mtn/nodes/(1793,3,1280).lua8
-rw-r--r--ers_mtn/nodes/(1820,15,1223).lua3
-rw-r--r--ers_mtn/nodes/(1878,119,1237).lua4
-rw-r--r--ers_mtn/nodes/(1896,137,1246).lua6
-rw-r--r--il_timetable/init_code.lua12
-rw-r--r--il_timetable/nodes/(-109,17,680).lua5
-rw-r--r--il_timetable/nodes/(-1109,5,-2096).lua4
-rw-r--r--il_timetable/nodes/(-1112,5,-2124).lua4
-rw-r--r--il_timetable/nodes/(-1112,5,-3275).lua4
-rw-r--r--il_timetable/nodes/(-1210,9,-3870).lua4
-rw-r--r--il_timetable/nodes/(-1229,9,-3874).lua4
-rw-r--r--il_timetable/nodes/(-1731,7,-4402).lua10
-rw-r--r--il_timetable/nodes/(-1929,15,-4581).lua13
-rw-r--r--il_timetable/nodes/(-1934,13,-4577).lua16
-rw-r--r--il_timetable/nodes/(-1937,21,-4581).lua12
-rw-r--r--il_timetable/nodes/(-435,23,377).lua5
-rw-r--r--il_timetable/nodes/(-441,23,384).lua5
-rw-r--r--il_timetable/nodes/(-524,23,-215).lua5
-rw-r--r--il_timetable/nodes/(-524,23,-58).lua5
-rw-r--r--il_timetable/nodes/(-524,23,82).lua5
-rw-r--r--il_timetable/nodes/(-527,23,-228).lua1
-rw-r--r--il_timetable/nodes/(-617,14,-411).lua15
-rw-r--r--il_timetable/nodes/(-643,15,-424).lua4
-rw-r--r--il_timetable/nodes/(-966,5,-756).lua4
-rw-r--r--il_timetable/nodes/(-993,5,-753).lua4
-rw-r--r--il_timetable/nodes/(1017,8,1011).lua4
-rw-r--r--il_timetable/nodes/(1020,11,1021).lua2
-rw-r--r--il_timetable/nodes/(1222,3,1011).lua5
-rw-r--r--il_timetable/nodes/(144,11,892).lua5
-rw-r--r--il_timetable/nodes/(152,11,892).lua5
-rw-r--r--il_timetable/nodes/(1543,21,2653).lua4
-rw-r--r--il_timetable/nodes/(1722,30,2937).lua9
-rw-r--r--il_timetable/nodes/(1734,26,2922).lua2
-rw-r--r--il_timetable/nodes/(197,14,1011).lua5
-rw-r--r--il_timetable/nodes/(670,14,1011).lua5
-rw-r--r--il_timetable/nodes/(960,14,1063).lua4
-rw-r--r--il_timetable/nodes/(964,16,1067).lua8
-rw-r--r--il_timetable/nodes/(981,15,1041).lua2
-rw-r--r--il_timetable/nodes/(983,21,1053).lua5
-rw-r--r--subway/nodes/(123,13,-12).lua4
-rw-r--r--subway/nodes/(2644,15,4349).lua0
188 files changed, 2377 insertions, 130 deletions
diff --git a/Crossroads/init_code.lua b/Crossroads/init_code.lua
index d1333fc..692f0c5 100644
--- a/Crossroads/init_code.lua
+++ b/Crossroads/init_code.lua
@@ -177,7 +177,13 @@ function F.stn2gen(stn, trk, door, ret, chout, depspeed)
t[i][6] = t[i][6] and (t[i][6]+timenow-t[i][5]+30)/2 or (timenow-t[i][5])
t[i][5] = timenow
atc_set_text_inside(intext)
- if chout then atc_set_text_outside(outtext) end
+ if chout then
+ if type(chout) == "string" then
+ atc_set_text_outside(chout)
+ else
+ atc_set_text_outside(outtext)
+ end
+ end
S.trains[atc_id] = {
v = 2,
l = (get_line() or ""),
@@ -328,11 +334,13 @@ F.stnlist = {
crch = "Crossroads City Hall",
crchs = "City Hall South",
crmtrail = "Mountain Railway Terminus",
+ crshelter1 = "Shelter I",
+ crsfterm = "South Forest St. Terminal",
crsmacker = "Smacker's Station",
- crwm = "CR West Mountains",
- elchateau = "Erstaziland-Chateau d'Erstazi",
- elgp = "Erstaziland-Greener Pastures",
- elsf = "Erstaziland-Salt Factory",
+ crwm = "West Mountains",
+ elchateau = "Chateau d'Erstazi",
+ elgp = "Greener Pastures",
+ elsf = "Salt Factory",
evo = "EVO",
grsc = "Grassy Scarp",
mushroom = "Mushroom Land",
@@ -387,8 +395,8 @@ F.lines = {
name = "ATL-Z", short = "ATL-Z",
ring = false,
interval = 480,
- [1] = { {"Bts","3"}, {"evo","N/A"}, {"scs","N1"}, {"scc","N1"}, {"scn","N1"}, {"oc","N"}, {"elgp","N"}, {"elsf","E"}, {"elchateau","S"} },
- [2] = { {"elchateau","S"}, {"elsf","W"}, {"elgp","S"}, {"oc","S"}, {"scn","S1"}, {"scc", "S1"}, {"scs","S1"}, {"evo","N/A"}, {"Bts","3"}, },
+ [1] = { {"Bts","3"}, {"evo","N/A"}, {"scs","N1"}, {"scc","N1"}, {"scn","N1"}, {"oc","K1"}, --[[{"elgp","N"}, {"elsf","E"}, {"elchateau","S"}]] },
+ [2] = { --[[{"elchateau","S"}, {"elsf","W"}, {"elgp","S"},]] {"oc","K1"}, {"scn","S1"}, {"scc", "S1"}, {"scs","S1"}, {"evo","N/A"}, {"Bts","3"}, },
},
["CRT1"] = {
name = "1",
@@ -396,6 +404,28 @@ F.lines = {
[1] = { {"crsmacker", "R3"}, --[[{"crch", "U1"},]] {"crchs", "W"}, {"cras", "N"} },
[2] = { {"cras", "N"}, {"crchs", "E"}, --[[{"crch", "U2"},]] {"crsmacker", "R3"} },
},
+ ["CRT4"] = {
+ name = "4",
+ ring = false,
+ rtt = 120,
+ interval = 60,
+ [1] = { {"crch", "11", 0}, {"crsfterm", "1N", 0}, },
+ [2] = { {"crsfterm", "1N", 0}, {"crch", "11", 0}, },
+ },
+ ["CRT12"] = {
+ name = "12",
+ ring = false,
+ [1] = {{"crch", "M"}, {"crwm", "3"}},
+ [2] = {{"crwm", "3"}, {"crch", "M"}},
+ },
+ ["CRT21"] = {
+ name = "21",
+ ring = false,
+ rtt = 120,
+ interval = 120,
+ [1] = { {"crch", "12", 15}, {"crshelter1", "T", 75}, },
+ [2] = { {"crshelter1", "T", 75}, {"crch", "12", 15}, },
+ },
["NRG1"] = {
name = "1",
ring = "counterclockwise",
@@ -425,12 +455,15 @@ end
for k, v in pairs{["A"] = {5}, ["B"]={6}, ["C"]={7}, ["D"]={8}} do
local t = {}
local u = {}
+ local phase = ((v[1]-5)%2)*15
+ t[1] = {"crsfterm", (v[1]-4).."S", phase}
for i = 1, 5, 2 do
t[#t+1] = {string.format("crs_%d_%d",v[1],i), "E", 0}
end
for i = 5, 1, -2 do
u[#u+1] = {string.format("crs_%d_%d",v[1],i), "W", 0}
end
+ u[#u+1] = {"crsfterm", (v[1]-4).."S", phase}
F.lines["CRT3"..k] = {
name = "3"..k, ring = false, rtt = 30, interval = 30,
[1] = t, [2] = u,
diff --git a/Crossroads/nodes/(1377,10,1353).lua b/Crossroads/nodes/(1377,10,1353).lua
new file mode 100644
index 0000000..863d61c
--- /dev/null
+++ b/Crossroads/nodes/(1377,10,1353).lua
@@ -0,0 +1 @@
+F.stn2gen("oc", "K1", "L", true, "ATL Zinc Line") \ No newline at end of file
diff --git a/Crossroads/nodes/(1384,26,775).lua b/Crossroads/nodes/(1384,26,775).lua
new file mode 100644
index 0000000..ad10463
--- /dev/null
+++ b/Crossroads/nodes/(1384,26,775).lua
@@ -0,0 +1 @@
+F.stn2gen("crwm", "3", "L", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1703,10,781).lua b/Crossroads/nodes/(1703,10,781).lua
new file mode 100644
index 0000000..1bb93e8
--- /dev/null
+++ b/Crossroads/nodes/(1703,10,781).lua
@@ -0,0 +1 @@
+F.stn2gen("crsfterm", "4S", "L", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1709,10,781).lua b/Crossroads/nodes/(1709,10,781).lua
new file mode 100644
index 0000000..b7b00f7
--- /dev/null
+++ b/Crossroads/nodes/(1709,10,781).lua
@@ -0,0 +1 @@
+F.stn2gen("crsfterm", "3S", "R", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1717,10,781).lua b/Crossroads/nodes/(1717,10,781).lua
new file mode 100644
index 0000000..723ad70
--- /dev/null
+++ b/Crossroads/nodes/(1717,10,781).lua
@@ -0,0 +1 @@
+F.stn2gen("crsfterm", "2S", "L", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1723,10,790).lua b/Crossroads/nodes/(1723,10,790).lua
new file mode 100644
index 0000000..10cf496
--- /dev/null
+++ b/Crossroads/nodes/(1723,10,790).lua
@@ -0,0 +1 @@
+F.stn2gen("crsfterm", "1N", "L", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1747,26,1024).lua b/Crossroads/nodes/(1747,26,1024).lua
new file mode 100644
index 0000000..51c35fb
--- /dev/null
+++ b/Crossroads/nodes/(1747,26,1024).lua
@@ -0,0 +1 @@
+F.stn2gen("crch", "M", "R", false, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1768,10,598).lua b/Crossroads/nodes/(1768,10,598).lua
index 197c740..0c03cf2 100644
--- a/Crossroads/nodes/(1768,10,598).lua
+++ b/Crossroads/nodes/(1768,10,598).lua
@@ -1 +1 @@
-F.stn2gen("crs_8_1","E","R",true,true) \ No newline at end of file
+F.stn2gen("crs_8_1","W","R") \ No newline at end of file
diff --git a/Crossroads/nodes/(1768,10,706).lua b/Crossroads/nodes/(1768,10,706).lua
index 2431bec..466bda0 100644
--- a/Crossroads/nodes/(1768,10,706).lua
+++ b/Crossroads/nodes/(1768,10,706).lua
@@ -1 +1 @@
-F.stn2gen("crs_6_1","E","R",true,true) \ No newline at end of file
+F.stn2gen("crs_6_1","W","R") \ No newline at end of file
diff --git a/Crossroads/nodes/(1768,10,760).lua b/Crossroads/nodes/(1768,10,760).lua
index 16c9e6e..19278e8 100644
--- a/Crossroads/nodes/(1768,10,760).lua
+++ b/Crossroads/nodes/(1768,10,760).lua
@@ -1 +1 @@
-F.stn2gen("crs_5_1","E","R",true,true) \ No newline at end of file
+F.stn2gen("crs_5_1","W","R") \ No newline at end of file
diff --git a/Crossroads/nodes/(1769,10,652).lua b/Crossroads/nodes/(1769,10,652).lua
index fe1521a..4f300b4 100644
--- a/Crossroads/nodes/(1769,10,652).lua
+++ b/Crossroads/nodes/(1769,10,652).lua
@@ -1 +1 @@
-F.stn2gen("crs_7_1","E","R",true,true) \ No newline at end of file
+F.stn2gen("crs_7_1","W","R") \ No newline at end of file
diff --git a/Crossroads/nodes/(1791,-6,1007).lua b/Crossroads/nodes/(1791,-6,1007).lua
new file mode 100644
index 0000000..6c812ee
--- /dev/null
+++ b/Crossroads/nodes/(1791,-6,1007).lua
@@ -0,0 +1 @@
+F.stn2gen("crch", "11", "L", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(1791,-6,1010).lua b/Crossroads/nodes/(1791,-6,1010).lua
new file mode 100644
index 0000000..9be00df
--- /dev/null
+++ b/Crossroads/nodes/(1791,-6,1010).lua
@@ -0,0 +1 @@
+F.stn2gen("crch", "12", "R", true, true) \ No newline at end of file
diff --git a/Crossroads/nodes/(2057,-108,1012).lua b/Crossroads/nodes/(2057,-108,1012).lua
new file mode 100644
index 0000000..7f2263c
--- /dev/null
+++ b/Crossroads/nodes/(2057,-108,1012).lua
@@ -0,0 +1 @@
+F.stn2gen("crshelter1", "T", "R", true, true) \ No newline at end of file
diff --git a/auto_yards/init_code.lua b/auto_yards/init_code.lua
index 92b69bd..0a4312c 100644
--- a/auto_yards/init_code.lua
+++ b/auto_yards/init_code.lua
@@ -4,39 +4,79 @@
if event.init then
S.yards = {
--[[ yard info template
- yard_id = {
+ yard_id = {
+ yard_name = string,
active_indicator_pos = POS(),
dir_indicator_pos = POS(),
error_indicator_pos = POS(),
headshunt_max = number,
notify = empty table,
notify_pos = pos,
+
+ -- reserved vars --
+ last_id = string (the id of the last train that entered the yard last)
+ arrival_length = number
+ arrival_time = string (RWT)
+ departure_length = number or "?" (set when train arrives, until train departs)
+ departure_time = string (RWT)
+ rts = bool (whether the entering train will exit the way it came in)
},
]]--
TY = {
+ yard_name = "Trisiston",
active_indicator_pos = POS(-4025,14,-2659),
dir_indicator_pos = POS(-4025,12,-2665),
error_indicator_pos = POS(-4025,13,-2671),
headshunt_max = 5,
-
+ notify = {},
+ notify_pos = POS(-4023,12,-2660),
+ arrival_time = rwt.now(),
+ departure_time = rwt.now()
},
BY = {
+ yard_name = "Banach",
active_indicator_pos = POS(-2002,3,-1099),
dir_indicator_pos = POS(-2009,3,-1101),
error_indicator_pos = POS(-1999,3,-1099),
headshunt_max = 5,
notify = {},
- notify_pos = POS(-2004,2,-1101)
+ notify_pos = POS(-2004,2,-1101),
+ arrival_time = rwt.now(),
+ departure_time = rwt.now()
+ },
+ ARC = {
+ yard_name = "Arcadius",
+ active_indicator_pos = POS(-1952,16,840),
+ dir_indicator_pos = POS(-1950,16,840),
+ error_indicator_pos = POS(-1948,16,840),
+ headshunt_max = 5,
+ notify = {},
+ notify_pos = POS(-1946,16,840),
+ arrival_time = rwt.now(),
+ departure_time = rwt.now()
},
IP = {
+ yard_name = "Ipswich",
active_indicator_pos = POS(1179,16,3848),
dir_indicator_pos = POS(1177,16,3855),
error_indicator_pos = POS(1179,16,3850),
headshunt_max = 5,
notify = {},
- notify_pos = POS(1178,16,3851)
-
+ notify_pos = POS(1178,16,3851),
+ arrival_time = rwt.now(),
+ departure_time = rwt.now()
},
+ CAN = {
+ yard_name = "Cannery",
+ active_indicator_pos = POS(-594,26,2486),
+ dir_indicator_pos = POS(-594,26,2484),
+ error_indicator_pos = POS(-594,26,2482),
+ headshunt_max = 2,
+ --notify = {},
+ --notify_pos = POS(-594,26,2485),
+ arrival_time = rwt.now(),
+ departure_time = rwt.now()
+ }
-- HY = {
-- active_indicator_pos = POS(-4025,14,-2659),
-- dir_indicator_pos = POS(-4025,13,-2665),
@@ -75,12 +115,12 @@ F.has_rc_match = function(query,rc_list) -- query = pattern string, single entry
if not atc_id then return false end
if rc_list == "" or query == nil or query=="" then return false end
if not rc_list then rc_list = F.get_rc_safe() end
-
+
local rc = {}
for v in rc_list:gmatch("("..query..")") do
table.insert(rc,v)
end
-
+
if rc[1] == true then
return true, rc
else
@@ -102,11 +142,11 @@ F.remove_rc = function(rc_list,arrow_mode) -- rc_list = string eg: "rc1 rc2 rc3"
-- true: with arrow direction
-- false: against arrow direction
-- nil: ignores arrow direction
-
+
if not atc_id then return false end
if not rc_list then return false end
-
- if (arrow_mode == nil) or (atc_arrow == arrow_mode) then
+
+ if (arrow_mode == nil) or (atc_arrow == arrow_mode) then
-- prep rc_list to useable format
local rc_remove = {}
if type(rc_list) == "string" then
@@ -118,7 +158,7 @@ F.remove_rc = function(rc_list,arrow_mode) -- rc_list = string eg: "rc1 rc2 rc3"
rc_remove[word] = true
end
end
-
+
-- remove codes from train's rc
local rc = F.get_rc_safe()
local reinsert = {}
@@ -146,7 +186,8 @@ end
----------------------------------------------------------------------------------------------
-- Trackside Functions
-F.yard_arrival = function(yard_id,this_dir) -- arrow points towards yard
+-- this_dir = points towards Origin/Junction Yard
+F.yard_arrival = function(yard_id,this_dir, force_rts) -- arrow points towards yard
local yard = S.yards[yard_id] --yard ref
if F.has_rc(yard_id.."_NOSHUNT") then return end
@@ -160,16 +201,28 @@ F.yard_arrival = function(yard_id,this_dir) -- arrow points towards yard
F.indicator(yard.active_indicator_pos,true)
F.add_rc({yard_id.."_ARRIVE"})
local rts = false
- if F.has_rc(yard_id.."_RTS") then --save the RTS flag as it's removed during the arrival procedure
+ if force_rts then -- yard is designated as a terminus yard. all trains MUST rts
+ F.add_rc(yard_id.."_RTS")
+ rts = true
+ elseif F.has_rc(yard_id.."_RTS") then --save the RTS flag as it's removed during the arrival procedure
F.add_rc({yard_id.."_HAS_RTS"})
rts = true
end
atc_set_ars_disable(false)
atc_send("S6")
-
- print(rwt.to_string(rwt.now()))
- print("YARD "..yard_id..": Train "..atc_id.." enters from the "..tostring(this_dir).." direction and "..((rts and "will") or "won't").." return in the same direction")
- print("YARD "..yard_id..": Length "..train_length())
+
+ S.yards[yard_id].last_id = atc_id
+ S.yards[yard_id].arrival_length = train_length()
+ S.yards[yard_id].arrival_time = rwt.now()
+ S.yards[yard_id].departure_length = "?"
+ S.yards[yard_id].departure_time = rwt.now()
+ S.yards[yard_id].rts = rts
+
+ if S.print_debug then
+ print(rwt.to_string(rwt.now()))
+ print("YARD "..yard_id..": Train "..atc_id.." enters from the "..tostring(this_dir).." direction and will exit in the "..tostring(rts).." direction")
+ print("YARD "..yard_id..": Length "..train_length())
+ end
return
end
@@ -182,14 +235,16 @@ F.yard_arrival = function(yard_id,this_dir) -- arrow points towards yard
if event.train and atc_arrow then
if F.indicator(yard.active_indicator_pos) then
- print(rwt.to_string(rwt.now()))
- print("YARD "..yard_id..": Train "..atc_id.." has arrived and has to wait for the yard to deactivate.")
+ if S.print_debug then
+ print(rwt.to_string(rwt.now()))
+ print("YARD "..yard_id..": Train "..atc_id.." has arrived from the "..tostring(this_dir).." direction and has to wait for the yard to deactivate.")
+ end
schedule_in(";10","recheck")
return
else
enter_yard()
return true
- end
+ end
end
if event.schedule then
@@ -208,7 +263,7 @@ F.classification = function(yard_id, this_dir) -- arrow points towards headshunt
if not F.indicator(yard.active_indicator_pos) then return end
if F.has_rc(yard_id.."_NOSHUNT") then return end
-
+
-- this_dir == true for north end, false for south end
if F.indicator(yard.active_indicator_pos) then
if atc_arrow then -- loco is at working end
@@ -235,8 +290,8 @@ F.classification = function(yard_id, this_dir) -- arrow points towards headshunt
F.indicator(yard.dir_indicator_pos,not F.indicator(yard.dir_indicator_pos))
F.remove_rc({yard_id.."_RTS"})
F.add_rc({yard_id.."_AROUND"}) -- send loco around to the other end
- atc_set_ars_disable(false)
end
+ atc_set_ars_disable(false)
return -- train has departed for headshunt/around
end --else train has arrived from wagon count and headshunt/around
F.remove_rc({yard_id.."_ARRIVE"})
@@ -262,6 +317,7 @@ F.classification = function(yard_id, this_dir) -- arrow points towards headshunt
unset_autocouple()
end
else -- train entering from the far end. set autocouple so it pushes all the way through to the bounce
+ atc_set_ars_disable(true)
set_autocouple()
end
end
@@ -302,7 +358,7 @@ F.headshunt_yard = function(yard_id,this_dir) -- arrow points toward yard
return
end
end
-
+
--else let train proceed forward to the exit controller without a rake
end --else train has already collected rake. let it exit yard
else --train has bounced
@@ -314,7 +370,7 @@ F.headshunt_yard = function(yard_id,this_dir) -- arrow points toward yard
return
end --if at wrong end, do nothing. train will follow <yard_id>_AROUND ARS to relevant headshunt
end -- if doesn't have <yard_id>_AROUND then let ARS classify the train
-
+
atc_set_ars_disable(false)
end
return
@@ -338,7 +394,7 @@ end
F.headshunt_exit = function(yard_id,this_dir) -- arrow points out of yard
local yard = S.yards[yard_id] --yard ref
-
+
__approach_callback_mode = 1
if event.approach and not event.has_entered then
atc_set_ars_disable(true)
@@ -348,22 +404,25 @@ F.headshunt_exit = function(yard_id,this_dir) -- arrow points out of yard
if not F.indicator(yard.active_indicator_pos) then return end
if F.has_rc(yard_id.."_NOSHUNT") then return end
-
+
if event.train then
if atc_arrow and (F.indicator(yard.dir_indicator_pos) == this_dir) then
if F.has_rc(yard_id.."_DEPART") then
- print(rwt.to_string(rwt.now()))
- print("YARD "..yard_id..": Train "..atc_id.." has a length of "..train_length())
- print("YARD "..yard_id..": It will depart in the "..tostring(this_dir).." direction.")
+ if S.print_debug then
+ print(rwt.to_string(rwt.now()))
+ print("YARD "..yard_id..": Train "..atc_id.." has a length of "..train_length())
+ print("YARD "..yard_id..": It will depart in the "..tostring(this_dir).." direction.")
+ end
+ S.yards[yard_id].departure_length = train_length()
unset_autocouple()
F.remove_rc({yard_id.."_FINAL_COLLECT",yard_id.."_DEPART"})
F.remove_rc_match(yard_id.."_LOCOS_%d+")
F.remove_rc_match(yard_id.."_WAGONS_%d+")
-
+
if yard.notify_pos then
interrupt_pos(yard.notify_pos,"notify")
end
-
+
if F.has_rc(yard_id.."_HAS_RTS") then --reinsert the RTS flag to fully return RC list to starting
F.remove_rc(yard_id.."_HAS_RTS")
F.add_rc({yard_id.."_RTS"})
@@ -384,8 +443,11 @@ F.headshunt_exit = function(yard_id,this_dir) -- arrow points out of yard
if event.msg == "deactivate_check" then
if not atc_id then
F.indicator(yard.active_indicator_pos,false)
- print(rwt.to_string(rwt.now()))
- print("YARD "..yard_id..": yard Disabled")
+ S.yards[yard_id].departure_time = rwt.now()
+ if S.print_debug then
+ print(rwt.to_string(rwt.now()))
+ print("YARD "..yard_id..": yard Disabled")
+ end
else
schedule_in(";05","deactivate_check")
return
@@ -399,7 +461,7 @@ F.lane_EOL = function(yard_id,this_dir) -- arrow points towards headshunt
if not F.indicator(yard.active_indicator_pos) then return end
if F.has_rc(yard_id.."_NOSHUNT") then return end
-
+
if atc_arrow then
if F.indicator(yard.dir_indicator_pos) == this_dir then --train has bounced and needs to leave the rake or depart with it
if F.has_rc(yard_id.."_LAST_CLASS") then -- this is the last clasification move
@@ -413,7 +475,7 @@ F.lane_EOL = function(yard_id,this_dir) -- arrow points towards headshunt
end --if has FINAL_COLLECT then don't split off the loco. take the full rake
F.add_rc({yard_id.."_HEADSHUNT"})
else --train needs to bounce
- atc_send("B0WRD1S4")
+ atc_send("S0WRD1S4")
end
else
if F.indicator(yard.dir_indicator_pos) == this_dir then
diff --git a/auto_yards/nodes/(-1908,16,835).lua b/auto_yards/nodes/(-1908,16,835).lua
new file mode 100644
index 0000000..89349e3
--- /dev/null
+++ b/auto_yards/nodes/(-1908,16,835).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1910,16,837).lua b/auto_yards/nodes/(-1910,16,837).lua
new file mode 100644
index 0000000..89349e3
--- /dev/null
+++ b/auto_yards/nodes/(-1910,16,837).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1912,16,839).lua b/auto_yards/nodes/(-1912,16,839).lua
new file mode 100644
index 0000000..89349e3
--- /dev/null
+++ b/auto_yards/nodes/(-1912,16,839).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1925,16,833).lua b/auto_yards/nodes/(-1925,16,833).lua
new file mode 100644
index 0000000..2d94f29
--- /dev/null
+++ b/auto_yards/nodes/(-1925,16,833).lua
@@ -0,0 +1 @@
+F.classification("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1928,16,834).lua b/auto_yards/nodes/(-1928,16,834).lua
new file mode 100644
index 0000000..89349e3
--- /dev/null
+++ b/auto_yards/nodes/(-1928,16,834).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1933,16,806).lua b/auto_yards/nodes/(-1933,16,806).lua
new file mode 100644
index 0000000..4503e25
--- /dev/null
+++ b/auto_yards/nodes/(-1933,16,806).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1933,16,833).lua b/auto_yards/nodes/(-1933,16,833).lua
new file mode 100644
index 0000000..89349e3
--- /dev/null
+++ b/auto_yards/nodes/(-1933,16,833).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1936,16,834).lua b/auto_yards/nodes/(-1936,16,834).lua
new file mode 100644
index 0000000..89349e3
--- /dev/null
+++ b/auto_yards/nodes/(-1936,16,834).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1946,16,801).lua b/auto_yards/nodes/(-1946,16,801).lua
new file mode 100644
index 0000000..4503e25
--- /dev/null
+++ b/auto_yards/nodes/(-1946,16,801).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1947,16,837).lua b/auto_yards/nodes/(-1947,16,837).lua
new file mode 100644
index 0000000..f77e28c
--- /dev/null
+++ b/auto_yards/nodes/(-1947,16,837).lua
@@ -0,0 +1,2 @@
+S.yards.ARC.notify = {['ARC_SB'] = true, ['CANNERY'] = true}
+print(S.yards.ARC.notify) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1954,16,797).lua b/auto_yards/nodes/(-1954,16,797).lua
new file mode 100644
index 0000000..4503e25
--- /dev/null
+++ b/auto_yards/nodes/(-1954,16,797).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1957,3,-1059).lua b/auto_yards/nodes/(-1957,3,-1059).lua
new file mode 100644
index 0000000..ad61223
--- /dev/null
+++ b/auto_yards/nodes/(-1957,3,-1059).lua
@@ -0,0 +1 @@
+F.lane_EOL("BY",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1958,16,808).lua b/auto_yards/nodes/(-1958,16,808).lua
new file mode 100644
index 0000000..4503e25
--- /dev/null
+++ b/auto_yards/nodes/(-1958,16,808).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1959,16,811).lua b/auto_yards/nodes/(-1959,16,811).lua
new file mode 100644
index 0000000..4503e25
--- /dev/null
+++ b/auto_yards/nodes/(-1959,16,811).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1965,16,793).lua b/auto_yards/nodes/(-1965,16,793).lua
new file mode 100644
index 0000000..677ba3a
--- /dev/null
+++ b/auto_yards/nodes/(-1965,16,793).lua
@@ -0,0 +1 @@
+F.classification("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1966,16,796).lua b/auto_yards/nodes/(-1966,16,796).lua
new file mode 100644
index 0000000..4503e25
--- /dev/null
+++ b/auto_yards/nodes/(-1966,16,796).lua
@@ -0,0 +1 @@
+F.lane_EOL("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1976,16,782).lua b/auto_yards/nodes/(-1976,16,782).lua
new file mode 100644
index 0000000..3c1b64f
--- /dev/null
+++ b/auto_yards/nodes/(-1976,16,782).lua
@@ -0,0 +1 @@
+F.yard_arrival("ARC",false,true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-1982,17,780).lua b/auto_yards/nodes/(-1982,17,780).lua
new file mode 100644
index 0000000..072f902
--- /dev/null
+++ b/auto_yards/nodes/(-1982,17,780).lua
@@ -0,0 +1,51 @@
+local yard_id = "ARC"
+
+
+if event.train then
+ if F.has_rc("ARC_LIGHT_EXIT") then return end
+ if F.has_rc("ARC_NOSHUNT") then return end
+
+ if train_length() == 1 then -- eliminates near half the trains
+ if F.has_rc("ARC_LOCOSTORE") then -- specifies only the relevant train
+ if F.has_rc("ARC_DEPART") and F.has_rc("ARC_FINAL_COLLECT") and F.has_rc("ARC_HEADSHUNT") then --only activate if train is set to depart anyway
+ if not atc_arrow then -- train is pointing towards exit. let it pass and the reverse it
+ atc_set_ars_disable(true)
+ schedule_in(";01",atc_id) -- prepare to reverse the train
+ return
+ else --train has reversed. send it to the siding and deactivate the yard
+ F.remove_rc({"ARC_DEPART","ARC_FINAL_COLLECT"})
+ F.add_rc("ARC_send_to_locostore")
+ atc_set_ars_disable(false)
+ F.indicator(S.yards[yard_id].active_indicator_pos, false)
+ S.yards[yard_id].departure_time = rwt.now()
+ S.yards[yard_id].departure_length = S.yards[yard_id].arrival_length
+
+ if S.yards[yard_id].notify_pos then
+ interrupt_pos(S.yards[yard_id].notify_pos,"notify")
+ end
+ return
+ end
+ end
+ end
+ end
+end
+
+if event.schedule then --this is a duplicate of the reversing schedule in the env anyway
+ if not atc_id then --bounce the train that just passed
+ atc_send_to_train(event.msg,"B0WRD1A1S3")
+ else
+ if atc_id == event.msg then --train hasn't fully passed yet, wait a bit longer
+ schedule_in(";01",atc_id)
+ else -- somehow another train crossed the controller before the first one returned. Unlikely but possible
+ atc_send_to_train(event.msg,"BBOL")
+ atc_send("BBOL")
+ F.indicator(yard.error_indicator_pos,true)
+ end
+ end
+ return
+end
+
+
+
+-- if all else fails, do a normal headshunt_yard function
+F.headshunt_yard("ARC",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-2004,2,-1101).lua b/auto_yards/nodes/(-2004,2,-1101).lua
index b686f37..c0d57ae 100644
--- a/auto_yards/nodes/(-2004,2,-1101).lua
+++ b/auto_yards/nodes/(-2004,2,-1101).lua
@@ -1,13 +1,25 @@
local yard_id = "BY"
+
+if not S.yards[yard_id].notify then return end
+
local subs = {
- ['S27'] = POS(-1512,8,-2613),
+--[[
+ A list of FC subscribers to send out notifications for.
+ Each entry must have a coresponding Lua Track / Operators Panel to trigger (using event.ext_int)
+ Used to alert a shunter locomotive or other yard that there's wagons available to collect from this yard.
+]]--
+
+ ['ARC'] = {['pos'] = POS(-1973,16,800), ['msg'] = "notify"},
}
if event.ext_int or event.punch then
- for fc, pos in pairs(subs) do
+ local list = "Notify: "
+ for fc, sub in pairs(subs) do
if S.yards[yard_id].notify[fc] then
- interrupt_pos(pos,"notify")
+ interrupt_pos(sub.pos,sub.msg or "notify")
+ list = list .. fc .. ", "
end
end
+ digiline_send("lcd",list)
S.yards[yard_id].notify = {}
end
diff --git a/auto_yards/nodes/(-2029,19,733).lua b/auto_yards/nodes/(-2029,19,733).lua
new file mode 100644
index 0000000..2672033
--- /dev/null
+++ b/auto_yards/nodes/(-2029,19,733).lua
@@ -0,0 +1,10 @@
+local yard_id = "ARC"
+if event.train then
+ if F.has_rc(yard_id.."_LIGHT_EXIT") then
+ F.remove_rc(yard_id.."_LIGHT_EXIT")
+ atc_set_ars_disable(false)
+ atc_send("SM")
+ return
+ end
+end
+F.headshunt_exit(yard_id,true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-2030,3,-1091).lua b/auto_yards/nodes/(-2030,3,-1091).lua
new file mode 100644
index 0000000..cbce1da
--- /dev/null
+++ b/auto_yards/nodes/(-2030,3,-1091).lua
@@ -0,0 +1 @@
+F.lane_EOL("BY",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-2038,20,730).lua b/auto_yards/nodes/(-2038,20,730).lua
new file mode 100644
index 0000000..a790746
--- /dev/null
+++ b/auto_yards/nodes/(-2038,20,730).lua
@@ -0,0 +1,6 @@
+local yard_id = "ARC"
+if event.digiline and event.channel=="yard_ctl" and event.msg=="disable" then
+ F.indicator(S.yards[yard_id].active_indicator_pos, false)
+ S.yards[yard_id].departure_time = rwt.now()
+ S.yards[yard_id].departure_length = S.yards[yard_id].arrival_length
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(-4023,12,-2660).lua b/auto_yards/nodes/(-4023,12,-2660).lua
new file mode 100644
index 0000000..9d743b7
--- /dev/null
+++ b/auto_yards/nodes/(-4023,12,-2660).lua
@@ -0,0 +1,16 @@
+local yard_id = "TY"
+local subs = {
+-- ['MMF'] = {['pos'] = POS(1,2,3), ['msg'] = "notify"},
+}
+
+if event.ext_int or event.punch then
+ local list = "Notify: "
+ for fc, sub in pairs(subs) do
+ if S.yards[yard_id].notify[fc] then
+ interrupt_pos(sub.pos,sub.msg or "notify")
+ list = list .. fc .. ", "
+ end
+ end
+ digiline_send("lcd",list)
+ S.yards[yard_id].notify = {}
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(-513,26,2455).lua b/auto_yards/nodes/(-513,26,2455).lua
new file mode 100644
index 0000000..14a78ea
--- /dev/null
+++ b/auto_yards/nodes/(-513,26,2455).lua
@@ -0,0 +1,2 @@
+-- hs-exit
+F.headshunt_exit("CAN",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-522,26,2469).lua b/auto_yards/nodes/(-522,26,2469).lua
new file mode 100644
index 0000000..59df437
--- /dev/null
+++ b/auto_yards/nodes/(-522,26,2469).lua
@@ -0,0 +1,2 @@
+-- hs-yard
+F.headshunt_yard("CAN",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-528,26,2475).lua b/auto_yards/nodes/(-528,26,2475).lua
new file mode 100644
index 0000000..bb8ce55
--- /dev/null
+++ b/auto_yards/nodes/(-528,26,2475).lua
@@ -0,0 +1,2 @@
+-- arrival
+F.yard_arrival("CAN",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-574,26,2469).lua b/auto_yards/nodes/(-574,26,2469).lua
new file mode 100644
index 0000000..74a7624
--- /dev/null
+++ b/auto_yards/nodes/(-574,26,2469).lua
@@ -0,0 +1,2 @@
+-- EOL
+F.lane_EOL("CAN",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-575,26,2465).lua b/auto_yards/nodes/(-575,26,2465).lua
new file mode 100644
index 0000000..74a7624
--- /dev/null
+++ b/auto_yards/nodes/(-575,26,2465).lua
@@ -0,0 +1,2 @@
+-- EOL
+F.lane_EOL("CAN",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(-594,26,2485).lua b/auto_yards/nodes/(-594,26,2485).lua
new file mode 100644
index 0000000..270750f
--- /dev/null
+++ b/auto_yards/nodes/(-594,26,2485).lua
@@ -0,0 +1,28 @@
+local yard_id = "CAN"
+
+if not S.yards[yard_id].notify then return end
+
+local subs = {
+--[[
+ A list of FC subscribers to send out notifications for.
+ Each entry must have a coresponding Lua Track / Operators Panel to trigger (using event.ext_int)
+ Used to alert a shunter locomotive or other yard that there's wagons available to collect from this yard.
+]]--
+
+ ['ARC'] = {['pos'] = POS(-630,26,2454), ['msg'] = "notify"}, --send the CAN loco to collect from ARC, then return and deliver here for ARC
+ ['CORN'] = {['pos'] = POS(-630,26,2454), ['msg'] = "shuffle"} -- consolidate wagons to the departure track
+ ['BOTTLES'] = {['pos'] = POS(-630,26,2454), ['msg'] = "shuffle"} -- consolidate wagons to the departure track
+ ['ETHANOL'] = {['pos'] = POS(-630,26,2454), ['msg'] = "shuffle"} -- consolidate wagons to the departure track
+}
+
+if event.ext_int or event.punch then
+ local list = "Notify: "
+ for fc, sub in pairs(subs) do
+ if S.yards[yard_id].notify[fc] then
+ interrupt_pos(sub.pos,sub.msg or "notify")
+ list = list .. fc .. ", "
+ end
+ end
+ digiline_send("lcd",list)
+ S.yards[yard_id].notify = {}
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(-604,26,2469).lua b/auto_yards/nodes/(-604,26,2469).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/auto_yards/nodes/(-604,26,2469).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/auto_yards/nodes/(-614,26,2469).lua b/auto_yards/nodes/(-614,26,2469).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/auto_yards/nodes/(-614,26,2469).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/auto_yards/nodes/(-623,26,2469).lua b/auto_yards/nodes/(-623,26,2469).lua
new file mode 100644
index 0000000..46e3050
--- /dev/null
+++ b/auto_yards/nodes/(-623,26,2469).lua
@@ -0,0 +1,2 @@
+-- EOL
+F.lane_EOL("CAN",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-623,26,2472).lua b/auto_yards/nodes/(-623,26,2472).lua
new file mode 100644
index 0000000..46e3050
--- /dev/null
+++ b/auto_yards/nodes/(-623,26,2472).lua
@@ -0,0 +1,2 @@
+-- EOL
+F.lane_EOL("CAN",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-623,26,2475).lua b/auto_yards/nodes/(-623,26,2475).lua
new file mode 100644
index 0000000..f919bc0
--- /dev/null
+++ b/auto_yards/nodes/(-623,26,2475).lua
@@ -0,0 +1,2 @@
+-- class
+F.classification("CAN",true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-630,26,2454).lua b/auto_yards/nodes/(-630,26,2454).lua
new file mode 100644
index 0000000..e01fb60
--- /dev/null
+++ b/auto_yards/nodes/(-630,26,2454).lua
@@ -0,0 +1,73 @@
+local notification_id = "CAN"
+local ind = POS(-594,26,2488)
+local shuffle_ind = POS(-594,26,2487)
+local print_notification = true
+local function send_train()
+ set_rc("FREIGHT CAN_LOCOSTORE CAN_LIGHT_EXIT EWL-W EWL S23 ARCAUTO ARC_RTS ARC_COLLECT_CANNERY ARC_AUTO_S23N CANNERY CAN_RTS CAN_COLLECT_ARC")
+ atc_send("S0WRD2A1S4")
+ F.indicator(ind,false)
+end
+
+local function shuffle_wagons()
+ F.indicator(S.yards[notification_id].active_indicator_pos, true) --stop other trains entering the yard
+ F.indicator(S.yards[notification_id].dir_indicator_pos,true)
+ F.indicator(shuffle_ind,false)
+ F.indicator(ind,true)
+ S.yards[notification_id].shuffle_stage = 1 -- set a shuffle stage counter
+ set_rc("CAN_LOCOSTORE CAN_SHUFFLE")
+ atc_send("S0WRD2A1S4") --send train to headshunt
+ return
+end
+
+if event.ext_int then
+ if event.message == "notify" then
+ if print_notification then print(rwt.to_string(rwt.now()).. " "..notification_id.." RX Notification") end
+ if F.indicator(ind) then return end
+ if atc_id then
+ send_train()
+ return
+ else
+ F.indicator(ind,true)
+ return
+ end
+ elseif event.message == "shuffle" then
+ if atc_id then
+ if not F.indicator(S.yards[notification_id].active_indicator_pos) then
+ shuffle_wagons()
+ return
+ end
+ schedule_in(":05","shuffle")
+ return
+ else
+ F.indicator(shuffle_ind,true)
+ return
+ end
+ end
+ return
+end
+
+if event.schedule then
+ if event.message=="shuffle" then
+ if not F.idicator(S.yards[notification_id].active_indicator_pos) then
+ shuffle_wagons()
+ return
+ end
+ schedule_in(":05","shuffle")
+ return
+ end
+ return
+end
+
+if event.train then
+ unset_autocouple()
+ if F.indicator(shuffle_ind) then
+ shuffle_wagons()
+ return
+ end
+ if F.indicator(ind) then
+ send_train()
+ return
+ end
+ atc_send("B0")
+ return
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(-633,26,2456).lua b/auto_yards/nodes/(-633,26,2456).lua
new file mode 100644
index 0000000..8dc117b
--- /dev/null
+++ b/auto_yards/nodes/(-633,26,2456).lua
@@ -0,0 +1,4 @@
+if event.punch then
+ F.indicator(S.yards.CAN.active_indicator_pos,false)
+ interrupt_pos(POS(-630,26,2454),"shuffle")
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(-643,26,2475).lua b/auto_yards/nodes/(-643,26,2475).lua
new file mode 100644
index 0000000..1523fcd
--- /dev/null
+++ b/auto_yards/nodes/(-643,26,2475).lua
@@ -0,0 +1,83 @@
+local yard_id = "CAN"
+
+
+if event.train then
+ if F.has_rc(yard_id.."_LIGHT_EXIT") then return end
+ if F.has_rc(yard_id.."_NOSHUNT") then return end
+
+ if F.has_rc("CAN_SHUFFLE") then -- train is consolidating wagons for export to ARC
+ if not atc_arrow then
+ schedule_in(";01",atc_id) -- prepare to reverse the train
+ return
+ end
+ print(F.get_rc_safe())
+ F.remove_rc_match("CAN_CLASS_%S+")
+ F.remove_rc_match("CAN_COLLECT_%S+")
+ F.remove_rc("CAN_PICKUP CAN_HEADSHUNT CAN_FINAL_COLLECT")
+ local stage_list = {
+ "CAN_CLASS_ETHANOL CAN_COLLECT_ETHANOL CAN_FINAL_COLLECT",
+ "CAN_CLASS_ARC",
+ "CAN_CLASS_CORN CAN_COLLECT_CORN CAN_FINAL_COLLECT",
+ "CAN_CLASS_ARC",
+ "CAN_send_to_locostore"
+ }
+ F.add_rc(stage_list[S.yards[yard_id].shuffle_stage])
+ print(F.get_rc_safe())
+ print(S.yards[yard_id].shuffle_stage)
+ set_autocouple()
+ atc_set_ars_disable(false)
+
+ if S.yards[yard_id].shuffle_stage == #stage_list then -- loco is returning to storage. release the yard
+ F.indicator(S.yards[yard_id].active_indicator_pos,false)
+ S.yards[yard_id].notify.ARC = true
+ interrupt_pos(S.yards[yard_id].notify_pos)
+ else
+ S.yards[yard_id].shuffle_stage = S.yards[yard_id].shuffle_stage + 1
+ end
+ return
+ end
+
+ if train_length() == 1 then -- eliminates near half the trains
+ if F.has_rc(yard_id.."_LOCOSTORE") then -- specifies only the relevant train
+ if F.has_rc(yard_id.."_DEPART") and F.has_rc(yard_id.."_FINAL_COLLECT") and F.has_rc(yard_id.."_HEADSHUNT") then --only activate if train is set to depart anyway
+ if not atc_arrow then -- train is pointing towards exit. let it pass and the reverse it
+ atc_set_ars_disable(true)
+ schedule_in(";01",atc_id) -- prepare to reverse the train
+ return
+ else --train has reversed. send it to the siding and deactivate the yard
+ F.remove_rc({yard_id.."_DEPART",yard_id.."_FINAL_COLLECT"})
+ F.add_rc(yard_id.."_send_to_locostore")
+ atc_set_ars_disable(false)
+ F.indicator(S.yards[yard_id].active_indicator_pos, false)
+ S.yards[yard_id].departure_time = rwt.now()
+ S.yards[yard_id].departure_length = S.yards[yard_id].arrival_length
+
+ if S.yards[yard_id].notify_pos then
+ interrupt_pos(S.yards[yard_id].notify_pos,"notify")
+ end
+ return
+ end
+ end
+ end
+ end
+end
+
+if event.schedule then --this is a duplicate of the reversing schedule in the env anyway
+ if not atc_id then --bounce the train that just passed
+ atc_send_to_train(event.msg,"B0WRD1A1S3")
+ else
+ if atc_id == event.msg then --train hasn't fully passed yet, wait a bit longer
+ schedule_in(";01",atc_id)
+ else -- somehow another train crossed the controller before the first one returned. Unlikely but possible
+ atc_send_to_train(event.msg,"BBOL")
+ atc_send("BBOL")
+ F.indicator(yard.error_indicator_pos,true)
+ end
+ end
+ return
+end
+
+
+
+-- if all else fails, do a normal headshunt_yard function
+F.headshunt_yard(yard_id,true) \ No newline at end of file
diff --git a/auto_yards/nodes/(-668,20,2478).lua b/auto_yards/nodes/(-668,20,2478).lua
new file mode 100644
index 0000000..7c582c0
--- /dev/null
+++ b/auto_yards/nodes/(-668,20,2478).lua
@@ -0,0 +1,3 @@
+-- arrival
+if not F.has_rc("CANNERY") then return end
+F.yard_arrival("CAN",false) \ No newline at end of file
diff --git a/auto_yards/nodes/(1178,16,3851).lua b/auto_yards/nodes/(1178,16,3851).lua
index 35047d5..6d126c4 100644
--- a/auto_yards/nodes/(1178,16,3851).lua
+++ b/auto_yards/nodes/(1178,16,3851).lua
@@ -1,13 +1,16 @@
local yard_id = "IP"
local subs = {
- ['WOA_mine_empty'] = POS(1949,7,9112),
+ ['WOA_mine_empty'] = {['pos'] = POS(1949,7,9112), ['msg'] = "notify"},
}
if event.ext_int or event.punch then
- for fc, pos in pairs(subs) do
+ local list = "Notify: "
+ for fc, sub in pairs(subs) do
if S.yards[yard_id].notify[fc] then
- interrupt_pos(pos,"notify")
+ interrupt_pos(sub.pos,sub.msg or "notify")
+ list = list .. fc .. ", "
end
end
+ digiline_send("lcd",list)
S.yards[yard_id].notify = {}
-end
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(417,17,4).lua b/auto_yards/nodes/(417,17,4).lua
new file mode 100644
index 0000000..b634cde
--- /dev/null
+++ b/auto_yards/nodes/(417,17,4).lua
@@ -0,0 +1,62 @@
+if event.channel=="clock" then
+ local yard_id = event.msg
+ local info = S.yards[yard_id]
+ digiline_send("rwt_clock","Rwt Now:\n"..rwt.to_string(rwt.now()))
+
+ if not S.yards[yard_id] then
+ digiline_send(yard_id.."_1",yard_id.." -- Not In Service")
+ digiline_send(yard_id.."_2"," ")
+ digiline_send(yard_id.."_NOTIFY"," ")
+ return
+ end
+
+ local function getN(t)
+ local count = 0
+ for _ in pairs(t) do
+ count = count+1
+ end
+ return count
+ end
+
+
+ local txt = {}
+ local txt2 = {}
+ txt[#txt+1] = yard_id.." --"..info.yard_name.." Yard--"
+ txt[#txt+1] = "Active: " .. tostring(F.indicator(info.active_indicator_pos))
+
+ txt[#txt+1] = "Direction: " .. tostring(F.indicator(info.dir_indicator_pos))
+ txt[#txt+1] = "Last Train: " .. tostring(info.last_id).." ("..tostring(info.arrival_length).."-"..tostring(info.departure_length)..")"
+ txt2[#txt2+1] = "Time: "..tostring(rwt.to_string(info.arrival_time)).."+"..tostring(rwt.to_string(rwt.diff(info.arrival_time,info.departure_time)))
+ digiline_send(yard_id.."_1",table.concat(txt,"\n"))
+
+
+
+
+ txt2[#txt2+1] = "RTS: "..tostring(info.rts)
+ txt2[#txt2+1] = "Error: ".. tostring(F.indicator(info.error_indicator_pos))
+ txt2[#txt2+1] = ""
+ digiline_send(yard_id.."_2",table.concat(txt2,"\n"))
+
+ local notifications = ""
+ if info.notify then
+ local nt = ""
+ if getN(info.notify) > 0 then
+ nt = "Notify: "
+ for k in pairs(info.notify) do
+ nt = nt..k..", "
+ end
+ else
+ nt = "Notify: No Notifications"
+ end
+
+ local st_len = 26
+ if nt:len() > st_len then
+ nt = nt:sub(1,st_len).."\n"..nt:sub(st_len+1)
+ end
+ notifications = nt
+ else
+ notifications = "Notify: Not Enabled"
+ end
+ digiline_send(yard_id.."_NOTIFY",notifications)
+ return
+end \ No newline at end of file
diff --git a/auto_yards/nodes/(417,18,4).lua b/auto_yards/nodes/(417,18,4).lua
new file mode 100644
index 0000000..48ef9b8
--- /dev/null
+++ b/auto_yards/nodes/(417,18,4).lua
@@ -0,0 +1,3 @@
+if event.channel ~= "debug_switch" then return end
+S.print_debug = event.msg
+print("Print Debug: "..tostring(S.print_debug)) \ No newline at end of file
diff --git a/durt/nodes/(-1373,10,-2507).lua b/durt/nodes/(-1373,10,-2507).lua
index 7489acc..450ca4a 100644
--- a/durt/nodes/(-1373,10,-2507).lua
+++ b/durt/nodes/(-1373,10,-2507).lua
@@ -1 +1,5 @@
--- \ No newline at end of file
+if atc_arrow and F.has_rc("S27_EXP_EXIT") then
+ F.remove_rc("S27_EXP_EXIT")
+ atc_send("D10SM")
+ return
+end \ No newline at end of file
diff --git a/durt/nodes/(-1433,11,-2563).lua b/durt/nodes/(-1433,11,-2563).lua
new file mode 100644
index 0000000..7ac821e
--- /dev/null
+++ b/durt/nodes/(-1433,11,-2563).lua
@@ -0,0 +1,25 @@
+__approach_callback_mode = 1
+
+if event.approach and not event.has_entered then
+ atc_set_ars_disable(true)
+ atc_set_lzb_tsr(1)
+ return
+end
+
+if event.train and atc_arrow then
+ if not F.has_rc("S27_EXP_WAIT") then
+ atc_set_ars_disable(false)
+ return
+ end
+ atc_send("S0")
+ return
+end
+
+if event.ext_int and atc_id then
+ F.remove_rc("S27_REV_West S27_EXP_WAIT")
+ F.add_rc("S27_REV_East S27_EXP_DEPART")
+ atc_send("S3")
+ atc_set_ars_disable(false)
+ set_autocouple()
+ return
+end \ No newline at end of file
diff --git a/durt/nodes/(-1442,11,-2568).lua b/durt/nodes/(-1442,11,-2568).lua
new file mode 100644
index 0000000..6888f6b
--- /dev/null
+++ b/durt/nodes/(-1442,11,-2568).lua
@@ -0,0 +1,17 @@
+local ind = POS(-1444,10,-2546)
+if event.train and atc_arrow then
+ if not F.has_rc("S27_SHUNTER") then
+ step_fc()
+ split_off_locomotive("BBA0")
+ F.add_rc("S27_REV_West S27_EXP_WAIT S27_EXP_COLLECT")
+ F.indicator(ind,true)
+ return
+ end
+ unset_autocouple()
+ atc_send("A0BB")
+ if train_length() > 2 then -- if length > 2 it would try to discouple the nose
+ split_at_index(train_length()-1,"BBWRD2S3A1")
+ return
+ end
+ atc_send("BBWRD2S3A1")
+end \ No newline at end of file
diff --git a/durt/nodes/(-1444,11,-2546).lua b/durt/nodes/(-1444,11,-2546).lua
new file mode 100644
index 0000000..235e7d3
--- /dev/null
+++ b/durt/nodes/(-1444,11,-2546).lua
@@ -0,0 +1,24 @@
+local ind = POS(-1444,10,-2546)
+local function send_train()
+ set_rc("S27_SHUNTER S27_REV_East S27")
+ atc_send("S0WRD2A1S4")
+ F.indicator(ind,false)
+end
+if event.ext_int then
+ if F.indicator(ind) then return end
+ if atc_id then
+ send_train()
+ return
+ else
+ F.indicator(ind,true)
+ return
+ end
+end
+if event.train then
+ if F.indicator(ind) then
+ send_train()
+ return
+ end
+ atc_send("B0")
+ return
+end \ No newline at end of file
diff --git a/durt/nodes/(-1446,11,-2568).lua b/durt/nodes/(-1446,11,-2568).lua
new file mode 100644
index 0000000..bca38cc
--- /dev/null
+++ b/durt/nodes/(-1446,11,-2568).lua
@@ -0,0 +1,7 @@
+if event.train and atc_arrow then
+ if not F.has_rc("S27_SHUNTER") then return end
+ atc_reset()
+ atc_set_ars_disable(true)
+ atc_send("BB")
+ split_at_index(train_length(),"S0WRD1S3A1")
+end \ No newline at end of file
diff --git a/durt/nodes/(-1457,11,-2573).lua b/durt/nodes/(-1457,11,-2573).lua
index 7489acc..8f984b2 100644
--- a/durt/nodes/(-1457,11,-2573).lua
+++ b/durt/nodes/(-1457,11,-2573).lua
@@ -1 +1,34 @@
--- \ No newline at end of file
+local rev_rc = "S27_REV_West"
+local rm_rc = false
+
+
+__approach_callback_mode = 1
+
+if event.approach and not event.has_entered then
+ atc_set_lzb_tsr(1)
+ atc_set_ars_disable(true)
+ return
+end
+
+if event.train and atc_arrow then
+ if not F.has_rc(rev_rc) then
+ atc_set_ars_disable(false)
+ return
+ end
+ if rm_rc then F.remove_rc({rev_rc}) end
+ schedule_in(";01",atc_id)
+ return
+end
+
+if event.schedule then
+ if not atc_id then --bounce the train that just passed
+ atc_send_to_train(event.msg,"B0WRD1A1S3")
+ else
+ if atc_id == event.msg then --train hasn't fully passed yet, wait a bit longer
+ schedule_in(";01",atc_id)
+ else -- somehow another train crossed the controller before the first one returned. Unlikely but possible
+ atc_send_to_train(event.msg,"BBOL")
+ atc_send("BBOL")
+ end
+ end
+end \ No newline at end of file
diff --git a/durt/nodes/(-1468,11,-2561).lua b/durt/nodes/(-1468,11,-2561).lua
new file mode 100644
index 0000000..df410b9
--- /dev/null
+++ b/durt/nodes/(-1468,11,-2561).lua
@@ -0,0 +1,5 @@
+if event.train and atc_arrow then
+ F.remove_rc({"S27_slag_shed"})
+ F.add_rc({"S27_main_yard"})
+ atc_send("A0S0WRD50S3A1")
+end
diff --git a/durt/nodes/(-1515,7,-2621).lua b/durt/nodes/(-1515,7,-2621).lua
new file mode 100644
index 0000000..0abb68d
--- /dev/null
+++ b/durt/nodes/(-1515,7,-2621).lua
@@ -0,0 +1,5 @@
+if event.train and atc_arrow then
+ F.remove_rc({"S27_main_yard"})
+ F.add_rc({"S27_slag_shed"})
+ atc_send("A0S0WRD100S3A1")
+end
diff --git a/durt/nodes/(-1515,7,-2625).lua b/durt/nodes/(-1515,7,-2625).lua
index c12db21..2fd2155 100644
--- a/durt/nodes/(-1515,7,-2625).lua
+++ b/durt/nodes/(-1515,7,-2625).lua
@@ -1,17 +1,29 @@
+local notification_id = "S27"
local ind = POS(-1513,8,-2613)
+local print_notification = true
local function send_train()
- set_rc("FREIGHT S23 TanhX_NBS23toE3 BYARD BY_COLLECT_S27 MGGRatHYARD S27 S27_UNLOAD S27_Overburden BY_RTS S27_EXIT")
+ set_rc("FREIGHT S23 ARCAUTO ARC_RTS ARC_COLLECT_S27 ARC_AUTO_S23S TanhX_SBS23toE3 MGGRatHYARD S27 S27_UNLOAD S27_Overburden S27_EXIT")
atc_send("S0WRD2A1S4")
- set_route(POS(-1504,8,-2622),"Through to Lead")
F.indicator(ind,false)
end
-if event.ext_int and atc_id then
- send_train()
+if event.ext_int then
+ if event.message == "notify" then
+ if print_notification then print(rwt.to_string(rwt.now()) .. " "..notification_id.." RX Notification") end
+ if F.indicator(ind) then return end
+ if atc_id then
+ send_train()
+ return
+ else
+ F.indicator(ind,true)
+ return
+ end
+ end
end
-
if event.train then
if F.indicator(ind) then
send_train()
+ return
end
+ atc_send("B0")
return
end \ No newline at end of file
diff --git a/durt/nodes/(-2120,21,869).lua b/durt/nodes/(-2120,21,869).lua
new file mode 100644
index 0000000..b9831ee
--- /dev/null
+++ b/durt/nodes/(-2120,21,869).lua
@@ -0,0 +1,5 @@
+--
+if event.train and atc_arrow and get_line() == "S20" then
+ local current_text = atc_get_text_outside() or ""
+ atc_set_text_outside("Service Ends At Arcadius\n No Access to Trap City\n \n"..current_text)
+end \ No newline at end of file
diff --git a/durt/nodes/(-2141,21,865).lua b/durt/nodes/(-2141,21,865).lua
new file mode 100644
index 0000000..2750c52
--- /dev/null
+++ b/durt/nodes/(-2141,21,865).lua
@@ -0,0 +1,3 @@
+if event.train and atc_arrow and get_line() == "S20" then
+ atc_set_text_outside("S20 - Euler Street <-> Trap City")
+end \ No newline at end of file
diff --git a/durt/nodes/(-4129,13,-5726).lua b/durt/nodes/(-4129,13,-5726).lua
index d5aa4b1..2f179db 100644
--- a/durt/nodes/(-4129,13,-5726).lua
+++ b/durt/nodes/(-4129,13,-5726).lua
@@ -13,7 +13,6 @@ if event.train then
atc_send("CplD1S2")
return
end
- atc_send("B4")
end
end
diff --git a/durt/nodes/(-4224,18,-5973).lua b/durt/nodes/(-4224,18,-5973).lua
new file mode 100644
index 0000000..8f6490a
--- /dev/null
+++ b/durt/nodes/(-4224,18,-5973).lua
@@ -0,0 +1,11 @@
+if not F.has_rc("CORN_SHUNT") then return end
+if not F.has_rc("CORN_rejoin") then
+ F.add_rc("CORN_rejoin")
+ split_off_locomotive("S0A0")
+ F.add_rc("CORN_HS_S CORN_AROUND CORN_HS_N")
+ return
+else
+ F.remove_rc("CORN_rejoin")
+ F.add_rc("CORN_HS_S")
+ unset_autocouple()
+end \ No newline at end of file
diff --git a/durt/nodes/(-4224,18,-5985).lua b/durt/nodes/(-4224,18,-5985).lua
new file mode 100644
index 0000000..aacd93f
--- /dev/null
+++ b/durt/nodes/(-4224,18,-5985).lua
@@ -0,0 +1,41 @@
+local rev_rc = "CORN_HS_S"
+local rm_rc = true
+
+
+__approach_callback_mode = 1
+
+if event.approach and not event.has_entered then
+ atc_set_lzb_tsr(3)
+ atc_set_ars_disable(true)
+ return
+end
+
+if event.train then
+ if atc_arrow then
+ if not F.has_rc(rev_rc) then
+ atc_set_ars_disable(false)
+ return
+ end
+ if rm_rc then F.remove_rc(rev_rc) end
+ schedule_in(";01",atc_id)
+ return
+ else
+ if not F.has_rc("CORN_rejoin") then
+ F.add_rc("CORN_EXIT")
+ end
+ return
+ end
+end
+
+if event.schedule then
+ if not atc_id then --bounce the train that just passed
+ atc_send_to_train(event.msg,"B0WRD1A1S3")
+ else
+ if atc_id == event.msg then --train hasn't fully passed yet, wait a bit longer
+ schedule_in(";01",atc_id)
+ else -- somehow another train crossed the controller before the first one returned. Unlikely but possible
+ atc_send_to_train(event.msg,"BBOL")
+ atc_send("BBOL")
+ end
+ end
+end \ No newline at end of file
diff --git a/durt/nodes/(-4227,18,-5926).lua b/durt/nodes/(-4227,18,-5926).lua
new file mode 100644
index 0000000..b640ec9
--- /dev/null
+++ b/durt/nodes/(-4227,18,-5926).lua
@@ -0,0 +1,41 @@
+local rev_rc = "CORN_HS_N"
+local rm_rc = true
+
+
+__approach_callback_mode = 1
+
+if event.approach and not event.has_entered then
+ atc_set_lzb_tsr(3)
+ atc_set_ars_disable(true)
+ return
+end
+
+if event.train then
+ if atc_arrow then
+ if not F.has_rc(rev_rc) then
+ atc_set_ars_disable(false)
+ return
+ end
+ if rm_rc then F.remove_rc(rev_rc) end
+ schedule_in(";01",atc_id)
+ return
+ else
+ if F.has_rc("CORN_rejoin") then
+ set_autocouple()
+ end
+ return
+ end
+end
+
+if event.schedule then
+ if not atc_id then --bounce the train that just passed
+ atc_send_to_train(event.msg,"B0WRD1A1S3")
+ else
+ if atc_id == event.msg then --train hasn't fully passed yet, wait a bit longer
+ schedule_in(";01",atc_id)
+ else -- somehow another train crossed the controller before the first one returned. Unlikely but possible
+ atc_send_to_train(event.msg,"BBOL")
+ atc_send("BBOL")
+ end
+ end
+end \ No newline at end of file
diff --git a/durt/nodes/(-4227,18,-5936).lua b/durt/nodes/(-4227,18,-5936).lua
new file mode 100644
index 0000000..b11f8a1
--- /dev/null
+++ b/durt/nodes/(-4227,18,-5936).lua
@@ -0,0 +1,7 @@
+if not F.has_rc("CORN_SHUNT") then return end
+if not atc_arrow then return end
+if F.has_rc("CORN_EXIT") then
+ F.remove_rc("CORN_EXIT CORN_AROUND")
+ atc_send("D10SM")
+ return
+end \ No newline at end of file
diff --git a/durt/nodes/(1906,7,9136).lua b/durt/nodes/(1906,7,9136).lua
index 03ae1a0..f83e4fc 100644
--- a/durt/nodes/(1906,7,9136).lua
+++ b/durt/nodes/(1906,7,9136).lua
@@ -16,7 +16,7 @@ if event.approach and not event.has_entered then
end
if event.train and atc_arrow then
- digiline_send("mine_counter_lcd",S.yards.WOA.mine_counter)
+ digiline_send("mine_counter_lcd",S.yards.WOA.mine_count)
if F.has_rc("WOA_mine_around") then
if F.has_rc("WOA_around_active") then
F.remove_rc(around_rc_list)
diff --git a/durt/nodes/(1907,0,9142).lua b/durt/nodes/(1907,0,9142).lua
new file mode 100644
index 0000000..0a2edad
--- /dev/null
+++ b/durt/nodes/(1907,0,9142).lua
@@ -0,0 +1,5 @@
+if event.channel=="auth" then
+ S.yards.WOA.mine_count = 0
+ print("WOA Mine: reset counter")
+ digiline_send("train_ctl","send")
+end \ No newline at end of file
diff --git a/durt/nodes/(1907,8,9129).lua b/durt/nodes/(1907,8,9129).lua
new file mode 100644
index 0000000..b18ad84
--- /dev/null
+++ b/durt/nodes/(1907,8,9129).lua
@@ -0,0 +1,3 @@
+if event.punch then
+ digiline_send("mine_counter_lcd",tostring(S.yards.WOA.mine_count))
+end \ No newline at end of file
diff --git a/durt/nodes/(1949,7,9112).lua b/durt/nodes/(1949,7,9112).lua
index 8fd61c9..164a253 100644
--- a/durt/nodes/(1949,7,9112).lua
+++ b/durt/nodes/(1949,7,9112).lua
@@ -14,7 +14,7 @@ if event.train and atc_arrow then
end
if (event.ext_int and event.message == "notify") or (event.schedule and event.message == "send") or (event.channel=="train_ctl" and event.msg=="send") then
- print("WOA RX Notification")
+ print(rwt.to_string(rwt.now()) .. " WOA RX Notification")
if not atc_id then
F.indicator(ind,true)
return
diff --git a/ers/init_code.lua b/ers/init_code.lua
index 4fe8b87..18cdbc9 100644
--- a/ers/init_code.lua
+++ b/ers/init_code.lua
@@ -1,91 +1,623 @@
-- environment_ers.lua
-F.debug = true
+if S.trains == nil then S.trains = {} end
+if S.train_duration == nil then S.train_duration = {} end
+if S.yards == nil then S.yards = {} end
-F.isempty = function (s)
- return s == nil or s == ''
+F.known_rcs = {
+ ["LILSHUNTER"] = "LILSHUNTER",
+ ["CRYSTAL"] = "CRYSTAL",
+ ["DEPOTUNLOADING"] = "DEPOTUNLOADING",
+ ["ERSBALLASTLOAD"] = "ERSBALLASTLOAD",
+ ["CORNUNLOAD"] = "CORNUNLOAD",
+ ["MEGACORNLOAD"] = "MEGACORNLOAD",
+ ["XERXES"] = "XERXES",
+ ["BLOCK"] = "BLOCK",
+ ["FERTILIZER"] = "FERTILIZER",
+ ["FERTRUNNER"] = "FERTRUNNER",
+ ["MULCH"] = "MULCH",
+ ["ERSTAZIDEPOTUNLOAD"] = "ERSTAZIDEPOTUNLOAD",
+ ["ERSTAZIDEPOT"] = "ERSTAZIDEPOT",
+ ["ERSSINENSISDEPOT"] = "ERSSINENSISDEPOT",
+ ["ERSTAZITST"] = "ERSTAZITST",
+ ["FACTORY"] = "FACTORY",
+ ["OILEXTRACT"] = "OILEXTRACT",
+ ["SHUNT04A"] = "SHUNT04A",
+ ["ERSTAZISHOP"] = "ERSTAZISHOP",
+ ["TYARD"] = "TYARD",
+ ["TY_COLLECT_SINESIS"] = "TY_COLLECT_SINESIS",
+ ["TY_RTS"] = "TY_RTS",
+}
+
+F.print = function (str) if F.debug then print("".. (str or "nil") ) end end
+F.isempty = function (s) return s == nil or s == "" end
+F.get_rc_safe = function() return get_rc() or "" end
+F.get_line_safe = function() return get_line() or "" end
+F.get_train_length_safe = function() return train_length() or 0 end
+F.avg = function(t)
+ local sum = 0
+ local count = 0
+ for k,v in pairs(t) do
+ if type(v) == "number" then
+ sum = sum + v
+ count = count + 1
+ end
+ end
+ return (sum / count)
+end
+
+if event.init then
+ F.debug = true
+ F.max_displays = 52
+ F.print("Initialized")
+end
+
+F.clear_main_depot_displays = function() for i = 1, F.max_displays, 1 do digiline_send("train_display" .. i, " ") end end
+
+--[[
+ EXAMPLE: F.has_rc("LILSHUNTER", F.get_rc_safe() )
+ Merged F.has_rc and F.does_train_have_rc
+ F.does_train_have_rc is deprecated
+]]
+F.has_rc = function(query,rc_list) -- query = string, single entry
+ for word in rc_list:gmatch("[^%s]+") do
+ if word == query then return true end
+ end
+ return false
+end
+
+F.send_route = function(passive_name, route, show_print)
+ local message = ""
+ local return_value = false
+ if can_set_route(passive_name, route) then
+ set_route(passive_name, route)
+ message = passive_name .. " has been set to " .. route
+ return_value = true
+ else
+ message = route .. " cannot be set for " .. passive_name .. ". Try another."
+ return_value = false
+ end
+ if show_print == true then F.print(message) end
+ return return_value
+end
+
+F.save_train = function()
+ if not atc_id then return end
+ if S.trains then
+ S.trains[atc_id] = { ["id"] = atc_id, ["rc"] = F.get_rc_safe(), ["ln"] = F.get_line_safe(), ["cars_count"] = F.get_train_length_safe() }
+ end
+end
+
+F.get_real_split_count = function(train_length_count, split_count)
+ if split_count then
+ if split_count == "all" then
+ return 2
+ else
+ F.print("train_length_count (" .. train_length_count .. ") - split_count (" .. split_count .. ")")
+ train_length_count = train_length_count + 1
+ split_count = train_length_count - split_count
+ return split_count
+ end
+ else
+ return nil
+ end
+end
+
+F.yard_siding_basic = function(yard, name, place)
+ if event.train then
+ if not atc_id then return end
+ F.save_train()
+ if place == "start" then
+ if atc_arrow then
+ atc_send("S5")
+ else
+ atc_send("B5S5")
+ end
+ elseif place == "end_alt" then
+ do_something = false
+ elseif place == "end" then
+ if atc_arrow then
+ atc_send("B0 W R")
+ end
+ else
+ F.print("Place for " .. name .. " has not been defined")
+ end
+ end
+end
+
+F.yard_set_route = function(yard, train_id, atc_command)
+ if atc_command == nil then atc_command = "A1 S5" end
+ if S.yards[yard] and S.yards[yard]["state"] and S.yards[yard]["actions"] then
+ status = S.yards[yard]["state"]["status"]
+ current_sequence = S.yards[yard]["state"]["current"]
+ current_operation = S.yards[yard]["actions"][current_sequence]["operation"]
+ table_count = table.maxn(S.yards[yard]["actions"])
+ next_sequence = current_sequence + 1
+ -- F.print(next_sequence .. "/" .. table_count)
+ if next_sequence <= table_count and S.yards[yard]["actions"][next_sequence] and S.yards[yard]["actions"][next_sequence]["route"] then
+ next_route = S.yards[yard]["actions"][next_sequence]["route"]
+ next_operation = S.yards[yard]["actions"][next_sequence]["operation"]
+ use_this_signal = S.yards[yard]["actions"][next_sequence]["signal"]
+ atc_send_status = atc_send_to_train(train_id, atc_command)
+ if atc_send_status then
+ if use_this_signal == nil then
+ F.print(train_id .. " is waiting at: nil")
+ --[[
+ Maybe change it so it shows which signal it is
+ waiting at when completed with this message:
+ F.print(train_id .. " has finished the sequences and is waiting.")
+ ]]
+ else
+ can_set_route_response = can_set_route(use_this_signal, next_route)
+ if can_set_route_response then
+ -- set_train_length_count = S.yards[yard]["state"]["train_length_count"]
+ -- S.yards[yard]["state"] = { status = "moving", current = next_sequence, train_length_count = set_train_length_count }
+ set_route(use_this_signal, next_route)
+ F.print("DIRECT COMMAND current_operation: " .. current_operation .. " next_operation: " .. next_operation)
+ F.print(train_id .. " is heading to " .. next_route .. " through " .. use_this_signal)
+ else
+ F.print(train_id .. " cannot go to " .. next_route .. " at " .. use_this_signal)
+ end
+ end
+ else
+ F.print(atc_command .. " command failed")
+ end
+ else
+ F.print("End of Operations for " .. train_id)
+ end
+ end
+end
+
+F.yard_siding_next_operation = function(yard, train_id, current_sequence)
+ if S.yards[yard]["state"] then
+ if current_sequence == nil then current_sequence = S.yards[yard]["state"]['current'] end
+ local next_sequence = current_sequence + 1
+ local set_train_length_count = S.yards[yard]["state"]["train_length_count"]
+ local table_count = table.maxn(S.yards[yard]["actions"])
+ F.print(next_sequence .. "/" .. table_count)
+ S.yards[yard]["state"]["current"] = next_sequence
+ end
+end
+
+F.yard_siding_operations_start = function(yard, train_id, place, current_operation, next_operation, current_split_count)
+ -- F.print("THIS IS " .. place)
+ if atc_arrow then
+ if current_operation == "split_at_engine" then
+ unset_autocouple()
+ -- split_off_locomotive("A0B0")
+ split_at_index(current_split_count, "S0")
+ F.yard_set_route(yard, train_id, atc_command)
+ F.yard_siding_next_operation(yard, train_id)
+ -- elseif current_operation == "reverse" then
+ -- unset_autocouple()
+ -- atc_send("B0 W R S5")
+ elseif next_operation == "split_at_engine" then
+ F.print("MAYBE SPLIT HERE AT " .. place .. " current: " .. current_operation .. " next: " .. next_operation)
+ F.yard_set_route(yard, train_id, atc_command)
+ F.yard_siding_next_operation(yard, train_id)
+ else
+ F.yard_set_route(yard, train_id, atc_command)
+ F.yard_siding_next_operation(yard, train_id)
+ end
+ else
+ if current_split_count == nil then
+ F.print("YARD SIDING " .. place .. " current_operation: " .. current_operation .. " next_operation: " .. next_operation)
+ end
+ if current_operation == "autocouple" then
+ set_autocouple()
+ elseif current_operation == "split_at_engine" then
+ set_autocouple()
+ else
+ unset_autocouple()
+ end
+
+ if next_operation == "forward" then
+ F.print("at start and the next operation says forward")
+ F.yard_set_route(yard, train_id, atc_command)
+ F.yard_siding_next_operation(yard, train_id)
+ end
+ end
+end
+
+F.yard_siding_operations_end = function(yard, train_id, place, current_operation, next_operation, current_split_count)
+ -- F.print("THIS IS " .. place)
+ if atc_arrow then
+ F.print("YARD SIDING " .. place .. " current_operation: " .. current_operation .. " next_operation: " .. next_operation)
+ if current_operation == "split_at_engine" then
+ -- split_at_index(2, "S0")
+ -- F.yard_set_route(yard, train_id, nil)
+ -- F.yard_siding_next_operation(yard, train_id)
+ unset_autocouple()
+ atc_send("B0 W R S5")
+ -- split_at_index(2, "S0")
+ elseif next_operation == "autocouple" then
+ unset_autocouple()
+ atc_send("B0 W R S5")
+ elseif next_operation == "reverse" then
+ unset_autocouple()
+ atc_send("B0 W R S5")
+ elseif next_operation == "forward" then
+ unset_autocouple()
+ F.yard_set_route(yard, train_id, nil)
+ F.yard_siding_next_operation(yard, train_id)
+ else
+ unset_autocouple()
+ atc_send("B0 W R S5")
+ end
+ else
+ if next_operation == "autocouple" then
+ set_autocouple()
+ end
+ if current_operation == "autocouple" then
+ set_autocouple()
+ end
+ -- if next_operation == "split_at_engine" then
+ -- F.yard_siding_next_operation(yard, train_id)
+ -- end
+ end
end
-F.print = function (str)
- if F.debug then
- print("PrntMsg: ".. (str or "nil") )
+F.yard_siding_operations_end_alt = function(yard, train_id, place, current_operation, next_operation, current_split_count)
+ -- F.print("THIS IS " .. place)
+ if atc_arrow then
+ if next_operation == "forward" or next_operation == "split_at_engine" then
+ unset_autocouple()
+ F.yard_set_route(yard, train_id, nil)
+ F.yard_siding_next_operation(yard, train_id)
+ elseif next_operation == "autocouple" then
+ set_autocouple()
+ F.yard_set_route(yard, train_id, nil)
+ F.yard_siding_next_operation(yard, train_id)
+ elseif next_operation == "reverse" then
+ unset_autocouple()
+ atc_send("B0 W R S5")
+ else
+ unset_autocouple()
+ -- atc_send("B0 W R S5")
+ F.print("At " .. place .. " and stopped because the command isn't programmed yet")
+ end
+ end
+end
+
+F.yard_siding_operations = function(yard, train_id, place, current_operation, next_operation, current_split_count)
+ if place == "start" then
+ F.yard_siding_operations_start(yard, train_id, place, current_operation, next_operation, current_split_count)
+ elseif place == "end" then
+ F.yard_siding_operations_end(yard, train_id, place, current_operation, next_operation, current_split_count)
+ elseif place == "end_alt" then
+ F.yard_siding_operations_end_alt(yard, train_id, place, current_operation, next_operation, current_split_count)
+ else
+ F.print("Place for " .. name .. " has not been defined")
+ end
+end
+
+F.yard_siding = function(yard, name, place)
+ if event.train then
+ if not atc_id then return end
+ if F.has_rc("LILSHUNTER", F.get_rc_safe() ) then
+ if S.yards[yard] and S.yards[yard]["state"] and S.yards[yard]["actions"] then
+ train_id = atc_id
+ S.yards[yard]["state"]["train_length_count"] = F.get_train_length_safe()
+ train_length_count = S.yards[yard]["state"]["train_length_count"]
+ status = S.yards[yard]["state"]["status"]
+ current_sequence = S.yards[yard]["state"]["current"]
+ current_operation = S.yards[yard]["actions"][current_sequence]["operation"]
+ current_split_count = S.yards[yard]["actions"][current_sequence]["split_count"]
+ current_split_count = F.get_real_split_count(train_length_count, current_split_count)
+ table_count = table.maxn(S.yards[yard]["actions"])
+ next_sequence = current_sequence + 1
+ if next_sequence <= table_count and S.yards[yard]["actions"][next_sequence] then
+ next_route = S.yards[yard]["actions"][next_sequence]["route"]
+ use_this_signal = S.yards[yard]["actions"][next_sequence]["signal"]
+ next_operation = S.yards[yard]["actions"][next_sequence]["operation"]
+ next_split_count = S.yards[yard]["actions"][next_sequence]["split_count"]
+ next_split_count = F.get_real_split_count(train_length_count, next_split_count)
+ F.yard_siding_operations(yard, train_id, place, current_operation, next_operation, current_split_count)
+ else
+ F.print("Went over the table count in F.yard_siding")
+ end
+ else
+ F.yard_siding_basic(yard, name, place)
+ end
+ else
+ F.yard_siding_basic(yard, name, place)
+ end
+ end
+ return
+end
+
+F.yard_run = function(yard, section_id) -- section_id example: "723167"
+ if S.yards[yard] and type(S.yards[yard]) == "table" then
+ section_occuppied_by_table = section_occupancy(section_id)
+ section_occuppied_count = table.maxn(section_occuppied_by_table)
+ if section_occuppied_count == 1 then
+ train_id = section_occuppied_by_table[1]
+ F.print("train_id: " .. train_id)
+ F.yard_set_route(yard, train_id)
+ F.yard_siding_next_operation(yard, train_id)
+ else
+ F.print("HALT! More than one train is in the SHUNT01 section")
+ end
+ else
+ F.print("ERROR: S.yards[yard] needs to be a table")
+ end
+ return
+end
+
+F.reset_trial_setup = function()
+ local yard = "ers_main"
+ if S.yards[yard] then
+ S.yards[yard] = {}
+ F.print(yard .. " has been reset!")
+ end
+end
+
+F.trial_setup = function(type)
+ -- LILSHUNTER
+ local yard = "ers_main"
+ local section_id = "723167"
+ if type == nil then
+ F.print("Please, declare a type")
+ elseif type == "autocouple_1_4" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "SIDING01", signal = "SHUNT01_SIGNAL", operation = "autocouple"},
+ [3] = {route = "HEADSHUNT01", signal = "SIDING01_SIGNAL", operation = "reverse"},
+ [4] = {route = "SIDING02", signal = "HEADSHUNT01_SIGNAL", operation = "autocouple"},
+ [5] = {route = "HEADSHUNT01", signal = "SIDING02_SIGNAL", operation = "reverse"},
+ [6] = {route = "SIDING03", signal = "HEADSHUNT01_SIGNAL", operation = "autocouple"},
+ [7] = {route = "HEADSHUNT01", signal = "SIDING03_SIGNAL", operation = "reverse"},
+ [8] = {route = "SIDING04", signal = "HEADSHUNT01_SIGNAL", operation = "autocouple"},
+ [9] = {route = "HEADSHUNT01", signal = "SIDING04_SIGNAL", operation = "reverse"},
+ [10] = {route = "SIDING05", signal = "HEADSHUNT01_SIGNAL", operation = "split_at_engine", split_count = "all"},
+ [11] = {route = "SHUNT01", signal = "SIDING05_SIGNAL", operation = "forward"},
+ [12] = {route = "SHUNT01", signal = nil, operation = "end"}
+ }
+ }
+ elseif type == "split_train_1_4" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "SIDING05", signal = "SHUNT01_SIGNAL", operation = "autocouple"},
+ [3] = {route = "HEADSHUNT01", signal = "SIDING05_SIGNAL", operation = "reverse"},
+ [4] = {route = "SIDING04", signal = "HEADSHUNT01_SIGNAL", operation = "split_at_engine", split_count = 1},
+ [5] = {route = "HEADSHUNT01", signal = "SIDING04_SIGNAL", operation = "reverse"},
+ [6] = {route = "SIDING03", signal = "HEADSHUNT01_SIGNAL", operation = "split_at_engine", split_count = 1},
+ [7] = {route = "HEADSHUNT01", signal = "SIDING03_SIGNAL", operation = "reverse"},
+ [8] = {route = "SIDING02", signal = "HEADSHUNT01_SIGNAL", operation = "split_at_engine", split_count = 1},
+ [9] = {route = "HEADSHUNT01", signal = "SIDING02_SIGNAL", operation = "reverse"},
+ [10] = {route = "SIDING01", signal = "HEADSHUNT01_SIGNAL", operation = "split_at_engine", split_count = 1},
+ [11] = {route = "SHUNT01", signal = "SIDING01_SIGNAL", operation = "reverse"},
+ [12] = {route = "SHUNT01", signal = nil, operation = "end"}
+ }
+ }
+ elseif type == "loop_test" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "SIDING05", signal = "SHUNT01_SIGNAL", operation = "autocouple"},
+ [3] = {route = "ALTSIDING01", signal = "SIDING05_SIGNAL", operation = "reverse"},
+ [4] = {route = "SIDING05", signal = "ALTSIDING01_BACK", operation = "forward"},
+ [5] = {route = "SHUNT01", signal = "SIDING05_SIGNAL", operation = "split_at_engine", split_count = 4},
+ [6] = {route = "SHUNT01", signal = nil, operation = "end"}
+ }
+ }
+ elseif type == "loop_test1" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "SIDING05", signal = "SHUNT01_SIGNAL", operation = "autocouple"},
+ [3] = {route = "ALTSIDING01", signal = "SIDING05_SIGNAL", operation = "reverse"},
+ [4] = {route = "SIDING05", signal = "ALTSIDING01_BACK", operation = "forward"},
+ [5] = {route = "SHUNT01", signal = "SIDING05_SIGNAL", operation = "split_at_engine", split_count = 4},
+ [6] = {route = nil, signal = nil, operation = "forward"},
+ [7] = {route = nil, signal = nil, operation = "end"}
+ }
+ }
+ elseif type == "loop_autocouple_1_4" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "ALTSIDING01", signal = "SHUNT01_SIGNAL", operation = "forward"},
+ [3] = {route = "SIDING01", signal = "ALTSIDING01_BACK", operation = "autocouple"},
+ [4] = {route = "ALTSIDING01", signal = "SIDING01_SIGNAL", operation = "forward"},
+ [5] = {route = "SIDING02", signal = "ALTSIDING01_BACK", operation = "autocouple"},
+ [6] = {route = "ALTSIDING01", signal = "SIDING02_SIGNAL", operation = "forward"},
+ [7] = {route = "SIDING03", signal = "ALTSIDING01_BACK", operation = "autocouple"},
+ [8] = {route = "ALTSIDING01", signal = "SIDING03_SIGNAL", operation = "forward"},
+ [9] = {route = "SIDING04", signal = "ALTSIDING01_BACK", operation = "autocouple"},
+ [10] = {route = nil, signal = nil, operation = "forward"},
+ [11] = {route = "HEADSHUNT01", signal = "SIDING04_SIGNAL", operation = "reverse"},
+ [12] = {route = "SIDING05", signal = "HEADSHUNT01_SIGNAL", operation = "forward"},
+ [13] = {route = "SHUNT01", signal = "SIDING05_SIGNAL", operation = "split_at_engine", split_count = 4},
+ [14] = {route = nil, signal = nil, operation = "forward"},
+ [15] = {route = nil, signal = nil, operation = "end"}
+ }
+ }
+ elseif type == "loop_test_old" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "ALTSIDING01", signal = "SHUNT01_SIGNAL", operation = "forward"},
+ [3] = {route = "SIDING01", signal = "ALTSIDING01_BACK", operation = "forward"},
+ [4] = {route = "ALTSIDING01", signal = "SIDING01_SIGNAL", operation = "forward"},
+ [5] = {route = "SIDING02", signal = "ALTSIDING01_BACK", operation = "forward"},
+ [6] = {route = "SHUNT01", signal = "SIDING02_SIGNAL", operation = "forward"},
+ [7] = {route = "SHUNT01", signal = nil, operation = "end"}
+ }
+ }
+ elseif type == "test" then
+ S.yards[yard] = {
+ ["state"] = { status = "ready", current = 1, train_length_count = 1 },
+ ["actions"] = {
+ [1] = {route = "SHUNT01", signal = nil, operation = "start"},
+ [2] = {route = "SIDING05", signal = "SHUNT01_SIGNAL", operation = "autocouple"},
+ [3] = {route = "ALTSIDING01", signal = "SHUNT01_SIGNAL", operation = "forward"},
+ [4] = {route = "SIDING01", signal = "ALTSIDING01_BACK", operation = "forward"},
+ [5] = {route = "ALTSIDING01", signal = "SIDING01_SIGNAL", operation = "split_at_engine", split_count = 1},
+ [6] = {route = "SIDING02", signal = "ALTSIDING01_BACK", operation = "forward"},
+ [7] = {route = "SHUNT01", signal = "SIDING02_SIGNAL", operation = "forward"},
+ [8] = {route = "SHUNT01", signal = nil, operation = "end"}
+ }
+ }
+ else
+ F.print("This type (" .. type .. ") is not defined")
+ end
+ F.yard_run(yard, section_id)
+end
+
+F.delete_train_info = function(train_id)
+ if S.trains[train_id] then
+ S.trains[train_id] = nil
+ F.print("Deleted train id: " .. train_id)
+ end
+end
+
+F.list_trains = function(number_of_displays)
+ if S.trains then
+ if number_of_displays == nil then number_of_displays = F.max_displays end
+ F.clear_main_depot_displays()
+ number_of_displays = number_of_displays + 1
+ count_keys = 0
+ trains_table = {}
+ for k in pairs(S.trains) do
+ table.insert(trains_table, k)
+ count_keys = count_keys + 1
+ end
+ table.sort(trains_table)
+ x = number_of_displays - count_keys
+ for _, k in ipairs(trains_table) do
+ if S.trains[k] then
+ v = S.trains[k]
+ if F.has_rc("LILSHUNTER", v["rc"]) or F.has_rc("LIL", v["rc"]) then
+ F.delete_train_info(v["id"])
+ else
+ if v["ln"] == nil or v["ln"] == "" then
+ line_number = ""
+ else
+ line_number = "| LN: [" .. v["ln"] .. "]"
+ end
+ if v["rc"] == nil or v["rc"] == "" then
+ rc_display = ""
+ else
+ rc_list = v["rc"]
+ rc_list_cleansed = ""
+ rc_list_unknown = ""
+ rc_list_table = {}
+ if F.has_rc("ERSTAZI", rc_list) and F.has_rc("FREIGHT", rc_list) then
+ rc_list_cleansed = "ERSTAZI FREIGHT |"
+ else
+ rc_list_cleansed = "NO E,F |"
+ end
+ for rc in rc_list:gmatch("[^%s]+") do
+ if rc == "ERSTAZI" or rc == "FREIGHT" then
+ -- leaving for future use
+ do_nothing = true
+ else
+ if F.known_rcs[rc] ~= nil then
+ rc_list_cleansed = rc_list_cleansed .. " " .. rc
+ else
+ rc_list_unknown = rc_list_unknown .. " " .. rc
+ end
+ end
+ end
+ rc_display = "| RC: " .. rc_list_cleansed
+ if not F.isempty(rc_list_unknown) then
+ rc_display = rc_display .. "| *URC*:" .. rc_list_unknown
+ end
+ end
+ if v["cars_count"] == nil or v["cars_count"] == "" then
+ cars_count_display = " Len: 0"
+ else
+ cars_count = tonumber(v["cars_count"])
+ cars_count_display = " Len: " .. cars_count
+ end
+ message = " ID: " .. v["id"] .. cars_count_display .. rc_display .. line_number
+ if x > 0 then digiline_send("train_display" .. x, message) end
+ F.print(x .. ": " .. message)
+ x = x + 1
+ end
+ end
+ end
+ else
+ F.print("no trains saved in S.trains")
+ end
+end
+
+F.slow_train_down = function(id)
+ result = atc_send_to_train(id, "B1")
+ if result == false then
+ F.print("Train ID " .. id .. " does not exist")
+ else
+ F.print("Train ID " .. id .. " is slowed down to B1")
end
end
-S.train_duration = {}
F.train_duration = function(type)
if not atc_id then return end
local now = os.date("%H:%M:%S")
- if F.isempty(type) then
- type = "start"
- end
+ if F.isempty(type) then type = "start" end
if not S.train_duration[atc_id] then
- S.train_duration[atc_id] = { ["train_id"] = atc_id, ["start"] = "", ["end"] = "" }
+ S.train_duration[atc_id] = { ["train_id"] = atc_id, ["start"] = "", ["end"] = "", ["start_sec"] = "", ["end_sec"] = "", ["diff"] = {} }
end
if type == "start" then
- S.train_duration[atc_id]["end"] = "Nil"
+ S.train_duration[atc_id]["end"] = nil
+ S.train_duration[atc_id]["end_sec"] = nil
end
S.train_duration[atc_id][type] = now
+ S.train_duration[atc_id][type .. "_sec"] = os.time()
+ if
+ S.train_duration[atc_id]["start_sec"] ~= nil
+ and S.train_duration[atc_id]["start_sec"] ~= ""
+ and S.train_duration[atc_id]["end_sec"] ~= nil
+ and S.train_duration[atc_id]["end_sec"] ~= ""
+ then
+ if S.train_duration[atc_id]["diff"] == nil then S.train_duration[atc_id]["diff"] = {} end
+ -- Returns the difference, in seconds, from time t1 to time t2 (where the times are values returned by os.time)
+ difference_in_time = os.difftime(S.train_duration[atc_id]["end_sec"], S.train_duration[atc_id]["start_sec"])
+ table.insert(S.train_duration[atc_id]["diff"], difference_in_time)
+ end
end
F.train_info = function (passive_name, show_print)
local timestart = ""
local timeend = ""
local time_message = ""
+ local average_duration_message = ""
if F.isempty(passive_name) or passive_name == "RESETALL" then
- msg_atc_id = "No Train"
+ train_id_message = "No Train"
if passive_name == "RESETALL" then
S.train_duration = {}
+ -- Holding off on resetting the whole table of S.trains
+ -- S.trains = {}
end
else
timestart = S.train_duration[atc_id]["start"]
timeend = S.train_duration[atc_id]["end"]
- msg_atc_id = atc_id
+ train_id_message = "Last Train: " .. atc_id
end
- local lcd_message = "" ..
- msg_atc_id ..
- ""
-
- if not F.isempty(timestart) and not F.isempty(timeend) then
- time_message = "Time: | " .. timestart .. " to " .. timeend
- elseif not F.isempty(timestart) and F.isempty(timeend) then
- time_message = "Start Time: | " .. timestart
+ if timestart == nil and timeend == nil then
+ time_message = "Current Time: |" .. os.date("%H:%M:%S")
+ elseif timestart ~= nil and timeend == nil then
+ time_message = "Start: |" .. timestart
else
- time_message = "RegTime: | " .. os.date("%H:%M:%S")
+ time_message = "Time: |" .. timestart .. " to " .. timeend
end
-
+ average_duration_message = "|AVG: " .. math.ceil(F.avg(S.train_duration[atc_id]["diff"])) .. "s"
+ local lcd_message = "" ..
+ train_id_message .. "|" ..
+ time_message ..
+ average_duration_message ..
+ ""
digiline_send("lcd", lcd_message)
- digiline_send("time", time_message)
local message = lcd_message .. " | " .. time_message
-
if show_print == true then
F.print(message)
end
end
-
-F.does_train_have_rc = function(wanted_rc)
- local rc = get_rc() or ""
- if rc:match(wanted_rc) then
- return true
- else
- return false
- end
-end
-
-F.send_route = function(passive_name, route, show_print)
- if can_set_route(passive_name, route) then
- set_route(passive_name, route)
- if show_print == true then
- F.print(passive_name .. " has been set to " .. route)
- end
- return true
- else
- if show_print == true then
- F.print(route .. " cannot be set for " .. passive_name .. ". Try another")
- end
- return false
- end
-end
-
-if event.type == "init" then
- F.print("Initialized")
-end \ No newline at end of file
diff --git a/ers/nodes/(-3693,11,-3604).lua b/ers/nodes/(-3693,11,-3604).lua
new file mode 100644
index 0000000..4aefac3
--- /dev/null
+++ b/ers/nodes/(-3693,11,-3604).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(-3693,11,-3604)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W S1")
+ else
+ step_fc()
+ atc_send("SM")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(-3693,11,-3608).lua b/ers/nodes/(-3693,11,-3608).lua
new file mode 100644
index 0000000..8f05fc4
--- /dev/null
+++ b/ers/nodes/(-3693,11,-3608).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(-3693,11,-3608)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W S1")
+ else
+ step_fc()
+ atc_send("SM")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1595,-14,1496).lua b/ers/nodes/(1595,-14,1496).lua
new file mode 100644
index 0000000..185f4ab
--- /dev/null
+++ b/ers/nodes/(1595,-14,1496).lua
@@ -0,0 +1,13 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1595,-14,1496)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("S5")
+ else
+ atc_send("B5")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1605,14,1414).lua b/ers/nodes/(1605,14,1414).lua
new file mode 100644
index 0000000..74a7f4b
--- /dev/null
+++ b/ers/nodes/(1605,14,1414).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1605,14,1414)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1608,14,1414).lua b/ers/nodes/(1608,14,1414).lua
new file mode 100644
index 0000000..a45cd5f
--- /dev/null
+++ b/ers/nodes/(1608,14,1414).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1608,14,1414)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1636,4,1331).lua b/ers/nodes/(1636,4,1331).lua
new file mode 100644
index 0000000..0f54c10
--- /dev/null
+++ b/ers/nodes/(1636,4,1331).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1636,4,1331)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1271).lua b/ers/nodes/(1656,2,1271).lua
new file mode 100644
index 0000000..73a2466
--- /dev/null
+++ b/ers/nodes/(1656,2,1271).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1271)
+
+F.yard_siding("ers_main", "ALTSIDING01", "end_alt") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1279).lua b/ers/nodes/(1656,2,1279).lua
new file mode 100644
index 0000000..9b25287
--- /dev/null
+++ b/ers/nodes/(1656,2,1279).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1279)
+
+F.yard_siding("ers_main", "HEADSHUNT02", "end") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1282).lua b/ers/nodes/(1656,2,1282).lua
new file mode 100644
index 0000000..ac46839
--- /dev/null
+++ b/ers/nodes/(1656,2,1282).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1282)
+
+F.yard_siding("ers_main", "SIDING06", "end") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1285).lua b/ers/nodes/(1656,2,1285).lua
new file mode 100644
index 0000000..a81ba9f
--- /dev/null
+++ b/ers/nodes/(1656,2,1285).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1285)
+
+F.yard_siding("ers_main", "SIDING05", "end") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1294).lua b/ers/nodes/(1656,2,1294).lua
new file mode 100644
index 0000000..4a37559
--- /dev/null
+++ b/ers/nodes/(1656,2,1294).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1294)
+
+F.yard_siding("ers_main", "SIDING02", "end") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1297).lua b/ers/nodes/(1656,2,1297).lua
new file mode 100644
index 0000000..0bdb8aa
--- /dev/null
+++ b/ers/nodes/(1656,2,1297).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1297)
+
+F.yard_siding("ers_main", "SIDING01", "end") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1300).lua b/ers/nodes/(1656,2,1300).lua
new file mode 100644
index 0000000..132e944
--- /dev/null
+++ b/ers/nodes/(1656,2,1300).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1656,2,1300)
+
+F.yard_siding("ers_main", "ALTSIDING02", "end") \ No newline at end of file
diff --git a/ers/nodes/(1656,2,1308).lua b/ers/nodes/(1656,2,1308).lua
new file mode 100644
index 0000000..dd97581
--- /dev/null
+++ b/ers/nodes/(1656,2,1308).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1656,2,1308)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1657,6,1237).lua b/ers/nodes/(1657,6,1237).lua
index 0cb6ef7..747e816 100644
--- a/ers/nodes/(1657,6,1237).lua
+++ b/ers/nodes/(1657,6,1237).lua
@@ -1,6 +1,6 @@
-- luaoperatingpanel_depot_01.lua
local show_print = false
if event.type == "punch" then
- F.train_info("RESETALL", show_print)
+-- F.train_info("RESETALL", show_print)
return
end \ No newline at end of file
diff --git a/ers/nodes/(1658,1,1238).lua b/ers/nodes/(1658,1,1238).lua
new file mode 100644
index 0000000..c9e2edb
--- /dev/null
+++ b/ers/nodes/(1658,1,1238).lua
@@ -0,0 +1,40 @@
+-- luaatctrack_main_depot_01.lua
+local show_print = false
+if event.train then
+ if atc_arrow then
+ local passive_name = "ErsDepotTurnaround"
+ local track_route = "01 EXTRA"
+ local can_do_route1 = false
+ local can_do_route2 = false
+ local rc_list = F.get_rc_safe()
+ F.save_train()
+ F.train_duration("start")
+ F.train_info(passive_name, show_print)
+ if F.has_rc("ERSTAZIDEPOTUNLOAD", rc_list)
+ or F.has_rc("DEPOTUNLOADING", rc_list)
+ or F.has_rc("FERTRUNNER", rc_list)
+ then
+ track_route = "03 UNLOADING TRACK"
+ elseif F.has_rc("DEPOTLOADING", rc_list)
+ or F.has_rc("ERSTAZITST", rc_list)
+ then
+ track_route = "02 LOADING TRACK"
+ end
+
+ can_do_route1 = F.send_route(passive_name, track_route, show_print)
+ if can_do_route1 == false then
+ track_route = "01 EXTRA"
+ can_do_route2 = F.send_route(passive_name, track_route, show_print)
+ if can_do_route2 == false then
+ track_route = "04 EXTRA"
+ F.send_route(passive_name, track_route, show_print)
+ end
+ end
+ else
+ F.save_train()
+ local passive_name = "ErsDepotTurnaround"
+ F.train_duration("end")
+ F.train_info(passive_name, show_print)
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1658,2,1304).lua b/ers/nodes/(1658,2,1304).lua
new file mode 100644
index 0000000..f2096ca
--- /dev/null
+++ b/ers/nodes/(1658,2,1304).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1658,2,1304)
+
+F.yard_siding("ers_main", "LOAD/UNLOAD TURNAROUND", "end") \ No newline at end of file
diff --git a/ers/nodes/(1658,6,1237).lua b/ers/nodes/(1658,6,1237).lua
new file mode 100644
index 0000000..9017b1b
--- /dev/null
+++ b/ers/nodes/(1658,6,1237).lua
@@ -0,0 +1,13 @@
+-- luaoperatingpanel_depot_02.lua
+local show_print = false
+if event.type == "punch" then
+
+-- F.delete_train_info("337564")
+-- F.delete_train_info("450511")
+
+-- F.list_trains(12)
+-- F.list_trains(32)
+ F.list_trains(36)
+-- F.list_trains(52)
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1661,2,1273).lua b/ers/nodes/(1661,2,1273).lua
new file mode 100644
index 0000000..3b255c0
--- /dev/null
+++ b/ers/nodes/(1661,2,1273).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1661,2,1273)
+
+F.yard_siding("ers_main", "SHUNT02", "end") \ No newline at end of file
diff --git a/ers/nodes/(1670,-3,1499).lua b/ers/nodes/(1670,-3,1499).lua
new file mode 100644
index 0000000..485bce3
--- /dev/null
+++ b/ers/nodes/(1670,-3,1499).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,-3,1499)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1670,2,1244).lua b/ers/nodes/(1670,2,1244).lua
new file mode 100644
index 0000000..6c6e030
--- /dev/null
+++ b/ers/nodes/(1670,2,1244).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,2,1244)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W R")
+ -- atc_send("S5")
+ -- else
+ -- atc_send("B3 S3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1670,2,1247).lua b/ers/nodes/(1670,2,1247).lua
new file mode 100644
index 0000000..71325a7
--- /dev/null
+++ b/ers/nodes/(1670,2,1247).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,2,1247)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W R")
+ -- atc_send("S5")
+ -- else
+ -- atc_send("B3 S3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1670,2,1250).lua b/ers/nodes/(1670,2,1250).lua
new file mode 100644
index 0000000..600d6d5
--- /dev/null
+++ b/ers/nodes/(1670,2,1250).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,2,1250)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W R")
+ -- atc_send("S5")
+ -- else
+ -- atc_send("B3 S3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1670,2,1253).lua b/ers/nodes/(1670,2,1253).lua
new file mode 100644
index 0000000..5d0b7e0
--- /dev/null
+++ b/ers/nodes/(1670,2,1253).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,2,1253)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W R")
+ -- atc_send("S5")
+ -- else
+ -- atc_send("B3 S3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1670,2,1256).lua b/ers/nodes/(1670,2,1256).lua
new file mode 100644
index 0000000..e1a2576
--- /dev/null
+++ b/ers/nodes/(1670,2,1256).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,2,1256)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W R")
+ -- atc_send("S5")
+ -- else
+ -- atc_send("B3 S3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1670,2,1262).lua b/ers/nodes/(1670,2,1262).lua
new file mode 100644
index 0000000..8d45c19
--- /dev/null
+++ b/ers/nodes/(1670,2,1262).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1670,2,1262)
+
+local show_print = false
+if event.train then
+ F.save_train()
+ if atc_arrow then
+ atc_send("B0 W R")
+ -- atc_send("S5")
+ -- else
+ -- atc_send("B3 S3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1682,-14,1402).lua b/ers/nodes/(1682,-14,1402).lua
new file mode 100644
index 0000000..d911294
--- /dev/null
+++ b/ers/nodes/(1682,-14,1402).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1682,-14,1402)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1693,2,1270).lua b/ers/nodes/(1693,2,1270).lua
new file mode 100644
index 0000000..25583e8
--- /dev/null
+++ b/ers/nodes/(1693,2,1270).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1693,2,1270)
+
+F.yard_siding("ers_main", "SHUNT01", "start") \ No newline at end of file
diff --git a/ers/nodes/(1694,2,1300).lua b/ers/nodes/(1694,2,1300).lua
new file mode 100644
index 0000000..5fb4e1d
--- /dev/null
+++ b/ers/nodes/(1694,2,1300).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1694,2,1300)
+
+F.yard_siding("ers_main", "ALTSIDING02", "start") \ No newline at end of file
diff --git a/ers/nodes/(1695,2,1273).lua b/ers/nodes/(1695,2,1273).lua
new file mode 100644
index 0000000..1c9ec2c
--- /dev/null
+++ b/ers/nodes/(1695,2,1273).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1695,2,1273)
+
+F.yard_siding("ers_main", "SHUNT02", "start") \ No newline at end of file
diff --git a/ers/nodes/(1695,2,1297).lua b/ers/nodes/(1695,2,1297).lua
new file mode 100644
index 0000000..dcf7700
--- /dev/null
+++ b/ers/nodes/(1695,2,1297).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1695,2,1297)
+
+F.yard_siding("ers_main", "SIDING01", "start") \ No newline at end of file
diff --git a/ers/nodes/(1699,2,1262).lua b/ers/nodes/(1699,2,1262).lua
new file mode 100644
index 0000000..51211ee
--- /dev/null
+++ b/ers/nodes/(1699,2,1262).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1699,2,1262)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1699,2,1276).lua b/ers/nodes/(1699,2,1276).lua
new file mode 100644
index 0000000..63aab36
--- /dev/null
+++ b/ers/nodes/(1699,2,1276).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1699,2,1276)
+
+F.yard_siding("ers_main", "HEADSHUNT01", "start") \ No newline at end of file
diff --git a/ers/nodes/(1699,2,1279).lua b/ers/nodes/(1699,2,1279).lua
new file mode 100644
index 0000000..a63d6fe
--- /dev/null
+++ b/ers/nodes/(1699,2,1279).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1699,2,1279)
+
+F.yard_siding("ers_main", "HEADSHUNT02", "start") \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1244).lua b/ers/nodes/(1700,2,1244).lua
new file mode 100644
index 0000000..ff6154a
--- /dev/null
+++ b/ers/nodes/(1700,2,1244).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1700,2,1244)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1247).lua b/ers/nodes/(1700,2,1247).lua
new file mode 100644
index 0000000..f52056b
--- /dev/null
+++ b/ers/nodes/(1700,2,1247).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1700,2,1247)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1250).lua b/ers/nodes/(1700,2,1250).lua
new file mode 100644
index 0000000..5daad5a
--- /dev/null
+++ b/ers/nodes/(1700,2,1250).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1700,2,1250)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1253).lua b/ers/nodes/(1700,2,1253).lua
new file mode 100644
index 0000000..75b1559
--- /dev/null
+++ b/ers/nodes/(1700,2,1253).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1700,2,1253)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1259).lua b/ers/nodes/(1700,2,1259).lua
new file mode 100644
index 0000000..e989e66
--- /dev/null
+++ b/ers/nodes/(1700,2,1259).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1700,2,1259)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1282).lua b/ers/nodes/(1700,2,1282).lua
new file mode 100644
index 0000000..be4cd88
--- /dev/null
+++ b/ers/nodes/(1700,2,1282).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1700,2,1282)
+
+F.yard_siding("ers_main", "SIDING06", "start") \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1285).lua b/ers/nodes/(1700,2,1285).lua
new file mode 100644
index 0000000..8e60f0b
--- /dev/null
+++ b/ers/nodes/(1700,2,1285).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1700,2,1285)
+
+F.yard_siding("ers_main", "SIDING05", "start") \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1288).lua b/ers/nodes/(1700,2,1288).lua
new file mode 100644
index 0000000..30a6a77
--- /dev/null
+++ b/ers/nodes/(1700,2,1288).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1700,2,1288)
+
+F.yard_siding("ers_main", "SIDING04", "start") \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1291).lua b/ers/nodes/(1700,2,1291).lua
new file mode 100644
index 0000000..b1aa450
--- /dev/null
+++ b/ers/nodes/(1700,2,1291).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1700,2,1291)
+
+F.yard_siding("ers_main", "SIDING03", "start") \ No newline at end of file
diff --git a/ers/nodes/(1700,2,1304).lua b/ers/nodes/(1700,2,1304).lua
new file mode 100644
index 0000000..ab8bcf3
--- /dev/null
+++ b/ers/nodes/(1700,2,1304).lua
@@ -0,0 +1,4 @@
+-- luaatctrack_yard_check_01.lua
+-- POS(1700,2,1304)
+
+F.yard_siding("ers_main", "LOAD/UNLOAD TURNAROUND", "start") \ No newline at end of file
diff --git a/ers/nodes/(1701,2,1256).lua b/ers/nodes/(1701,2,1256).lua
new file mode 100644
index 0000000..1fa8fb0
--- /dev/null
+++ b/ers/nodes/(1701,2,1256).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1701,2,1256)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ atc_send("S5")
+ F.save_train()
+ else
+ atc_send("B3 S3")
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1702,2,1269).lua b/ers/nodes/(1702,2,1269).lua
new file mode 100644
index 0000000..851d36f
--- /dev/null
+++ b/ers/nodes/(1702,2,1269).lua
@@ -0,0 +1,8 @@
+-- luaatctrack_run_sequence_01.lua
+local show_print = false
+if event.type == "punch" then
+ F.trial_setup("split_train_1_4")
+-- F.trial_setup("loop_test1")
+-- F.trial_setup("loop_autocouple_1_4")
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1702,2,1270).lua b/ers/nodes/(1702,2,1270).lua
new file mode 100644
index 0000000..823ad84
--- /dev/null
+++ b/ers/nodes/(1702,2,1270).lua
@@ -0,0 +1,6 @@
+-- luaatctrack_run_sequence_01.lua
+local show_print = false
+if event.type == "punch" then
+ F.trial_setup("autocouple_1_4")
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1704,2,1269).lua b/ers/nodes/(1704,2,1269).lua
new file mode 100644
index 0000000..05766c3
--- /dev/null
+++ b/ers/nodes/(1704,2,1269).lua
@@ -0,0 +1,6 @@
+-- luaatctrack_run_sequence_01.lua
+
+if event.type == "punch" then
+ F.reset_trial_setup()
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1747,-14,1440).lua b/ers/nodes/(1747,-14,1440).lua
new file mode 100644
index 0000000..cdc0a34
--- /dev/null
+++ b/ers/nodes/(1747,-14,1440).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1747,-14,1440)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1750,-14,1449).lua b/ers/nodes/(1750,-14,1449).lua
new file mode 100644
index 0000000..a909162
--- /dev/null
+++ b/ers/nodes/(1750,-14,1449).lua
@@ -0,0 +1,12 @@
+-- luaatctrack_spot_check_01.lua
+-- POS(1750,-14,1449)
+
+local show_print = false
+if event.train then
+ if atc_arrow then
+ F.save_train()
+ else
+ F.save_train()
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1929,3,7928).lua b/ers/nodes/(1929,3,7928).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1929,3,7928).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1932,3,7927).lua b/ers/nodes/(1932,3,7927).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1932,3,7927).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1935,3,7924).lua b/ers/nodes/(1935,3,7924).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1935,3,7924).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1938,3,7921).lua b/ers/nodes/(1938,3,7921).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1938,3,7921).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1944,3,7915).lua b/ers/nodes/(1944,3,7915).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1944,3,7915).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1947,3,7912).lua b/ers/nodes/(1947,3,7912).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1947,3,7912).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1950,3,7909).lua b/ers/nodes/(1950,3,7909).lua
new file mode 100644
index 0000000..7489acc
--- /dev/null
+++ b/ers/nodes/(1950,3,7909).lua
@@ -0,0 +1 @@
+-- \ No newline at end of file
diff --git a/ers/nodes/(1986,2,1743).lua b/ers/nodes/(1986,2,1743).lua
new file mode 100644
index 0000000..8e797a9
--- /dev/null
+++ b/ers/nodes/(1986,2,1743).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_docking_ferry_01.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ -- atc_send("B0 W R OL A1")
+ atc_send("B0 W R OR A1")
+ else
+ do_something = false
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1986,2,1759).lua b/ers/nodes/(1986,2,1759).lua
new file mode 100644
index 0000000..af6446c
--- /dev/null
+++ b/ers/nodes/(1986,2,1759).lua
@@ -0,0 +1,13 @@
+-- luaatctrack_docking_ferry_leaving_dock.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ atc_send("OC A1 S5")
+ else
+ atc_send("OC A0 B3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1991,2,1794).lua b/ers/nodes/(1991,2,1794).lua
new file mode 100644
index 0000000..b81d9e1
--- /dev/null
+++ b/ers/nodes/(1991,2,1794).lua
@@ -0,0 +1,28 @@
+-- luaatctrack_docking_ferry_01.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ local passive_name = "DOCKSIGNAL"
+ if atc_arrow then
+ local can_do_route = false
+ atc_send("B0 W R OC D1 S5")
+ can_do_route = F.send_route(passive_name, "DOCK 5", show_print)
+ if can_do_route == false then
+ can_do_route = F.send_route(passive_name, "DOCK 4", show_print)
+ if can_do_route == false then
+ can_do_route = F.send_route(passive_name, "DOCK 3", show_print)
+ if can_do_route == false then
+ can_do_route = F.send_route(passive_name, "DOCK 2", show_print)
+ if can_do_route == false then
+ can_do_route = F.send_route(passive_name, "DOCK 1", show_print)
+ end
+ end
+ end
+ end
+ else
+ do_something = false
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1993,2,1743).lua b/ers/nodes/(1993,2,1743).lua
new file mode 100644
index 0000000..ca383df
--- /dev/null
+++ b/ers/nodes/(1993,2,1743).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_docking_ferry_01.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ atc_send("B0 W R OL A1")
+ -- atc_send("B0 W R OR A1")
+ else
+ do_something = false
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(1993,2,1759).lua b/ers/nodes/(1993,2,1759).lua
new file mode 100644
index 0000000..af6446c
--- /dev/null
+++ b/ers/nodes/(1993,2,1759).lua
@@ -0,0 +1,13 @@
+-- luaatctrack_docking_ferry_leaving_dock.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ atc_send("OC A1 S5")
+ else
+ atc_send("OC A0 B3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(2001,2,1759).lua b/ers/nodes/(2001,2,1759).lua
new file mode 100644
index 0000000..af6446c
--- /dev/null
+++ b/ers/nodes/(2001,2,1759).lua
@@ -0,0 +1,13 @@
+-- luaatctrack_docking_ferry_leaving_dock.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ atc_send("OC A1 S5")
+ else
+ atc_send("OC A0 B3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(2016,2,1743).lua b/ers/nodes/(2016,2,1743).lua
new file mode 100644
index 0000000..8e797a9
--- /dev/null
+++ b/ers/nodes/(2016,2,1743).lua
@@ -0,0 +1,14 @@
+-- luaatctrack_docking_ferry_01.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ -- atc_send("B0 W R OL A1")
+ atc_send("B0 W R OR A1")
+ else
+ do_something = false
+ end
+ return
+end \ No newline at end of file
diff --git a/ers/nodes/(2016,2,1759).lua b/ers/nodes/(2016,2,1759).lua
new file mode 100644
index 0000000..af6446c
--- /dev/null
+++ b/ers/nodes/(2016,2,1759).lua
@@ -0,0 +1,13 @@
+-- luaatctrack_docking_ferry_leaving_dock.lua
+local show_print = false
+local do_something = false
+if event.train then
+ atc_set_text_outside(nil)
+ atc_set_text_inside(nil)
+ if atc_arrow then
+ atc_send("OC A1 S5")
+ else
+ atc_send("OC A0 B3")
+ end
+ return
+end \ No newline at end of file
diff --git a/ers_mtn/init_code.lua b/ers_mtn/init_code.lua
new file mode 100644
index 0000000..6e52905
--- /dev/null
+++ b/ers_mtn/init_code.lua
@@ -0,0 +1,39 @@
+
+
+-- Gleis A
+-- 1787,3,1264
+
+-- Gleis B
+-- 1793,3,1264
+
+-- erste Brücke
+-- 1820,15,1223
+
+
+local gleisliste = {
+{ "gleisa", "Gleis A",{1787,3,1264} },
+{ "gleisb", "Gleis B", {1793,3,1264} },
+{ "erstebruecke", "erste Bruecke", {1820,15,1223 } },
+{ "kniebeuge", "Kniebeugebahnhof", { 1896, 137, 1246 } },
+}
+
+
+
+
+
+S.atctracks = {}
+
+
+for _,e in ipairs(gleisliste) do
+ S.atctracks[e[1]] = e[2]
+end
+
+
+S.daten = {}
+
+S.section = {}
+
+
+F.update = function()
+return
+end \ No newline at end of file
diff --git a/ers_mtn/nodes/(1779,10,1235).lua b/ers_mtn/nodes/(1779,10,1235).lua
new file mode 100644
index 0000000..3de7f76
--- /dev/null
+++ b/ers_mtn/nodes/(1779,10,1235).lua
@@ -0,0 +1,91 @@
+--
+--
+-- 1779,10,1235
+
+
+
+local einblendung = {
+{ " Bergbahn Zugpositionen", "", "", "" },
+{ "", "", "", "" },
+{ "", "", "", "" },
+{ "", "Tal:", "Gleis A/B: %-6s %-6s", "Gleis A Gleis B" },
+}
+
+-- ------------------------------
+
+
+
+local function disp_update()
+
+ for t=1,4 do
+ local tl = ""
+ for z=1,4 do
+ if z>1 then tl = tl.."\n" end
+ local h = einblendung[t][z]
+ if #h < 1 then h = " " end
+ tl = tl .. h
+ end
+ digiline_send("txt"..t,tl)
+ end
+ return
+end
+
+-- ------------------------------
+
+
+if event.type == "punch" then
+ local text = " AUA!!!"
+ for i=1,4 do
+ digiline_send("txt"..i," "..i.."\n"..text)
+ end
+
+ interrupt(10,"clear")
+ return
+end
+
+
+if event.type == "int" then
+ if event.message == "clear" then
+ disp_update()
+-- for i=1,4 do
+-- digiline_send("txt"..i,i)
+-- end
+ end
+ return
+end
+
+
+
+
+local zeilen = {"gleisa","gleisb","tal" }
+
+
+if event.type == "ext_int" then
+ local nachricht = event.message
+ if nachricht == nil then return end
+ if type(nachricht) == "string" then
+ if nachricht == "update" then
+ local t
+ local z
+ local e=1
+ for t = 1,4 do
+ local ausgabe = ""
+ for z = 1,4 do
+ if z>1 then ausgabe = ausgabe.."\n" end
+ ausgabe = ausgabe .. S.daten[e]
+ e = e+1
+ end
+ digiline_send("txt"..t,ausgabe)
+ end
+ return
+ end
+ return
+ end
+ if type(nachricht) == "table" then
+ if not nachricht.von_pos then return end
+
+ return
+ end
+ return
+end
+
diff --git a/ers_mtn/nodes/(1787,3,1264).lua b/ers_mtn/nodes/(1787,3,1264).lua
new file mode 100644
index 0000000..aa971c6
--- /dev/null
+++ b/ers_mtn/nodes/(1787,3,1264).lua
@@ -0,0 +1,16 @@
+--
+--
+-- 1787,3,1264
+
+
+if event.type == "train" then
+ if atc_arrow then
+ S.section.gleis_a = nil
+ S.section.tal = event.id
+ else
+ S.section.gleis_a = event.id
+ S.section.tal = nil
+ end
+ F.update()
+ return
+end \ No newline at end of file
diff --git a/ers_mtn/nodes/(1793,3,1264).lua b/ers_mtn/nodes/(1793,3,1264).lua
new file mode 100644
index 0000000..084819f
--- /dev/null
+++ b/ers_mtn/nodes/(1793,3,1264).lua
@@ -0,0 +1,16 @@
+-- erstazi mountain
+--
+-- 1793,3,1264
+
+
+if event.type == "train" then
+ if atc_arrow then
+ S.section.gleis_b = nil
+ S.section.tal = event.id
+ else
+ S.section.gleis_b = event.id
+ S.section.tal = nil
+ end
+ F.update()
+ return
+end \ No newline at end of file
diff --git a/ers_mtn/nodes/(1793,3,1280).lua b/ers_mtn/nodes/(1793,3,1280).lua
new file mode 100644
index 0000000..dd48338
--- /dev/null
+++ b/ers_mtn/nodes/(1793,3,1280).lua
@@ -0,0 +1,8 @@
+--
+--
+--
+-- stop for trains which should not run
+--
+-- 1793,3,1280
+--
+--
diff --git a/ers_mtn/nodes/(1820,15,1223).lua b/ers_mtn/nodes/(1820,15,1223).lua
new file mode 100644
index 0000000..6e759ad
--- /dev/null
+++ b/ers_mtn/nodes/(1820,15,1223).lua
@@ -0,0 +1,3 @@
+--
+--
+-- 1820,15,1223 \ No newline at end of file
diff --git a/ers_mtn/nodes/(1878,119,1237).lua b/ers_mtn/nodes/(1878,119,1237).lua
new file mode 100644
index 0000000..812195b
--- /dev/null
+++ b/ers_mtn/nodes/(1878,119,1237).lua
@@ -0,0 +1,4 @@
+--
+--
+-- 1878,119,1237
+--
diff --git a/ers_mtn/nodes/(1896,137,1246).lua b/ers_mtn/nodes/(1896,137,1246).lua
new file mode 100644
index 0000000..d0cf0ba
--- /dev/null
+++ b/ers_mtn/nodes/(1896,137,1246).lua
@@ -0,0 +1,6 @@
+--
+--
+-- 1896, 137, 1246
+--
+
+-- "kniebeuge", { 1896, 137, 1246 } \ No newline at end of file
diff --git a/il_timetable/init_code.lua b/il_timetable/init_code.lua
index 4a61c7f..bac2c9e 100644
--- a/il_timetable/init_code.lua
+++ b/il_timetable/init_code.lua
@@ -183,11 +183,21 @@ F.ttp={
inside_line_desc = "E1 to Melinka",
stn_display = "E1 Melinka ",
},
+ E1_N = {
+ outside_text = "[E1] Personhood\nvia Mom Junction, Spawn Main, Ehlodex, The Cube",
+ inside_line_desc = "E1 to Personhood",
+ stn_display = "E1 Personhood ",
+ },
S12_S = {
- outside_text = "[S12] Ehlodex\nvia Gardon St., Schwarzschild St., Anju Crossing, Lesnoi",
+ outside_text = "[S12] Spawn Main\nvia Ehlodex, Schwarzschild St., Anju Crossing, Lesnoi",
inside_line_desc = "S12 to Spawn Main",
stn_display = "S12 Spawn Main ",
},
+ S12_N = {
+ outside_text = "[S12] Silver Coast\nvia Lesnoi, Anju Crossing, Schwarzschild St., Ehlodex",
+ inside_line_desc = "S12 to Silver Coast",
+ stn_display = "S12 Silver Coast",
+ },
}
--[[
diff --git a/il_timetable/nodes/(-109,17,680).lua b/il_timetable/nodes/(-109,17,680).lua
new file mode 100644
index 0000000..3e25243
--- /dev/null
+++ b/il_timetable/nodes/(-109,17,680).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Schwarzschild Passing Track",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-1109,5,-2096).lua b/il_timetable/nodes/(-1109,5,-2096).lua
new file mode 100644
index 0000000..dc26cd0
--- /dev/null
+++ b/il_timetable/nodes/(-1109,5,-2096).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Mom Junction",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-1112,5,-2124).lua b/il_timetable/nodes/(-1112,5,-2124).lua
new file mode 100644
index 0000000..dc26cd0
--- /dev/null
+++ b/il_timetable/nodes/(-1112,5,-2124).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Mom Junction",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-1112,5,-3275).lua b/il_timetable/nodes/(-1112,5,-3275).lua
new file mode 100644
index 0000000..98df9b1
--- /dev/null
+++ b/il_timetable/nodes/(-1112,5,-3275).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Padrana Peninsula",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-1210,9,-3870).lua b/il_timetable/nodes/(-1210,9,-3870).lua
new file mode 100644
index 0000000..2e977d6
--- /dev/null
+++ b/il_timetable/nodes/(-1210,9,-3870).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Aksums Folly",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-1229,9,-3874).lua b/il_timetable/nodes/(-1229,9,-3874).lua
new file mode 100644
index 0000000..2e977d6
--- /dev/null
+++ b/il_timetable/nodes/(-1229,9,-3874).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Aksums Folly",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-1731,7,-4402).lua b/il_timetable/nodes/(-1731,7,-4402).lua
new file mode 100644
index 0000000..4f7d9b5
--- /dev/null
+++ b/il_timetable/nodes/(-1731,7,-4402).lua
@@ -0,0 +1,10 @@
+if event.train then
+ if get_line() == "E1" then
+ if flip then
+ set_rc("E1_Mel_Left")
+ else
+ set_rc("E1_Mel_Right")
+ end
+ flip = not flip
+ end
+end \ No newline at end of file
diff --git a/il_timetable/nodes/(-1929,15,-4581).lua b/il_timetable/nodes/(-1929,15,-4581).lua
new file mode 100644
index 0000000..ac7edc1
--- /dev/null
+++ b/il_timetable/nodes/(-1929,15,-4581).lua
@@ -0,0 +1,13 @@
+local now = rwt.now()
+local rwt_left = rwt.next_rpt(now, "05;00", "02;30")
+local rwt_right = rwt.next_rpt(now, "05;00", "00;00")
+local stringl = "Track 5 | E1 Personhood | "..rwt.to_string(rwt_left, true)
+local stringr = "Track 4 | E1 Personhood | "..rwt.to_string(rwt_right, true)
+
+if rwt.diff(rwt_left, rwt_right) > 0 then
+ digiline_send("left", stringl.." | <Board")
+ digiline_send("right", stringr)
+else
+ digiline_send("left", stringl)
+ digiline_send("right", stringr.." | Board>")
+end \ No newline at end of file
diff --git a/il_timetable/nodes/(-1934,13,-4577).lua b/il_timetable/nodes/(-1934,13,-4577).lua
new file mode 100644
index 0000000..6f18244
--- /dev/null
+++ b/il_timetable/nodes/(-1934,13,-4577).lua
@@ -0,0 +1,16 @@
+F.ttp_begin({
+ stn = "Melinka", -- station name
+ tt = "E1_N", -- timetable ID
+-- depint = "02;30", --departure slot interval
+-- depoff = "00;45", --departure slot offset
+ depint = "05;00",
+ depoff = "00;00",
+ doorside = "L",
+ reverse = true,
+ only_lines = { E1 = true },
+ force_tt_reset = false,
+})
+
+if event.train then
+ set_rc("")
+end \ No newline at end of file
diff --git a/il_timetable/nodes/(-1937,21,-4581).lua b/il_timetable/nodes/(-1937,21,-4581).lua
new file mode 100644
index 0000000..007736b
--- /dev/null
+++ b/il_timetable/nodes/(-1937,21,-4581).lua
@@ -0,0 +1,12 @@
+-- this will be triggered by the digiline messages of the other luacontroller
+if event.on then
+F.ttp_station_display({
+ lines = {"E1_S", "E1_N"},
+ departure = {},
+ station = "Melinka",
+ title = "Melinka",
+-- interval = 15,
+ display1 = "d1",
+-- display2 = "d2",
+})
+end \ No newline at end of file
diff --git a/il_timetable/nodes/(-435,23,377).lua b/il_timetable/nodes/(-435,23,377).lua
new file mode 100644
index 0000000..79457dd
--- /dev/null
+++ b/il_timetable/nodes/(-435,23,377).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Anju Crossing Central",
+ doorside = "R",
+ only_lines={E1=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-441,23,384).lua b/il_timetable/nodes/(-441,23,384).lua
new file mode 100644
index 0000000..ed6368b
--- /dev/null
+++ b/il_timetable/nodes/(-441,23,384).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Anju Crossing Central",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-524,23,-215).lua b/il_timetable/nodes/(-524,23,-215).lua
new file mode 100644
index 0000000..e1df782
--- /dev/null
+++ b/il_timetable/nodes/(-524,23,-215).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Community of Laza",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-524,23,-58).lua b/il_timetable/nodes/(-524,23,-58).lua
new file mode 100644
index 0000000..3a20545
--- /dev/null
+++ b/il_timetable/nodes/(-524,23,-58).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Lesnoi Sued",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-524,23,82).lua b/il_timetable/nodes/(-524,23,82).lua
new file mode 100644
index 0000000..dbcb99e
--- /dev/null
+++ b/il_timetable/nodes/(-524,23,82).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Lesnoi Nord",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-527,23,-228).lua b/il_timetable/nodes/(-527,23,-228).lua
index 13eaead..e1df782 100644
--- a/il_timetable/nodes/(-527,23,-228).lua
+++ b/il_timetable/nodes/(-527,23,-228).lua
@@ -2,5 +2,4 @@ F.ttp_stop({
stn = "Community of Laza",
doorside = "R",
only_lines={S12=true},
- end_of_tt={S12_S=true},
}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-617,14,-411).lua b/il_timetable/nodes/(-617,14,-411).lua
index f20b2a4..121c3f4 100644
--- a/il_timetable/nodes/(-617,14,-411).lua
+++ b/il_timetable/nodes/(-617,14,-411).lua
@@ -1,4 +1,11 @@
--- d_int: Departure every n seconds (epoch modulo)
--- d_off: Departure time offset
--- function F.stop_sd(st_name, doors, departcommand, minstoptime, d_int, d_off)
---F.stop_sd_sched("Main Station", "R", "RSM", 30, 240, 35) \ No newline at end of file
+F.ttp_begin({
+ stn = "Spawn Main", -- station name
+ tt = "S12_N", -- timetable ID
+ depint = "02;30", --departure slot interval
+ depoff = "00;45", --departure slot offset
+ doorside = "R",
+ reverse = true,
+ only_lines = { S12 = true },
+ force_tt_reset =false,
+})
+
diff --git a/il_timetable/nodes/(-643,15,-424).lua b/il_timetable/nodes/(-643,15,-424).lua
index 2ab3bd0..f5190dc 100644
--- a/il_timetable/nodes/(-643,15,-424).lua
+++ b/il_timetable/nodes/(-643,15,-424).lua
@@ -1,8 +1,8 @@
F.ttp_station_display({
- lines = {"E1_S"},
+ lines = {"E1_S", "E1_N"},
departure = {},
station = "Spawn Main",
- title = "Spawn Main (T.6)",
+ title = "Spawn Main T5/6",
interval = 15,
display1 = "display1",
}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-966,5,-756).lua b/il_timetable/nodes/(-966,5,-756).lua
new file mode 100644
index 0000000..8bae7d7
--- /dev/null
+++ b/il_timetable/nodes/(-966,5,-756).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Mountain South",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(-993,5,-753).lua b/il_timetable/nodes/(-993,5,-753).lua
new file mode 100644
index 0000000..8bae7d7
--- /dev/null
+++ b/il_timetable/nodes/(-993,5,-753).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Mountain South",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(1017,8,1011).lua b/il_timetable/nodes/(1017,8,1011).lua
new file mode 100644
index 0000000..7793f30
--- /dev/null
+++ b/il_timetable/nodes/(1017,8,1011).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Ehlodex",
+ doorside = "L",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(1020,11,1021).lua b/il_timetable/nodes/(1020,11,1021).lua
index dc3083a..705eed3 100644
--- a/il_timetable/nodes/(1020,11,1021).lua
+++ b/il_timetable/nodes/(1020,11,1021).lua
@@ -1,5 +1,5 @@
F.ttp_station_display({
- lines = {"S12_S"},
+ lines = {"S12_S", "S12_N"},
departure = {},
station = "Ehlodex",
title = "Ehlodex",
diff --git a/il_timetable/nodes/(1222,3,1011).lua b/il_timetable/nodes/(1222,3,1011).lua
new file mode 100644
index 0000000..d3e713e
--- /dev/null
+++ b/il_timetable/nodes/(1222,3,1011).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Silver Coast Central",
+ doorside = "L",
+ end_of_tt = {S12_N = true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(144,11,892).lua b/il_timetable/nodes/(144,11,892).lua
new file mode 100644
index 0000000..7943557
--- /dev/null
+++ b/il_timetable/nodes/(144,11,892).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Schwarzschild Street",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(152,11,892).lua b/il_timetable/nodes/(152,11,892).lua
new file mode 100644
index 0000000..a00ccff
--- /dev/null
+++ b/il_timetable/nodes/(152,11,892).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Schwarzschild Street",
+ doorside = "L",
+ only_lines={E1=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(1543,21,2653).lua b/il_timetable/nodes/(1543,21,2653).lua
new file mode 100644
index 0000000..9b7580d
--- /dev/null
+++ b/il_timetable/nodes/(1543,21,2653).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Personhood South",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(1722,30,2937).lua b/il_timetable/nodes/(1722,30,2937).lua
new file mode 100644
index 0000000..d28bc16
--- /dev/null
+++ b/il_timetable/nodes/(1722,30,2937).lua
@@ -0,0 +1,9 @@
+F.ttp_station_display({
+ lines = {"E1_N", "E1_S"},
+ departure = {},
+ station = "Personhood Main",
+ title = "Personhood Main",
+ interval = 15,
+ display1 = "d1",
+-- display2 = "d2",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(1734,26,2922).lua b/il_timetable/nodes/(1734,26,2922).lua
index 9d37365..2980622 100644
--- a/il_timetable/nodes/(1734,26,2922).lua
+++ b/il_timetable/nodes/(1734,26,2922).lua
@@ -8,5 +8,3 @@ F.ttp_begin({
only_lines = { E1 = true },
force_tt_reset = false,
})
-
-atc_set_text_outside("[E1] Melinka Town via Spawn") \ No newline at end of file
diff --git a/il_timetable/nodes/(197,14,1011).lua b/il_timetable/nodes/(197,14,1011).lua
new file mode 100644
index 0000000..357e32c
--- /dev/null
+++ b/il_timetable/nodes/(197,14,1011).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Minkovsky Street",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(670,14,1011).lua b/il_timetable/nodes/(670,14,1011).lua
new file mode 100644
index 0000000..0ed504e
--- /dev/null
+++ b/il_timetable/nodes/(670,14,1011).lua
@@ -0,0 +1,5 @@
+F.ttp_stop({
+ stn = "Gardon Street",
+ doorside = "R",
+ only_lines={S12=true},
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(960,14,1063).lua b/il_timetable/nodes/(960,14,1063).lua
new file mode 100644
index 0000000..5e0be27
--- /dev/null
+++ b/il_timetable/nodes/(960,14,1063).lua
@@ -0,0 +1,4 @@
+F.ttp_stop({
+ stn = "Ehlodex",
+ doorside = "R",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(964,16,1067).lua b/il_timetable/nodes/(964,16,1067).lua
new file mode 100644
index 0000000..18d98f2
--- /dev/null
+++ b/il_timetable/nodes/(964,16,1067).lua
@@ -0,0 +1,8 @@
+F.ttp_station_display({
+ lines = {"E1_N"},
+ departure = {},
+ station = "Ehlodex",
+ title = "Ehlodex",
+ interval = 30,
+ display1 = "d1",
+}) \ No newline at end of file
diff --git a/il_timetable/nodes/(981,15,1041).lua b/il_timetable/nodes/(981,15,1041).lua
index 3301300..fc2d491 100644
--- a/il_timetable/nodes/(981,15,1041).lua
+++ b/il_timetable/nodes/(981,15,1041).lua
@@ -1,5 +1,5 @@
F.ttp_station_display({
- lines = {"S12_S", "E1_S", "CFE_S", "NX_S"},
+ lines = {"S12_S", "S12_N", "E1_S", "E1_N", "CFE_S", "NX_S"},
departure = {},
station = "Ehlodex",
title = "Ehlodex",
diff --git a/il_timetable/nodes/(983,21,1053).lua b/il_timetable/nodes/(983,21,1053).lua
new file mode 100644
index 0000000..4c89cef
--- /dev/null
+++ b/il_timetable/nodes/(983,21,1053).lua
@@ -0,0 +1,5 @@
+lines = F.ttp_info_times("E1_N", "00;00")
+linestr = F.ttp_info_trains("E1_N", "00;00")
+li = lines
+for i=1,#linestr do li[#li+1] = linestr[i] end
+print(" E1\n"..table.concat(li, "\n")) \ No newline at end of file
diff --git a/subway/nodes/(123,13,-12).lua b/subway/nodes/(123,13,-12).lua
new file mode 100644
index 0000000..27f4a4c
--- /dev/null
+++ b/subway/nodes/(123,13,-12).lua
@@ -0,0 +1,4 @@
+if event.type == "ext_int" then
+ digiline_send("orhb","toggle")
+ return
+end \ No newline at end of file
diff --git a/subway/nodes/(2644,15,4349).lua b/subway/nodes/(2644,15,4349).lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/subway/nodes/(2644,15,4349).lua