
*******************- OUTCAST PACK MAG CODE (C) PHIL!95/NEO -*****************

	section outcastcode,code_c

	incdir	'scene1:coding/asm/demos/exsyslib/'
	include	'include/hardware/exsys_takeover.s' ;1st codeline!

	Incdir	scene1:coding/asm/demos/outcastmag/
	move.l	_OSVBR(a4),_vbr

start:	movem.l a0-a6/d1-d7,-(a7)
	move.l #$dff000,a0
	move.l #restvars,a1
	move.w $1c(a0),orig_inten(a1)
	move.w $1e(a0),orig_intreq(a1)
	move.w $02(a0),orig_dmacon(a1)
	move.l	_vbr,a2
	move.l $6c(a2),orig_lev3(a1)
	move.l $68(a2),orig_lev2(a1)

	jsr routine

	move.w #$7fff,$dff09a
	move.w #$7fff,$dff09c
	move.w #$7fff,$dff096
	move.l #restvars,a1

	move.l	_vbr,a2
	move.l orig_lev3(a1),$6c(a2)
	move.l orig_lev2(a1),$68(a2)
	move.w orig_inten(a1),d0
	move.w orig_dmacon(a1),d1
	move.w orig_intreq(a1),d2
	ori.w #$c000,d0
	move.w d0,$dff09a
	ori.w #$8000,d1
	move.w d1,$dff096
	ori.w #$8000,d2
	move.w d2,$dff09c

	Move.l $4,a6		;restore system
	move.l #gfx_text,a1
	moveq #0,d0
	jsr -$228(a6)
	addi.l #$26,d0
	move.l d0,a0
*	move.l (a0),$dff080
*	clr.w $dff088

	movem.l (a7)+,a0-a6/d1-d7
	moveq #0,d0
	bsr loadexe
	moveq #0,d0
	bra start

_vbr:	dc.l	0

gfx_text	dc.b "graphics.library",0
	even

restvars	dcb.w $8,0

orig_inten  equ $0
orig_intreq equ $2
orig_dmacon equ $4
orig_lev3   equ $6
orig_lev2	  equ $a

*----------------------------------------------------------------------------

* OUTCAST Variable_Labels *

oldmousex		equ 0
oldmousey		equ 2
pointerx		equ 4
pointery		equ 6
icon_lit		equ 8
no_of_intros	equ $a
intros_first_line	equ $c
intros_step	equ $e
menu_mode		equ $10
intro_highlighted	equ $12
screen_offset	equ $14
next_page_top	equ $16
scroll_left	equ $1a
scroll_right	equ $1c
column_slice	equ $1e
last_page		equ $20
current_page_top	equ $22
first_page	equ $26
icon_selected	equ $28
drop_screen	equ $2a
drop_sin_index	equ $2c
nextpage_trig	equ $2e
prevpage_trig	equ $30
menu_trig		equ $32
newframe		equ $34
keypressed	equ $36
oldkey		equ $37
charnumber	equ $38
matchline		equ $3a
matchscreen	equ $3c
old_match_address	equ $3e
did_find		equ $42
start_of_section	equ $44
nearestmatchline	equ $48
nearestmatchpagetop equ $4a
nearestmatchscreen	equ $4c
showsearchbox	equ $50
y_centre		equ $52
waitpage		equ $54
music_toggle	equ $56
fade_music	equ $58
fade_in_all	equ $5a
fade_out_all	equ $5c
quit		equ $5e
barpos		equ $60
searchplanes_on	equ $62
copirq_occured	equ $64
fadelpi		equ $66
load_intro	equ $68
presentspage	equ $6a

;----------------------------------------------------------------------------

routine:	move.l #$dff000,a6
	move.l #$7fff7fff,$9a(a6)
	move.w #$8400,$96(a6)
	move.l	_vbr,a2
	move.l #New_LEV3,$6c(a2)
	move.l #New_Lev2,$68(a2)
	
	move.l #outcast_vars,a5
	moveq #$3f,d7
wipevars	clr.w (a5)+
	dbf d7,wipevars
	move.l #textscreen-84,a5
	move.w #8693,d7
wipets	clr.w (a5)+
	dbf d7,wipets
	move.l #textplane2,a5
	move.w #6971,d7
wipetp2	clr.w (a5)+
	dbf d7,wipetp2

	move.l #lpcols1+2,a5
	move.l #lpcols2+2,a4
	move.l #cop_cols1+2,a3
	move.l #cop_cols3+2,a2
	move.l #cop_pcols+2,a1
	move.w #15,d7
cccloop1	clr.w (a5)
	clr.w (a4)
	clr.w (a3)
	clr.w (a2)
	clr.w (a1)
	addq.w #4,a5
	addq.w #4,a4
	addq.w #4,a3
	addq.w #4,a2
	addq.w #4,a1
	dbf d7,cccloop1
	
	move.l #cop_bcols+6,a5
	moveq #31,d7
setbclp	move.w #sbcol,(a5)
	add.w #20,a5
	dbf d7,setbclp

	bsr mt_init
	bsr INIT_FONTS
	
	move.l #cop_bpls1,a0
	move.l #cop_bpls3,a1
	move.l #topborder,d0
	move.l #bottomborder,d1
	moveq #3,d7
initbpllp	move.w d0,6(a0)
	swap d0
	move.w d0,2(a0)
	swap d0
	move.w d1,6(a1)
	swap d1
	move.w d1,2(a1)
	swap d1
	add.l #40,d0
	add.l #40,d1
	addq.l #8,a0
	addq.l #8,a1
	dbf d7,initbpllp

	move.l #cop_bpl2,a0
	move.l #textplane2,d0
	move.w d0,6(a0)
	swap d0
	move.w d0,2(a0)

	move.l #cop_spr,a0
	move.l #spr1,d0
	move.w d0,6(a0)
	swap d0
	move.w d0,2(a0)
	move.l #spr2,d0
	move.w d0,$e(a0)
	swap d0
	move.w d0,$a(a0)
	
	move.l #copper_bar,d0
	move.l #cop_skpln,a0
	move.w d0,$6(a0)
	swap d0
	move.w d0,$2(a0)
	move.l #copper_rtn,d0
	move.l #copper_bar,a0
	move.w d0,$6(a0)
	swap d0
	move.w d0,$2(a0)
	move.l #copper,d0
	move.l #cop_rstrt,a0
	move.w d0,$6(a0)
	swap d0
	move.w d0,$2(a0)

	moveq #1,d0
	moveq #0,d1
	bsr blit_button
	moveq #7,d0
	moveq #0,d1
	bsr blit_button
	moveq #8,d0
	moveq #1,d1
	bsr blit_button
	moveq #2,d0
	moveq #0,d1
	bsr blit_button
	
	move.l #lpbpls1,a0
	move.l #lpbpls2,a1
	move.l #outcastscreen,d0
	move.l #outcastscreen+(512/8*4),d1
	moveq #3,d7
initlplp	move.w d0,6(a0)
	swap d0
	move.w d0,2(a0)
	swap d0
	move.w d1,6(a1)
	swap d1
	move.w d1,2(a1)
	swap d1
	add.l #512/8,d0
	add.l #512/8,d1
	addq.l #8,a0
	addq.l #8,a1
	dbf d7,initlplp

	move.l #lpswap1,a0
	move.l #lpswap2,a1
	move.l #loadingpiccopper1,d0
	move.l #loadingpiccopper2,d1
	move.w d0,6(a1)
	swap d0
	move.w d0,2(a1)
	move.w d1,6(a0)
	swap d1
	move.w d1,2(a0)

	bsr drawinitpage

	move.l #cop_cols2+2,a5
	moveq #7,d7
wcclp	clr.w (a5)
	addq.w #4,a5
	dbf d7,wcclp
	
	include includes/dotplot_initcode_c.src

	move.w #$4000,mt_volscale
	move.l #$dff000,a6
	move.l #outcast_vars,a5
	move.w #1,presentspage(a5)
	move.b #$ff,keypressed(a5)
	move.w #34,fade_in_all(a5)
	move.w #$1,first_page(a5)
	move.w #$1,last_page(a5)
	move.w #$01fe,cop_doskp
	move.l #copper,$80(a6)
	clr.w $88(a6)
	move.w #$c038,$9a(a6)

;---------------------------------------------------------------------------

waitloop	move.l #outcast_vars,a5	;main code loop
	tst.w newframe(a5)
	beq.s waitloop
	clr.w newframe(a5)
	bsr eachframetasks
	move.l #outcast_vars,a5
	tst.w quit(a5)
	beq waitloop

	jsr mt_end
	move.l	_vbr,a2
	move.l #lev3phase2,$6c(A2)	;loading pic section
	move.l #$dff000,a0
	move.w #$7fff,$9a(a0)
	move.l #lacesynccopper,$80(a0)
	clr.w $88(a0)
wlf1	btst #7,$4(a0)
	beq.s wlf1
wlf2	btst #7,$4(a0)
	bne.s wlf2
wlf3	btst #7,$4(a0)
	beq.s wlf2
	move.l #loadingpiccopper1,$80(a0)
	clr.w $88(a0)
	move.w #$c020,$9a(a0)
waitloop2	move.l #outcast_vars,a5
	tst.w newframe(a5)
	beq.s waitloop2
	clr.w newframe(a5)
	bsr fadeloadpicin
	move.l #outcast_vars,a5
	addq.w #1,fadelpi(a5)
	cmpi.w #64,fadelpi(a5)
	bls.s waitloop2
	move.w load_intro(a5),d0
	subq.w #1,d0
	lsl.w #2,d0
	move.l #fn_addrs,a0
	move.l $00(a0,d0.w),filename
	rts
	
;---------------------------------------------------------------------------

New_lev3	movem.l a0-a6/d0-d7,-(a7)
	andi.w #$10,$dff01e
	beq.s vbl
	bsr mt_music
	bsr highlight
	move.l #outcast_vars,a5
	move.w #1,copirq_occured(a5)
	move.w #$0010,$dff09c
	bra l3end

