transform_screen:
	ld ix,terrain_buffer

	ld hl,sprite_buffer
	ld a,64
	ld b,0
scale_loop:
	or a
	jp z,scale_done
	dec a
	push af
	push bc
	push hl

	ld d,0
	ld e,b
	push hl
	ld hl,output_width_table
	add hl,de
	ld c,(hl)
	ld hl,source_advance_table
	add hl,de
	ld b,(hl)
	pop hl

	ld a,96
	sub c
	sra a

	push ix
	push bc
	call scale_line
	pop af
	pop ix

	ld d,0
	ld e,a

	add ix,de

	pop hl
	ld de,12
	add hl,de
	pop bc
	inc b
	pop af
	
	jr scale_loop
scale_done:
	ret


Scale_line:
	ld e,a
	and 7
	ld b,a
	ld a,e
	rra		;one free one, carry's reset from and 7
	sra a
	sra a
	ld d,0
	ld e,a
	add ix,de

	ld d,b
	ld b,96
	ld a,c
	call FractionToFix8
	ld e,c

	ex af,af'
	ld a,1
	ex af,af'
	ld c,(ix)
	ld a,d
	ld d,0
	or a
	jp z,_skipintial

	ld b,a
_initialskip:
	rlc c
	ld a,d
	add a,e
	ld d,a
	ex af,af'
	rlca
	ex af,af'
	djnz _initialskip

_skipintial:
	ld b,12
	ld a,d
pixel_loop2:
	repeatcode(8)
	ld (hl),d
	inc hl
	dec b
	jp nz,pixel_loop2
	ret

output_width_table:
.db 96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,82,81,80,79,78,77,76,76,75,74,73,72,72,71,70,69,69,68,67,66,66,65,64,64,63,62,62,61,60,60,59,58,58,57,56,56,55,55,54,53,53,52,52,51,51,50,50,49,48

		
source_advance_table:
.fill 16,28
.db 14,28,28,14,28,28,14,28,14,28,14,28,14,28,14,28
.fill 16,14
.db 00,14,14,00,14,14,00,14,14,00,14,00,14,00,14,00