(define (script-fu-globular-cluster image-size stars cluster-type color-tint)

	(let* 
	        (
		(image (car (gimp-image-new image-size image-size 0)))
		(layer1 (car (gimp-layer-new image image-size image-size 0 "layer-1" 100 0)))
		(layer2 (car (gimp-layer-new image image-size image-size 0 "layer-2" 100 0)))
		(layer3 (car (gimp-layer-new image image-size image-size 0 "layer-3" 100 0)))
		(layer4 (car (gimp-layer-new image image-size image-size 0 "layer-4" 100 0)))
		(layer5 (car (gimp-layer-new image image-size image-size 0 "layer-5" 100 0)))
		(hypotenuse-lenght (/ image-size 2))
		(reset-stars stars)
		(hypotenuse 0)
		(radian 0)
		(pi 3.14159265)
		(quadrant 0)
		(X-axis-centre-line (/ image-size 2))
		(Y-axis-centre-line (/ image-size 2))
		(Xcord 0)
		(Ycord 0)
		(pixel (make-vector 3))
		(vary 0)
		(multiplication-factor 0)
		(red 0)
		(green 0)
		(blue 0)
		(yellow 0)
		(white 0)
	        )

	        (cond
		((= cluster-type 0) (set! multiplication-factor 0.9))
		((= cluster-type 1) (set! multiplication-factor 0.6))
		((= cluster-type 2) (set! multiplication-factor 0.3))
	        )

	        (cond
		((= color-tint 0) (set! red 32))			;make blue stars
		((= color-tint 1) (set! red 0) (set! green 0) (set! blue 0))	;make white stars
		((= color-tint 2) (set! blue 32))			;make yellow stars
		((= color-tint 3) (set! blue 32) (set! green 32))		;make red stars
		((= color-tint 4) (set! blue 32) (set! red 32))		;make green stars
	        )

			(gimp-image-add-layer image layer5 0)
			(gimp-image-add-layer image layer4 0)
			(gimp-image-add-layer image layer3 0)
			(gimp-image-add-layer image layer2 0)
			(gimp-image-add-layer image layer1 0)
			(gimp-display-new image)
			(gimp-context-set-foreground '(0 0 0))
			(gimp-drawable-fill layer5 0)
			(gimp-drawable-fill layer4 0)
			(gimp-drawable-fill layer3 0)
			(gimp-drawable-fill layer2 0)
			(gimp-drawable-fill layer1 0)
			(gimp-image-set-filename image "Globular Cluster")

		(gimp-image-undo-disable image)

			(while (> hypotenuse-lenght 1)

			        (set! stars reset-stars)

				(while (> stars 0)


;------------------------------------------------- Calculate a stars X, Y co-ordinates begin -------------------------------------------------

					(set! hypotenuse (random hypotenuse-lenght))
					(set! radian (* (/ (random 9000) 100) (/ pi 180)))
					(set! quadrant (random 4))

					(if (= quadrant 0) (set! Xcord (+ X-axis-centre-line (* hypotenuse (sin radian)))))
					(if (= quadrant 0) (set! Ycord (+ Y-axis-centre-line (* hypotenuse (cos radian)))))

					(if (= quadrant 1) (set! Xcord (- X-axis-centre-line (* hypotenuse (sin radian)))))
					(if (= quadrant 1) (set! Ycord (+ Y-axis-centre-line (* hypotenuse (cos radian)))))

					(if (= quadrant 2) (set! Xcord (- X-axis-centre-line (* hypotenuse (sin radian)))))
					(if (= quadrant 2) (set! Ycord (- Y-axis-centre-line (* hypotenuse (cos radian)))))

					(if (= quadrant 3) (set! Xcord (+ X-axis-centre-line (* hypotenuse (sin radian)))))
					(if (= quadrant 3) (set! Ycord (- Y-axis-centre-line (* hypotenuse (cos radian)))))

					(set! Xcord (inexact->exact (round Xcord)))
					(set! Ycord (inexact->exact (round Ycord)))

;-------------------------------------------------- Calculate a stars X, Y co-ordinates end --------------------------------------------------


					(set! vary (+ (random 128) 128))
					(vector-set! pixel 0 (- vary red))
					(vector-set! pixel 1 (- vary green))
					(vector-set! pixel 2 (- vary blue))

					(gimp-drawable-set-pixel layer1 Xcord Ycord 3 pixel)
					(gimp-drawable-set-pixel layer2 Xcord Ycord 3 pixel)
					(gimp-drawable-set-pixel layer3 Xcord Ycord 3 pixel)
					(gimp-drawable-set-pixel layer4 Xcord Ycord 3 pixel)

				(set! stars (- stars 1)))

			(set! hypotenuse-lenght (* hypotenuse-lenght multiplication-factor)))

		(gimp-image-undo-enable image)



		(gimp-layer-add-alpha layer1)
		(gimp-by-color-select-full layer1 '(0 0 0) 0 0 FALSE FALSE 0 0 FALSE FALSE 0)
		(gimp-edit-clear layer1)
		(gimp-selection-none image)
		(gimp-layer-set-mode layer2 4)
		(gimp-image-merge-down image layer2 2)
		(plug-in-gauss 1 image (car (gimp-image-get-active-layer image)) 2 2 1)
		(gimp-layer-set-mode (car (gimp-image-get-active-layer image)) 4)
		(gimp-image-merge-down image (car (gimp-image-get-active-layer image)) 2)
		(plug-in-gauss 1 image (car (gimp-image-get-active-layer image)) 2 2 1)
		(gimp-image-set-active-layer image layer1)
		(gimp-image-merge-down image layer1 2)
		(gimp-by-color-select-full (car (gimp-image-get-active-layer image)) '(0 0 0) 0 0 FALSE FALSE 0 0 FALSE FALSE 0)
		(gimp-edit-clear (car (gimp-image-get-active-layer image)))
		(gimp-selection-none image)

	)

        (gimp-displays-flush)

)


(script-fu-register
	"script-fu-globular-cluster"
	"<Image>/Filters/Decor/Globular cluster"
	"Test"
	"SteveMi"
	"Unrestricted"
	"2015"
	"*"
	SF-ADJUSTMENT	_"Image Width and Height"	'(640 20 800 10 100 0 0)
	SF-ADJUSTMENT	_"Number of Stars to seed"	'(20 0 2000 10 100 0 0)
	SF-OPTION	_"Cluster Type"	'(_"Loose"_"Dense"_"Open")
	SF-OPTION	_"Color Tint"	'(_"Blue"_"White"_"Yellow"_"Red"_"Green")
)
