;Copyright (c) 1990-2012 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
;------------------------------------------------------------People Routines----



Reelroutines	db	1,44,0 	;Room number and x,y
	dw	20	;reel pointer
	db	2,0,1 	;speed,speed count,convers. no.

	db	1,55,0
	dw	0
	db 	50,20,0

	db	24,22,0
	dw	74
	db	1,0,0

	db	24,33,10
	dw	75
	db	1,0,1

	db	1,44,0
	dw	27
	db	2,0,2

	db	1,44,0
	dw	96
	db	3,0,4

	db	1,44,0
	dw	118
	db	2,0,5

	db	1,44,10
	dw	0
	db	2,0,0

	db	5,22,20
	dw	53
	db	3,0,0

	db	5,22,20
	dw	40
	db	1,0,2

	db	5,22,20
	dw	50
	db	1,0,3

	db	2,11,10
	dw	192
	db	1,0,0

	db	2,11,10
	dw	182
	db	2,0,1

	db	8,11,10
	dw	0
	db	2,0,1

	db	23,0,50
	dw	0
	db	3,0,0
	
	db	28,11,20
	dw	250
	db	4,0,0

	db	23,0,50
	dw	43
	db	2,0,8

	db	23,11,40
	dw	130
	db	2,0,1

	db	23,22,40
	dw	122
	db	2,0,2

	db	23,22,40
	dw	105
	db	2,0,3

	db	23,22,40
	dw	81
	db	2,0,4

	db	23,11,40
	dw	135
	db	2,0,5

	db	23,22,40
	dw	145
	db	2,0,6

	db	4,22,30
	dw	0
	db	2,0,0

	db	45,22,30
	dw	200
	db	0,0,20

	db	45,22,30
	dw	39
	db	2,0,0

	db	45,22,30
	dw	25
	db	2,0,0

	db	8,22,40
	dw	32
	db	2,0,0

	db	7,11,20
	dw	64
	db	2,0,0

	db	22,22,20
	dw	82
	db	2,0,0

	db	27,11,30
	dw	0
	db	2,0,0

	db	20,0,30
	dw	0
	db	2,0,0

	db	14,33,40
	dw	21
	db	1,0,0

	db	29,11,10
	dw	0
	db	1,0,0

	db	2,22,0
	dw	2
	db	2,0,0

	db	25,0,50
	dw	4
	db	2,0,0

	db	50,22,30
	dw	121
	db	2,0,0

	db	50,22,30
	dw	0
	db	20,0,0

	db	52,22,30
	dw	192
	db	2,0,0

	db	52,22,30
	dw	233
	db	2,0,0

	db	50,22,40
	dw	104
	if	cd
	if	german
	db	65,0,0
	else
	db	55,0,0
	endif
	else
	db	55,0,0
	endif

	db	53,33,0
	dw	99
	db	2,0,0

	db	50,22,40
	dw	0
	db	3,0,0

	db	50,22,30
	dw	162
	db	2,0,0

	db	52,22,30
	dw	57
	db	2,0,0

	db	52,22,30
	dw	0
	db	2,0,0

	db	54,0,0
	dw	72
	db	3,0,0

	db	55,44,0
	dw	0
	db	2,0,0

	db	19,0,0
	dw	0
	db	28,0,0

	db	14,22,0
	dw	2
	db	2,0,0

	db	14,22,0
	dw	300
	db	1,0,0

	db	10,22,30
	dw	174
	db	0,0,0

	db	12,22,20
	dw	0
	db	1,0,0

	db	11,11,20
	dw	0
	db 	50,20,0
	
	db	11,11,30
	dw	0
	db 	50,20,0
	
	db	11,22,20
	dw	0
	db 	50,20,0

	db	14,33,40
	dw	0
	db 	50,20,0

	db	255


Lenofreelrouts	equ	$-reelroutines


Reelcalls	dw	gamer,sparkydrip,eden,edeninbath,sparky,smokebloke
	dw	manasleep,drunk,receptionist,malefan,femalefan
	dw	louis,louischair,soldier1,bossman,interviewer
	dw	heavy,manasleep2,mansatstill,drinker,bartender
	dw	othersmoker,tattooman,attendant,keeper,candles1
	dw	smallcandle,security,copper,poolguard,rockstar
	dw	businessman,train,aide,mugger,helicopter
	dw	intromagic1,intromusic,intromagic2,candles2,gates
	dw	intromagic3,intromonks1,candles,intromonks2
	dw	handclap,monkandryan,endgameseq,priest,madman
	dw	madmanstelly,alleybarksound,foghornsound
	dw	carparkdrip,carparkdrip,carparkdrip,carparkdrip



;---------------------------------------------------------Character updates----



Alleybarksound	proc	near

	mov	ax,[es:bx+3]
	dec	ax
	cmp	ax,0
	jnz	nobark
	push	bx es
    	mov	al,14
	call	playchannel1
	pop	es bx
	mov	ax,1000
nobark:	mov	[es:bx+3],ax
	ret

	endp




Intromusic	proc	near

	ret

	endp


Foghornsound	proc	near

	call	randomnumber
	cmp	al,198
	jnz	nofog
     	mov	al,13
	call	playchannel1
nofog:	ret

	endp




Receptionist	proc	near

	call	checkspeed
	jnz	gotrecep
	cmp	cardpassflag,1
	jnz	notsetcard
           	inc	cardpassflag
	mov	byte ptr [es:bx+7],1
	mov	word ptr [es:bx+3],64
notsetcard:	cmp	word ptr [es:bx+3],58
	jnz	notdes1
	call	randomnumber
	cmp	al,30
	jc	notdes2
	mov	word ptr [es:bx+3],55
	jmp	gotrecep

notdes1:	cmp	word ptr [es:bx+3],60
	jnz	notdes2
	call	randomnumber
	cmp	al,240
	jc	gotrecep
	mov	word ptr [es:bx+3],53
	jmp	gotrecep

notdes2:	cmp	word ptr [es:bx+3],88
	jnz	notendcard
	mov	word ptr [es:bx+3],53
	jmp	gotrecep

notendcard:	inc	word ptr [es:bx+3]
gotrecep:	call	showgamereel
	call	addtopeoplelist

	mov	al,[es:bx+7]
	and	al,128
	jz	nottalkedrecep
	mov	talkedtorecep,1
nottalkedrecep:	ret
	
	endp




Smokebloke	proc	near

	cmp	rockstardead,0
	jnz	notspokento
	mov	al,[es:bx+7]
	and	al,128
	jz	notspokento
	push	es bx
	mov	al,5
	call	setlocation
	pop	bx es
notspokento:	;mov	al,[es:bx+7]
	;and	al,127
	;mov	[es:bx+7],al
	call	checkspeed
	jnz	gotsmokeb
	cmp	word ptr [es:bx+3],100
	jnz	notsmokeb1
	call	randomnumber
	cmp	al,30
	jc	notsmokeb2
	mov	word ptr [es:bx+3],96
	jmp	gotsmokeb

notsmokeb1:	cmp	word ptr [es:bx+3],117
	jnz	notsmokeb2
	mov	word ptr [es:bx+3],96
	jmp	gotsmokeb

notsmokeb2:	inc	word ptr [es:bx+3]
gotsmokeb:	call	showgamereel
	call	addtopeoplelist
	ret

	endp










Attendant	proc	near

	call	showgamereel
	call	addtopeoplelist
	mov	al,[es:bx+7]
	and	al,128
	jz	nottalked
          	mov	talkedtoattendant,1
nottalked:	ret

	endp






Manasleep	proc	near

	mov	al,[es:bx+7]
	and	al,127
	mov	[es:bx+7],al
	call	showgamereel
	call	addtopeoplelist
	ret

	endp



Eden	proc	near

	cmp	generaldead,0
	jnz	notinbed
	call	showgamereel
	call	addtopeoplelist
notinbed:	ret

	endp



Edeninbath	proc	near

	cmp	generaldead,0
	jz	notinbath
	cmp	sartaindead,0
	jnz	notinbath
	call	showgamereel
	call	addtopeoplelist
notinbath:	ret

	endp



Malefan	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp



Femalefan	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp




Louis	proc	near

	cmp	rockstardead,0
	jnz	notlouis1
	call	showgamereel
	call	addtopeoplelist
notlouis1:	ret

	endp




Louischair	proc	near
          
	cmp	rockstardead,0
	jz	notlouis2
	call	checkspeed
	jnz	notlouisanim
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,191
	jz	restartlouis
	cmp	ax,185
	jz	randomlouis
	mov	[es:bx+3],ax
	jmp	notlouisanim
randomlouis:	mov	[es:bx+3],ax
	call	randomnumber
	cmp	al,245
	jnc	notlouisanim
restartlouis:	mov	ax,182
	mov	[es:bx+3],ax
notlouisanim:	call	showgamereel
	call	addtopeoplelist
notlouis2:	ret

	endp



Manasleep2	proc	near

	mov	al,[es:bx+7]
	and	al,127
	mov	[es:bx+7],al
	call	showgamereel
	call	addtopeoplelist
	ret

	endp




Mansatstill	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp


Tattooman	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp


Drinker	proc	near

	call	checkspeed
	jnz	gotdrinker
	inc	word ptr [es:bx+3]
	cmp	word ptr [es:bx+3],115
	jnz	notdrinker1
	mov	word ptr [es:bx+3],105
	jmp	gotdrinker

notdrinker1:	cmp	word ptr [es:bx+3],106
	jnz	gotdrinker
	call	randomnumber
	cmp	al,3
	jc	gotdrinker
	mov	word ptr [es:bx+3],105

gotdrinker:	call	showgamereel
	call	addtopeoplelist
	ret

	endp





Bartender	proc	near

	call	checkspeed
	jnz	gotsmoket
	cmp	word ptr [es:bx+3],86
	jnz	notsmoket1
	call	randomnumber
	cmp	al,18
	jc	notsmoket2
	mov	word ptr [es:bx+3],81
	jmp	gotsmoket

notsmoket1:	cmp	word ptr [es:bx+3],103
	jnz	notsmoket2
	mov	word ptr [es:bx+3],81
	jmp	gotsmoket

notsmoket2:	inc	word ptr [es:bx+3]
gotsmoket:	call	showgamereel
	cmp	gunpassflag,1
	jnz	notgotgun
	mov	byte ptr [es:bx+7],9
notgotgun:	call	addtopeoplelist
	ret

	endp







Othersmoker	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp






Barwoman	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp









Interviewer	proc	near
	
	cmp	reeltowatch,68
	jnz	notgeneralstart
	inc	word ptr [es:bx+3]
notgeneralstart:	cmp	word ptr [es:bx+3],250
	jz	talking
	call	checkspeed
	jnz	talking
	cmp	word ptr [es:bx+3],259
	jz	talking
	inc	word ptr [es:bx+3]
talking:	call	showgamereel
	ret

	endp





Soldier1	proc	near

	cmp	word ptr [es:bx+3],0
	jz	soldierwait
	mov	watchingtime,10
	cmp	word ptr [es:bx+3],30
	jnz	notaftersshot
	inc	combatcount
	cmp	combatcount,40
	jnz	gotsoldframe
	mov	mandead,2
	jmp	gotsoldframe
notaftersshot:	call	checkspeed
	jnz	gotsoldframe	
	inc	word ptr [es:bx+3]
	jmp	gotsoldframe