vbl	move.l #outcast_vars,a5
	move.w #1,newframe(a5)
	bsr update_screen_pos
	bsr dot_plotter
	bsr gen_searchbox
	move.w #$0020,$dff09c
l3end	movem.l (a7)+,a0-a6/d0-d7
	rte
	
;---------------------------------------------------------------------------

Lev3phase2

	movem.l a0-a6/d0-d7,-(a7)
	move.l #outcast_vars,a5
	move.w #1,newframe(a5)
	move.w #$0020,$dff09c
	bra l3end
	
;---------------------------------------------------------------------------

New_lev2:

	movem.l d0/a2,-(a7)
	move.l #$bfe001,a2
	btst #3,$d00(a2)
	beq nokey

	move.b #$48,$e00(a2)	
	move.b #53,$400(a2)		;set timer lo
	move.b #00,$500(a2)		;set timer hi (starts counter)
kciawlp2	btst #0,$e00(a2)		;wait for timeout
	bne.s kciawlp2
	
	bclr #6,$e00(a2)
	move.b $c00(a2),d0
	not.b d0
	ror.b #1,d0
	move.l #outcast_vars,a2
	move.b d0,keypressed(a2)

nokey	move.w #8,$dff09c
	movem.l (a7)+,d0/a2
	rte
	
;---------------------------------------------------------------------------


eachframetasks:

	bsr screen_changes
	bsr mouse
	bsr pointer_sense
	bsr button_handler
	bsr scroll_text
	bsr music_fader
	bsr screen_fades
	rts
		
;---------------------------------------------------------------------------

update_screen_pos:

drop_x    equ $c0
drop_step	equ 2

	movem.l a0-a6/d0-d7,-(a7)
	move.l #outcast_vars,a6
	tst.w waitpage(a6)
	beq.s nowp
	subq.w #1,waitpage(a6)

nowp	tst.w searchplanes_on(a6)
	bne sp_on
	move.l #cop_bpl1,a0
	move.l #textscreen+2,a1
	add.w screen_offset(a6),a1
	move.l a1,d0
	move.w d0,$6(a0)
	swap d0
	move.w d0,$2(a0)
	swap d0
	subi.l #84,d0
	move.l #cop_bpl2,a0
	move.w d0,$6(a0)
	swap d0
	move.w d0,$2(a0)
	swap d0

sp_on	tst.w drop_screen(a6)
	beq no_drop
	moveq #$48,d0
	move.w drop_sin_index(a6),d1
	lsl.w #1,d1
	move.l #sinetable,a2
	move.w $00(a2,d1.w),d1
	lsl.w #1,d1
	neg.w d1
	mulu #drop_x,d1
	swap d1
	add.w d1,d0
	move.w #$b200,cop_tstrt+6
	cmpi.w #$eb,d0
	bls.s pos_ok
	move.w #$ec,d0
	clr.w cop_tstrt+6
pos_ok	move.b d0,cop_tstrt

no_drop	move.w barpos(a6),d0	
	move.l #copper_bar+8,a0
	lea $8(a0),a1
	moveq #$1f,d7
hlloop	move.b d0,(a0)
	move.b d0,(a1)
	add.w #$14,a0
	add.w #$14,a1
	addq.w #1,d0
	dbf d7,hlloop
	movem.l (a7)+,a0-a6/d0-d7
	rts

;---------------------------------------------------------------------------

screen_changes

	movem.l a0-a6/d0-d7,-(a7)
	move.l #outcast_vars,a6
	tst.w drop_screen(a6)
	beq no_drop2

	add.w #drop_step,drop_sin_index(a6) ;screen dropped out of sight?
	cmp.w #178,drop_sin_index(a6)
	bne.s no_max_depth
	move.l #dot_vars,a5
	move.w #1,dospin(a5)
	clr.w presentspage(a6)

	tst.w menu_trig(a6)		;menu mode triggered?
	beq.s notsmenu
	clr.w screen_offset(a6)
	bsr create_intro_menu
	move.w #10,drop_sin_index(a6)
	bra no_drop2

notsmenu	move.w matchline(a6),d0	;screen shown as result of search?
	beq notsf
	move.w matchscreen(a6),d0
	mulu #80,d0
	
notsf	move.l next_page_top(a6),a1
	move.l #textscreen+2,a0
	move.w d0,screen_offset(a6)
	add.w d0,a0
	bsr make_text_screen
	move.w #2,drop_sin_index(a6)
	bra no_drop2

no_max_depth
	cmpi.w #90,drop_sin_index(a6)
	bne.s no_drop2
	clr.w drop_screen(a6)
	tst.w menu_trig(a6)
	beq.s no_mt
	clr.w menu_trig(a6)
	move.w #1,menu_mode(a6)
no_mt	move.w matchline(a6),d0
	beq no_drop2
	subq.w #1,d0
	lsl.w #3,d0
	add.b #$47,d0
	move.b d0,cop_hl1
	add.b #9,d0
	move.b d0,cop_hl2

	move.w #$0180,cop_hl1+4	;highlight col 0
	move.w #$0180,cop_hl2+4	;highlight col 0
	clr.w matchline(a6)

no_drop2	movem.l (a7)+,a0-a6/d0-d7
	rts

;---------------------------------------------------------------------------

mouse:	move.l #$dff000,a0		;read mouse - move pointer
	move.l #outcast_vars,a2

	move.b $a(a0),d0
	move.b $b(a0),d1
	move.b d0,d2
	move.b d1,d3
	sub.b oldmousex(a2),d0
	sub.b oldmousey(a2),d1
	ext.w d0
	ext.w d1
	add.w d0,pointery(a2)
skp_y	add.w d1,pointerx(a2)
	cmpi.w #$134,pointerx(a2)
	blt.s xinrr
	move.w #$134,pointerx(a2)
xinrr	tst.w pointerx(a2)
	bpl.s xinrl
	clr.w pointerx(a2)
xinrl	cmpi.w #$e0,pointery(a2)
	blt.s yinrb
	move.w #$e0,pointery(a2)
yinrb	tst.w pointery(a2)
	bpl.s yinrt
	clr.w pointery(a2)
yinrt	move.b d2,oldmousex(a2)
	move.b d3,oldmousey(a2)

	move.l #spr1,a3		;put new coords in sprite
	move.w pointerx(a2),d0
	move.w pointery(a2),d1
	add.w #$80,d0
	add.w #$49,d1
	move.w d1,d2
	add.w #$f,d2
	move.b d1,(a3)
	move.b d2,$2(a3)
	move.w #$80,d4
	lsr.w #1,d0
	bcc.s nocarry
	or.w #1,d4
nocarry	move.b d0,$1(a3)
	btst #8,d1
	beq.s novstrt
	ori.w #4,d4
novstrt	btst #8,d2
	beq.s novstop
	ori.w #2,d4
novstop	move.b d4,$3(a3)
	move.l (a3),spr2

skipxy	tst.w intro_highlighted(a2)
	beq.s normb
	tst.w fade_out_all(a2)
	bne.s normb
	move.w intro_highlighted(a2),load_intro(a2)
	btst #6,$bfe001
	bne.s normb
	move.w #40,fade_out_all(a2)
	move.w #$fc00,fade_music(a2)
normb	rts

;---------------------------------------------------------------------------

Pointer_sense

	moveq #0,d7
	move.l #outcast_vars,a0
	tst.w drop_screen(a0)
	bne noclick
	tst.w scroll_left(a0)
	bne noclick
	tst.w scroll_right(a0)
	bne noclick
	
	btst #6,$bfe001
	bne noclick
	move.l #buttonsensemask,a1
	move.w pointery(a0),d0
	sub.w #166,d0		;text screen height
	bcs nobit3
	move.w pointerx(a0),d1
	lsr.w #1,d0
	lsr.w #1,d1
	move.w d1,d2
	andi.w #7,d2
	eori.w #7,d2
	mulu #(160/8)*4,d0
	add.w d0,a1
	lsr.w #3,d1
	add.w d1,a1
	
	btst d2,(a1)
	beq.s nobit0
	ori.w #1,d7
nobit0	add.w #160/8,a1
	btst d2,(a1)
	beq.s nobit1
	ori.w #2,d7
nobit1	add.w #160/8,a1
	btst d2,(a1)
	beq.s nobit2
	ori.w #4,d7
nobit2	add.w #160/8,a1
	btst d2,(a1)
	beq.s nobit3
	ori.w #8,d7
nobit3	

noclick	move.w d7,icon_selected(a0)
	rts

;---------------------------------------------------------------------------

blit_button:

* D0 : button to draw 1-9
* D1 : 1=select, 0=unselect

	movem.l a0-a6/d0-d7,-(a7)
	move.l #$dff000,a6
	move.l #$ffff0000,$44(a6)	;f/l word masks
	
	move.l #button_unselected_addrs,a0
	tst.w d1
	beq.s unsel
	move.l #button_selected_addrs,a0
unsel	move.l #buttonsizes_and_positions,a2
	subq.w #1,d0
	lsl.w #2,d0
	move.w d0,d1
	lsl.w #1,d1
	move.w 0(a2,d1.w),d2	;size x
	lsr.w #3,d2		;width in bytes
	move.w d2,d6		;store byte width
	mulu 2(a2,d1.w),d2		;* size y
	move.w d2,d4		;store length of 1 plane
	lsl.w #2,d2		;* 4 to find mask
	move.l 0(a0,d0.w),a1
	move.l a1,$4c(a6)		;source b - data
	add.w d2,a1
	
	move.l #bottomborder,a3
	move.w 4(a2,d1.w),d3	;x plot pos
	move.w d3,d5
	move.w 6(a2,d1.w),d2	;y pos
	mulu #40*4,d2
	lsr.w #4,d3
	lsl.w #1,d3
	add.w d3,a3
	add.w d2,a3		;plot address

	and.w #$f,d5
	ror.w #4,d5
	move.w d5,$42(a6)		;bltcon1
	ori.w #$0fca,d5
	move.w d5,$40(a6)		;bltcon0
	
	addq.w #2,d6
	move.w #40*4,d5
	sub.w d6,d5
	move.w d5,$60(a6)		;mod c
	move.w d5,$66(a6)		;mod d
	move.w #$fffe,$62(a6)	;mod b
	move.w #$fffe,$64(a6)	;mod a
	
	move.w 2(a2,d1.w),d5	;size y
	lsl.w #6,d5
	lsr.w #1,d6
	or.w d6,d5
	
	moveq #3,d7
