---
title: Light Runs
slug: light-runs
description: This document provides a script block for creating organized light runs on tables using the RGB Lights Function. Enhance the effects with coded GI and Spotlights that automatically turn off and on. Explore different categories of light run options and lea
docTags: 
createdAt: 2019-11-28T16:41:53.000Z
---

Created By: ScottyWic

This script block helps you quickly and easily do neat light runs on your tables.

## Requirements

RGB Lights Function by JPSalas

All your lights in a collection called "aLights"

## Bonus

To make these effects look even better have your GI and Spotlights coded to post their status as shown in lines **66-72&#x20;**&#x62;elow in the code block. This will allow the script to turn off your gis and spots while the lights run and then flip them back on when it's complete.

## Light Run Options

| Category   | Options                                                                                                                          |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Chaos      | randoms                                                                                                                          |
| Directions | up, down, left, right, diagdl, diagdr, diagul, diagur                                                                            |
| Swipes     | middleih, middleiv, middleoh, middleov, stripe1h, hatch1h, hatch1v, hatch2h, hatch2v, stripe1v, stripe2h, stripe2v               |
| Spins      | circlein, circleout, clockleft, clockright, screwl, screwr                                                                       |
| Curves     | arcbld, arcblu, arcbrd, arcbru, arctld, arctlu, arctrd, arctru, fanld, fanlu, <br />fanrd, fanru, radarl, radarr, wiperl, wiperr |

## Example

lightrun red,arcbld,1

' this would run an Arc of lights from bottom to left to down (bld) in the color red - 1 time.

## Syntax

lightrun color,direction,times to run

## Total Code Block

