;**************************************************************************
;**************************** Animki's Player *****************************
;**************************************************************************
Ilosc_klatek	= 11
s:
	lea	iff1,a5
	cmp.l	#'FORM',(a5)
	bne.w	ERROR
.Search_BMHD
	bsr	Next_hunk
	cmp.l	#'BMHD',(a5)		;bitmap header
	bne.s	.Search_BMHD
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	move	8(a5),d1		;width
	lsr	#3,d1
	move	10(a5),d2		;height
	move.b	16(a5),d0
	move	d0,d3
	ror	#4,d3
	move	d3,dept
	move	d0,Depth
	move	d1,Width+2
	move	d2,Height+2
.Search_CMAP
	bsr	NEXT_HUNK
	cmp.l	#'CMAP',(a5)
	bne.s	.Search_CMAP
	lea	8(a5),a0

	lea	Colors,a1
	move	depth,d3
	moveq	#1,d7
	lsl	d3,d7
	subq	#1,d7
.colors
	move.b	(a0)+,d0
	move.b	(a0)+,d1
	move.b	(a0)+,d2
	lsr	#4,d0
	lsl	#4,d2
	and	#$f,d0
	and	#$f0,d1
	and	#$f00,d2
	or	d0,d1
	or	d1,d2
	move	d2,2(a1)
	addq.l	#4,a1
	dbf	d7,.colors
	
.Search_BODY
	bsr	Next_Hunk
	cmp.l	#'BODY',(a5)
	bne.s	.Search_BODY
	lea	8(a5),a0

	bsr	ul_depackIFF
	bsr	SwapScreen

	move.l	#Cop,$dff080
	clr.w	$dff088

	lea	screen,a0
	lea	screen2,a1
	move.l	#10240/2-1,d7
.n	move.l	(a0)+,(a1)+
	dbf	d7,.n

	moveq	#Ilosc_Klatek-1,d7
.wrmb
	cmp.b	#$50,$dff006
	bne.s	.wrmb
.wrm	cmp.b	#$50,$dff006
	beq.s	.wrm

	move.l	d7,-(sp)
	move.b	$dff006,start
	bsr	DeAnim
	bsr	SwapScreen
	move.b	$dff006,end
	move.l	(sp)+,d7
	
	dbf	d7,.wrmb
WLMB:
	btst	#6,$bfe001
	bne.s	wlmb
ERROR:
	rts
start:	dc.l	0
end:	dc.l	0
NExt_Hunk:
	cmp.l	#'FORM',(a5)
	bne.s	.ok
.back
	lea	12(a5),a5
	cmp.l	#'FORM',(a5)
	bne.s	.czekit
	bra.s	.back
.ok	add.l	4(a5),a5
	addq	#8,a5
.czekit
	move.l	a5,d0
	btst	#0,d0
	beq.s	.oki
	addq	#1,a5
.oki		
	rts

SwapScreen:
	cmp.l	#screen,Display
	beq.s	.second

	move.l	#Screen2,d0
	move.l	#screen,Display
	bra.s	.set
.second
	move.l	#Screen,d0
	move.l	#screen2,Display
.set
	lea	bitplanes+2,a0
	move	depth,d1
	subq	#1,d1
.Wroc	swap	d0
	move.w	d0,(a0)
	swap	d0
	move.w	d0,4(a0)
	lea	8(a0),a0
	add.l	#$2800,d0
	dbf	d1,.wroc
	rts

DeAnim:
.nd0
	bsr	Next_Hunk
	
	cmp.l	#'DLTA',(a5)
	bne.s	.nd0
	lea	72(A5),a1

	moveq	#0,d5
	moveq	#0,d6
	move	Depth,d6
	subq	#1,d6
.plane
	move.l	display,a4
	move.l	Width,d7	;- ilosc bytow w linii
	subq	#1,d7
.column
	move.l	a4,a0		;- w A0 temp of screen
	add.l	d5,a0

	moveq	#0,d0
	move.b	(a1)+,d0	;check op-count kolumny
	beq.s	.next_column

	subq	#1,d0