blitloop	move.l a1,$50(a6)		;source a - mask
	move.l a3,$48(a6)		;source c
	move.l a3,$54(a6)		;dest   d	
	move.w d5,$58(a6)
	bsr blitwait
	add.w #40,a3
	dbf d7,blitloop
	movem.l (a7)+,a0-a6/d0-d7
	rts

*----------------------------------------------------------------------------

Create_intro_menu

X_centre		equ 320
Y_line_spacing	equ 2
Modulo		equ 84

	movem.l a0-a6/d0-d7,-(a7)
	bsr clear_main_screen
	move.l #cop_bpl2,a0
	move.l #textscreen-82,d0
	move.w d0,6(a0)
	swap d0
	move.w d0,2(a0)

	move.l #intros_banner,a1
	move.l a1,a3
	moveq #0,d1		;count number of lines used by intro
findlines	move.b (a3)+,d0		;menu banner, so that the centre of		
	beq.s foundlnes		;the remaining space can be found
	cmpi.b #$a,d0		
	bne.s findlines
	addq.w #1,d1
	bra findlines
foundlnes	mulu #9,d1
	move.w #166,d2
	sub.w d1,d2
	lsr.w #1,d2
	add.w d1,d2	
	subq.w #1,d2
	move.l #Outcast_vars,a6
	move.w d2,y_centre(a6)		
	
	move.l #textscreen+2,a0
	bsr make_text_screen

	move.l #Outcast_vars,a6
	clr.w screen_offset(a6)
	move.l #textscreen+2,plot_screen
	move.w #modulo,total_modulo
	move.w #0,use_font
	
	move.l #intros_text,a0
	moveq #0,d7		;count number of intros
	move.l a0,a1
lcntloop	cmpi.b #$a,(a1)+
	bne.s lcntloop
	addq.w #1,d7
	cmp.b #"@",(a1)+
	bne.s lcntloop
	move.w d7,no_of_intros(a6)

	move.l #font_list,a1
	move.w use_font,d3
	mulu #3*4,d3
	move.l 0(a1,d3.w),a2
	move.w $2(a2),d0		;height of this font
	add.w #y_line_spacing,d0
	move.w d0,d2
	move.w d0,intros_step(a6)
	mulu d7,d0		;total height of intro text
	lsr.w #1,d0
	move.w y_centre(a6),d1
	sub.w d0,d1		;y position of 1st line
	move.w d1,plotypos
	subq.w #2,d1
	move.w d1,intros_first_line(a6)
	
	move.l 8(a1,d3.w),a2
	sub.w #128,a2		;char width list
	move.l a0,a3
nxtmnuln	bsr findpixlength
	lsr.w #1,d1
	move.w #x_centre,d0
	sub.w d1,d0
	move.w d0,plotxpos
	bsr type_text
	add.w d2,plotypos
	cmpi.b #"@",(a3)
	bne nxtmnuln

	move.l #copper_bar+8,a0
	move.w intros_step(a6),d0
	mulu #$14,d0
	move.w #$0088,-4(a0,d0.w)
	bsr setmenupalette

	movem.l (a7)+,a0-a6/d0-d7
	rts

findpixlength:
	
	move.l a3,a0
	moveq #0,d1
	moveq #0,d0
ftwid	move.b (a3)+,d0				
	cmp.b #$a,d0
	beq.s eol
	move.b 0(a2,d0.w),d0
	add.w d0,d1		;total width
	add.w char_spacing,d1
	bra.s ftwid
eol	rts

*----------------------------------------------------------------------------

highlight

	move.l #outcast_vars,a6
	tst.w menu_mode(a6)
	bne.s go_hl
	rts

go_hl	moveq #0,d0
	move.w pointery(a6),d0
	sub.w intros_first_line(a6),d0
	bcs outrange
	divu intros_step(a6),d0
	move.w d0,d1
	addq.w #1,d1
	cmp.w no_of_intros(a6),d1
	bhi.s outrange
	move.w d1,intro_highlighted(a6)
	mulu intros_step(a6),d0
	add.w intros_first_line(a6),d0
	add.w #$48,d0
	move.w d0,barpos(a6)
	move.w #$0088,cop_doskp
	rts
				
outrange	move.w #$01fe,cop_doskp
	clr.w intro_highlighted(a6)
	rts
	

******************************************************************************			
*>>>>>>>>>>>>>>>>>>>>>>>>>> ANYFONT ROUTINE STARTS <<<<<<<<<<<<<<<<<<<<<<<<<<*
******************************************************************************			

* Any_Font plotter V1.00 (C) Phil!95/Neo 26/3/95...

INIT_FONTS:
	
	movem.l a0-a6/d0-d7,-(a7)
	move.l #font_list,a6
init_cset	move.l $4(a6),a0
	move.l $8(a6),a1
	move.l (a6),a4
	move.l a4,d0		;All fonts done?
	beq finitdone
	addq.w #4,a4

	move.w -4(a4),d0
	mulu   -2(a4),d0
	add.l d0,a4		;edge detect line
	moveq #0,d7		;pixel pos

	moveq #0,d0
nextpoint	move.b (a0)+,d0
	beq csetdone
	move.w d0,d1
	lsl.w #1,d1
	
	move.w d7,(a1,d1.w)		;position of char
findpoint	addq.w #1,d7
	move.w d7,d6
	move.w d6,d5
	lsr.w #3,d6
	andi.w #7,d5
	eori.w #7,d5
	btst d5,(a4,d6.w)
	beq.s findpoint

	move.w d7,d6
	sub.w (a1,d1.w),d6
	move.b d6,-128(a1,d0.w)	;width of char
	bra  nextpoint
csetdone
	add.w #12,a6
	bra init_cset

finitdone		
	movem.l (a7)+,a0-a6/d0-d7
	rts
	
*----------------------------------------------------------------------------

TYPE_TEXT:

	move.w use_font,d0
	mulu #12,d0		;access correct font tables
nxt_char	move.b (a0)+,d7
	cmpi.b #$a,d7
	bls.s text_done
	bsr PLOT_CHAR
	bra nxt_char
text_done	rts
	
*----------------------------------------------------------------------------

PLOT_CHAR:

* D7 holds ASCII value of char to plot.
* Vars: Plotxpos and plotypos hold plot position.
*       Total_modulo = y line offset
*       Char_spacing = (additional) character gap
*       Plot_screen  = screen start address


	movem.l a0-a6/d0-d7,-(a7)

	move.l #font_list,a4
	move.l 0(a4,d0.w),a1
	addq.w #4,a1
	move.l Plot_screen,a2
	move.l $8(a4,d0.w),a3
	move.l #mask_list,a5
	move.l #$dff000,a6

	moveq #0,d0
	move.w plotypos,d0
	mulu total_modulo,d0
	add.l d0,a2
	move.w plotxpos,d1
	move.w d1,d2		
	andi.w #$f,d2		;char drop position 4 ls.bits
	lsr.w #4,d1
	lsl.w #1,d1
	add.w d1,a2		;char drop word-aligned address 

	andi.w #$ff,d7
	move.w d7,d6
	lsl.w #1,d6
	move.w 0(a3,d6.w),d6	;char fetch position
	move.w d6,d3
	andi.w #$000f,d3		;fetch position 4 ls.bits
	move.b -128(a3,d7.w),d7	;char width
	add.w d7,plotxpos

	moveq #0,d5		;Calc font_data source address
	move.w d6,d5
	lsr.w #4,d5
	lsl.w #1,d5
	add.l a1,d5
	move.l d5,$50(a6)		;Blitter source A (Font word addr)

	move.w d6,d5
	add.w d7,d5		;right edge of char
	move.w d6,d0		;copy left edge pos
	move.w d5,d1		;copy right egde pos
	andi.w #$fff0,d0
	andi.w #$fff0,d1
	sub.w d0,d1
	lsr.w #4,d1
	addq.w #2,d1		;gives total width of blit
	move.w d1,d0		;back up word width
	lsl.w #1,d1
	neg.w d1
	move.w d1,$62(a6)		;Blitter modulo 'B' (font mask)
	lea $60(a5,d1.w),a4
	move.l a4,$4c(a6)		;Blitter source 'B' addr (font mask)

	andi.w #$f,d6
	lsl.w #1,d6
	andi.w #$f,d5
	lsl.w #1,d5
	move.w $00(a5,d6.w),$44(a6)	;Blitter FWM
	clr.w $46(a6)		;Blitter LWM
	move.w $20(a5,d5.w),$5c(a5)	;Right edge mask in place

	sub.w d3,d2		;calc rotation (sub fetch from plot)
	bpl sameword
	subq.w #2,a2		;back a word if minus
sameword	ror.w #4,d2
	andi.w #$f000,d2
	move.w d2,$42(a6)		;BLTCON1
	ori.w #$0fea,d2		;D = A and B or C
	move.w d2,$40(a6)		;BLTCON 0 (source rotation)
	move.l a2,$48(a6)		;Blitter source C  (Plot address)
	move.l a2,$54(a6)		;Blitter dest   D  (''        '')

	move.w total_modulo,d2
	add.w d1,d2
	move.w d2,$60(a6)		;Blitter Modulo C
	move.w d2,$66(a6)		;Blitter Modulo D
	move.w -4(a1),d2		;get font width in bytes..
	add.w d1,d2
	move.w d2,$64(a6)		;Blitter Modulo A
	
	move.w -2(a1),d2		;get font height
	lsl.w #6,d2
	or.w d0,d2
	move.w d2,$58(a6)		;Blitsize + go!
	bsr blitwait
	move.w char_spacing,d7
	add.w d7,plotxpos
	
	movem.l (a7)+,a0-a6/d0-d7
	rts

