		move.w	(a0)+,d2
		and.w	d5,d2
		cmp.w	d6,d2
		beq.s	.foundright
		addq.w	#1,d3
		cmp.w	#_levwidth,d3
		bne.s	.l3
		rts
		
.foundright	subq.l	#2,a0
		and.w	#$3ff,(a0)
		moveq	#1,d4
.l4		move.w	(a0),d2
		and.w	d5,d2
		cmp.w	d6,d2
		beq.s	.foundbottom
		add.w	#_levwidth,a0
		addq.w	#1,d4
		cmp.w	#_levheight,d4
		bne.s	.l4
		rts
		
.foundbottom	and.w	#$3ff,(a0)
		lsl.w	#3,d0
		lsl.w	#4,d1
		lsl.w	#4,d3
		lsl.w	#4,d4
		lsl.w	#3,d7
		move.w	d0,(a1,d7.w)
		move.w	d1,2(a1,d7.w)
		move.w	d3,4(a1,d7.w)
		move.w	d4,6(a1,d7.w)
		lsr.w	#3,d3
		subq.w	#2,d3
		neg.w	d3
		and.w	#$3ff,(a0,d3.w)
		bra	.st
		
;		dc.w	0*16,1*16,25*16,13*16,80,136,0*16,1*16
;------------------------------------------------
linkrooms	lea	roomtab2-d(a5),a0
		lea	roomtab-d(a5),a1
		lea	roomtabi-d(a5),a3
		lea	doortab-d(a5),a2
.l1		tst.w	(a2)
		bmi	.end
		tst.w	8(a2)
		bmi	.cont2
		
		moveq	#0,d0
		move.b	14(a2),d0
		lsl.w	#3,d0
		moveq	#0,d1
		move.b	15(a2),d1
		lsl.w	#4,d1
		move.l	(a0,d0.w),(a1,d1.w)
		move.l	4(a0,d0.w),4(a1,d1.w)

		move.w	8(a2),d2
		lsl.w	#4,d2
		move.w	d2,8(a1,d1.w)
		sub.w	#$90,d2
		move.w	(a1,d1.w),d3
		add.w	4(a1,d1.w),d3
		sub.w	#19*16,d3
		cmp.w	d3,d2
		bmi.s	.c4
		move.w	d3,d2		
.c4		cmp.w	(a1,d1.w),d2
		bpl.s	.c1
		move.w	(a1,d1.w),d2		
.c1		move.w	d2,12(a1,d1.w)
		
		move.w	10(a2),d2
		lsl.w	#4,d2
		move.w	d2,10(a1,d1.w)
		subq.w	#8,10(a1,d1.w)
		sub.w	#$40,d2
		move.w	2(a1,d1.w),d3
		add.w	6(a1,d1.w),d3
		sub.w	#13*16,d3
		cmp.w	d3,d2
		bmi.s	.c3
		move.w	d3,d2		
.c3		cmp.w	2(a1,d1.w),d2
		bpl.s	.c2
		move.w	2(a1,d1.w),d2		
.c2		move.w	d2,14(a1,d1.w)

.cont2		tst.w	4(a2)
		beq	.cont
		moveq	#0,d0
		move.b	6(a2),d0
		lsl.w	#3,d0
		moveq	#0,d1
		move.b	7(a2),d1
		lsl.w	#4,d1
		move.l	(a0,d0.w),(a3,d1.w)
		move.l	4(a0,d0.w),4(a3,d1.w)

		move.w	(a2),d2
		lsl.w	#4,d2
		move.w	d2,8(a3,d1.w)
		sub.w	#$90,d2
		move.w	(a3,d1.w),d3
		add.w	4(a3,d1.w),d3
		sub.w	#19*16,d3
		cmp.w	d3,d2
		bmi.s	.c5
		move.w	d3,d2		
.c5		cmp.w	(a3,d1.w),d2
		bpl.s	.c6
		move.w	(a3,d1.w),d2		
.c6		move.w	d2,12(a3,d1.w)
		
		move.w	2(a2),d2
		lsl.w	#4,d2
		move.w	d2,10(a3,d1.w)
		subq.w	#8,10(a3,d1.w)
		sub.w	#$40,d2
		move.w	2(a3,d1.w),d3
		add.w	6(a3,d1.w),d3
		sub.w	#13*16,d3
		cmp.w	d3,d2
		bmi.s	.c7
		move.w	d3,d2		
.c7		cmp.w	2(a3,d1.w),d2
		bpl.s	.c8
		move.w	2(a3,d1.w),d2		
.c8		move.w	d2,14(a3,d1.w)
		