soldierwait:	cmp	lastweapon,1
	jnz	gotsoldframe
	mov	watchingtime,10
	cmp	manspath,2
	jnz	gotsoldframe
	cmp	facing,4
	jnz	gotsoldframe
	inc	word ptr [es:bx+3]
	mov	lastweapon,-1
	mov	combatcount,0
gotsoldframe:	call	showgamereel
	call	addtopeoplelist
	ret

	endp








Rockstar	proc	near

	mov	ax,[es:bx+3]
	cmp	ax,303
	jz	rockcombatend
	cmp	ax,118
	jz	rockcombatend
	call	checkspeed
	jnz	rockspeed

	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,118
	jnz	notbeforedead
	mov	mandead,2
	jmp	gotrockframe

notbeforedead:	cmp	ax,79
	jnz	gotrockframe
	dec	ax
	cmp	lastweapon,1
	jnz	notgunonrock
	mov	lastweapon,-1
	mov	ax,123
	jmp	gotrockframe
notgunonrock:	inc	combatcount
	cmp	combatcount,40
	jnz	gotrockframe
	mov	combatcount,0
	mov	ax,79

gotrockframe:	mov	[es:bx+3],ax
rockspeed:	call	showgamereel
	cmp	word ptr [es:bx+3],78
	jnz	notalkrock
	call	addtopeoplelist
	mov	pointermode,2
	mov	watchingtime,0
	ret
	
notalkrock:	mov	watchingtime,2
	mov	pointermode,0
	mov	al,mapy
	mov	[es:bx+2],al
	ret

rockcombatend:	mov	newlocation,45
	call	showgamereel
	ret

	endp









	





Helicopter	proc	near

	mov	ax,[es:bx+3]
	cmp	ax,203
	jz	heliwon
	;cmp	ax,53
	;jz	helicombatend
	call	checkspeed
	jnz	helispeed

	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,53
	jnz	notbeforehdead
	inc	combatcount
	cmp	combatcount,8
	jc	waitabit
	mov	mandead,2
waitabit:	mov	ax,49
	jmp	gotheliframe

notbeforehdead:	cmp	ax,9
	jnz	gotheliframe
	dec	ax
	cmp	lastweapon,1
	jnz	notgunonheli
	mov	lastweapon,-1
	mov	ax,55
	jmp	gotheliframe
notgunonheli:	mov	ax,5
	inc	combatcount
	cmp	combatcount,20
	jnz	gotheliframe
	mov	combatcount,0
	mov	ax,9

gotheliframe:	mov	[es:bx+3],ax
helispeed:	call	showgamereel
	mov	al,mapx
	mov	[es:bx+1],al
helicombatend:	mov	ax,[es:bx+3]
	cmp	ax,9 ;8
	jnc	notwaitingheli
	cmp	combatcount,7
	jc	notwaitingheli
	mov	pointermode,2
	mov	watchingtime,0
	ret
notwaitingheli:	mov	pointermode,0
	mov	watchingtime,2
	ret

heliwon:	mov	pointermode,0
	ret

	endp


Mugger	proc	near

	mov	ax,[es:bx+3]
	cmp	ax,138
	jz	endmugger1
	cmp	ax,176
	jz	endmugger2
	cmp	ax,2
	jnz	havesetwatch
	mov	watchingtime,175*2
havesetwatch:	call	checkspeed
	jnz	notmugger
	inc	word ptr [es:bx+3]
notmugger:	call	showgamereel
	mov	al,mapx
	mov	[es:bx+1],al
	ret

endmugger1:	push	es bx
	call	createpanel2
	call	showicon
	mov	al,41
	call	findpuztext
	mov	di,33+20
	mov	bx,104
	mov	dl,241
	mov	ah,0
	call	printdirect
	call	worktoscreen
	mov	cx,300
	call	hangon
	pop	bx es
	push	es bx
	mov	word ptr [es:bx+3],140
	mov	manspath,2
	mov	finaldest,2
	call	findxyfrompath
	mov	resetmanxy,1
	mov	al,"W"
	mov	ah,"E"
	mov	cl,"T"
	mov	ch,"A"	
	call	findexobject
	mov	command,al
	mov	objecttype,4
	call	removeobfrominv
	mov	al,"W"
	mov	ah,"E"
	mov	cl,"T"
	mov	ch,"B"	
	call	findexobject
	mov	command,al
	mov	objecttype,4
	call	removeobfrominv
	call	makemainscreen
	mov	al,48
	mov	bl,68-32
	mov	bh,54+64
	mov	cx,70	; time on screen
	mov	dx,10	; pause before show
	call	setuptimeduse
	mov	beenmugged,1
	pop	bx es
	ret

endmugger2:	ret
	

	endp








Aide	proc	near

	call	showgamereel
	call	addtopeoplelist
	ret

	endp






Businessman	proc	near

	mov	pointermode,0
	mov	watchingtime,2
	mov	ax,[es:bx+3]
	cmp	ax,2
	jnz	notfirstbiz
	push	ax bx es
	mov	al,49
	mov	cx,30
	mov	dx,1
	mov	bl,68
	mov	bh,174
	call	setuptimeduse
            	pop	es bx ax

notfirstbiz:	cmp	ax,95
	jz	buscombatwonend
	cmp	ax,49
	jz	buscombatend

	call	checkspeed
	jnz	busspeed

	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,48
	jnz	notbeforedeadb
	mov	mandead,2
	jmp	gotbusframe

notbeforedeadb:	cmp	ax,15
	jnz	buscombatwon
	dec	ax
	cmp	lastweapon,3
	jnz	notshieldonbus
	mov	lastweapon,-1
	mov	combatcount,0
	mov	ax,51
	jmp	gotbusframe
notshieldonbus:	inc	combatcount
	cmp	combatcount,20
	jnz	gotbusframe
	mov	combatcount,0
	mov	ax,15
	jmp	gotbusframe

buscombatwon:	cmp	ax,91
	jnz	gotbusframe
	push	bx es
	mov	al,0
	call	turnpathon
	mov	al,1
	call	turnpathon
	mov	al,2
	call	turnpathon
	mov	al,3
	call	turnpathoff
	mov	manspath,5
	mov	finaldest,5
	call	findxyfrompath
	mov	resetmanxy,1
	pop	es bx
	mov	ax,92
	jmp	gotbusframe

gotbusframe:	mov	[es:bx+3],ax
busspeed:	call	showgamereel
	mov	al,mapy
	mov	[es:bx+2],al
	mov	ax,[es:bx+3]
	cmp	ax,14
	jnz	buscombatend
	mov	watchingtime,0
	mov	pointermode,2
	ret

buscombatend:	ret

buscombatwonend:	mov	pointermode,0
	mov	watchingtime,0
	ret

	endp






Poolguard	proc	near

	mov	ax,[es:bx+3]
	cmp	ax,214
	jz	combatover2
	cmp	ax,258
	jz	combatover2
	cmp	ax,185
	jz	combatover1
	cmp	ax,0
	jnz	notfirstpool
	mov	al,0
	call	turnpathon
notfirstpool:	call	checkspeed
	jnz	guardspeed

	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,122
	jnz	notendguard1
	dec	ax
	cmp	lastweapon,2
	jnz	notaxeonpool
	mov	lastweapon,-1
	mov	ax,122
	jmp	gotguardframe
notaxeonpool:	inc	combatcount
	cmp	combatcount,40
	jnz	gotguardframe
	mov	combatcount,0
	mov	ax,195
	jmp	gotguardframe

notendguard1:	cmp	ax,147
	jnz	gotguardframe
	dec	ax
	cmp	lastweapon,1
	jnz	notgunonpool
	mov	lastweapon,-1
	mov	ax,147
	jmp	gotguardframe
notgunonpool:	inc	combatcount
	cmp	combatcount,40
	jnz	gotguardframe
	mov	combatcount,0
	mov	ax,220

gotguardframe:	mov	[es:bx+3],ax
guardspeed:	call	showgamereel
	mov	ax,[es:bx+3]
	cmp	ax,121
	jz	iswaitingpool
	cmp	ax,146
	jz	iswaitingpool
	mov	pointermode,0
	mov	watchingtime,2
	ret
iswaitingpool:	mov	pointermode,2
	mov	watchingtime,0	
	ret

combatover1:	mov	watchingtime,0
	mov	pointermode,0
	mov	al,0
	call	turnpathon
	mov	al,1
	call	turnpathoff
	ret

combatover2:	call	showgamereel
	mov	watchingtime,2
	mov	pointermode,0
	inc	combatcount
	cmp	combatcount,100
	jc	doneover2
	mov	watchingtime,0
	mov	mandead,2
doneover2:	ret

	endp










Security	proc	near
	
	cmp	word ptr [es:bx+3],32
	jz	securwait
	cmp	word ptr [es:bx+3],69
	jnz	notaftersec
	ret
notaftersec:	mov	watchingtime,10
	call	checkspeed
	jnz	gotsecurframe	
	inc	word ptr [es:bx+3]
	jmp	gotsecurframe
securwait:	cmp	lastweapon,1
	jnz	gotsecurframe
	mov	watchingtime,10
	cmp	manspath,9
	jnz	gotsecurframe
	cmp	facing,0
	jnz	gotsecurframe
	mov	lastweapon,-1
	inc	word ptr [es:bx+3]
gotsecurframe:	call	showgamereel
	call	addtopeoplelist
	ret

	endp






Heavy	proc	near

	mov	al,[es:bx+7]
	and	al,127
	mov	[es:bx+7],al
	cmp	word ptr [es:bx+3],43
	jz	heavywait
	mov	watchingtime,10
	cmp	word ptr [es:bx+3],70
	jnz	notafterhshot
	inc	combatcount
	cmp	combatcount,80
	jnz	gotheavyframe
	mov	mandead,2
	jmp	gotheavyframe
notafterhshot:	call	checkspeed
	jnz	gotheavyframe	
	inc	word ptr [es:bx+3]
	jmp	gotheavyframe
heavywait:	cmp	lastweapon,1
	jnz	gotheavyframe
	cmp	manspath,5
	jnz	gotheavyframe
	cmp	facing,4
	jnz	gotheavyframe
	mov	lastweapon,-1
	inc	word ptr [es:bx+3]
	mov	combatcount,0
gotheavyframe:	call	showgamereel
	call	addtopeoplelist
	ret

	endp




Bossman	proc	near

	call	checkspeed
	jnz	notboss
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,4
	jz	firstdes
	cmp	ax,20
	jz	secdes
	cmp	ax,41
	jnz	gotallboss
	mov	ax,0
	inc	gunpassflag
	mov	byte ptr [es:bx+7],10
	jmp	gotallboss
firstdes:	cmp	gunpassflag,1
	jz	gotallboss
	push	ax
	call	randomnumber
	mov	cl,al
	pop	ax
	cmp	cl,10
	jc	gotallboss
	mov	ax,0
	jmp	gotallboss
secdes:	cmp	gunpassflag,1
	jz	gotallboss
	mov	ax,0
gotallboss:	mov	[es:bx+3],ax
notboss:	call	showgamereel
	call	addtopeoplelist

	mov	al,[es:bx+7]
	and	al,128
	jz	nottalkedboss
	mov	talkedtoboss,1
nottalkedboss:	ret
	
	endp





Gamer	proc	near

	call	checkspeed
	jnz	gamerfin