```vb
'/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/
'  UTILITY - Light Runs
'\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\


	dim arcbld:arcbld=1
	dim arcblu:arcblu=2
	dim arcbrd:arcbrd=3
	dim arcbru:arcbru=4
	dim arctld:arctld=5
	dim arctlu:arctlu=6
	dim arctrd:arctrd=7
	dim arctru:arctru=8
	dim circlein:circlein=9
	dim circleout:circleout=10
	dim clockleft:clockleft=11
	dim clockright:clockright=12
	dim diagdl:diagdl=13
	dim diagdr:diagdr=14
	dim diagul:diagul=15
	dim diagur:diagur=16
	dim down:down=17
	dim fanld:fanld=18
	dim fanlu:fanlu=19
	dim fanrd:fanrd=20
	dim fanru:fanru=21
	dim hatch1h:hatch1h=22
	dim hatch1v:hatch1v=23
	dim hatch2h:hatch2h=24
	dim hatch2v:hatch2v=25
	dim left:left=26
	dim middleih:middleih=27
	dim middleiv:middleiv=28
	dim middleoh:middleoh=29
	dim middleov:middleov=30
	dim radarl:radarl=31
	dim radarr:radarr=32
	dim randoms:randoms=33
	dim right:right=34
	dim screwl:screwl=35
	dim screwr:screwr=36
	dim stripe1h:stripe1h=37
	dim stripe1v:stripe1v=38
	dim stripe2h:stripe2h=39
	dim stripe2v:stripe2v=40
	dim up:up=41
	dim wiperl:wiperl=42
	dim wiperr:wiperr=43

	'***** LIGHT RUNS *****
	'(CHAOS)randoms
	'(DIRECTIONS)up|down|left|right|diagdl|diagdr|diagul|diagur
	'(SWIPES)middleih|middleiv|middleoh|middleov|stripe1h|hatch1h|hatch1v|hatch2h|hatch2v|stripe1v|stripe2h|stripe2v
	'(SPINS)circlein|circleout|clockleft|clockright|screwl|screwr
	'(CURVES)arcbld|arcblu|arcbrd|arcbru|arctld|arctlu|arctrd|arctru|fanld|fanlu|fanrd|fanru|radarl|radarr|wiperl|wiperr
	'(EXAMPLE)lightrun red,arcbld,1  (SYNTAX)lightrun color,direction,times to run
	Sub lightrun(colorduring,direction,timenum)
		On Error Resume Next
		dim timefornext
		' color setting
		dim a
		for each a in aLights
			SetLightColor a, colorduring, -1
		next

		if spotstatus = 1 Then
			spotsoff
		end If
	
		if gistatus = 1 Then
			GiOff
		end if

		select case direction
			Case arcbld
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcBottomLeftDownOn, 90,timenum,0
				lrseq.Play SeqArcBottomLeftDownOff, 90,timenum,0
			Case arcblu
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcBottomLeftUpOn, 90,timenum,0
				lrseq.Play SeqArcBottomLeftUpOff, 90,timenum,0
			Case arcbrd
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcBottomRightDownOn, 90,timenum,0
				lrseq.Play SeqArcBottomRightDownOff, 90,timenum,0
			Case arcbru
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcBottomRightUpOn, 90,timenum,0
				lrseq.Play SeqArcBottomRightUpOff, 90,timenum,0
			Case arctld
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcTopLeftDownOn, 90,timenum,0
				lrseq.Play SeqArcTopLeftDownOff, 90,timenum,0
			Case arctlu
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcTopLeftUpOn, 90,timenum,0
				lrseq.Play SeqArcTopLeftUpOff, 90,timenum,0
			Case arctrd
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcTopRightDownOn, 90,timenum,0
				lrseq.Play SeqArcTopRightDownOff, 90,timenum,0
			Case arctru
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqArcTopRightUpOn, 90,timenum,0
				lrseq.Play SeqArcTopRightUpOff, 90,timenum,0
			Case circlein
				lrseq.UpdateInterval = 5
				timefornext = timenum*800
				lrseq.Play SeqCircleInOn,50,timenum,0
				lrseq.Play SeqCircleInOff,50,timenum,0
			Case circleout
				lrseq.UpdateInterval = 5
				timefornext = timenum*800
				lrseq.Play SeqCircleOutOn,50,timenum,0
				lrseq.Play SeqCircleOutOff,50,timenum,0
			Case clockleft
				lrseq.UpdateInterval = 2
				timefornext = timenum*800
				lrseq.Play SeqClockLeftOn, 45,timenum,0
				lrseq.Play SeqClockLeftOff, 45,timenum,0
			Case clockright
				lrseq.UpdateInterval = 2
				timefornext = timenum*800
				lrseq.Play SeqClockRightOn,45,timenum,0
				lrseq.Play SeqClockRightOff,45,timenum,0
			Case diagdl
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqDiagDownLeftOn, 25,timenum,0
				lrseq.Play SeqDiagDownLeftOff, 25,timenum,0
			Case diagdr
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqDiagDownRightOn, 25,timenum,0
				lrseq.Play SeqDiagDownRightOff, 25,timenum,0
			Case diagul
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqDiagUpLeftOn, 25,timenum,0
				lrseq.Play SeqDiagUpLeftOff, 25,timenum,0
			Case diagur
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqDiagUpRightOn, 25,timenum,0
				lrseq.Play SeqDiagUpRightOff, 25,timenum,0
			Case down
				lrseq.UpdateInterval = 5
				timefornext = timenum*800
				lrseq.Play SeqDownOn, 15,timenum,0
				lrseq.Play SeqDownOff, 15,timenum,0
			Case fanld
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqFanLeftDownOn, 30,timenum,0
				lrseq.Play SeqFanLeftDownOff, 30,timenum,0
			Case fanlu
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqFanLeftUpOn, 30,timenum,0
				lrseq.Play SeqFanLeftUpOff, 30,timenum,0
			Case fanrd
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqFanRightDownOn, 30,timenum,0
				lrseq.Play SeqFanRightDownOff, 30,timenum,0
			Case fanru
				lrseq.UpdateInterval = 3
				timefornext = timenum*800
				lrseq.Play SeqFanRightUpOn, 30,timenum,0
				lrseq.Play SeqFanRightUpOff, 30,timenum,0
			Case hatch1h
				lrseq.UpdateInterval = 9
				timefornext = timenum*800
				lrseq.Play SeqHatch1HorizOn, 25,timenum,0
				lrseq.Play SeqHatch1HorizOff, 25,timenum,0
			Case hatch1v
				lrseq.UpdateInterval = 9
				timefornext = timenum*800
				lrseq.Play SeqHatch1VertOn, 75,timenum,0
				lrseq.Play SeqHatch1VertOff, 75,timenum,0
			Case hatch2h
				lrseq.UpdateInterval = 9
				timefornext = timenum*800
				lrseq.Play SeqHatch2HorizOn, 25,timenum,0
				lrseq.Play SeqHatch2HorizOff, 25,timenum,0
			Case hatch2v
				lrseq.UpdateInterval = 9
				timefornext = timenum*800
				lrseq.Play SeqHatch2VertOn, 75,timenum,0
				lrseq.Play SeqHatch2VertOff, 75,timenum,0
			Case left
				lrseq.UpdateInterval = 5
				timefornext = timenum*800
				lrseq.Play SeqLeftOn, 50,timenum,0
				lrseq.Play SeqLeftOff, 50,timenum,0
			Case middleih
				lrseq.UpdateInterval = 12
				timefornext = timenum*700
				lrseq.Play SeqMiddleInHorizOn, 50,timenum,0
				lrseq.Play SeqMiddleInHorizOff, 50,timenum,0
			Case middleiv
				lrseq.UpdateInterval = 12
				timefornext = timenum*700
				lrseq.Play SeqMiddleInVertOn, 50,timenum,0
				lrseq.Play SeqMiddleInVertOff, 50,timenum,0
			Case middleoh
				lrseq.UpdateInterval = 12
				timefornext = timenum*700
				lrseq.Play SeqMiddleOutHorizOn, 50,timenum,0
				lrseq.Play SeqMiddleOutHorizOff, 50,timenum,0
			Case middleov
				lrseq.UpdateInterval = 12
				timefornext = timenum*700
				lrseq.Play SeqMiddleOutVertOn, 50,timenum,0
				lrseq.Play SeqMiddleOutVertOff, 50,timenum,0
			Case radarl
				lrseq.UpdateInterval = 4
				timefornext = timenum*700
				lrseq.Play SeqRadarLeftOn, 45,timenum,0
				lrseq.Play SeqRadarLeftOff, 45,timenum,0
			Case radarr
				lrseq.UpdateInterval = 4
				timefornext = timenum*700
				lrseq.Play SeqRadarRightOn, 45,timenum,0
				lrseq.Play SeqRadarRightOff, 45,timenum,0
			Case randoms
				lrseq.UpdateInterval = 5
				timefornext = timenum*1000
				lrseq.Play SeqRandom,40,,timefornext
			Case right
				lrseq.UpdateInterval = 5
				timefornext = timenum*800
				lrseq.Play SeqRightOn, 50,timenum,0
				lrseq.Play SeqRightOff, 50,timenum,0
			Case screwl
				lrseq.UpdateInterval = 2
				timefornext = timenum*500
				lrseq.Play SeqScrewLeftOn, 25,timenum,0
				lrseq.Play SeqScrewLeftOff, 25,timenum,0
			Case screwr
				lrseq.UpdateInterval = 2
				timefornext = timenum*500
				lrseq.Play SeqScrewRightOn, 25,timenum,0
				lrseq.Play SeqScrewRightOff, 25,timenum,0
			Case stripe1h
				lrseq.UpdateInterval = 5
				timefornext = timenum*900
				lrseq.Play SeqStripe1HorizOn, 25,timenum,0
				lrseq.Play SeqStripe1HorizOff, 25,timenum,0
			Case stripe1v
				lrseq.UpdateInterval = 5
				timefornext = timenum*900
				lrseq.Play SeqStripe1VertOn, 50,timenum,0
				lrseq.Play SeqStripe1VertOff, 50,timenum,0
			Case stripe2h
				lrseq.UpdateInterval = 5
				timefornext = timenum*900
				lrseq.Play SeqStripe2HorizOn, 25,timenum,0
				lrseq.Play SeqStripe2HorizOff, 25,timenum,0
			Case stripe2v
				lrseq.UpdateInterval = 5
				timefornext = timenum*900
				lrseq.Play SeqStripe2VertOn, 25,timenum,0
				lrseq.Play SeqStripe2VertOff, 25,timenum,0
			Case up
				lrseq.UpdateInterval = 5
				timefornext = timenum*800
				lrseq.Play SeqUpOn, 15,timenum,0
				lrseq.Play SeqUpOff, 15,timenum,0
			Case wiperl
				lrseq.UpdateInterval = 5
				timefornext = timenum*900
				lrseq.Play SeqWiperLeftOn, 45,timenum,0
				lrseq.Play SeqWiperLeftOff, 45,timenum,0
			Case wiperr
				lrseq.UpdateInterval = 5
				timefornext = timenum*900
				lrseq.Play SeqWiperRightOn, 45,timenum,0
				lrseq.Play SeqWiperRightOff, 45,timenum,0
		end Select


		runninglights = 1
		vpmtimer.addtimer timefornext, "nolongerrun '"

	end Sub

	Sub nolongerrun
		if spotstatus = 0 Then
			spotson
		end If
	
		if gistatus = 0 Then
			GiOn
		end if
		runninglights = 0
		lrseq.StopPlay
		if bMultiBallMode = 0 Then
			relighttable
		end if 
	end Sub



```

