
LutGetHL:
;	push de

		ld hl,(LutCurrentseq)
		ld a,(hl)
		ld d,a
		inc hl
		ld (LutCurrentseq),hl
		ld hl,LUTBase
		and %01110000
		call AddHL_A
;	pop de
	ld a,d
	ld d, %00001111
	ret

SetAndGetLutDataDOnly:	
		ld e,0	
SetAndGetLutData:			;bc=randomseed ;a= scale ;de=time	;returns HL 
	push af
	push bc
	push de
		push de
			call InitLutData
		pop bc
		call GetLUTData
	pop de
	pop bc
	pop af
	ret
		
	
InitLutData:
		;A= %---ISSSS I=invert SSSS= Smoothness (0-4)
		;BC=random seed


	push af
		
		ld hl,ScaleSequence
		
		and %00000111
		
		call AddHL_Ax4
		ld (ScaleChosenSeq),hl
		
	pop af
	and %00001000
	ld (FlipTween),a
	


	ld de,LUTSequence
	ld ixl,4
Nextrandomone:
	push de
	call DoRandomWord
	pop de
	ld a,h
	add l
	ld (de),a
	inc de
	dec ixl
	jr nz,Nextrandomone
	ret
	
	
	
	
GetLUTData_Bonly:
	ld c,0
GetLUTData:

	ld hl,(ScaleChosenSeq)
	ld (ScaleCurrentSeq),hl
	ld hl,LUTSequence
	ld (LutCurrentseq),hl

	push bc

;	ld ixl, %00001111
	call LutGetHL
	ld a,b
	push bc
		ld a,b
		and d		;Tweened
	pop bc


;	and %00001111;ixl
	ld iyh,a
;call showhex
;call newline
	ld a,b
	call ProcessValuesR4
	ld de,0
;	ld b,1
	Call ShiftRightB
	pop bc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	push bc
	push hl

;	ld ixl, %00001111
	call LutGetHL
	add b
	push af
		rl c
		rla
		rl c
		rla	;Tweened
		and d;%00001111;ixl
		ld iyh,a
	pop af


	call ProcessValuesR2

	pop de
;	ld b,2
	Call ShiftRightB

	pop bc


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	push bc
	push hl

;	ld ixl, %00001111
	call LutGetHL
	ld a,c 
	push bc
		rrca
		rrca
		rrca
		rrca		;Tweened
	pop bc

	and d;%00001111;ixl
	ld iyh,a
	ld a,b

;	and %00001111		;LUT
	call ProcessValuesR0

	pop de

;	ld b,3
	Call ShiftRightB
	pop bc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	push bc
	push hl

;	ld hl,randoms1
;	ld ixl,%00011111	
	call LutGetHL
	add c
	push af
		and d; %00001111;ixl	;Tweened
		ld iyh,a
	pop af
	call ProcessValuesR4
	pop de
;	ld b,4
	Call ShiftRightB
	pop bc

	ld a,(FlipTween)
	or a 
	ret z
FlipHL
	ld a,h
	cpl	
	ld h,a
	ld a,l
	cpl 
	ld l,a
	ret
ShiftRightB

LutGetB:
	push hl
		ld hl,(ScaleCurrentSeq)
		ld b,(hl)
		inc b
		inc hl
		ld (ScaleCurrentSeq),hl
	pop hl
ShiftRightc:
	xor a
	rr h
	rr l
	djnz ShiftRightc
ShiftRightskip:	
	add hl,de
	ret nc
	ld hl,&FFFF
	ret
	
	
	
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	ld d,%00001111
;	ld iyh,angleLnibble
;	ld a,angleHnibble
;	ld hl,lookup
;	call ProcessValuesR0


ProcessValuesR4:
	rrca
	rrca
ProcessValuesR2:
	rrca
	rrca
ProcessValuesR0:
	and d
ProcessValues:			;HL=LUT A= Major step, IYh=substep
	;push de
	push bc
	
	call GetPairFromLUT
		

		ld l,0						;Set Flip to zero
		ld a,e
		cp d
		jr nc,LowerVal				;Value 2 is lower
		ld e,d
		ld d,a
		ld l,%00001111			;We need to flip the bits
		ld a,e

LowerVal:
	push de		
		sub d					;Remove lower val

		ld h,a
		ld a,iyh
		and %00001111;ixl		;substep
		xor l					;Apply flip
		ld l,0
		call Fraction32			;Do Fraction
;		call showhl

	pop de
	pop bc

	ld a,h
	add d						;re-add lower value
	ld h,a
	;pop de
	ret