******************************************************************************			
*>>>>>>>>>>>>>>>>>>>>>>>>> ANYFONT ROUTINE ENDS! <<<<<<<<<<<<<<<<<<<<<<<<<<<<*
******************************************************************************			

Make_Text_Screen

Maxlines		equ 20
Stsmod		equ 84

* A0 = Address of screen
* A1 = Address of text

	movem.l a0-a6/d0-d7,-(a7)
	bsr clear_main_screen
	bsr settextpalette
	move.l #outcast_vars,a4
	clr.w first_page(a4)
	tst.b -2(a1)
	bne.s notfpage2
	move.w #1,first_page(a4)	

notfpage2	clr.w last_page(a4)
	move.l a1,current_page_top(a4)

	move.l a0,a2
	move.l #smallfont,a5
	moveq #0,d1
strtln1	moveq #0,d0

nschar1	moveq #0,d7
	move.b (a1)+,d7
	beq scend1
	cmpi.b #$a,d7
	beq.s cr1
	lsl.w #3,d7
	lea $00(a5,d7.w),a6
		
	move.b (a6)+,(a0)
	move.b (a6)+,stsmod(a0)
	move.b (a6)+,stsmod*2(a0)
	move.b (a6)+,stsmod*3(a0)
	move.b (a6)+,stsmod*4(a0)
	move.b (a6)+,stsmod*5(a0)
	move.b (a6)+,stsmod*6(a0)
	move.b (a6)+,stsmod*7(a0)
	
	addq.w #1,a0
	addq.w #1,d0
	cmpi.w #80,d0
	bne.s nschar1
	cmpi.b #$a,(a1)	;skip cr if 80 column line
	bne.s cr1
	addq.w #1,a1

cr1	add.w #stsmod*8,a2
	move.l a2,a0
	addq.w #1,d1
	cmpi.w #maxlines,d1
	bne strtln1			
	tst.b (a1)
	beq scend1
	
mts_done	move.l a1,next_page_top(a4)
	movem.l (a7)+,a0-a6/d0-d7
	rts
	
scend1	move.w #1,last_page(a4)
	bra mts_done
	
;---------------------------------------------------------------------------

Make_Buffer_Text_Screen

Stsmodb		equ 80

* A0 = Address of screen
* A1 = Address of text

	movem.l a0/a2-a6/d0-d7,-(a7)
	move.l #outcast_vars,a4
	clr.w first_page(a4)
	tst.b -2(a1)
	bne.s notfpage
	move.w #1,first_page(a4)	

notfpage	move.l a0,a2
	move.l #smallfont,a5
	moveq #0,d1
strtln2	moveq #0,d0

nschar2	moveq #0,d7
	move.b (a1)+,d7
	beq scend2
	cmpi.b #$a,d7
	beq.s cr2
	lsl.w #3,d7
	lea $00(a5,d7.w),a6
		
	move.b (a6)+,(a0)
	move.b (a6)+,stsmodb(a0)
	move.b (a6)+,stsmodb*2(a0)
	move.b (a6)+,stsmodb*3(a0)
	move.b (a6)+,stsmodb*4(a0)
	move.b (a6)+,stsmodb*5(a0)
	move.b (a6)+,stsmodb*6(a0)
	move.b (a6)+,stsmodb*7(a0)
	addq.w #1,a0
	addq.w #1,d0
	cmpi.w #80,d0
	bne.s nschar2
	cmpi.b #$a,(a1)	;skip cr if 80 column line
	bne.s cr2
	addq.w #1,a1

cr2	add.w #stsmodb*8,a2
	move.l a2,a0
	addq.w #1,d1
	cmpi.w #maxlines,d1
	bne strtln2			
	tst.b (a1)
	beq scend2
	
mbs_done	movem.l (a7)+,a0/a2-a6/d0-d7
	rts
	
scend2	move.w #1,last_page(a4)
	bra mbs_done
	
;---------------------------------------------------------------------------

scroll_text:

	move.l #$dff000,a6
	move.l #outcast_vars,a5

	tst.w nextpage_trig(a5)	;next page requested?
	beq no_init_left
	clr.w nextpage_trig(a5)
	
	tst.w last_page(a5)
	bne no_init_left
	move.w #1,scroll_left(a5)
	clr.w column_slice(a5)
	clr.l old_match_address(a5)
	bsr waitcopirq
	move.b #$ec,cop_hl1		;canel any match highlight bar
	move.b #$ec,cop_hl2

	move.w #nextpage_button,d0	;select icon = on
	moveq #1,d1
	bsr blit_button

	move.l #textplane2,a0	;clear screen
	move.l a0,$54(a6)
	move.l #$01000000,$40(a6)
	clr.w $66(a6)
	move.w #(166*64)+40,$58(a6)
	bsr blitwait
	move.l next_page_top(a5),a1	;then type new text
	move.l a1,current_page_top(a5)
	bsr make_buffer_text_screen
	move.l a1,next_page_top(a5)
	bra no_init_right
	
no_init_left

	
	tst.w prevpage_trig(a5)	;prev page requested?
	beq no_init_right
	clr.w prevpage_trig(a5)
	
	tst.w first_page(a5)
	bne no_init_right
	move.w #1,scroll_right(a5)
	clr.w column_slice(a5)
	clr.w last_page(a5)
	clr.l old_match_address(a5)
	bsr waitcopirq
	move.b #$ec,cop_hl1		;cancel any match highlight bar
	move.b #$ec,cop_hl2

	moveq #20,d7		;count back 20 lines to find
	moveq #$a,d0		;prev page top addr
	move.l current_page_top(a5),a1
countback	cmp.b -(a1),d0
	bne.s countback
	subq.w #1,d7
	bpl.s countback
	addq.w #1,a1
	move.l a1,current_page_top(a5)

	move.w #prevpage_button,d0	;select icon = on
	moveq #1,d1
	bsr blit_button

	move.l #textplane2,a0	;clear screen
	move.l a0,$54(a6)
	move.l #$01000000,$40(a6)
	clr.w $66(a6)
	move.w #(166*64)+40,$58(a6)
	bsr blitwait
	bsr make_buffer_text_screen	;type new 'prev page' text
	move.l a1,next_page_top(a5)

no_init_right
	
	clr.w nextpage_trig(a5)
	clr.w prevpage_trig(a5)
	tst.w scroll_left(a5)
	beq no_scroll_left

	move.w column_slice(a5),d0
	lsl.w #1,d0
	move.l #textplane2,a1
	add.w d0,a1
	move.l a1,$50(a6)		;source
	
	move.l #textscreen,a2
	add.w screen_offset(a5),a2
	addq.w #2,screen_offset(a5)
	clr.w (a2)		;clear top line
	add.w #82,a2
	move.l a2,$54(a6)		;dest

	move.l #-1,$44(a6)
	move.l #$09f00000,$40(a6)
	move.w #80-2,$64(a6)
	move.w #84-2,$66(a6)
	move.w #(165*64)+1,$58(a6)
	bsr blitwait
	addq.w #1,column_slice(a5)
	cmpi.w #40,column_slice(a5)	
	bne.s sl_notend
	clr.w scroll_left(a5)
	move.w #nextpage_button,d0
	clr.w d1
	bsr blit_button
	move.w #5,waitpage(a5)
sl_notend	rts
	

no_scroll_left

	move.l #outcast_vars,a5
	tst.w scroll_right(a5)
	beq.s no_scroll_right

	moveq #39,d0
	sub.w column_slice(a5),d0
	lsl.w #1,d0
	move.l #textplane2,a1
	add.w d0,a1
	move.l a1,$50(a6)		;source
	
	move.l #textscreen,a2
	add.w screen_offset(a5),a2
	subq.w #2,screen_offset(a5)
	clr.w 82(a2)		;clear top line
	move.l a2,$54(a6)		;dest
	
	move.l #-1,$44(a6)
	move.l #$09f00000,$40(a6)
	move.w #80-2,$64(a6)
	move.w #84-2,$66(a6)
	move.w #(165*64)+1,$58(a6)
	bsr blitwait
	addq.w #1,column_slice(a5)
	cmpi.w #40,column_slice(a5)	
	bne.s sr_notend
	clr.w scroll_right(a5)
	move.w #prevpage_button,d0
	clr.w d1
	bsr blit_button
	move.w #5,waitpage(a5)
sr_notend	rts
	

no_scroll_right

	rts

;---------------------------------------------------------------------------

button_handler

prevpage_button	equ 1
menu_button	equ 2
messages_button	equ 3
adverts_button	equ 4
news_button	equ 5
info_button	equ 6
nextpage_button	equ 7
music_button	equ 8
search_button	equ 9

	move.l #outcast_vars,a5
	move.w icon_selected(a5),d2

	cmpi.w #messages_button,d2
	bne.s not_msgs
	move.l #messages,d0
	bra newtextfixed
not_msgs	cmpi.w #adverts_button,d2
	bne.s not_advs
	move.l #adverts,d0
	bra newtextfixed
not_advs	cmpi.w #news_button,d2
	bne.s not_news
	move.l #news,d0
	bra newtextfixed
not_news	cmpi.w #info_button,d2
	bne.s not_info
	move.l #info,d0
	bra newtextfixed

not_info	tst.w menu_mode(a5)		;no scrolling if in menu mode!
	bne notsearch
	tst.w scroll_right(a5)
	bne.s not_np
	tst.w scroll_left(a5)
	bne.s not_np

	cmpi.b #$4f,keypressed(a5)
	beq.s key_prev
	cmpi.w #prevpage_button,d2
	bne not_pp
