(define (script-fu-assemble-layers image layer number-of-blocks)

	(let* (
				(test-script-crash 1)
				(outer-loop (/ (car (gimp-image-get-layers image)) number-of-blocks))
				(blocks-to-process 0)
				(adjust -1)
				(increment -1)
				(offset 0)
				(inner-loop 0)
				(num-layers-in-block (/ (car (gimp-image-get-layers image)) number-of-blocks))
				(target-layer 0)
				(number-of-blocs (/ (car (gimp-image-get-layers image)) number-of-blocks ))
				(number-images-in-bloc (/ (car (gimp-image-get-layers image)) number-of-blocs))
				(to-do 0)
				(number 0)
			)

			(if (= (modulo (car (gimp-image-get-layers image)) number-of-blocks) 0) (set! test-script-crash 0))

				(case test-script-crash ((0)

(gimp-image-undo-group-start image)



		(while (> outer-loop 1)

				(set! blocks-to-process (- number-of-blocks 1))
				(set! adjust (+ adjust 1))
				(set! increment (+ increment 1))
				(set! offset 1)

						(while (> blocks-to-process 0)

								(set! inner-loop (* (- (- num-layers-in-block 1) increment) offset))
								(set! target-layer (- (* blocks-to-process (- num-layers-in-block adjust)) 1))

										(while (> inner-loop 0)
										
												(gimp-image-lower-layer image (vector-ref (cadr (gimp-image-get-layers image)) target-layer))
												(set! target-layer (+ target-layer 1))
												
										(set! inner-loop (- inner-loop 1)))

								(set! offset (+ offset 1))

						(set! blocks-to-process (- blocks-to-process 1)))

		(set! outer-loop (- outer-loop 1)))

		
		
(gimp-image-undo-group-end image)
(gimp-image-undo-group-start image)



						(while (> number-of-blocs 0)
					
								(set! to-do (- number-images-in-bloc 1))
						
										(while (> to-do 0)
					
												(gimp-image-merge-down image (vector-ref (cadr (gimp-image-get-layers image)) number) 1)
							
										(set! to-do (- to-do 1)))
							
								(set! number (+ number 1))
					
						(set! number-of-blocs (- number-of-blocs 1)))



(gimp-image-undo-group-end image)); end of case 0

				((1)	(gimp-context-set-foreground "red"))); end of case 1

	)

        (gimp-displays-flush)

)

(script-fu-register
		"script-fu-assemble-layers"
		"<Image>/Layer/Stack/Assemble for gif"
		"First shuffles then merges down layers ready for saving as a gif file"
		"SteveMi"
		"Unrestricted"
		"2016"
		"*"
		SF-IMAGE				"Image" 0
		SF-DRAWABLE		"Layer" 0
		SF-ADJUSTMENT	"Number of blocks"	'(3 2 99 1 10 0 0)
)