.cont		lea	16(a2),a2
		bra	.l1
.end		rts
		
;------------------------------------------------
initdoors	initdoors_m #_levwidth/2,#_levheight,d7
;------------------------------------------------
initaga		initaga_m
;------------------------------------------------
initlang	initlang_m
;------------------------------------------------
initskycols	initskycols_m
;------------------------------------------------
initmasks	initmasks_m
;------------------------------------------------
initfganim	rts

;		lea	d(pc),a5
		move.l	fg-d(a5),a0
		moveq	#_fgblkno-1,d7
.l1		tst.w	fgenable(a0)
		beq.s	.c1
		clr.w	fgenable(a0)
		move.l	fgstartblk(a0),a1
		move.w	fgstartdata(a0),d0
		or.w	d0,(a1)
.c1		addq.l	#4,a0
		dbra	d7,.l1
		clr.w	fgnextfree-d(a5)
		rts
;------------------------------------------------
initbobpos	initbobpos_m
;------------------------------------------------
initstatus	initstatus_m
;------------------------------------------------
setscrnpos	setscrnpos_m
;------------------------------------------------
initpositions	bsr	geta5
		move.l	(_nmem).w,d5
		move.l	#_plane1,d0
		add.l	d5,d0
		move.l	d0,orig-d(a5)
		move.l	#_plane2,d0
		add.l	d5,d0
		move.l	d0,show-d(a5)
		move.l	#_plane3,d0
		add.l	d5,d0
		move.l	d0,draw-d(a5)

		moveq	#0,d0
		move.l	#128,absmanxpos-d(a5)
		move.l	d0,absmanypos-d(a5)
		move.w	#128,manxpos-d(a5)
		move.w	d0,manypos-d(a5)

		move.l	d0,absxpos-d(a5)
		move.w	d0,absypos-d(a5)
		
		move.l	d0,xpos-d(a5)
		
		move.l	#100,xpos-d(a5)
		move.l	#100,actxpos-d(a5)
		move.l	d0,absxpos-d(a5)
		move.l	#100*8,xsoftabs-d(a5)
		move.l	#100*8+128,absmanxpos-d(a5)
		
		move.w	d0,xsoft-d(a5)
		move.w	d0,xscrflag-d(a5)
		move.l	d0,xsetpos1-d(a5)
		move.l	d0,xsetlpos1-d(a5)
		move.l	d0,xsetpos2-d(a5)
		move.l	d0,xsetlpos2-d(a5)
		move.w	d0,xsetspos-d(a5)
		move.w	d0,xhalfflag-d(a5)
		move.l	d0,actyhard-d(a5)
		move.l	d0,actypos-d(a5)
		
		move.l	d0,ysoftadd-d(a5)
		move.w	d0,ysoftpos-d(a5)
		move.l	d0,ypos-d(a5)
		move.l	d0,yhard-d(a5)
		move.l	d0,yshard-d(a5)
		move.w	d0,ysoft-d(a5)
		move.l	d0,ysoftabs-d(a5)
;		move.l	d0,xsoftabs-d(a5)
		move.w	d0,yscrflag-d(a5)
		move.l	d0,ysetlpos-d(a5)
		move.l	d0,ysethard-d(a5)
;		move.l	d0,actxpos-d(a5)
		move.l	d0,ysetbd-d(a5)
		move.w	d0,ysetsoft-d(a5)
		move.w	d0,fallflag-d(a5)
		clr.w	fallspeed-d(a5)
		clr.w	fallpos-d(a5)
		move.w	d0,jumpflag-d(a5)
		move.w	d0,jumpflag2-d(a5)
		clr.w	ropeflag-d(a5)
		clr.w	ropedownflag-d(a5)
		clr.w	boatflag-d(a5)
		clr.w	boatrideflag-d(a5)
		clr.w	deathflag-d(a5)
		move.w	#-100,ouchflag-d(a5)

		move.w	#224,energy-d(a5)
		move.w	#$10,priority-d(a5)
		rts

initpositions2	bsr	initpositions
		lea	saveto-d(a5),a0
		tst.w	newposflag-d(a5)
		beq.s	.c1
		move.l	_xmem,a0
		add.l	ldatofs-d(a5),a0
		sub.w	#128,a0
		clr.w	newposflag-d(a5)
.c1		lea	savestart-d(a5),a1
		move.w	#(saveend-savestart)/2-1,d7