key_prev	tst.w waitpage(a5)
	bne.s not_pp
	move.w #1,prevpage_trig(a5)		
	rts
		
not_pp	cmpi.b #$4e,keypressed(a5)
	beq.s key_next
	cmpi.w #nextpage_button,d2	
	bne not_np
key_next	tst.w waitpage(a5)
	bne.s not_np
	move.w #1,nextpage_trig(a5)
	rts
	
not_np	cmpi.w #menu_button,d2
	bne.s not_menu
	cmp.w icon_lit(a5),d2
	beq.s not_menu
	move.w #1,menu_trig(a5)
	move.w icon_lit(a5),d0
	clr.w d1
	bsr blit_button
	move.w d2,d0
	move.w d0,icon_lit(a5)
	moveq #1,d1
	bsr blit_button
	move.w #1,drop_screen(a5)
	move.w #90,drop_sin_index(a5)
	bsr waitcopirq
	move.b #$ec,cop_hl1		;canel any match highlight bar
	move.b #$ec,cop_hl2

not_menu	tst.w presentspage(a5)
	bne notsearch
	tst.w scroll_left(a5)
	bne notsearch
	tst.w scroll_right(a5)
	bne notsearch
	cmpi.b #$21,keypressed(a5)
	bne.s nopress_s
	move.w #search_button,d2
nopress_s	cmpi.w #search_button,d2	;search?
	bne notsearch
	move.w d2,d0
	moveq #1,d1
	bsr blit_button
	bsr search_bitplane_fix

	clr.w did_find(a5)
	bsr waitcopirq
	move.b #$ec,cop_hl1	
	move.b #$ec,cop_hl2
	bsr underboxstore
	move.w #26,showsearchbox(a5)
	bsr setboxpalette
waitsear	tst.w showsearchbox(a5)	;wait for box to appear
	bne.s waitsear

	move.l #oldsearchstring,a2
	move.l #searchstring,a4	;print old search string
	clr.w d0
	clr.w d1
potlp	move.b (a4)+,d0
	move.b d0,(a2)+
	tst.b d0
	beq nxtchr
	bsr printschar
	addq.w #1,d1
	bra potlp		

nxtchr	move.w #"*",d0		;print cursor
	move.w charnumber(a5),d1
	bsr printschar

keyup	btst #7,keypressed(a5)
	bne.s keyup	
	clr.w d0
	move.b keypressed(a5),d0
	move.b d0,oldkey(a5)

	cmpi.b #$45,d0
	beq cancelsearch
	cmpi.b #$44,d0		;return?
	beq gotstring
	cmpi.b #$41,d0		;delete?
	bne.s notdel
	
	move.l #searchstring,a3
	move.w charnumber(a5),d1
	subq.b #1,d1
	bmi samekey		;cannot delete if pos 0	
	clr.b $00(a3,d1.w)
	moveq #" ",d0
	move.w charnumber(a5),d1	;erase cursor character
	bsr printschar
	subq.w #1,charnumber(a5)
	bra samekey

notdel	cmpi.w #20,charnumber(a5)
	beq samekey

	move.l #keycodetable,a6
	move.b $00(a6,d0.w),d0	;ascii character
	beq samekey

	move.l #searchstring,a3
	move.w charnumber(a5),d1
	move.b d0,$00(a3,d1.w)
	clr.w d1
	move.w charnumber(a5),d1
	bsr printschar
	addq.w #1,charnumber(a5)
	
samekey	move.b keypressed(a5),d0
	cmp.b oldkey(a5),d0
	beq.s samekey
	bra nxtchr

gotstring	

	move.l #searchstring,a3		;null terminate string
	move.w charnumber(a5),d1
	clr.b $00(a3,d1.w)

	move.l #oldsearchstring,a2	;compare with orig string
	move.l #searchstring,a4	;if not same `old match address`
cmplp1	move.b (a2)+,d0		;becomes irrelevant.
	beq scan_text
	cmp.b (a4)+,d0
	beq cmplp1
	clr.l old_match_address(a5)

scan_text:

	move.l start_of_section(a5),a2
	move.b (a3),d7		;1st char
	moveq #0,d6		;page numeber where match found 
newpage	moveq #0,d0		;line where '' '' '' 
	move.l a2,a4		;page top of section where '' ''

srchlp	move.b (a2),d2
	beq endofsearch
	cmpi.b #"A"-1,d2		;fix chars to lower case
	bls.s nocsch
	cmpi.b #"Z",d2
	bhi.s nocsch
	add.b #32,d2
nocsch	cmp.b d7,d2
	beq.s foundchar
	cmpi.b #$a,d2
	beq.s foundcr
contsrch	addq.w #1,a2
	bra srchlp

foundchar
	move.l a2,a6
	move.l #searchstring,a3	;now see if rest of string matches
compchars	addq.w #1,a6
	addq.w #1,a3
	move.b (a3),d3		;last char of search string?
	beq foundmatch	
	move.b (a6),d2		;Fix uppercase chars to lower
	cmpi.b #"A"-1,d2
	bls.s nocsch2
	cmpi.b #"Z",d2
	bhi.s nocsch2
	add.b #32,d2
nocsch2	cmp.b d2,d3
	bne contsrch
	bra compchars

foundcr	addq.w #1,d0
	cmpi.w #maxlines,d0
	bne contsrch
	addq.w #1,d6
	addq.w #1,a2
	bra newpage

endofsearch:

	tst.w did_find(a5)		;if not matches made past original
	beq cancelsearch		;pos just show that prev pos
	move.w nearestmatchscreen(a5),d6
	move.w nearestmatchline(a5),d0
	move.l nearestmatchpagetop(a5),a4	
	bra showfind
		
foundmatch:

	cmp.l current_page_top(a5),a2	;ignore matches on previous screens
	blt contsrch

	move.w #1,did_find(a5)
	move.w d6,nearestmatchscreen(a5)
	move.w d0,nearestmatchline(a5)
	move.l a4,nearestmatchpagetop(a5)

	cmp.l old_match_address(a5),a2
	bls contsrch
	move.l a2,old_match_address(a5)

showfind	move.w d6,matchscreen(a5)
	cmp.l current_page_top(a5),a4
	bne.s notfsamepage
		
	lsl.w #3,d0
	add.b #$47,d0
	move.b d0,cop_hl1
	add.b #9,d0
	move.b d0,cop_hl2

	move.w #$0180,cop_hl1+4	;highlight col 0
	move.w #$0180,cop_hl2+4	;highlight col 0
	bra cancelsearch
	
notfsamepage

	addq.w #1,d0
	move.w d0,matchline(a5)	
	move.l a4,a1
	move.l a1,next_page_top(a5)
	move.w #1,drop_screen(a5)
	move.w #90,drop_sin_index(a5)
	move.b #$ec,cop_hl1		
	move.b #$ec,cop_hl2

cancelsearch:

	move.w #search_button,d0
	clr.w d1
	bsr blit_button
	bsr waitnewframe
	move.w #$0001,cop_scrl+2
	clr.w searchplanes_on(a5)
	bsr settextpalette
	move.l #undersearchbox,a2
	move.l #textscreen+(84*68)+28,a1
	add.w screen_offset(a5),a1
	moveq #38,d7
ylp2	moveq #12,d6
xlp2	move.w (a2)+,(a1)+
	dbf d6,xlp2
	add.w #84-26,a1
	dbf d7,ylp2	
	rts
	
notsearch:
	cmpi.b #$37,keypressed(a5)
	bne.s nopress_m
	move.w #music_button,d2	
nopress_m	cmpi.w #music_button,d2
	bne.s notmusic
	tst.w fade_music(a5)
	bne.s notmusic
	eori.w #1,music_toggle(a5)
	bne.s f_up
	move.w #$ff00,fade_music(a5)
	move.w #8,d0
	move.w #0,d1
	bsr blit_button
	bra notmusic
f_up	move.w #$0100,fade_music(a5)
	move.w #8,d0
	move.w #1,d1
	bsr blit_button

notmusic	rts


newtextfixed:
	
	clr.l old_match_address(a5)
	move.l d0,start_of_section(a5)
	move.l d0,next_page_top(a5)
	clr.w menu_mode(a5)
	move.w icon_lit(a5),d0
	clr.w d1
	bsr blit_button
	move.w d2,d0
	moveq #1,d1	
	bsr blit_button
	move.w #1,drop_screen(a5)
	move.w #90,drop_sin_index(a5)
	move.w d2,icon_lit(a5)
	clr.w icon_selected(a5)
	bsr waitcopirq
	move.b #$ec,cop_hl1		;canel any match highlight bar
	move.b #$ec,cop_hl2
	rts


;---------------------------------------------------------------------------

clear_main_screen

	movem.l a4-a6,-(a7)
	move.l #outcast_vars,a4
	move.l #$dff000,a6
	move.l #textscreen-84,a5
	move.l a5,$54(a6)		;clear screen
	move.l #$01000000,$40(a6)
	clr.w $66(a6)
	move.w #(207*64)+42,$58(a6)
	bsr blitwait
	movem.l (a7)+,a4-a6
	rts

;---------------------------------------------------------------------------

printschar
	movem.l a3/a4/d0,-(a7)
	move.l #textscreen+(84*93)+31,a4	;plots char in search box
	add.w screen_offset(a5),a4
	add.w d1,a4
	move.l #smallfont,a3	
	and.w #$ff,d0
	cmpi.b #"a"-1,d0		;ensure only capitals plotted
	bls.s nocchng
	sub.w #32,d0
nocchng	lsl.w #3,d0
	add.w d0,a3	
	move.b (a3)+,(a4)
	move.b (a3)+,stsmod(a4)
	move.b (a3)+,stsmod*2(a4)
	move.b (a3)+,stsmod*3(a4)
	move.b (a3)+,stsmod*4(a4)
	move.b (a3)+,stsmod*5(a4)
	move.b (a3)+,stsmod*6(a4)
	move.b (a3)+,stsmod*7(a4)
	movem.l (a7)+,a3/a4/d0
	rts