gameragain:	call	randomnum1
	and	al,7
	cmp	al,5
	jnc	gameragain
	add	al,20
	cmp	al,[es:bx+3]
	jz	gameragain
	mov	ah,0
	mov	[es:bx+3],ax
gamerfin:	call	showgamereel
	call	addtopeoplelist
	ret

	endp





Sparkydrip	proc	near

	call	checkspeed
	jnz	cantdrip
         	mov	al,14
	mov	ah,0
	call	playchannel0
cantdrip:	ret

	endp



Carparkdrip	proc	near

	call	checkspeed
	jnz	cantdrip2
         	mov	al,14
	call	playchannel1
cantdrip2:	ret

	endp



Keeper	proc	near

	cmp	keeperflag,0
	jnz	notwaiting
	cmp	reeltowatch,190
	jc	waiting
	inc	keeperflag
	mov	ah,[es:bx+7]
	and	ah,127
	cmp	ah,dreamnumber
	jz	notdiff
	mov	al,dreamnumber
	mov	[es:bx+7],al
notdiff:	ret
notwaiting:	call	addtopeoplelist
	call	showgamereel
waiting:	ret

	endp



Candles1	proc	near

	call	checkspeed
	jnz	candle1
        	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,44
	jnz	notendcandle1
	mov	ax,39
notendcandle1:	mov	[es:bx+3],ax
candle1:	call	showgamereel
	ret

	endp



Smallcandle	proc	near

	call	checkspeed
	jnz	smallcandlef
        	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,37
	jnz	notendsmallcandle
	mov	ax,25
notendsmallcandle:	mov	[es:bx+3],ax
smallcandlef:	call	showgamereel
	ret

	endp











Intromagic1	proc	near

	call	checkspeed
	jnz	introm1fin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,145
	jnz	gotintrom1
	mov	ax,121
gotintrom1:	mov	[es:bx+3],ax
	cmp	ax,121
	jnz	introm1fin
	inc	introcount
	push	es bx
	call	intro1text
	pop	bx es
	cmp	introcount,8 ; was 7
	jnz	introm1fin
	add	mapy,10
	mov	nowinnewroom,1
introm1fin:	call	showgamereel
	ret

	endp




Candles	proc	near

	call	checkspeed
	jnz	candlesfin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,167
	jnz	gotcandles
	mov	ax,162
gotcandles:	mov	[es:bx+3],ax
candlesfin:	call	showgamereel
	ret

	endp



Candles2	proc	near

	call	checkspeed
	jnz	candles2fin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,238
	jnz	gotcandles2
	mov	ax,233
gotcandles2:	mov	[es:bx+3],ax
candles2fin:	call	showgamereel
	ret

	endp



Gates	proc	near

	call	checkspeed
	jnz	gatesfin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,116
	jnz	notbang
	push	ax bx es
	mov	al,17 ;12
	call	playchannel1
	pop	es bx ax
notbang:	cmp	ax,110
	jc	slowgates
	mov	byte ptr [es:bx+5],2
slowgates:	cmp	ax,120
	jnz	gotgates
	mov	getback,1
	mov	ax,119
gotgates:	mov	[es:bx+3],ax
	push	es bx
	call	intro3text
	pop	bx es
gatesfin:	call	showgamereel
	ret

	endp




Intromagic2	proc	near

	call	checkspeed
	jnz	introm2fin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,216
	jnz	gotintrom2
	mov	ax,192
gotintrom2:	mov	[es:bx+3],ax
introm2fin:	call	showgamereel
	ret

	endp




Intromagic3	proc	near

	call	checkspeed
	jnz	introm3fin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,218
	jnz	gotintrom3
	mov	getback,1
gotintrom3:	mov	[es:bx+3],ax
introm3fin:	call	showgamereel
	mov	al,mapx
	mov	[es:bx+1],al
	ret

	endp







Intromonks1	proc	near

	call	checkspeed
	jnz	intromonk1fin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,80
	jnz	notendmonk1
	add	mapy,10
	mov	nowinnewroom,1
	call	showgamereel
	ret
notendmonk1:	cmp	ax,30
	jnz	gotintromonk1
	sub	mapy,10
	mov	nowinnewroom,1
	mov	ax,51
gotintromonk1:	mov	[es:bx+3],ax
	cmp	ax,5
	jz	waitstep
	cmp	ax,15
	jz	waitstep
	cmp	ax,25
	jz	waitstep
	cmp	ax,61
	jz	waitstep
	cmp	ax,71
	jz	waitstep
	jmp	intromonk1fin
waitstep:	push	es bx
	call	intro2text
	pop	bx es
	mov	byte ptr [es:bx+6],-20
intromonk1fin:	call	showgamereel
	mov	al,mapy
	mov	[es:bx+2],al
	ret

	endp




Intromonks2	proc	near

	call	checkspeed
	jnz	intromonk2fin
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,87
	jnz	nottalk1
	inc	introcount
	push	es bx
	call	monks2text
	pop	bx es
	cmp	introcount,19
	jnz	notlasttalk1
	mov	ax,87
	jmp	gotintromonk2
notlasttalk1:	mov	ax,74
	jmp	gotintromonk2

nottalk1:	cmp	ax,110
	jnz	notraisearm
	inc	introcount
	push	es bx
	call	monks2text
	pop	bx es
	if	cd
	if	german
	cmp	introcount,42
	else
	cmp	introcount,35
	endif
	else
	cmp	introcount,35
	endif
	jnz	notlastraise
	mov	ax,111
	jmp	gotintromonk2
notlastraise:	mov	ax,98
	jmp	gotintromonk2

notraisearm:	cmp	ax,176
	jnz	notendmonk2
	mov	getback,1
	jmp	gotintromonk2
notendmonk2:	cmp	ax,125
	jnz	gotintromonk2
	mov	ax,140
gotintromonk2:	mov	[es:bx+3],ax
intromonk2fin:	call	showgamereel
	ret

	endp





Handclap	proc	near

	ret

	endp




	if	german
	if	cd

Monks2text	proc	near

	cmp	introcount,1
	jnz	notmonk2text1
	mov	al,8
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text1:	cmp	introcount,5
	jnz	notmonk2text2
	mov	al,9
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text2:	cmp	introcount,9
	jnz	notmonk2text3
	mov	al,10
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text3:	cmp	introcount,13
	jnz	notmonk2text4
	mov	introcount,14
	mov	al,11
	mov	bl,0
	mov	bh,105
	mov	cx,100
	jmp	gotmonks2text
notmonk2text4:	cmp	introcount,19
	jnz	notmonk2text7
	mov	al,14
	mov	bl,36
	mov	bh,160
	mov	cx,100 ;32
	mov	dx,1
	mov	ah,82
	jmp	setuptimedtemp
notmonk2text7:	cmp	introcount,23
	jnz	notmonk2text8
	mov	al,15
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text8:	cmp	introcount,27
	jnz	notmonk2text9
	mov	al,16
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text9:	cmp	introcount,30
	jnz	notmonk2text10
	mov	al,17
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text10:	cmp	introcount,35
	jnz	notmonk2text11
	mov	al,18
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text11:	ret

gotmonks2text:	mov	dx,1
	mov	cx,120
	mov	ah,82
	call	setuptimedtemp
	ret

	endp

	else

Monks2text	proc	near

	cmp	introcount,1
	jnz	notmonk2text1
	mov	al,8
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text1:	cmp	introcount,4
	jnz	notmonk2text2
	mov	al,9
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text2:	cmp	introcount,7
	jnz	notmonk2text3
	mov	al,10
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text3:	cmp	introcount,10
	jnz	notmonk2text4
	if	cd
	mov	introcount,12
	endif
	mov	al,11
	mov	bl,0
	mov	bh,105
	mov	cx,100
	jmp	gotmonks2text
notmonk2text4:	cmp	introcount,13
	jnz	notmonk2text5
	if	cd
	mov	introcount,17; 18
	ret
	endif
	mov	al,12
	mov	bl,0
	mov	bh,120
	mov	cx,100
	jmp	gotmonks2text
notmonk2text5:	cmp	introcount,16
	jnz	notmonk2text6
	mov	al,13
	mov	bl,0
	mov	bh,135
	mov	cx,100
	jmp	gotmonks2text
notmonk2text6:	cmp	introcount,19
	jnz	notmonk2text7
	mov	al,14
	mov	bl,36
	mov	bh,160
	mov	cx,100 ;32
	mov	dx,1
	mov	ah,82
	jmp	setuptimedtemp
notmonk2text7:	cmp	introcount,22
	jnz	notmonk2text8
	mov	al,15
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text8:	cmp	introcount,25
	jnz	notmonk2text9
	mov	al,16
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text9:	if	cd
	cmp	introcount,27
	else
	cmp	introcount,28
	endif
	jnz	notmonk2text10
	mov	al,17
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text10:	cmp	introcount,31
	jnz	notmonk2text11
	mov	al,18
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text11:	ret

gotmonks2text:	mov	dx,1
	mov	cx,120
	mov	ah,82
	call	setuptimedtemp
	ret

	endp

	
	endif
	else

Monks2text	proc	near

	cmp	introcount,1
	jnz	notmonk2text1
	mov	al,8
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text1:	cmp	introcount,4
	jnz	notmonk2text2
	mov	al,9
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text2:	cmp	introcount,7
	jnz	notmonk2text3
	mov	al,10
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text3:	cmp	introcount,10
	jnz	notmonk2text4
	if	cd
	mov	introcount,12
	endif
	mov	al,11
	mov	bl,0
	mov	bh,105
	mov	cx,100
	jmp	gotmonks2text
notmonk2text4:	cmp	introcount,13
	jnz	notmonk2text5
	if	cd
	mov	introcount,17; 18
	ret
	endif
	mov	al,12
	mov	bl,0
	mov	bh,120
	mov	cx,100
	jmp	gotmonks2text
notmonk2text5:	cmp	introcount,16
	jnz	notmonk2text6
	mov	al,13
	mov	bl,0
	mov	bh,135
	mov	cx,100
	jmp	gotmonks2text
notmonk2text6:	cmp	introcount,19
	jnz	notmonk2text7
	mov	al,14
	mov	bl,36
	mov	bh,160
	mov	cx,100 ;32
	mov	dx,1
	mov	ah,82
	jmp	setuptimedtemp
notmonk2text7:	cmp	introcount,22
	jnz	notmonk2text8
	mov	al,15
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text8:	cmp	introcount,25
	jnz	notmonk2text9
	mov	al,16
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text9:	if	cd
	cmp	introcount,27
	else
	cmp	introcount,28
	endif
	jnz	notmonk2text10
	mov	al,17
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text10:	cmp	introcount,31
	jnz	notmonk2text11
	mov	al,18
	mov	bl,36
	mov	bh,160
	mov	cx,100
	jmp	gotmonks2text
notmonk2text11:	ret

gotmonks2text:	mov	dx,1
	mov	cx,120
	mov	ah,82
	call	setuptimedtemp
	ret

	endp

	endif






Intro1text	proc	near

	cmp	introcount,2
	jnz	notintro1text1
	mov	al,40
	mov	bl,34
	mov	bh,130
	mov	cx,90
	jmp	gotintro1text
notintro1text1:	cmp	introcount,4
	jnz	notintro1text2
	mov	al,41
	mov	bl,34
	mov	bh,130
	mov	cx,90
	jmp	gotintro1text