.back
	moveq	#0,d1
	move.b	(a1)+,d1
	beq.s	.same_op
	tst.b	d1
	bpl.s	.skip_op
.uniq_op
	and	#$7f,d1
	subq	#1,d1
.uniq1	move.b	(a1)+,(a0)
	add.l	Width,a0
	dbf	d1,.uniq1
	bra.s	.next_op
.same_op
	moveq	#0,d2
	moveq	#0,d3
	move.b	(a1)+,d2
	move.b	(a1)+,d3
	subq	#1,d2
.same1	move.b	d3,(a0)
	add.l	Width,a0
	dbf	d2,.same1
	bra.s	.next_op
.skip_op
	move.l	Width,d4
	mulu	d4,d1
	add.l	d1,a0
.next_op
	dbf	d0,.back
.next_column
	addq.l	#1,a4
	dbf	d7,.column
.next_plane
	move.l	Width,d4
	move.l	Height,d3
	mulu	d3,d4
	add.l	d4,d5
	dbf	d6,.plane
	rts
	
;Depack Byte1Run Compressed Body:
;A0 - Packed Data, A1 - Destination Path
;d1 - width, d2 - height
;d0 - depth
ul_DepackIFF:
	movem.l	d0-a6,-(sp)
	move.l	Display,a1
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	move	depth,d0
	move	width+2,d1
	move	height+2,d2
	move.l	d1,d3
	mulu	d2,d3
	move.l	a1,a2
	subq	#1,d2
	subq	#1,d0
U2_Get:
	move.l	d0,d6
	move.l	a2,a3
U2_NextPlane:
	move.l	a3,a1
	moveq	#0,d7
U2_TakeNext:
	moveq	#0,d5
	move.b	(a0)+,d5
	bmi.s	U2_Xero
U2_Copy:
	add	d5,d7
	addq	#1,d7
.copy	move.b	(a0)+,(a1)+
	dbf	d5,.copy
	
U2_Check:
	cmp.w	d1,d7
	bcs.s	U2_TakeNext
	add.l	d3,a3
	dbf	d6,U2_NextPlane
	add.l	d1,a2
	dbf	d2,U2_Get
	movem.l	(sp)+,d0-a6
	rts
U2_Xero:
	move.b	(a0)+,d4
	neg.b	d5
	add	d5,d7
	addq	#1,d7
.xero	move.b	d4,(a1)+
	dbf	d5,.xero
	bra.s	U2_Check

	Section	dane,DATA
Display:	dc.l	Screen
Depth:		dc.w	0
Width:		dc.l	0
Height:		dc.l	0
	Section	Coper,DATA_C
;--------------------------------------------------------------------------
cop:
	dc.w	$96,$20
	dc.w	$8e,$2581,$90,$40ff
	dc.w	$92,$38,$94,$d0
	dc.w	$102,0,$104,0
	dc.w	$108,0,$010a,0
	
bitplanes:
	dc.w	$e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0
	dc.w	$ec,0,$ee,0,$f0,0,$f2,0,$f4,0,$f6,0

Colors:	dc.w	$0180,$0,$0182,$0,$0184,$0,$0186,$0
	dc.w	$0188,$0,$018a,$0,$018c,$0,$018e,$0
	dc.w	$0190,$0,$0192,$0,$0194,$0,$0196,$0
	dc.w	$0198,$0,$019a,$0,$019c,$0,$019e,$0
	dc.w	$01a0,$0,$01a2,$0,$01a4,$0,$01a6,$0
	dc.w	$01a8,$0,$01aa,$0,$01ac,$0,$01ae,$0
	dc.w	$01b0,$0,$01b2,$0,$01b4,$0,$01b6,$0
	dc.w	$01b8,$0,$01ba,$0,$01bc,$0,$01be,$0

	dc.w	$28ff,$fffe
	dc.w	$0100
dept:	dc.w	$0000
	dc.w	$ffff,$fffe
;--------------------------------------------------------------------------
	Section	Screen,BSS_C
screen:		ds.b	10240*6
screen2:	ds.b	10240*6
	Section Animka,data
IFF1:
	incdir	Galanoid:anims/
	incbin	"anim5.b"