;---------------------------------------------------------------------------
	
gen_searchbox:

	move.l #outcast_vars,a5
	move.w showsearchbox(a5),d1
	beq nobox
	subq.w #2,d1
	move.l #searchbox,a0
	move.l #textscreen+(84*68)+28,a1
	move.l #textplane2+(84*68)+28,a2
	add.w screen_offset(a5),a1
	add.w d1,a0

evenloop	cmpi.b #25,d1
	bhi.s evendone
	move.l a0,a4
	move.l a1,a6
	move.l a2,a3
	moveq #19,d7
evenlp2	move.w (a4),(a6)
	move.w 26(a4),(a3)
	lea 84*2(a3),a3
	lea 84*2(a6),a6
	lea 26*4(a4),a4
	dbf d7,evenlp2
	addq.w #2,a0
	addq.w #2,a1
	addq.w #2,a2
	addq.w #2,d1
	bra.s evenloop
evendone


	move.l #textscreen+(84*69)+28,a3
	move.l #textplane2+(84*69)+28,a2
	add.w screen_offset(a5),a3
	move.l #searchbox+(26*2),a0
	move.w showsearchbox(a5),d1
	subq.w #2,d1
	add.w d1,a3
	add.w d1,a2

oddloop	cmpi.b #25,d1
	bhi.s odddone
	move.l a0,a4
	move.l a2,a1
	move.l a3,a6
	moveq #18,d7
oddlp2	move.w (a4),(a6)
	move.w 26(a4),(a1)
	lea 84*2(a6),a6
	lea 84*2(a1),a1
	lea 26*4(a4),a4
	dbf d7,oddlp2
	addq.w #2,a0
	addq.w #2,a2
	addq.w #2,a3
	addq.w #2,d1
	bra.s oddloop
odddone

	subq.w #2,showsearchbox(a5)
nobox	rts

;---------------------------------------------------------------------------

setboxpalette:

	movem.l a0-a1/d7,-(a7)
	move.l #searchboxpalette,a0
	move.l #cop_cols2+$6,a1
	moveq #6,d7
sbploop	move.w (a0)+,(a1)
	addq.w #4,a1
	dbf d7,sbploop
	movem.l (a7)+,a0-a1/d7
	rts

;---------------------------------------------------------------------------

settextpalette:

	movem.l a0-a1/d7,-(a7)
	move.l #normaltextpalette,a0
	move.l #cop_cols2+$6,a1
	moveq #6,d7
sbploop2	move.w (a0)+,(a1)
	addq.w #4,a1
	dbf d7,sbploop2
	movem.l (a7)+,a0-a1/d7
	rts
	
;---------------------------------------------------------------------------

setmenupalette:

	movem.l a0-a1/d7,-(a7)
	move.l #menupalette,a0
	move.l #cop_cols2+$6,a1
	moveq #6,d7
sbploop3	move.w (a0)+,(a1)
	addq.w #4,a1
	dbf d7,sbploop3
	movem.l (a7)+,a0-a1/d7
	rts
	
;---------------------------------------------------------------------------

blitwait	btst #6,$2(a6)
	bne.s blitwait
	rts	

;---------------------------------------------------------------------------

waitnewframe

	move.l a5,-(a7)
	move.l #outcast_vars,a5
waiting	tst.w newframe(a5)
	beq.s waiting
	clr.w newframe(a5)
	move.l (a7)+,a5
	rts

;---------------------------------------------------------------------------

waitcopirq

	move.l a5,-(a7)
	move.l #outcast_vars,a5
	clr.w copirq_occured(a5)
waiting2	tst.w copirq_occured(a5)
	beq.s waiting2
	clr.w copirq_occured(a5)
	move.l (a7)+,a5
	rts
	
;---------------------------------------------------------------------------

underboxstore
	
	movem.l a2/a1/d6/d7,-(a7)
	move.l #undersearchbox,a2
	move.l #textscreen+(84*68)+28,a1
	add.w screen_offset(a5),a1
	moveq #38,d7
ylp3	moveq #12,d6
xlp3	move.w (a1)+,(a2)+
	dbf d6,xlp3
	add.w #84-26,a1
	dbf d7,ylp3	
	movem.l (a7)+,a2/a1/d6/d7
	rts
	
;---------------------------------------------------------------------------

music_fader:

	move.l #outcast_vars,a5
	move.w fade_music(a5),d0
	add.w d0,mt_volscale
	tst.w mt_volscale
	bpl.s botvolok
	clr.w mt_volscale
	clr.w fade_music(a5)
	bra topvolok
botvolok	cmpi.w #$3fff,mt_volscale
	bls.s topvolok
	move.w #$4000,mt_volscale
	clr.w fade_music(a5)
topvolok	rts

	
;---------------------------------------------------------------------------

search_bitplane_fix

	move.l #outcast_vars,a5
	move.l #$dff000,a6
	move.l #$00000000,$44(a6)
	clr.l $64(a6)
	clr.w $62(a6)
	move.l #$2d300000,$40(a6)
	move.l #textscreen,a1
	add.w screen_offset(a5),a1
	move.l a1,$4c(a6)			;b source
	sub.w #84,a1
	move.l a1,$50(a6)			;a source
	move.l #textplane2,$54(a6)		;d dest
	move.w #(166*64)+42,$58(a6)
	bsr blitwait
	
	move.w #1,searchplanes_on(a5)
	move.l #textplane2+2,d0
	move.l #cop_bpl2,a0
	move.w d0,$6(a0)
	swap d0
	move.w d0,$2(a0)
	clr.w cop_scrl+2
	rts
	
	
;---------------------------------------------------------------------------

fade_out_routine

	move.l d0,-(a7)			
fadeoloop	tst.b (a5)	;fade a copper palette at a5 to black
	beq.s reddown	;d7 = number of colours to fade - 1
	subq.b #1,(a5)
reddown	move.b $1(a5),d0
	andi.b #$f0,d0
	beq.s greendown
	sub.b #$10,$1(a5)
greendown	move.b $1(a5),d0
	andi.b #$0f,d0
	beq.s bluedown
	subq.b #$1,$1(a5)
bluedown	addq.w #4,a5
	dbf d7,fadeoloop
	move.l (a7)+,d0
	rts
	
;---------------------------------------------------------------------------

fade_in_routine

	movem.l d0/d1,-(a7)			
fadeiloop	move.b (a6),d0	;fade up a copper palette at a5 to match 
	cmp.b (a5),d0	;palette words at a6
	beq.s reddup	;d7 = number of colours to fade up 
	addq.b #1,(a5)

reddup	move.b $1(a6),d0
	andi.b #$f0,d0
	move.b $1(a5),d1
	andi.b #$f0,d1
	cmp.b d0,d1
	beq.s greenup
	add.b #$10,$1(a5)

greenup	move.b $1(a6),d0
	andi.b #$f,d0
	move.b $1(a5),d1
	andi.b #$f,d1
	cmp.b d0,d1
	beq.s blueup
	addq.b #$1,$1(a5)

blueup	addq.w #4,a5
	addq.w #2,a6
	dbf d7,fadeiloop
	movem.l (a7)+,d0/d1
	rts

;---------------------------------------------------------------------------

screen_fades:

	move.l #outcast_vars,a0
	tst.w fade_in_all(a0)
	beq nofia
	subq.w #1,fade_in_all(a0)
	btst #0,fade_in_all+1(a0)
	beq nofia
	move.l #cop_cols1+2,a5
	move.l #bdrpalette,a6
	moveq #15,d7
	bsr fade_in_routine
	move.l #cop_pcols+2,a5
	move.l #pointerpalette,a6
	moveq #15,d7
	bsr fade_in_routine
	move.l #cop_cols3+2,a5
	move.l #bdrpalette,a6
	moveq #15,d7
	bsr fade_in_routine
	move.l #cop_cols2+6,a5
	move.l #normaltextpalette,a6
	moveq #6,d7
	bsr fade_in_routine
	rts

nofia	tst.w fade_out_all(a0)
	beq nofoa
	subq.w #1,fade_out_all(a0)
	bne.s noquit
	move.w #1,quit(a0)
noquit	btst #0,fade_out_all+1(a0)
	beq nofia
	move.l #cop_cols1+2,a5
	moveq #15,d7
	bsr fade_out_routine
	move.l #cop_pcols+2,a5
	moveq #15,d7
	bsr fade_out_routine
	move.l #cop_cols3+2,a5
	moveq #15,d7
	bsr fade_out_routine
	move.l #cop_cols2+6,a5
	moveq #6,d7
	bsr fade_out_routine
	move.l #cop_bcols+6,a5
	moveq #31,d6
cbf_loop	moveq #0,d7
	bsr fade_out_routine
	add.w #$10,a5
	dbf d6,cbf_loop
nofoa	rts

;---------------------------------------------------------------------------

fadeloadpicin:

	btst #0,fadelpi+1(a5)
	beq.s nfpi
	move.l #loadingpicpalette,a6
	move.l #lpcols1+2,a5
	moveq #15,d7
	bsr fade_in_routine
	move.l #loadingpicpalette,a6
	move.l #lpcols2+2,a5
	moveq #15,d7
	bsr fade_in_routine
nfpi	rts

;---------------------------------------------------------------------------

ExecBase		=	4
OpenLibrary	=	-408
CloseLibrary	=	-414
Execute		=	-222


Loadexe:	Lea 	DosName,a1
	Clr.l	d0
	Move.l	ExecBase,a6
	Jsr	OpenLibrary(A6)
	Move.l	D0,DosBase
	Move.l	FileName,D1
	Clr.l	D2
	Clr.l	D3
	Move.l	DosBase,a6
	Jsr	Execute(A6)	
	clr.l	d0