notintro1text2:	cmp	introcount,6
	jnz	notintro1text3
	mov	al,42
	mov	bl,34
	mov	bh,130
	mov	cx,90
	jmp	gotintro1text
notintro1text3:	ret

gotintro1text:	mov	dx,1
	mov	ah,82
	if	cd
	cmp	ch1playing,255
	jz	oktalk2
	dec	introcount
	ret
	endif
oktalk2:	call	setuptimedtemp
	ret

	endp



Intro2text	proc	near

               	cmp	ax,5
	jnz	notintro2text1
	mov	al,43
	mov	bl,34
	mov	bh,40
	mov	cx,90
	jmp	gotintro2text
notintro2text1:	cmp	ax,15
	jnz	notintro2text2
	mov	al,44
	mov	bl,34
	mov	bh,40
	mov	cx,90
	jmp	gotintro2text
notintro2text2:	ret

gotintro2text:	mov	dx,1
	mov	ah,82
	call	setuptimedtemp
	ret

	endp






Intro3text	proc	near

	cmp	ax,107
	jnz	notintro3text1
	mov	al,45
	mov	bl,36
	mov	bh,56
	mov	cx,100
	jmp	gotintro3text
notintro3text1:	if	cd
	cmp	ax,108
	else
	cmp	ax,109
	endif
	jnz	notintro3text2
	mov	al,46
	mov	bl,36
	mov	bh,56
	mov	cx,100
	jmp	gotintro3text
notintro3text2:	ret

gotintro3text:	mov	dx,1
	mov	ah,82
	call	setuptimedtemp
	ret

	endp







Monkandryan	proc	near

	call	checkspeed
	jnz	notmonkryan
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,83
	jnz	gotmonkryan
	inc	introcount
	push	es bx
	call	textformonk
	pop	bx es
	mov	ax,77
	cmp	introcount,57
	jnz	gotmonkryan
	mov	getback,1
	ret
gotmonkryan:	mov	[es:bx+3],ax
notmonkryan:	call	showgamereel
	ret

	endp





Endgameseq	proc	near

	call	checkspeed
	jnz	notendseq
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,51
	jnz	gotendseq
	cmp	introcount,140
	jz	gotendseq
	inc	introcount
	push	es bx
	call	textforend
	pop	bx es
	mov	ax,50
gotendseq:	mov	[es:bx+3],ax
	cmp	ax,134
	jnz	notfadedown
	push	es bx ax
	call	fadescreendownhalf	
	pop	ax bx es
	jmp	notendseq
notfadedown:	cmp	ax,324
	jnz	notfadeend
	push	es bx ax
	call	fadescreendowns
	mov	volumeto,7
	mov	volumedirection,1
	pop	ax bx es
notfadeend:	cmp	ax,340
	jnz	notendseq
	mov	getback,1
notendseq:	call	showgamereel
	mov	al,mapy
	mov	[es:bx+2],al
            	mov	ax,[es:bx+3]
	cmp	ax,145
	jnz	notendcreds
	mov	word ptr [es:bx+3],146
	call	rollendcredits
notendcreds:	ret
	
	endp






Rollendcredits	proc	near

	mov	al,16
	mov	ah,255
	call	playchannel0
	mov	volume,7
	mov	volumeto,0
	mov	volumedirection,-1

	mov	cl,160
	mov	ch,160
	mov	di,75
	mov	bx,20
	mov	ds,mapstore
	mov	si,0
	call	multiget

	mov	es,textfile1
	mov	si,3*2
	mov	ax,[es:si]
	mov	si,ax
	add	si,textstart

	mov	cx,254
endcredits1:	push	cx

	mov	bx,10
	mov	cx,linespacing
endcredits2:	push	cx si di es bx

	call	vsync
	mov	cl,160
	mov	ch,160
	mov	di,75
	mov	bx,20
	mov	ds,mapstore
	mov	si,0
	call	multiput
	call	vsync
	pop	bx es di si
	push	si di es bx
	
	mov	cx,18
onelot:	push	cx
	mov	di,75
	mov	dx,161
	mov	ax,0
	call	printdirect
	add	bx,linespacing
	pop	cx
	loop	onelot

	call	vsync
	mov	cl,160
	mov	ch,160
	mov	di,75
	mov	bx,20
	call	multidump

	pop	bx es di si cx
	dec	bx
	loop	endcredits2
	pop	cx
looknext:	mov	al,[es:si]
	inc	si
	cmp	al,":"
	jz	gotnext
	cmp	al,0
	jz	gotnext
	jmp	looknext
gotnext:	loop	endcredits1

	mov	cx,100
	call	hangon
	call	paneltomap
	call	fadescreenuphalf
	ret

	endp






Priest	proc	near

	cmp	word ptr [es:bx+3],8
	jz	priestspoken
	mov	pointermode,0
	mov	watchingtime,2
	call	checkspeed
	jnz	priestwait
	inc	word ptr [es:bx+3]
	push	es bx
	call	priesttext
	pop	bx es
priestwait:	ret

priestspoken:	ret

	endp






Madmanstelly	proc	near

	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,307
	jnz	notendtelly
	mov	ax,300
notendtelly:	mov	[es:bx+3],ax
	call	showgamereel
	ret

	endp





Madman	proc	near

	mov	watchingtime,2
	call	checkspeed
	jnz	nomadspeed
	mov	ax,[es:bx+3]
	cmp	ax,364
	jnc	ryansded
	cmp	ax,10
	jnz	notfirstmad
	push	es bx ax
	mov	dx,offset cs:introtextname
	call	loadtemptext
	pop	ax bx es
	mov	combatcount,-1
	mov	speechcount,0
notfirstmad:	inc	ax
	cmp	ax,294
	jz	madmanspoken
	cmp	ax,66
	jnz	nomadspeak
	inc	combatcount
	push	es bx
	call	madmantext
	pop	bx es
	mov	ax,53
	if	cd
	cmp	combatcount,64
	else
	cmp	combatcount,62
	endif
	jc	nomadspeak
	if	cd
	cmp	combatcount,70
	else
	cmp	combatcount,68
	endif
	jz	killryan
	cmp	lastweapon,8
	jnz	nomadspeak
	if	cd
	mov	combatcount,72
	else
	mov	combatcount,70
	endif
	mov	lastweapon,-1
	mov	madmanflag,1
	mov	ax,67
	jmp	nomadspeak
killryan:	mov	ax,310
nomadspeak:	mov	[es:bx+3],ax
nomadspeed:	call	showgamereel
	mov	al,mapx
	mov	[es:bx+1],al
	call	madmode
	ret
madmanspoken:	cmp	wongame,1
	jz	alreadywon
	mov	wongame,1
	push	es bx
	call	getridoftemptext
	pop	bx es
alreadywon:	ret

ryansded:	mov	mandead,2
	call	showgamereel
	ret

	endp









	if	cd
Madmantext	proc	near
		         
	cmp	speechcount,63
	jnc	nomadtext
	cmp	ch1playing,255
	jnz	nomadtext

	mov	al,speechcount
	inc	speechcount
	add	al,47
	mov	bl,72
	mov	bh,80
	mov	cx,90
	mov	dx,1
	mov	ah,82
	call	setuptimedtemp
nomadtext:	ret

	endp
	
	else

Madmantext	proc	near
		         
	cmp	combatcount,61
	jnc	nomadtext
	mov	al,combatcount
	and	al,3
	jnz	nomadtext
	mov	al,combatcount
	shr	al,1
	shr	al,1
	add	al,47
	mov	bl,72
	mov	bh,80
	mov	cx,90
	mov	dx,1
	mov	ah,82
	call	setuptimedtemp
nomadtext:	ret

	endp
	endif




Madmode	proc	near

	mov	watchingtime,2
	mov	pointermode,0
	if	cd
	cmp	combatcount,65
	else
	cmp	combatcount,63
	endif
	jc	iswatchmad
	if	cd
	cmp	combatcount,70
	else
	cmp	combatcount,68
	endif
	jnc	iswatchmad
	mov	pointermode,2	
iswatchmad:	ret

	endp





Priesttext	proc	near
	
	cmp	word ptr [es:bx+3],2
	jc	nopriesttext
	cmp	word ptr [es:bx+3],7
	jnc	nopriesttext
	mov	al,[es:bx+3]
	and	al,1
	jnz	nopriesttext
	mov	al,[es:bx+3]
	shr	al,1
	add	al,50
	mov	bl,72
	mov	bh,80
	mov	cx,54
	mov	dx,1
	call	setuptimeduse
nopriesttext:	ret

	endp




Textforend	proc	near

	cmp	introcount,20
	jnz	notendtext1
	mov	al,0
	mov	bl,34
	mov	bh,20
	mov	cx,60
	jmp	gotendtext
notendtext1:	if	cd
	cmp	introcount,50
	else
	cmp	introcount,65
	endif
	jnz	notendtext2
	mov	al,1
	mov	bl,34
	mov	bh,20
	mov	cx,60
	jmp	gotendtext
notendtext2:	if	cd
	cmp	introcount,85
	else
	cmp	introcount,110
	endif
	jnz	notendtext3
	mov	al,2
	mov	bl,34
	mov	bh,20
	mov	cx,60
	jmp	gotendtext
notendtext3:	ret

gotendtext:	mov	dx,1
	mov	ah,83
	call	setuptimedtemp
	ret

	endp








Textformonk	proc	near

	cmp	introcount,1
	jnz	notmonktext1
	mov	al,19
	mov	bl,68
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext1:	cmp	introcount,5
	jnz	notmonktext2
	mov	al,20
	mov	bl,68
	mov	bh,38
	mov	cx,120
	jmp	gotmonktext
notmonktext2:	cmp	introcount,9
	jnz	notmonktext3
	mov	al,21
	mov	bl,48
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext3:	cmp	introcount,13
	jnz	notmonktext4
	mov	al,22
	mov	bl,68
	mov	bh,38
	mov	cx,120
	jmp	gotmonktext
notmonktext4:	if	cd
	cmp	introcount,15
	else
	cmp	introcount,17
	endif
	jnz	notmonktext5
	mov	al,23
	mov	bl,68
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext5:	cmp	introcount,21
	jnz	notmonktext6
	mov	al,24
	mov	bl,68
	mov	bh,38
	mov	cx,120
	jmp	gotmonktext
notmonktext6:	cmp	introcount,25
	jnz	notmonktext7
	mov	al,25
	mov	bl,68
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext7:	cmp	introcount,29
	jnz	notmonktext8
	mov	al,26
	mov	bl,68
	mov	bh,38
	mov	cx,120
	jmp	gotmonktext
notmonktext8:	cmp	introcount,33
	jnz	notmonktext9
	mov	al,27
	mov	bl,68
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext9:	cmp	introcount,37
	jnz	notmonktext10
	mov	al,28
	mov	bl,68
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext10:	cmp	introcount,41
	jnz	notmonktext11
	mov	al,29
	mov	bl,68
	mov	bh,38
	mov	cx,120
	jmp	gotmonktext
notmonktext11:	cmp	introcount,45
	jnz	notmonktext12
	mov	al,30
	mov	bl,68
	mov	bh,154
	mov	cx,120
	jmp	gotmonktext
notmonktext12:	if	cd
	cmp	introcount,52
	else
	cmp	introcount,49
	endif
	jnz	notmonktext13
	mov	al,31
	mov	bl,68
	mov	bh,154
	mov	cx,220 ;132
	jmp	gotmonktext
