local dir = "SHOVE" --indicates which part of the train leaves the station: HEAD, SHOVE local movelist = { SHOVE = { --loco first into platform, shove the outbound "OAF_REV_"..dir, "OAF_HS_N", "OAF_SB_TK2", "OAF_HS_S2", "OAF_HS_S2_AC", "OAF_NB_TK1_SHUNT", "OAF_runaround_rejoin", }, HEAD = { --shoved into platform, loco first outbound "OAF_REV_"..dir, "OAF_HS_N", "OAF_SB_TK3", "OAF_HS_S", "OAF_HS_S_AC", "OAF_NB_TK2_SHUNT", "OAF_runaround_rejoin", } } print("==================================") print(dir) if event.train then if not atc_arrow then if F.has_rc("OAF_runaround_rejoin") then --loco has returned, shove through to ensure past signal IP schedule_in(";05",atc_id) print("SHOVE THROUGH") return end return end if not F.has_rc("OAF_BRANCH_REVERSE") then return end if not F.has_rc("OAF_runaround_rejoin") then print("BEGIN") atc_send("S0WOL") schedule_in(";03",atc_id) --semi-realistic decoupling time return end if not F.has_rc("OAF_REV_"..dir) then return end F.remove_rc(movelist[dir]) F.add_rc("OAF_BRANCH_REVERSE_RECOUPLED") schedule_in(";05",atc_id) --semi-realistic recoupling time print("REJOIN") return end if event.schedule then print("Arrow: "..tostring(atc_arrow)) print("ID: "..tostring(atc_id)) print("msg: "..tostring(event.msg)) if atc_id and atc_id ~= event.msg then return end --somehow another train snuck in??? or we've coupled weird over the track if not atc_id then --loco has returned, should have already coupled and shoved through as buffers would have been over track to begin with atc_send_to_train(event.msg,"B0WRD1A1S1") return end if not F.has_rc("OAF_BRANCH_REVERSE") then return end --probably not our train anyway ??? if dir == "HEAD" and atc_arrow ~= true then --!!!!!! previously managed to get valid atc_id and arrow == nil when using (atc_arrow == false) schedule_in(";01", atc_id) --keep clock going to ensure rejoining loco has coupled print("CLOCK") return end if not F.has_rc("OAF_BRANCH_REVERSE_RECOUPLED") then if dir == "SHOVE" then -- loco first into platform, run around to shove out -- split_off_locomotive("S0OLA0",2) --ideally each pax wagon has a generic FC, but not likely as few people use them at all if train_length() > 1 then split_at_index(2,"B0S0OLA0") atc_send("S3") F.add_rc(movelist[dir]) else -- don't bother splitting, there's nothing to split anyway! -- depart light (fallback) F.add_rc("OAF_BRANCH_REVERSE_DONE") --triggers the ARS to depart atc_send("SM") print("DEPARTING LIGHT") end else --dir == "HEAD" --shoved into platform, run around to put loco first F.add_rc(movelist[dir]) if train_length() > 1 then split_at_index(train_length(),"S0WRA1S3") F.remove_rc(movelist[dir]) atc_send("S0WROR") else --don't bother splitting, there's nothing to split anyway! F.add_rc("OAF_BRANCH_REVERSE_DONE") --triggers the ARS to depart atc_send("SM") print("DEPARTING LIGHT") end end print("SPLIT") return end F.remove_rc("OAF_BRANCH_REVERSE_RECOUPLED") F.add_rc("OAF_BRANCH_REVERSE_DONE") --triggers the ARS to depart atc_send("SM") print("DEPARTING") return end