CloseDos:	Move.l	ExecBase,a6
	Move.l	DosBase,a1
	Jsr	CloseLibrary(A6)
	Rts

DosName:	Dc.b	'dos.library',0
	Even
DosBase:	dc.l	0
Filename	dc.l      0

;---------------------------------------------------------------------------	

drawinitpage:

lineoneoffset equ 6

	move.l #initpagebanner,a1
	move.l #textscreen+2,a0
	bsr make_text_screen

	move.l #textscreen+2,plot_screen
	move.w #modulo,total_modulo
	move.w #0,use_font
	move.l #font_list,a1
	move.w use_font,d3
	mulu #3*4,d3
	move.l 0(a1,d3.w),a2
	move.w $2(a2),d2		;height of this font
	add.w #y_line_spacing,d2
	move.l 8(a1,d3.w),a2
	sub.w #128,a2		;char width list
	move.w #lineoneoffset,plotypos
	move.l #initpagetext,a0
	move.l a0,a3
nxtfpln	bsr findpixlength
	lsr.w #1,d1
	move.w #x_centre,d0
	sub.w d1,d0
	move.w d0,plotxpos
	bsr type_text
	add.w d2,plotypos
	cmpi.b #"@",(a3)
	bne nxtfpln
	rts
	
;---------------------------------------------------------------------------	

	include includes/dotplot_routine_c.src

;---------------------------------------------------------------------------

*****************************************************************************

	include includes/pt-play+volscale.src
	
*****************************************************************************

	section datastuff,data

;---------------------------------------------------------------------------

	
outcast_vars:
	
	dcb.w $40,0

button_unselected_addrs:

	dc.l button1u,button2u,button3u,button4u,button5u,button6u
	dc.l button7u,button8u,button9u

button_selected_addrs:

	dc.l button1s,button2s,button3s,button4s,button5s,button6s
	dc.l button7s,button8s,button9s

buttonsizes_and_positions:

*       size: x/y | plotpos x/y

	dc.w 48,24,54,26
	dc.w 32,50,103,11
	dc.w 96,20,119,7
	dc.w 80,18,124,27
	dc.w 64,17,130,45
	dc.w 32,50,187,12
	dc.w 48,24,232,26
	dc.w 32,15,279,26
	dc.w 32,16,279,41

bdrpalette:	

	include data/borderpalette.src

searchbox:

	incbin data/searchbox208x39x2b.raw

smallfont:
	dcb.b 32*8,0
	incbin data/font6.bin
	dcb.b 32*8,0
	incbin data/chars160-255.bin
	even

;---------------------------------------------------------------------------

Intros_banner:

	incbin text/intro_menu_banner.txt
	dc.b 0
	even
	
Intros_text:
	incbin text/intro_list.txt
	dc.b 0
	even

;---------------------------------------------------------------------------
************* FILELENGTH OF BANNERS MUST BE AN EVEN NUMBER!! ***************
;---------------------------------------------------------------------------
	dc.b $0,$a		;MUST PROCEED TEXT FILE
MESSAGES:	incbin text/messages_banner.txt
	incbin text/messages.txt
	dc.b 0,0,0,0		;MUST FOLLOW TEXT FILE
	even
;---------------------------------------------------------------------------
	dc.b $0,$a		;MUST PROCEED TEXT FILE
ADVERTS:	incbin text/adverts_banner.txt
	incbin text/adverts.txt
	dc.b 0,0,0,0		;MUST FOLLOW TEXT FILE
	even
;---------------------------------------------------------------------------
	dc.b $0,$a		;MUST PROCEED TEXT FILE
NEWS:	incbin text/news_banner.txt
	incbin text/news.txt
	dc.b 0,0,0,0		;MUST FOLLOW TEXT FILE
	even
;---------------------------------------------------------------------------
	dc.b $0,$a		;MUST PROCEED TEXT FILE
INFO:	incbin text/info_banner.txt
	incbin text/info.txt
	dc.b 0,0,0,0		;MUST FOLLOW TEXT FILE
	even
;---------------------------------------------------------------------------

initpagetext:	incbin text/firstpagetext.txt
		even
initpagebanner:	incbin text/firstpagebanner.txt
		dc.b 0
		even
;---------------------------------------------------------------------------

Sinetable:	incbin data/sin-costable.data

Keycodetable:	incbin data/keycode-ascii.table

Searchstring:	dcb.b 32,0
OldSearchstring:	dcb.b 32,0
		even

;----------------------------------------------------------------------------

textshadow_col 	equ $0824
menushadow_col 	equ $0824
dots_col	 	equ $0957
sbcol 		equ $0957	;Select bar colour
		
searchboxpalette:

	dc.w	dots_col
	dc.w	$0fff
	dc.w	$0fff		;text+dots
	dc.w 	textshadow_col	
	dc.w 	textshadow_col	;text shadow+dots
	dc.w 	$0745		;box colour
	dc.w 	$0745		;box+dots
	dc.w 	$0fff
	
normaltextpalette:
		
	dc.w	dots_col
	dc.w	$0fff
	dc.w	$0fff
	dc.w 	textshadow_col
	dc.w 	textshadow_col
	dc.w 	$0fff
	dc.w 	$0fff
	dc.w 	$0fff

menupalette:

	dc.w 	dots_col
	dc.w 	$0fff
	dc.w 	$0fff	
	dc.w 	menushadow_col
	dc.w 	dots_col
	dc.w 	$0fff
	dc.w 	$0fff
	dc.w      $0fff

pointerpalette:

	dc.w	$0000
	dc.w	$0FFF
	dc.w	$0FEE
	dc.w	$0EDD
	dc.w	$0DBB
	dc.w	$0DAB
	dc.w	$0B89
	dc.w	$0A78
	dc.w	$0967
	dc.w	$0856
	dc.w	$0745
	dc.w	$0634
	dc.w	$0533
	dc.w	$0422
	dc.w	$0312
	dc.w	$0211


loadingpicpalette:
	
	dc.w	$0000
	dc.w	$0EEE
	dc.w	$0013
	dc.w	$0023
	dc.w	$0024
	dc.w	$0135
	dc.w	$0246
	dc.w	$0247
	dc.w	$0358
	dc.w	$0468
	dc.w	$0679
	dc.w	$078A
	dc.w	$08AB
	dc.w	$0ABC
	dc.w	$0CCD
	dc.w	$0DDD

;---------------------------------------------------------------------------

filenames:

fn0	dc.b "NEO->OUTCAST<-NEO:0",0
fn1	dc.b "NEO->OUTCAST<-NEO:1",0
fn2	dc.b "NEO->OUTCAST<-NEO:2",0
fn3	dc.b "NEO->OUTCAST<-NEO:3",0
fn4	dc.b "NEO->OUTCAST<-NEO:4",0
fn5	dc.b "NEO->OUTCAST<-NEO:5",0
fn6	dc.b "NEO->OUTCAST<-NEO:6",0
fn7	dc.b "NEO->OUTCAST<-NEO:7",0
fn8	dc.b "NEO->OUTCAST<-NEO:8",0
fn9	dc.b "NEO->OUTCAST<-NEO:9",0
	even

fn_addrs	dc.l fn0,fn1,fn2,fn3,fn4,fn5,fn6,fn7,fn8,fn9

;---------------------------------------------------------------------------

	include includes/dotplot_nonchipdata.src

;---------------------------------------------------------------------------
	section chipstuff,data_c
;---------------------------------------------------------------------------

copper	dc.l $0101ff00,$01004200,$01020000,$01040024
	dc.l $008e2c81,$00902cc1,$00920038,$009400d0
	dc.l $01080078,$010a0078,$01fc0000,$01060000

cop_spr	dc.l $01200000,$01220000,$01240000,$01260000
	dc.l $01280000,$012a0000,$012c0000,$012e0000
	dc.l $01300000,$01320000,$01340000,$01360000
	dc.l $01380000,$013a0000,$013c0000,$013e0000

cop_bpls1	dc.l $00e00000,$00e20000,$00e40000,$00e60000
	dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000

cop_cols1	dc.l $01800000,$01820000,$01840000,$01860000
	dc.l $01880000,$018A0000,$018C0000,$018E0000
	dc.l $01900000,$01920000,$01940000,$01960000
	dc.l $01980000,$019A0000,$019C0000,$019E0000

cop_pcols	dc.l $01a00000,$01a20000,$01a40000,$01a60000
	dc.l $01a80000,$01aa0000,$01ac0000,$01ae0000
	dc.l $01b00000,$01b20000,$01b40000,$01b60000
	dc.l $01b80000,$01ba0000,$01bc0000,$01be0000
	
;--------------------------------------------------------------------------

	dc.l $4601ff00,$01000000
dot_bpln	dc.l $00e00000,$00e20000
	dc.l $4701ff00,$01009200

cop_scrl	dc.l $01020001,$01040024,$01fc0000,$01060000
	dc.l $008e2c81,$00902cc1,$0092003c,$009400d4
	dc.l $01080004,$010a0004

cop_bpl1	dc.l $00e40000,$00e60000
cop_bpl2	dc.l $00e80000,$00ea0000
	
cop_cols2	dc.w $0180,$0000
	dc.w $0182,$0000
	dc.w $0184,$0000
	dc.w $0186,$0000
	dc.w $0188,$0000
	dc.w $018a,$0000
	dc.w $018c,$0000
	dc.w $018e,$0000

cop_tstrt	dc.l $4801ff00,$0100b200	;<- Blanked by drop screen if ness

cop_skpln	dc.l $00800000,$00820000	;Copper branch address
cop_doskp	dc.l $00880000		;00880000 = branch 01fe0000 = not

copper_rtn

cop_hl1	dc.l $ec01ff00,$01840745
cop_hl2	dc.l $ec01ff00,$01840000
	
;---------------------------------------------------------------------------

	dc.l $ed01ff00,$01000000