notmonktext13:	cmp	introcount,53
	jnz	notendtitles
	call	fadescreendowns
	if	cd
	mov	volumeto,7
	mov	volumedirection,1
	endif
notendtitles:	ret

gotmonktext:	mov	dx,1
	mov	ah,82
	if	cd
	cmp	ch1playing,255
	jz	oktalk
	dec	introcount
	ret
	endif
oktalk:	call	setuptimedtemp
	ret

	endp










Drunk	proc	near

	cmp	generaldead,0
	jnz	trampgone
	mov	al,[es:bx+7]
	and	al,127
	mov	[es:bx+7],al
	call	showgamereel
	call	addtopeoplelist
trampgone:	ret

	endp


Advisor	proc	near

	call	checkspeed
	jnz	noadvisor
	jmp	noadvisor
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,123
	jnz	notendadvis
	mov	ax,106
	jmp	gotadvframe
notendadvis:	cmp	ax,108
	jnz	gotadvframe
	push	ax
	call	randomnumber
	mov	cl,al
	pop	ax
	cmp	cl,3
	jc	gotadvframe
	mov	ax,106
gotadvframe:	mov	[es:bx+3],ax
noadvisor:	call	showgamereel
	call	addtopeoplelist
	ret
		    
	endp



Copper	proc	near

	call	checkspeed
	jnz	nocopper
	mov	ax,[es:bx+3]
	inc	ax
	cmp	ax,94
	jnz	notendcopper
	mov	ax,64
	jmp	gotcopframe
notendcopper:	cmp	ax,81
	jz	mightwait
	cmp	ax,66
	jnz	gotcopframe
mightwait:	push	ax
	call	randomnumber
	mov	cl,al
	pop	ax
	cmp	cl,7
	jc	gotcopframe
	dec	ax
gotcopframe:	mov	[es:bx+3],ax
nocopper:	call	showgamereel
	call	addtopeoplelist
	ret

	endp










Sparky	proc	near

	cmp	card1money,0
	jz	animsparky
	mov	byte ptr [es:bx+7],3
	jmp	animsparky

animsparky:	call	checkspeed
	jnz	finishsparky
	cmp	word ptr [es:bx+3],34
	jnz	notsparky1
	call	randomnumber
	cmp	al,30
	jc	dosparky
	mov	word ptr [es:bx+3],27
	jmp	finishsparky

notsparky1:	cmp	word ptr [es:bx+3],48
	jnz	dosparky
	mov	word ptr [es:bx+3],27
	jmp	finishsparky

dosparky:	inc	word ptr [es:bx+3]
finishsparky:	call	showgamereel
	call	addtopeoplelist

	mov	al,[es:bx+7]
	and	al,128
	jz	nottalkedsparky
          	mov	talkedtosparky,1
nottalkedsparky:	ret
	
	endp





Train	proc	near

	ret
	mov	ax,[es:bx+3]
	cmp	ax,21
	jnc	notrainyet
	inc	ax
	jmp	gottrainframe
notrainyet:	call	randomnumber
	cmp	al,253
	jc	notrainatall
	cmp	manspath,5
	jnz	notrainatall
	cmp	finaldest,5
	jnz	notrainatall
	mov	ax,5
gottrainframe:	mov	[es:bx+3],ax
	call	showgamereel
notrainatall:	ret

	endp







Addtopeoplelist 	proc	near

	push	es bx bx
	mov	cl,[es:bx+7]
	mov	ax,[es:bx+3]
	mov	bx,listpos
	mov	es,buffers
	mov	[es:bx],ax	;reel pointer position
	pop	ax
	mov	[es:bx+2],ax	                      
	mov	[es:bx+4],cl		;coversation number
	pop	bx es
	add	listpos,5
	ret

	endp



Showgamereel	proc	near

	mov	ax,[es:bx+3]
	cmp	ax,512
	jnc	noshow
	mov	reelpointer,ax
	push	es bx
	call	plotreel
	pop	bx es
	mov	ax,reelpointer
	mov	[es:bx+3],ax
noshow: 	ret

	endp






Checkspeed	proc	near

	cmp	lastweapon,-1
	jnz	forcenext
	inc	byte ptr [es:bx+6]
	mov	al,[es:bx+6]
	cmp	al,[es:bx+5]
	jnz	notspeed
	mov	al,0
	mov	[es:bx+6],al
	cmp	al,al
notspeed:	ret

forcenext:	cmp	al,al
	ret

	endp










;------------------------------------------------------------Sprite Routines----



Clearsprites	proc	near

	mov	es,buffers
	mov	di,spritetable
	mov	al,255
	mov	cx,tablesize*16
	rep	stosb
	ret

	endp




Makesprite	proc	near		;si holds x,y	cx holds update
				;di,dx holds data offset,seg
	mov	es,buffers
	mov	bx,spritetable
$17:	cmp	byte ptr [es:bx+15],255
	jz	$17a
	add	bx,tablesize
	jmp	$17

$17a:	mov	[es:bx],cx
	mov	[es:bx+10],si
	mov	[es:bx+6],dx
	mov	[es:bx+8],di
	mov	[es:bx+2],0ffffh
	mov	byte ptr [es:bx+15],0
	mov	byte ptr [es:bx+18],0
	ret

	endp










Delsprite	proc	near

	mov	di,bx
	mov	cx,tablesize
	mov	al,255
	rep	stosb
	ret

	endp










Spriteupdate	proc	near

	mov	es,buffers
	mov	bx,spritetable
	mov	al,ryanon
	mov	byte ptr [es:bx+31],al

	mov	es,buffers
	mov	bx,spritetable
	mov	cx,16
$18:	push	cx bx
	mov	ax,[es:bx]
	cmp	ax,0ffffh
	jz	$18a
	push	es ds
	mov	cx,[es:bx+2]
	mov	[es:bx+24],cx
	call	ax
	pop	ds es
$18a:	pop	bx cx
	cmp	nowinnewroom,1
	jz	$18b
	add	bx,tablesize
	loop	$18

$18b:	ret

	endp




























Printsprites	proc	near

	mov	es,buffers
	mov	cx,0
priorityloop:	push	cx
	mov	priority,cl
	mov	bx,spritetable
	mov	cx,16
prtspriteloop:	push	cx bx
	mov	ax,[es:bx]
	cmp	ax,0ffffh
	jz	skipsprite
	mov	al,priority
	cmp	al,[es:bx+23]
	jnz	skipsprite
	cmp	byte ptr [es:bx+31],1
	jz	skipsprite
	call	printasprite
skipsprite:	pop	bx cx
	add	bx,tablesize
	loop	prtspriteloop
	pop	cx
	inc	cx
	cmp	cx,7
	jnz	priorityloop
	ret

	endp










Printasprite	proc	near

	push	es bx
	mov	si,bx
	mov	ds,[es:si+6]
	mov	al,[es:si+11]
	mov	ah,0
	cmp	al,220
	jc	notnegative1
	mov	ah,255
notnegative1:	mov	bx,ax
	add	bx,mapady
	mov	al,[es:si+10]
	mov	ah,0
	cmp	al,220
	jc	notnegative2
	mov	ah,255
notnegative2:	mov	di,ax
	add	di,mapadx
	mov	al,[es:si+15]
	mov	ah,0
	cmp	byte ptr [es:si+30],0
	jz	steadyframe
	mov	ah,8
steadyframe:	cmp	priority,6
	jnz	notquickp
notquickp:	call	showframe
	pop	bx es
	ret

	endp




;cmp	priority,6
;	;jz	quicksprite	; WIll NEED TO DO THIS LATER!!!!!
;Quicksprite:	mov	cl,al
;	mov	ch,0
;	mov	dx,[es:bx+6]
;	mov	es,workspace
;	mov	ds,dx
;	mov	bx,ax
;	mov	dx,vgawidth
;
;printquickloop: push	di si
;
;	push	si
;	add	si,cx
;	dec	si
;	jmp	startzero
;zeroloop:	dec	si
;	dec	cl
;startzero:	cmp	[si],ch
;	jz	zeroloop
;	pop	si
;
;;printquickline: cmp	[si],ch
;	jnz	foundfirstpix
;	inc	si
;	inc	di
;	dec	cl
;	jnz	printquickline
;
;foundfirstpix:	cmp	cl,0
;	jz	finquickspr
;	rep	movsb
;
;finquickspr:	pop	si di
;	mov	cl,bl
;	add	si,cx
;	add	di,dx
;	dec	bh
;	jnz	printquickloop
;
;	pop	bx ds es
;	ret







;Calcframe	proc	near
;
;	ret
;
;	mov	al,[es:bx+15]
;	mov	ah,0
;	mov	cx,6
;	mul	cx
;	add	ax,[es:bx+8]
;
;	mov	dx,[es:bx+6]
;	push	bx
;	mov	ds,dx
;	mov	bx,ax
;	mov	ax,[bx]
;	mov	cx,[bx+2]
;	mov	dx,[bx+4]
;	pop	bx
;	mov	[es:bx+2],ax
;	add	cx,[es:bx+8]
;	add	cx,2080
;	mov	[es:bx+4],cx	 ;calculates frame data
;
;	mov	al,[es:bx+10]	;this bit calculates the actual
;	add	al,dl		;x and y (including any offset)
;	mov	[es:bx+12],al
;	mov	al,[es:bx+11]
;	add	al,dh
;	mov	[es:bx+13],al
;	ret
;
;	endp













		






Checkone	proc	near		;cx=x,y to check

	push	cx
	mov	al,ch
	mov	ah,0
	mov	cl,4
	shr	ax,cl
	mov	dl,al
	pop	cx
	mov	al,cl
	mov	ah,0
	mov	cl,4
	shr	ax,cl
	mov	ah,dl		; al,ah holds x,y in blocks
	
	push	ax
	mov	ch,0
	mov	cl,al
	push	cx
	mov	al,ah
	mov	ah,0
	mov	cx,11
	mul	cx
	pop	cx
	add	ax,cx

	mov	cx,3
	mul	cx
	mov	si,ax

	mov	ds,buffers
	add	si,mapflags
	lodsw
	mov	cx,ax
	lodsb
	pop	dx
	ret


	endp


















Findsource	proc	near

	mov	ax,currentframe
	cmp	ax,160
	jnc	over1000
	mov	ds,reel1
	mov	takeoff,0
	ret
over1000:	cmp	ax,320
	jnc	over1001
	mov	ds,reel2
	mov	takeoff,160
	ret
over1001:	mov	ds,reel3
	mov	takeoff,320
	ret

	endp











;---------------------------------------------------------Routines for Ryan----


Initman 	proc	near

	;mov	linepointer,254
	mov	al,ryanx
	mov	ah,ryany
	mov	si,ax
	mov	cx,offset cs:mainman
	mov	dx,mainsprites
	mov	di,0
	call	makesprite
	mov	byte ptr [es:bx+23],4
	mov	byte ptr [es:bx+22],0
	mov	byte ptr [es:bx+29],0
	ret

	endp







Mainman 	proc	near

	cmp	resetmanxy,1
	jnz	notinnewroom
	mov	resetmanxy,0
	mov	al,ryanx
	mov	ah,ryany
	mov	[es:bx+10],ax
	mov	byte ptr [es:bx+29],0
	jmp	executewalk
notinnewroom:	dec	byte ptr [es:bx+22]
	cmp	byte ptr [es:bx+22],-1
	jz	executewalk
	ret


