ID:195132
 
//Title: Conveyor Belt
//Credit to: Gughunter
//Contributed by: Jtgibson


turf
var
allowsDrift = 0


area
proc
Convey(mob/M, list/conveyProbs, list/conveyDirs)
//Requires declaration of /turf/var/allowsDrift. This will prevent things from
//washing up on shore in inappropriate places. Make sure to set allowsDrift = 1
//for your water/conveyor belt/escalator/windy/whatever turfs!
var
i; probability
turf
proposedStep
probability = rand(1, 100)
for(i = 1; i <= conveyProbs.len; i++)
if(probability < conveyProbs[i])
proposedStep = get_step(M, conveyDirs[i])
if(proposedStep.allowsDrift)
if(M.Move(proposedStep))
break


water
moving
var
list
conveyProbs
conveyDirs
sleepTime


New()
..()
PerpetuateConveyance()


proc
PerpetuateConveyance()
var/mob/M
for(M as mob|obj in src)
Convey(M, src.conveyProbs, src.conveyDirs)
spawn(sleepTime) PerpetuateConveyance()


slowWestCurrent
conveyProbs = list(15, 30, 50, 70, 100)
conveyDirs = list(NORTH, SOUTH, NORTHWEST, SOUTHWEST, WEST)
sleepTime = 7


mediumNorthCurrent
conveyProbs = list(10, 20, 30, 40, 100)
conveyDirs = list(WEST, EAST, NORTHWEST, NORTHEAST, NORTH)
sleepTime = 5


fastEastCurrent
conveyProbs = list(5, 10, 15, 20, 100)
conveyDirs = list(NORTH, SOUTH, NORTHEAST, SOUTHEAST, EAST)
sleepTime = 3


fastSouthCurrent
conveyProbs = list(5, 10, 15, 20, 100)
conveyDirs = list(EAST, WEST, SOUTHEAST, SOUTHWEST, SOUTH)
sleepTime = 3