;/****************************************************************
;This code is copyright 1993. All Rights Reserved. Authors:-
;
;  Jason Freund and Gabe Dalbec.
;  Chris Hames
;
;****************************************************************/

;	INCLUDE "defines.i"

	section	code

	XDEF	_makelightcolor
	XDEF    _clearmapheight

	XREF	_map
	XREF	_lightcolor
	XREF    _heighttolight
	XREF    _brushpal
	XREF    _halfres
	XREF    _lines
	XREF    _fastbm
	XREF    _screenx
	XREF    _screeny

_makelightcolor:
	movem.l	d2-d5/a2-a5,-(sp)
	lea     _map,a0
	lea     _brushpal,a1
	lea     _lines,a2
	lea     _lightcolor,a3
	lea     _heighttolight,a5
	move.l  (a5),a4
	lea     _halfres,a5
	cmp.w   #0,(a5)
	bne     dohalfres

	move.w  _screenx,d0
	subq.w  #1,d0

loop1:
	move.w  _screeny,d1
	lsr.w   #1,d1				; start of temp=SCREENY/2-map[i].height/64
	move.w  d0,d2				; get i counter
	lsl.w   #3,d2				; i*8 for offset into map
	move.w  0(a0,d2.w),d3		; get map[i].height
	lsr.w   #6,d3				; map[i].height/64
	sub.w   d3,d1				; d1 = temp = SCREENY/2-map[i].height/64
	move.w  2(a0,d2.w),d4		; get map[i].bitmap
	cmp.b   #0,0(a1,d4.w)		; if(brushpal[map[i].bitmap])
	beq.s   past1
	move.w  #$80,d5
	move.w  d0,d2
	and.w   #7,d2
	asr.w   d2,d5
	move.w  d0,d2
	lsr.w   #3,d2
	or.b    d5,0(a2,d2.w)		; lines[i>>3]|=(0x80>>(i&7))
past1:
	cmp.w   #0,d1
	ble.s   past2
	move.b  0(a4,d1.w),d2		; get heighttolight[temp]
	move.b  d2,0(a3,d0.w)		; lightcolor=heighttolight[temp]
	dbra.w  d0,loop1			; next i
	movem.l (sp)+,d2-d5/a2-a5
	rts
past2:
	move.b  100(a4),d2			; heighttolight[100]
	move.b  d2,0(a3,d0.w)		; lightcolor=heighttolight[100]
	dbra.w  d0,loop1			; next i
	movem.l (sp)+,d2-d5/a2-a5
	rts

dohalfres:
	move.w  _screenx,d0
	subq.w  #1,d0

hloop1:
	move.w  _screeny,d1
	lsr.w   #1,d1				; start of temp=SCREENY/2-map[i].height/32
	move.w  d0,d2				; get i counter
	lsl.w   #3,d2				; i*8 for offset into map
	move.w  0(a0,d2.w),d3		; get map[i].height
	lsr.w   #5,d3				; map[i].height/32
	sub.w   d3,d1				; d1 = temp = SCREENY/2-map[i].height/32
	move.w  2(a0,d2.w),d4		; get map[i].bitmap
	cmp.b   #0,0(a1,d4.w)		; if(brushpal[map[i].bitmap])
	beq.s   hpast1
	move.w  #$80,d5
	move.w  d0,d2
	and.w   #7,d2
	asr.w   d2,d5
	move.w  d0,d2
	lsr.w   #3,d2
	or.b    d5,0(a2,d2.w)		; lines[i>>3]|=(0x80>>(i&7))
hpast1:
	cmp.w   #0,d1
	ble.s   hpast2
	move.b  0(a4,d1.w),d2		;  get heighttolight[temp]
	move.b  d2,0(a3,d0.w)		; lightcolor=heighttolight[temp]
	dbra.w  d0,hloop1			; next i
	movem.l (sp)+,d2-d5/a2-a5
	rts
hpast2:
	move.b  100(a4),d2			; get heighttolight[100]
	move.b  d2,0(a3,d0.w)		; lightcolor=heighttolight[100]
	dbra.w  d0,hloop1			; next i
	movem.l (sp)+,d2-d5/a2-a5
	rts





;	if(!halfres)
;		for (i=SCREENX-1;i>=0;i--) {
;			register long temp=75-map[i].height/64;
;	        if (brushpal[map[i].bitmap]) lines[i>>3]|=(0x80>>(i&7));
;	        if (temp>0)
;				lightcolor[i]=heighttolight[temp];
;			else lightcolor[i]=heighttolight[100];
;		}
;	else
;		for (i=SCREENX-1;i>=0;i--) {
;			register long temp=75-map[i].height/32;
;	        if (brushpal[map[i].bitmap]) lines[i>>3]|=(0x80>>(i&7));
;	        if (temp>0)
;				lightcolor[i]=heighttolight[temp];
;			else lightcolor[i]=heighttolight[100];
;		}


_clearmapheight:
	lea     _map,a0
	lea     _fastbm,a1
	move.w  2(a1),d1
	lsl.w   #6,d1
	move.w  _screenx,d0
cloop:
	move.w  d1,(a0)
	addq.l  #8,a0
	dbra.w  d0,cloop
	rts