executewalk:	mov	byte ptr [es:bx+22],0 ; speed
	mov	al,turntoface
	cmp	al,facing
	jz	facingok
	call	aboutturn
	jmp	notwalk

facingok:	cmp	turndirection,0
	jz	alreadyturned
	cmp	linepointer,254
	jnz	alreadyturned
	mov	reasseschanges,1
	mov	al,facing
	cmp	al,leavedirection
	jnz	alreadyturned
	call	checkforexit
alreadyturned:	mov	turndirection,0
	cmp	linepointer,254
	jnz	walkman
	mov	byte ptr [es:bx+29],0
	jmp	notwalk

walkman:	mov	al,[es:bx+29]
	inc	al
	cmp	al,11
	jnz	notanimend1
	mov	al,1
notanimend1:	mov	[es:bx+29],al

	call	walking
	cmp	linepointer,254
	jz	afterwalk

	mov	al,facing
	and	al,1
	jz	isdouble
	mov	al,[es:bx+29]
	cmp	al,2
	jz	afterwalk
	cmp	al,7
	jz	afterwalk
isdouble:	call	walking
afterwalk:	cmp	linepointer,254
	jnz	notwalk
	mov	al,turntoface
	cmp	al,facing
	jnz	notwalk
	mov	reasseschanges,1
	mov	al,facing
	cmp	al,leavedirection
	jnz	notwalk
	call	checkforexit

notwalk:	mov	al,facing
	mov	ah,0
	mov	di,offset cs:facelist
	add	di,ax
	mov	al,[cs:di]
	add	al,[es:bx+29]
	mov	[es:bx+15],al
	mov	ax,[es:bx+10]
	mov	ryanx,al
	mov	ryany,ah
	ret

facelist:	db	0,60,33,71,11,82,22,93

	endp










Aboutturn	proc	near

	cmp	turndirection,1
	jz	incdir
	cmp	turndirection,-1
	jz	decdir
	mov	al,facing
	sub	al,turntoface
	jnc	higher
	neg	al
	cmp	al,4
	jnc	decdir
	jmp	incdir
higher: 	cmp	al,4
	jnc	incdir
	jmp	decdir

incdir:	mov	turndirection,1
	mov	al,facing
	inc	al
	and	al,7
	mov	facing,al
	mov	byte ptr [es:bx+29],0
	ret

decdir: 	mov	turndirection,-1
	mov	al,facing
	dec	al
	and	al,7
	mov	facing,al
	mov	byte ptr [es:bx+29],0
	ret

	endp








Walking 	proc	near

	cmp	linedirection,0
	jz	normalwalk
	mov	al,linepointer
	dec	al
	mov	linepointer,al
	cmp	al,200
	jnc	endofline
	jmp	continuewalk

normalwalk:	mov	al,linepointer
	inc	al
	mov	linepointer,al
	cmp	al,linelength
	jnc	endofline

continuewalk:	mov	ah,0
	add	ax,ax
	push	es bx
	mov	dx,seg linedata
	mov	es,dx
	mov	bx,offset es:linedata
	add	bx,ax
	mov	ax,[es:bx]
	pop	bx es
stillline:	mov	[es:bx+10],ax
	ret

endofline:	mov	linepointer,254
	mov	al,destination
	mov	manspath,al
	cmp	al,finaldest
	jz	finishedwalk
	mov	al,finaldest
	mov	destination,al
	push	es bx
	call	autosetwalk
	pop	bx es
	ret

finishedwalk:	call	facerightway
	ret

	endp







Facerightway	proc	near

	push	es bx		;Face object when finished
	call	getroomspaths		;walking
	mov	al,manspath
	mov	ah,0
	add	ax,ax
	add	ax,ax
	add	ax,ax
	add	bx,ax
	mov	al,[es:bx+7]
	mov	turntoface,al
	mov	leavedirection,al
	pop	bx es
	ret

	endp







Checkforexit	proc	near

	mov	cl,ryanx		;look under feet to see if
	add	cl,12		;any flags are there
	mov	ch,ryany
	add	ch,12
	call	checkone
	mov	lastflag,cl
	mov	lastflagex,ch
	mov	flagx,dl
	mov	flagy,dh
	mov	al,lastflag
	
	test	al,64
	jz	notnewdirect
	mov	al,lastflagex
	mov	autolocation,al
	ret

notnewdirect:	test	al,32
	jz	notleave
	push	es bx
	cmp	reallocation,2
	jnz	notlouis
	mov	bl,0
	push	bx
	mov	al,"W"
	mov	ah,"E"
	mov	cl,"T"
	mov	ch,"A"
	call	isryanholding
	pop	bx
	jz 	noshoe1
	inc	bl
noshoe1:	push	bx	
	mov	al,"W"
	mov	ah,"E"
	mov	cl,"T"
	mov	ch,"B"
	call	isryanholding
	pop	bx
	jz	noshoe2
	inc	bl
noshoe2:	cmp	bl,2
	jz	notlouis	
	mov	al,42
	cmp	bl,0
	jz	notravmessage
	inc	al
notravmessage:	mov	cx,80
	mov	dx,10
	mov	bl,68
	mov	bh,64
	call	setuptimeduse
	mov	al,facing
	add	al,4
	and	al,7
	mov	turntoface,al
	pop	bx es
	ret

notlouis:	pop	bx es
	mov	needtotravel,1
	ret



notleave:	test	al,4
	jz	notaleft
	call	adjustleft
	ret

notaleft:	test	al,2
	jz	notaright
	call	adjustright
	ret

notaright:	test	al,8
	jz	notadown
	call	adjustdown
	ret

notadown:	test	al,16
	jz	notanup
	call	adjustup
	ret

notanup:	ret

	endp





Adjustdown	proc	near

	push	es bx	
	add	mapy,10
	mov	al,lastflagex
	mov	cl,16
	mul	cl
	mov	[es:bx+11],al
	mov	nowinnewroom,1
	pop	bx es
	ret

	endp




Adjustup	proc	near
 
	push	es bx
	sub	mapy,10
	mov	al,lastflagex
	mov	cl,16
	mul	cl
	mov	[es:bx+11],al
	mov	nowinnewroom,1
	pop	bx es
	ret

	endp





Adjustleft	proc	near

	push	es bx
	mov	lastflag,0
	sub	mapx,11
	mov	al,lastflagex
	mov	cl,16
	mul	cl
	mov	[es:bx+10],al
	mov	nowinnewroom,1
	pop	bx es
	ret

	endp






Adjustright	proc	near
	
	push	es bx
	add	mapx,11
	mov	al,lastflagex
	mov	cl,16
	mul	cl
	sub	al,2
	mov	[es:bx+10],al
	mov	nowinnewroom,1
	pop	bx es
	ret

	endp





Reminders	proc	nar

	cmp	reallocation,24
	jnz	notinedenslift
	cmp	mapx,44
	jnz	notinedenslift
	cmp	progresspoints,0
	jnz	notfirst
	mov	al,"D"
	mov	ah,"K"
	mov	cl,"E"
	mov	ch,"Y"
	call	isryanholding
	jz	forgotone
	mov	al,"C"
	mov	ah,"S"
	mov	cl,"H"
	mov	ch,"R"
	call	findexobject
	cmp	al,numexobjects
	jz	forgotone
	mov	ax,[es:bx+2]
	cmp	al,4
	jnz	forgotone	;card is in inventory
	cmp	ah,255
	jz	havegotcard 	;card must be in an ex
	mov	cl,"P"	;object
	mov	ch,"U"
	mov	dl,"R"
	mov	dh,"S"
	xchg	al,ah
	call	compare
	jnz	forgotone	;is it in wallet?		
havegotcard:	inc	progresspoints
notfirst:	ret

forgotone:	mov	al,50	;message number
	mov	bl,54	;x pos of message
	mov	bh,70	;and y pos
	mov	cx,48	;time on screen
	mov	dx,8	;pause before show
	call	setuptimeduse
	ret
notinedenslift:	ret

	endp




	
;---------------------------------------------------------------------------
;
;	Sprite update routines for rain effect
;
;---------------------------------------------------------------------------


	

Initrain 	proc	near

	mov	es,buffers
	mov	di,rainlist
	mov	bx,offset cs:rainlocations
checkmorerain:	mov	al,[cs:bx]
	cmp	al,255
	jz	finishinitrain
	cmp	al,reallocation
	jnz	checkrain
	mov	al,[cs:bx+1]
	cmp	al,mapx
	jnz	checkrain
	mov	al,[cs:bx+2]
	cmp	al,mapy
	jnz	checkrain
	mov	al,[cs:bx+3]
	mov	rainspace,al
	jmp	dorain
checkrain:	add	bx,4
	jmp	checkmorerain

dorain:	mov	cx,4
initraintop:	call	randomnumber
	and	al,31
	add	al,3
	cmp	al,rainspace
	jnc	initraintop
	add	cl,al
	cmp	cl,mapxsize
	jnc	initrainside
	push	cx
	call	splitintolines
	pop	cx
	jmp	initraintop

initrainside:	mov	cl,mapxsize
	dec	cl
initrainside2:	call	randomnumber
	and	al,31
	add	al,3
	cmp	al,rainspace 
	jnc	initrainside2	
	add	ch,al
	cmp	ch,mapysize
	jnc	finishinitrain
	push	cx
	call	splitintolines
	pop	cx
	jmp	initrainside2
finishinitrain:	mov	al,255
	stosb
	ret

rainlocations:	db	1,44,10,16	;location,map x,y,seed
	db	4,11,30,14
	db	4,22,30,14
	db	3,33,10,14
	db	10,33,30,14
	db	10,22,30,24
	db	9,22,10,14
	db	2,33,0,14
	db	2,22,0,14
	db	6,11,30,14
	db	7,11,20,18
	db	7,0,20,18
	db	7,0,30,18
	db	55,44,0,14
	db	5,22,30,14

	db	8,0,10,18
	db	8,11,10,18
	db	8,22,10,18
	db	8,33,10,18
	db	8,33,20,18
	db	8,33,30,18
	db	8,33,40,18
	db	8,22,40,18
	db	8,11,40,18
    
	db	21,44,20,18
	db	255

	endp


	

	





Splitintolines	proc	near


lookforlinestart:	call	getblockofpixel
	cmp	al,0
	jnz	foundlinestart
              	dec	cl
	inc	ch
	cmp	cl,0
	jz	endofthisline	
	cmp	ch,mapysize
	jnc	endofthisline
	jmp	lookforlinestart

foundlinestart:	mov	[es:di],cx
	mov	bh,1
lookforlineend:	call	getblockofpixel
	cmp	al,0
	jz	foundlineend
              	dec	cl
	inc	ch
	cmp	cl,0
	jz	foundlineend
	cmp	ch,mapysize
	jnc	foundlineend
	inc	bh
	jmp	lookforlineend

foundlineend:	push	cx	
	mov	[es:di+2],bh
	call	randomnumber
	mov	[es:di+3],al
	call	randomnumber
	mov	[es:di+4],al
	call	randomnumber
	and	al,3
	add	al,4
	mov	[es:di+5],al
	add	di,6
	pop	cx
	cmp	cl,0
	jz	endofthisline	
	cmp	ch,mapysize
	jnc	endofthisline
	jmp	lookforlinestart

endofthisline:	ret

	endp