.l1		move.w	(a0)+,(a1)+
		dbra	d7,.l1

		move.w	manxpos-d(a5),d0
		lsl.w	#2,d0
		move.w	d0,agamanxpos-d(a5)
		move.l	absmanxpos-d(a5),d0
		lsl.l	#2,d0
		move.l	d0,agaabsmanxpos-d(a5)
		move.l	xsoftabs-d(a5),d0
		lsl.l	#2,d0
		move.l	d0,agaxsoftabs-d(a5)
		rts

initpositions3	bsr	initpositions
		lea	saveto-d(a5),a0
		tst.w	newposflag-d(a5)
		beq.s	.c1
		move.l	_xmem,a0
		add.l	ldatofs-d(a5),a0
		sub.w	#128,a0
		clr.w	newposflag-d(a5)
.c1		lea	savestart-d(a5),a1
		move.w	#(saveend-savestart)/2-1,d7
.l1		move.w	(a0)+,(a1)+
		dbra	d7,.l1
		rts
;------------------------------------------------
initcoppos	bsr	geta5
		lea	_coltabs,a0
		add.l	(_nmem).w,a0
		move.l	a0,ce1tab-d(a5)
		lea	2*_viewheight(a0),a1
		move.l	a1,c49tab-d(a5)
		lea	2*_viewheight(a1),a2
		move.l	a2,c45tab-d(a5)
		lea	2*_viewheight(a2),a3
		move.l	a3,cd5tab-d(a5)

		moveq	#$2b,d0
		move.w	#_viewheight-1,d7
.l1		move.b	d0,(a0)+
		move.b	#$e1,(a0)+
		addq.l	#1,d0
		move.b	d0,(a1)+
		move.b	#$49,(a1)+
		move.b	d0,(a2)+
		move.b	#$45,(a2)+
		move.b	d0,(a3)+
		move.b	#$d5,(a3)+
		dbra	d7,.l1
		rts
;------------------------------------------------
initbgnd	bsr	geta5
		move.l	(_nmem).w,d5

		lea	mandata,a0
		add.l	d5,a0
		lea	mandata2,a1
		add.l	d5,a1
		move.l	#_sprite,d0
		add.l	d5,d0
		moveq	#3,d7
.l2		move.w	d0,6(a0)
		move.w	d0,6(a1)
		swap	d0
		move.w	d0,2(a0)
		move.w	d0,2(a1)
		swap	d0
		add.l	#58*4,d0
		addq.l	#8,a0
		addq.l	#8,a1
		dbra	d7,.l2

initbgnd2	move.l	(_nmem).w,d5
		lea	$dff000,a6
		lea	_bgnddat,a0
		add.l	d5,a0
		lea	ibgmasktab-d(a5),a1
		lea	ibgmasktab2-d(a5),a2
		moveq	#0,d0
		moveq	#15,d7
.l1		move.w	d0,d1
		move.w	d0,d2
		or.w	#$09f0,d1
		or.w	#$0bea,d2
		add.w	#$1000,d0
		waitblt
		move.l	#0,$64(a6)
		move.w	d1,$40(a6)
		move.w	#0,$42(a6)
		move.w	#$ffff,$44(a6)
		move.w	(a2)+,$46(a6)
		move.l	#bgnd,d3
		add.l	d5,d3
		move.l	d3,$50(a6)
		move.l	a0,$54(a6)
		move.w	#64*64+20,$58(a6)
		
		waitblt
		move.l	#$00260026,$64(a6)
		move.w	#$0026,$60(a6)
		move.w	d2,$40(a6)
		move.w	#0,$42(a6)
		move.l	#$ffffffff,$44(a6)
		move.l	#bgnd+38,d3
		add.l	d5,d3
		move.l	d3,$50(a6)
		move.w	(a1)+,$72(a6)
		lea	-40(a0),a0
		move.l	a0,$48(a6)
		move.l	a0,$54(a6)
		move.w	#64*65+1,$58(a6)
		
		lea	2560+40(a0),a0
		dbra	d7,.l1

		rts
;------------------------------------------------
inittabs	bsr	geta5
		move.l	_xmem,a0
		add.l	#_tabofs,a0

		move.l	a0,multab-d(a5)
		moveq	#0,d0
		move.w	#_scrheight-1,d7
.l1		move.l	d0,(a0)+
		add.l	#_scrwidth*_scrdepth*3,d0
		dbra	d7,.l1
		
		move.l	a0,bmultab-d(a5)
		moveq	#0,d0
		move.w	#_scrheight-1,d7
.l2		move.w	d0,(a0)+
		add.l	#64*_scrdepth,d0
		dbra	d7,.l2

		move.l	a0,smultab-d(a5)
		moveq	#0,d0
		move.w	#_scrheight-1,d7