cop_bpls3	dc.l $00e00000,$00e20000,$00e40000,$00e60000
	dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000

	dc.l $01020000,$01040024
	dc.l $008e2c81,$00902cc1,$00920038,$009400d0
	dc.l $01080078,$010a0078,$01fc0000,$01060000

cop_cols3	dc.l $01800000,$01820000,$01840000,$01860000
	dc.l $01880000,$018A0000,$018C0000,$018E0000
	dc.l $01900000,$01920000,$01940000,$01960000
	dc.l $01980000,$019A0000,$019C0000,$019E0000

	dc.l $ee01ff00,$01004200

	dc.l $ffdffffe,$0e01ff00
	dc.l $009c8010
	
cop_rstrt	dc.l $00800000,$00820000,$fffffffe
	
;---------------------------------------------------------------------------

copper_bar

	dc.l $00800000,$00820000

cop_bcols	dc.w $7045,$fffe,$0180,sbcol,$70cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7145,$fffe,$0180,sbcol,$71cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7245,$fffe,$0180,sbcol,$72cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7345,$fffe,$0180,sbcol,$73cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7445,$fffe,$0180,sbcol,$74cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7545,$fffe,$0180,sbcol,$75cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7645,$fffe,$0180,sbcol,$76cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7745,$fffe,$0180,sbcol,$77cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7845,$fffe,$0180,sbcol,$78cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7945,$fffe,$0180,sbcol,$79cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7a45,$fffe,$0180,sbcol,$7acd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7b45,$fffe,$0180,sbcol,$7bcd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7c45,$fffe,$0180,sbcol,$7ccd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7d45,$fffe,$0180,sbcol,$7dcd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7e45,$fffe,$0180,sbcol,$7ecd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $7f45,$fffe,$0180,sbcol,$7fcd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8045,$fffe,$0180,sbcol,$80cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8145,$fffe,$0180,sbcol,$81cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8245,$fffe,$0180,sbcol,$82cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8345,$fffe,$0180,sbcol,$83cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8445,$fffe,$0180,sbcol,$84cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8545,$fffe,$0180,sbcol,$85cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8645,$fffe,$0180,sbcol,$86cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8745,$fffe,$0180,sbcol,$87cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8845,$fffe,$0180,sbcol,$88cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8945,$fffe,$0180,sbcol,$89cd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8a45,$fffe,$0180,sbcol,$8acd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8b45,$fffe,$0180,sbcol,$8bcd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8c45,$fffe,$0180,sbcol,$8ccd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8d45,$fffe,$0180,sbcol,$8dcd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8e45,$fffe,$0180,sbcol,$8ecd,$fffe,$0180,$0000,$01fe,$0000
	dc.w $8f45,$fffe,$0180,sbcol,$8fcd,$fffe,$0180,$0000,$0088,$0000

	
;---------------------------------------------------------------------------

loadingpiccopper1

	dc.l $0101ff00,$0100c204,$01020000,$01040024
	dc.l $008e68a1,$0090efa1,$0092004c,$009400c4

	dc.l $01200000,$01220000,$01240000,$01260000
	dc.l $01280000,$012a0000,$012c0000,$012e0000
	dc.l $01300000,$01320000,$01340000,$01360000
	dc.l $01380000,$013a0000,$013c0000,$013e0000

lpbpls1	dc.l $00e00000,$00e20000,$00e40000,$00e60000
	dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000

lpcols1	dc.l $01800000,$01820000,$01840000,$01860000
	dc.l $01880000,$018A0000,$018C0000,$018E0000
	dc.l $01900000,$01920000,$01940000,$01960000
	dc.l $01980000,$019A0000,$019C0000,$019E0000
	dc.l $010801c0,$010a01c0

lpswap1	dc.l $00800000,$00820000,$fffffffe


loadingpiccopper2

	dc.l $0101ff00,$0100c204,$01020000,$01040024
	dc.l $008e68a1,$0090efa1,$0092004c,$009400c4

	dc.l $01200000,$01220000,$01240000,$01260000
	dc.l $01280000,$012a0000,$012c0000,$012e0000
	dc.l $01300000,$01320000,$01340000,$01360000
	dc.l $01380000,$013a0000,$013c0000,$013e0000

lpbpls2	dc.l $00e00000,$00e20000,$00e40000,$00e60000
	dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000

lpcols2	dc.l $01800000,$01820000,$01840000,$01860000
	dc.l $01880000,$018A0000,$018C0000,$018E0000
	dc.l $01900000,$01920000,$01940000,$01960000
	dc.l $01980000,$019A0000,$019C0000,$019E0000
	dc.l $010801c0,$010a01c0

lpswap2	dc.l $00800000,$00820000,$fffffffe


*****************************************************************************

lacesynccopper:

	dc.l $0101ff00,$01000204,$01020000,$01040024
	dc.l $fffffffe

*****************************************************************************




pointersprite:

spr1:	dc.w	$0000,$0000
	dc.w	$E000,$3000
	dc.w	$9800,$EC00
	dc.w	$6600,$BB00
	dc.w	$D980,$5EC0
	dc.w	$2E60,$4FB0
	dc.w	$6A18,$2A6C
	dc.w	$11C6,$201B
	dc.w	$3EB8,$114C
	dc.w	$0514,$1AFE
	dc.w	$184C,$0FFD
	dc.w	$012D,$0FFE
	dc.w	$0CF2,$06F4
	dc.w	$0264,$0768
	dc.w	$0508,$0090
	dc.w	$0090,$0260
	dc.w	$0260,$0040
	dc.w	$0040,$0000
	dc.w	$0000,$0000

spr2:	dc.w	$0000,$0080
	dc.w	$E000,$1000
	dc.w	$9800,$0400
	dc.w	$4600,$8100
	dc.w	$E180,$8040
	dc.w	$3060,$4010
	dc.w	$7598,$4004
	dc.w	$1FE6,$2001
	dc.w	$3FF8,$2004
	dc.w	$0FEC,$1002
	dc.w	$1FF4,$1003
	dc.w	$07F9,$0803
	dc.w	$0EF2,$090E
	dc.w	$0264,$059C
	dc.w	$0508,$07F8
	dc.w	$0090,$02F0
	dc.w	$0220,$0260
	dc.w	$0040,$0040
	dc.w	$0000,$0000

;---------------------------------------------------------------------------

topborder:	incbin data/topborder320x28.raw		

bottomborder:	incbin data/bottomborder320x62.raw

buttonsensemask:	incbin data/iconsensemask_160x31x4.rawblit

undersearchbox:	dcb.b (208/8)*39,0

button1u	incbin data/leftarrow_48x24selected.raw
button1s	incbin data/leftarrow_48x24unselected.raw

button2u	incbin data/menu_32x50unselected.raw
button2s	incbin data/menu_32x50selected.raw

button3u	incbin data/messages_96x20unselected.raw
button3s	incbin data/messages_96x20selected.raw

button4u	incbin data/adverts_80x18unselected.raw
button4s	incbin data/adverts_80x18selected.raw

button5u	incbin data/news_64x17unselected.raw
button5s	incbin data/news_64x17selected.raw

button6u	incbin data/info_32x50unselected.raw
button6s	incbin data/info_32x50selected.raw

button7u	incbin data/rightarrow_48x24selected.raw
button7s	incbin data/rightarrow_48x24unselected.raw

button8u	incbin data/music_32x15unselected.raw
button8s	incbin data/music_32x15selected.raw

button9u	incbin data/search_32x16unselected.raw
button9s	incbin data/search_32x16selected.raw

*----------------------------------------------------------------------------

mask_list	dc.w $ffff,$7fff,$3fff,$1fff,$0fff,$07ff,$03ff,$01ff
	dc.w $00ff,$007f,$003f,$001f,$000f,$0007,$0003,$0001
	dc.w $0000,$8000,$c000,$e000,$f000,$f800,$fc00,$fe00
	dc.w $ff00,$ff80,$ffc0,$ffe0,$fff0,$fff8,$fffc,$fffe
mask_line	dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
	dc.w $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$0000
*----------------------------------------------------------------------------
		
plotxpos		dc.w 0
plotypos  	dc.w 0
char_spacing	dc.w 0
total_modulo	dc.w 40
plot_screen	dc.l 0
use_font		dc.w 0

FONT_LIST	
	dc.l fnt_data0,fnt_ord0,fnt_pos0
*	dc.l fnt_data1,fnt_ord1,fnt_pos1
*	dc.l fnt_data2,fnt_ord2,fnt_pos2	;uncomment as applic...
*	dc.l fnt_data3,fnt_ord3,fnt_pos3	;uncomment as applic...

	dc.l $0	;= NO MORE FONTS!

*(FOR EACH FONT)-------------------------------------------------------------

fnt_data0	dc.w 832/8;width in bytes
	dc.w 13	;height (excluding extra 'dot-line')

	incbin data/fontdata832x13.raw	;actual raw font
	dc.w $ffff			;in case of missing last dot

fnt_ord0	dc.b " !",$22,"$%^&*()_-+=\/<>.,@#:;{}[]","'","?" ;In same order as raw font
	dc.b "abcdefghijklmnopqrstuvwxyz"
	dc.b "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
	dc.b $00				;Null terminated.
	even

	dcb.b 128,0
fnt_pos0	dcb.w 128,0

*----------------------------------------------------------------------------
	dcb.b 84,0

textscreen:

	dcb.l ((672/8)*(166+60))/4,0	;text+scroll buffer (enough for 60
				;pages
textplane2:

	dcb.l (((672/8)*166)/4),0

*----------------------------------------------------------------------------

		include includes/dotplot_chipdata.src

*----------------------------------------------------------------------------

outcastscreen:	incbin data/outcastlogo511x272.raw

*----------------------------------------------------------------------------


*****************************************************************************

PACK_NUMBER equ 	$01

mt_data:    incbin 	"music/mod.outcast"

*****************************************************************************