Getblockofpixel	proc	near
		
	push	cx es di
	mov	ax,mapxstart
	add	cl,al
	mov	ax,mapystart
	add	ch,al
	call	checkone
	and	cl,1
	jnz	failrain
	pop	di es cx
	ret
failrain:	pop	di es cx
	mov	al,0
	ret

	endp




Showrain	proc	near

	mov	ds,mainsprites
	mov	si,6*58
	mov	ax,[si+2]
	mov	si,ax
	add	si,2080

	mov	bx,rainlist
	mov	es,buffers
	cmp	byte ptr [es:bx],255
	jz	nothunder

morerain:	mov	es,buffers
	cmp	byte ptr [es:bx],255
	jz	finishrain

	mov	al,[es:bx+1]
	mov	ah,0
	add	ax,mapady
	add	ax,mapystart
	mov	cx,320
	mul	cx
	mov	cl,[es:bx]
	mov	ch,0
	add	ax,cx
	add	ax,mapadx
	add	ax,mapxstart
	mov	di,ax

	mov	cl,[es:bx+2]
	mov	ch,0
	mov	ax,[es:bx+3]
	mov	dl,[es:bx+5]
	mov	dh,0
	sub	ax,dx
	and	ax,511
	mov	[es:bx+3],ax
	add	bx,6

	push	si
	add	si,ax
	mov	es,workspace
	mov	ah,0
	mov	dx,320-2
rainloop:	lodsb
	cmp	al,ah
	jz	noplot
	stosb
	add	di,dx
	loop	rainloop
	pop	si
	jmp	morerain
noplot:	add	di,320-1
	loop	rainloop
	pop	si	
	jmp	morerain

finishrain:	cmp	ch1blockstocopy,0
	jnz	nothunder
	cmp	reallocation,2
	jnz	notlouisthund
	cmp	beenmugged,1
	jnz	nothunder
notlouisthund:	cmp	reallocation,55
	jz	nothunder
	call	randomnum1
	cmp	al,1
	jnc	nothunder
	mov	al,7
	cmp	ch0playing,6
	jz	isthunder1
   	mov	al,4
isthunder1:	call	playchannel1
nothunder:	ret

	endp



	

	
	
;---------------------------------------------------------------------------
;
;	Sprite update routines for background objects
;
;---------------------------------------------------------------------------






Backobject	proc	near
	
	mov	ds,setdat
	mov	di,[es:bx+20]

	mov	al,[es:bx+18]
	cmp	al,0
	jz	$48z
	dec	al
	mov	[es:bx+18],al
	jmp	finishback

$48z:	mov	al,[di+7]
	mov	[es:bx+18],al
	mov	al,[di+8]
	cmp	al,6
	jnz	notwidedoor
	call	widedoor
	jmp	finishback

notwidedoor:	cmp	al,5
	jnz	notrandom
	call	random
	jmp	finishback

notrandom:	cmp	al,4
	jnz	notlockdoor
	call	lockeddoorway
	jmp	finishback

notlockdoor:	cmp	al,3
	jnz	notlift
	call	liftsprite
	jmp	finishback

notlift:	cmp	al,2
	jnz	notdoor
	call	doorway
	jmp	finishback

notdoor:	cmp	al,1
	jnz	steadyob
	call	constant
	jmp	finishback

steadyob:	call	steady

finishback:	;call	calcframe
	ret

	endp









Liftsprite	proc	near

	mov	al,liftflag
	cmp	al,0
	jz	liftclosed
	cmp	al,1
	jz	liftopen
	cmp	al,3
	jz	openlift

	mov	al,[es:bx+19]
	cmp	al,0
	jz	finishclose
	dec	al
	cmp	al,11
	jnz	pokelift
	push	ax
	mov	al,3
	call	liftnoise
	pop	ax
	jmp	pokelift
finishclose:	mov	liftflag,0
	ret

openlift:	mov	al,[es:bx+19]
	cmp	al,12
	jz	endoflist
	inc	al
	cmp	al,1
	jnz	pokelift
              	push	ax
	mov	al,2
	call	liftnoise
	pop	ax
pokelift:	mov	[es:bx+19],al
	mov	ah,0
	push	di
	add	di,ax
	mov	al,[di+18]
	pop	di
	mov	[es:bx+15],al
	mov	[di+17],al
	ret

endoflist:	mov	liftflag,1
	ret

liftopen:	mov	al,liftpath
	push	es bx
	call	turnpathon
	pop	bx es
	cmp	counttoclose,0
	jz	nocountclose
	dec	counttoclose
	cmp	counttoclose,0
	jnz	nocountclose
	mov	liftflag,2
nocountclose:	mov	al,12
	jmp	pokelift

liftclosed:	mov	al,liftpath
	push	es bx
	call	turnpathoff
	pop	bx es
	cmp	counttoopen,0
	jz	nocountopen
	dec	counttoopen
	cmp	counttoopen,0
	jnz	nocountopen
	mov	liftflag,3
nocountopen:	mov	al,0
	jmp	pokelift

	endp


Liftnoise	proc	near

	cmp	reallocation,5
	jz	hissnoise
	cmp	reallocation,21
	jz	hissnoise
	call	playchannel1
	ret
hissnoise:	if	demo
	mov	al,25
	else
	mov	al,13
	endif
	call	playchannel1
	ret
	
	endp




Random	proc	near

	call	randomnum1
	push	di
	and	ax,7
	add	di,18
	add	di,ax
	mov	al,[di]
	pop	di
	mov	[es:bx+15],al
	ret

	endp








Steady	proc	near

	mov	al,[di+18]
	mov	[di+17],al
	mov	[es:bx+15],al
	ret

	endp





Constant	proc	near

	inc	byte ptr [es:bx+19]
	mov	cl,[es:bx+19]
	mov	ch,0
	add	di,cx
	cmp	byte ptr [di+18],255
	jnz	gotconst
	sub	di,cx
	mov	cx,0
	mov	[es:bx+19],cl
gotconst:	mov	al,[di+18]
	sub	di,cx
	mov	[es:bx+15],al
	mov	[di+17],al
	ret

	endp














Doorway 	proc	near

	mov	doorcheck1,-24
	mov	doorcheck2,10
	mov	doorcheck3,-30
	mov	doorcheck4,10
	call	dodoor
	ret

	endp



Widedoor	proc	near

	mov	doorcheck1,-24
	mov	doorcheck2,24
	mov	doorcheck3,-30
	mov	doorcheck4,24
	call	dodoor
	ret

	endp









Dodoor	proc	near

	mov	al,ryanx
	mov	ah,ryany
	mov	cl,[es:bx+10]
	mov	ch,[es:bx+11]

	cmp	al,cl
	jnc	rtofdoor
	sub	al,cl
	cmp	al,doorcheck1
	jnc	upordown
	jmp	shutdoor
rtofdoor:	sub	al,cl
	cmp	al,doorcheck2
	jnc	shutdoor

upordown:	cmp	ah,ch
	jnc	botofdoor
	sub	ah,ch
	cmp	ah,doorcheck3
	jc	shutdoor
	jmp	opendoor
botofdoor:	sub	ah,ch
	cmp	ah,doorcheck4
	jnc	shutdoor

opendoor:	mov	cl,[es:bx+19]
	cmp	throughdoor,1
	jnz	notthrough
	cmp	cl,0
	jnz	notthrough
	mov	cl,6
notthrough:	inc	cl
	cmp	cl,1
	jnz	notdoorsound2
	mov	al,0
	cmp	reallocation,5
	jnz	nothoteldoor2
	if	demo
	mov	al,25
	else
	mov	al,13
              	endif
nothoteldoor2:	call	playchannel1
notdoorsound2:	mov	ch,0

	push	di
	add	di,cx
	mov	al,[di+18] ; must be a better way than this
	cmp	al,255
	jnz	atlast1
	dec	di
	dec	cl
atlast1:	mov	[es:bx+19],cl
	mov	al,[di+18]
	pop	di
	mov	[es:bx+15],al
	mov	[di+17],al
	mov	throughdoor,1
	ret


shutdoor:	mov	cl,[es:bx+19]
	cmp	cl,5
	jnz	notdoorsound1
              	mov	al,1
	cmp	reallocation,5
	jnz	nothoteldoor1
	if	demo
	mov	al,25
	else
	mov	al,13
	endif
nothoteldoor1:	call	playchannel1
notdoorsound1:	cmp	cl,0
	jz	atlast2
	dec	cl
	mov	[es:bx+19],cl
atlast2:	mov	ch,0
	push	di
	add	di,cx
	mov	al,[di+18]
	pop	di
	mov	[es:bx+15],al
	mov	[di+17],al
	cmp	cl,5
	jnz	notnearly
	mov	throughdoor,0
notnearly:	ret

	endp








Lockeddoorway	proc	near

	mov	al,ryanx
	mov	ah,ryany
	mov	cl,[es:bx+10]
	mov	ch,[es:bx+11]

	cmp	al,cl
	jnc	rtofdoor2
	sub	al,cl
	cmp	al,-24
	jnc	upordown2
	jmp	shutdoor2
rtofdoor2:	sub	al,cl
	cmp	al,10
	jnc	shutdoor2

upordown2:	cmp	ah,ch
	jnc	botofdoor2
	sub	ah,ch
	cmp	ah,-30
	jc	shutdoor2
	jmp	opendoor2
botofdoor2:	sub	ah,ch
	cmp	ah,12
	jnc	shutdoor2

opendoor2:	cmp	throughdoor,1
	jz	mustbeopen
	cmp	lockstatus,1
	jz	shutdoor2
mustbeopen:	mov	cl,[es:bx+19]
              	cmp	cl,1
	jnz	notdoorsound4
	mov	al,0
	call	playchannel1
notdoorsound4:	cmp	cl,6 ; was 3
	jnz	noturnonyet
	mov	al,doorpath
	push	es bx
	call	turnpathon
	pop	bx es

noturnonyet:	mov	cl,[es:bx+19]
	cmp	throughdoor,1
	jnz	notthrough2
	cmp	cl,0
	jnz	notthrough2
	mov	cl,6
notthrough2:	inc	cl
	mov	ch,0

	push	di
	add	di,cx
	mov	al,[di+18]
	cmp	al,255
	jnz	atlast3
	dec	di
	dec	cl
atlast3:	mov	[es:bx+19],cl
	mov	al,[di+18]
	pop	di
	mov	[es:bx+15],al
	mov	[di+17],al
	cmp	cl,5
	jnz	justshutting
	mov	throughdoor,1
justshutting:	ret



shutdoor2:	mov	cl,[es:bx+19]
	cmp	cl,5
	jnz	notdoorsound3
              	mov	al,1
	call	playchannel1
notdoorsound3:	cmp	cl,0
	jz	atlast4
	dec	cl
	mov	[es:bx+19],cl
atlast4:	mov	ch,0
	mov	throughdoor,0
	push	di
	add	di,cx
	mov	al,[di+18]
	pop	di
	mov	[es:bx+15],al
	mov	[di+17],al
	cmp	cl,0 ;1
	jnz	notlocky
	mov	al,doorpath
	push	es bx
	call	turnpathoff
	pop	bx es
	mov	lockstatus,1
notlocky:	ret

	endp










;------------------------------------------------------------People handler----

Updatepeople	proc	near

	mov	es,buffers
	mov	di,peoplelist
	mov	listpos,di
	mov	cx,12*5
	mov	al,255
	rep	stosb

	inc	maintimer
	push	cs
	pop	es
	mov	bx,offset cs:reelroutines
	mov	di,offset cs:reelcalls