.l3		move.l	d0,(a0)+
		add.l	#40*_scrdepth,d0
		dbra	d7,.l3
		
		move.l	a0,multab60-d(a5)
		moveq	#0,d0
		move.w	#_scrheight-1,d7
.l10		move.l	d0,(a0)+
		add.l	#60,d0
		dbra	d7,.l10

		move.l	a0,wabbeldata-d(a5)
		lea	sinus-d(a5),a1
		moveq	#0,d1
		move.w	#255,d7
.l4		move.w	(a1,d1.w),d0
		ext.l	d0
		add.l	#$4000,d0
		lsr.l	#8,d0
		lsr.l	#3,d0
		cmp.w	#$10,d0
		bmi.s	.c1
		move.w	#$f,d0
.c1		add.w	d0,d0
		move.w	d0,(a0)+
		addq.w	#4,d1
		and.w	#$1ff,d1
		dbra	d7,.l4
		
		move.l	a0,index-d(a5)
		move.l	#lgraph+(2<<_scrdepth),d0
		add.l	(_nmem).w,d0
		moveq	#49,d7
.l12		move.l	d0,-(a7)
		moveq	#19,d6
.l11		move.l	d0,(a0)+
		addq.l	#2,d0
		dbra	d6,.l11
		move.l	(a7)+,d0
		add.l	#40*_scrdepth*16,d0
		dbra	d7,.l12

		move.l	a0,fg-d(a5)
		add.l	#_fgblkno*4*_fgs,a0
		move.l	a0,nm-d(a5)
		add.l	#_nmeno*4*_nms,a0
		
		move.l	a0,bplsettab-d(a5)

		lea	fganimstart-d(a5),a0
		lea	fganimtab-d(a5),a1
		lea	fganimend-d(a5),a2
		move.l	(_nmem).w,d0
.l13		move.l	(a0)+,d1
		add.l	d0,d1
		move.l	d1,(a1)+
		cmp.l	a2,a0
		bne.s	.l13
		
		rts
;------------------------------------------------
initcopper	bsr	geta5
		move.l	(_nmem).w,d5
		move.l	#copper2,d0
		add.l	d5,d0
		lea	cop2lc+2,a0
		add.l	d5,a0
		move.w	d0,4(a0)
		swap	d0
		move.w	d0,(a0)
		
		move.l	#linejmpcont2,d0
		add.l	d5,d0
		lea	waterjmp+2,a0
		add.l	d5,a0
		move.w	d0,4(a0)
		swap	d0
		move.w	d0,(a0)
		
		move.l	bplsettab-d(a5),a1
		lea	colpos-d(a5),a2
		moveq	#0,d0
		move.l	d0,(a2)
		move.l	d0,4(a2)
		move.l	d0,8(a2)
		move.l	d0,12(a2)
		
		lea	_skycols1+2,a4
		add.l	d5,a4
		lea	linejmptab,a0
		add.l	d5,a0
		moveq	#$2b,d1
		move.w	#207,d7
.l6		move.b	d1,(a0)+
		move.b	#$e1,(a0)+
		move.w	#$fffe,(a0)+
		addq.b	#1,d1
		move.l	a0,d0
		add.l	#4*8,d0
		move.l	a0,(a1)+
		move.w	#$0084,(a0)+
		swap	d0
		move.w	d0,(a0)+
		swap	d0
		move.w	#$0086,(a0)+
		move.w	d0,(a0)+
		move.l	#$008a0000,(a0)+
		move.l	#$00e60000,(a0)+
		move.l	#$00e80000,(a0)+
		move.l	#$00ea0000,(a0)+
		move.l	#$00ec0000,(a0)+
		move.l	#$00ee0000,(a0)+
		move.l	#$016c0000,(a0)+
		move.b	d1,(a0)+
		move.b	#$49,(a0)+
		move.w	#$fffe,(a0)+
		move.w	#$0180,(a0)+
		tst.l	(a2)
		bne.s	.c1
		move.l	a0,(a2)	
.c1		move.w	#0,(a0)+	;(a4)+
		move.b	d1,(a0)+
		move.b	#$d5,(a0)+
		move.w	#$fffe,(a0)+
		move.l	#$01800000,(a0)+
		move.l	#$01800000,(a0)+
		dbra	d7,.l6
	
		lea	modulo1,a0
		add.l	d5,a0
		move.w	#$0108,(a0)+
		move.w	#(_scrwidth*_scrdepth*3)-40,(a0)+
		move.w	#$010a,(a0)+
		move.w	#(_scr