updateloop:	mov	al,[es:bx]
	cmp	al,255
	jz	endupdate
	cmp	al,reallocation
	jnz	notinthisroom
	mov	cx,[es:bx+1]
	cmp	cl,mapx
	jnz	notinthisroom
	cmp	ch,mapy
	jnz	notinthisroom
	push	di
	mov	ax,[cs:di]
	call	ax
	pop	di
notinthisroom:	add	bx,8
	add	di,2
	jmp	updateloop
endupdate:	ret

	endp














Getreelframeax	proc	near

	push	ds
	mov	currentframe,ax
	call	findsource
	push	ds
	pop	es
	pop	ds
	mov	ax,currentframe
	sub	ax,takeoff
	add	ax,ax
	mov	cx,ax
	add	ax,ax
	add	ax,cx
	mov	bx,ax
	ret

	endp










Reelsonscreen	proc	near

	call	reconstruct
	call	updatepeople
	call	watchreel
	call	showrain
	call	usetimedtext
	ret

	endp






Plotreel	proc	near

	call	getreelstart
retryreel:	push	es si
	mov	ax,[es:si+2]
	cmp	al,220
	jc	normalreel
	cmp	al,255
	jz	normalreel
	call	dealwithspecial
	inc	reelpointer
	pop	si es
	add	si,40
	jmp	retryreel

normalreel:	mov	cx,8
plotloop:	push	cx es si
	mov	ax,[es:si]
	cmp	ax,0ffffh
	jz	notplot
	call	showreelframe
notplot:	pop	si es cx
	add	si,5
	loop	plotloop
	call	soundonreels
	pop	bx es
	ret

	endp





Soundonreels	proc	near
	
	mov	bl,reallocation
	add	bl,bl
	xor	bh,bh
	add	bx,offset cs:roombyroom
	mov	si,[cs:bx]

reelsoundloop:	mov	al,[cs:si]
	cmp	al,255
	jz	endreelsound
             	mov	ax,[cs:si+1]
	cmp	ax,reelpointer
	jnz	skipreelsound
	
	cmp	ax,lastsoundreel
	jz	skipreelsound
	
	mov	lastsoundreel,ax
	mov	al,[cs:si]
	cmp	al,64
	jc	playchannel1
	cmp	al,128
	jc	channel0once
	and	al,63
	mov	ah,255
	jmp	playchannel0
channel0once:	and	al,63
	mov	ah,0
	jmp	playchannel0
skipreelsound:	add	si,3
	jmp	reelsoundloop
endreelsound:	mov	ax,lastsoundreel
	cmp	ax,reelpointer
	jz	nochange2
         	mov	lastsoundreel,-1
nochange2:	ret

roombyroom	dw	r0,r1,r2,r0,r0,r0,r6,r0,r8,r9,r10,r11,r12,r13,r14,r0,r0,r0,r0,r0
	dw	r20,r0,r22,r23,r0,r25,r26,r27,r28,r29,r0,r0,r0,r0,r0
	dw	r0,r0,r0,r0,r0,r0,r0,r0,r0,r0,r45,r46,r47,r0,r0,r0,r0,r52,r53,r0,r55

r0	db	255

r1	db	15
	dw	257
	db	255

r2	db	12
	dw	5
	db	13
	dw	21
	db	15	;hitting floor?
	dw	35
	db	17
	dw	50
	db	18
	dw	103
	db	19
	dw	108
	db	255

r6	db	18
	dw	19
	db	19
	dw	23
  	db	255
	
r8	db	12
	dw	51
	db	13
	dw	53
	db	14
	dw	14
	db	15
	dw	20
	db	0
	dw	78
	db	255

r9	db	12
	dw	119
	db	12
	dw	145
	db	255

r10	db	13
	dw	16
	db	255
	
r11	db	13
	dw	20
	db	255

r12	db	14
	dw	16
   	db	255

r13	db	15
	dw	4
	db	16
	dw	8
	db	17
	dw	134
	db	18
	dw	153
	db	255

r14	db	13
	dw	108
	db	15
	dw	326
	db	15
	dw	331
	db	15
	dw	336
	db	15
	dw	342
	db	15
	dw	348
	db	15
	dw	354
	db	18
	dw	159
	db	18
	dw	178
	db	19+128
	dw	217
	db	20+64
	dw	228
   	db	255

r20	db	13
	dw	20
	db	13
	dw	21
	db	15
	dw	34
	db	13
	dw	52
	db	13
	dw	55
	db	25
	dw	57
	db	21
	dw	73
   	db	255

r22	db	13	;room,sample
	dw	196	;reelpointer
	db	13
	dw	234
	db	13
	dw	156
	db	14
	dw	129
	db	13
	dw	124
	db	15
	dw	162
	db	15
	dw	200
	db	15
	dw	239
	db	17
	dw	99
	db	12
	dw	52
   	db	255

r23	db	15
	dw	56
	db	16
	dw	64
	db	19
	dw	22
	db	20
	dw	33
	db	255

r25	db	20
	dw	11
	db	20
	dw	15
	db	15
	dw	28
	db	13
	dw	80
	db	21
	dw	82
	db	19+128
	dw	87
	db	23+64
	dw	128
	db	255

r26	db	12
	dw	13
	db	14
	dw	39
	db	12
	dw	67
	db	12
	dw	75
	db	12
	dw	83
	db	12
	dw	91
	db	15
	dw	102 ; was 90, should be mine cart
	db	255
	
r27	db	22
	dw	36
	db	13
	dw	125
	db	18
	dw	88
	db	15
	dw	107
	db	14
	dw	127
	db	14
	dw	154
	db	19+128
	dw	170
	db	23+64
	dw	232
	db	255

r28	db	21
	dw	16
	db	21
	dw	72
	db	21
	dw	205
	db	22
	dw	63 ;65
	db	23+128
	dw	99
	db	24+64
	dw	158
	db	255

r29	db	13
	dw	21
	db	14
	dw	24
	db	19+128
	dw	50
	db	23+64
	dw	75
	if	german
	else
	db	24
	dw	128
	endif
	db	255

r45	db	19+64
	dw	46
	db	16
	dw	167
	db	255

r46	db	16
	dw	19
	db	14
	dw	36
	db	16
	dw	50
	db	14
	dw	65
	db	16
	dw	81
	db	14
	dw	96
	db	16
	dw	114
	db	14
	dw	129
	db	16
	dw	147
	db	14
	dw	162
	db	16
	dw	177
	db	14
	dw	191
	db	255

r47	db	13
	dw	48
	db	14
	dw	41
	db	15
	dw	78
	db	16
	dw	92
	db	255

r52	db	16
	dw	115
	db	255

r53	db	21
	dw	103
	db	20
	dw	199
	db	255

r55	db	17
	dw	53
	db	17
	dw	54
	db	17
	dw	55
	db	17
	dw	56
	db	17
	dw	57
	db	17
	dw	58
	db	17
	dw	59
	db	17
	dw	61
	db	17
	dw	63
	db	17
	dw	64
	db	17
	dw	65
	db	255

	endp









Reconstruct	proc	near

	cmp	havedoneobs,0
	jz	noneedtorecon
	mov	newobs,1
	call	drawfloor
	call	spriteupdate
	call	printsprites
	cmp	foreignrelease, 0
	jz notfudge
	cmp	reallocation,20
	jnz	notfudge
	call	undertextline
notfudge:
	mov	havedoneobs,0
noneedtorecon:	ret

	endp










Dealwithspecial	proc	near

	sub	al,220
	cmp	al,0
	jnz	notplset
	mov	al,ah
	call	placesetobject
	mov	havedoneobs,1
	ret
notplset:	cmp	al,1
	jnz	notremset
	mov	al,ah
	call	removesetobject
	mov	havedoneobs,1
	ret
notremset:	cmp	al,2
	jnz	notplfree
	mov	al,ah
	call	placefreeobject
	mov	havedoneobs,1
	ret
notplfree:	cmp	al,3
	jnz	notremfree
	mov	al,ah
	call	removefreeobject
	mov	havedoneobs,1
	ret
notremfree:	cmp	al,4
	jnz	notryanoff
	call	switchryanoff
	ret
notryanoff:	cmp	al,5
	jnz	notryanon
	mov	turntoface,ah
	mov	facing,ah
	call	switchryanon
	ret
notryanon:	cmp	al,6
	jnz	notchangeloc
	mov	newlocation,ah ; was new loc in watch
	;call	switchryanon
	ret
notchangeloc:	call	movemap
	ret

	endp



Movemap	proc	near

	cmp	ah,32
	jnz	notmapup2
	sub	mapy,20
	mov	nowinnewroom,1
	ret

notmapup2:	cmp	ah,16
	jnz	notmapupspec
	sub	mapy,10
	mov	nowinnewroom,1
	ret	        

notmapupspec:	cmp	ah,8
	jnz	notmapdownspec
	add	mapy,10
	mov	nowinnewroom,1
	ret

notmapdownspec:	cmp	ah,2
	jnz	notmaprightspec
	add	mapx,11
	mov	nowinnewroom,1
	ret

notmaprightspec:	sub	mapx,11
	mov	nowinnewroom,1
	ret

	endp




Getreelstart	proc	near

	mov	ax,reelpointer
	mov	cx,40
	mul	cx
	mov	es,reels
	mov	si,ax
	add	si,reellist
	ret

	endp





;------------------------------------------------------Printing a reel frame----



Showreelframe	proc	near

	mov	al,[es:si+2]
	mov	ah,0
	mov	di,ax
	add	di,mapadx
	mov	al,[es:si+3]
	mov	bx,ax
	add	bx,mapady
	mov	ax,[es:si]
	mov	currentframe,ax
	call	findsource
	mov	ax,currentframe
	sub	ax,takeoff
	mov	ah,8
	call	showframe
	ret

	endp






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









Deleverything	proc	near

	mov	al,mapysize
	mov	ah,0
	add	ax,mapoffsety
	cmp	ax,182
	jnc	bigroom
	call	maptopanel
	ret
bigroom:	sub	mapysize,8
	call	maptopanel
	add	mapysize,8
	ret
	
	endp











Dumpeverything	proc	near

	mov	es,buffers
	mov	bx,printedlist
dumpevery1:	mov	ax,[es:bx]
	mov	cx,[es:bx+2]
	cmp	ax,0ffffh
	jz	finishevery1
	cmp	ax,[es:bx+(40*5)]
	jnz	notskip1
	cmp	cx,[es:bx+(40*5)+2]
	jz	skip1

notskip1:	push	bx es ds
	mov	bl,ah
	mov	bh,0
	mov	ah,0
	mov	di,ax
	add	di,mapadx
	add	bx,mapady
	call	multidump
	pop	ds es bx

skip1:	add	bx,5
	jmp	dumpevery1

finishevery1:	mov	bx,printedlist+(40*5)
dumpevery2:	mov	ax,[es:bx]
	mov	cx,[es:bx+2]
	cmp	ax,0ffffh
	jz	finishevery2

	push	bx es ds
	mov	bl,ah
	mov	bh,0
	mov	ah,0
	mov	di,ax
	add	di,mapadx
	add	bx,mapady
	call	multidump
	pop	ds es bx
	add	bx,5
	jmp	dumpevery2

finishevery2:	ret

	endp
