;Copyright (c) 1990-2012 by Neil Dodwell
;Released with permission from Neil Dodwell under GPLv2
;See LICENSE file for full license text
Talk	proc	near
	
	mov	talkpos,0
	mov	inmaparea,0
	mov	al,command
	mov	character,al
	call	createpanel
	call	showpanel
	call	showman
	call	showexit
	call	undertextline
	call	convicons
	call	starttalk
	mov	commandtype,255
	call	readmouse
	call	showpointer
	call	worktoscreen
waittalk:	call	delpointer
	call	readmouse
	call	animpointer
	call	showpointer
	call	vsync
	call	dumppointer
	call	dumptextline
	mov	getback,0
	mov	bx,offset cs:talklist
	call	checkcoords
	cmp quitrequested, 0
	jnz finishtalk
	cmp	getback,0
	jz	waittalk
finishtalk:	mov	bx,persondata
	push	cs
	pop	es
	cmp	talkpos,4
	jc	notnexttalk
	mov	al,[es:bx+7]
	or	al,128
	mov	[es:bx+7],al
notnexttalk:	call	redrawmainscrn
	call	worktoscreenm
	cmp	speechloaded,1
	jnz	nospeech
	call	cancelch1
	mov	volumedirection,-1  	;fade (louder)
	mov	volumeto,0	;up to 0 (max)
nospeech:	ret

talklist:	dw	273,320,157,198,getback1
	dw	240,290,2,44,moretalk
	dw	0,320,0,200,blank
	dw	0ffffh

	endp












Convicons	proc	near

	mov	al,character
	and	al,127
	call	getpersframe
	mov	di,234
	mov	bx,2
	mov	currentframe,ax
	call	findsource
	mov	ax,currentframe
	sub	ax,takeoff
	mov	ah,0
	call	showframe
	ret

	endp








Getpersframe	proc	near

	mov	ah,0
	add	ax,ax
	mov	bx,ax
	mov	es,people
	add	bx,personframes
	mov	ax,[es:bx]
	ret

	endp





Starttalk	proc	near

	mov	talkmode,0
	mov	al,character
	and	al,127
	call	getpersontext
	mov	charshift,91+91
	mov	di,66
	mov	bx,64
	mov	dl,241
	mov	al,0
	mov	ah,79
	call	printdirect
	mov	charshift,0
	mov	di,66
	mov	bx,80
	mov	dl,241
	mov	al,0
	mov	ah,0
	call	printdirect

	if	cd
	mov	speechloaded,0
	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cl,"C"
	mov	dl,"R"
	mov	dh,reallocation
	call	loadspeech
	cmp	speechloaded,1
	jnz	nospeech1
	mov	volumedirection,1 	;quieter
	mov	volumeto,6	;quite quiet!
	mov	al,50+12
	call	playchannel1
	endif
nospeech1:	ret

	endp





Getpersontext	proc	near

	mov	ah,0
	mov	cx,64*2
	mul	cx
	mov	si,ax
	mov	es,people
	add	si,persontxtdat
	mov	cx,persontext
	mov	ax,[es:si]
	add	ax,cx
	mov	si,ax
	ret

	endp







Moretalk	proc	near

	;cmp	ch1playing,255
	;jnz	cantredes
	cmp	talkmode,0
	jz	canmore
	call	redes
	ret

canmore:	cmp	commandtype,215
	jz	alreadymore
	mov	commandtype,215
	mov	al,49
	call	commandonly
alreadymore:	mov	ax,mousebutton
	cmp	ax,oldbutton
	jz	nomore
	and	ax,1
	jnz	domoretalk
nomore: 	ret

domoretalk:	mov	talkmode,2
	mov	talkpos,4
	cmp	character,100
	jc	notsecondpart
              	mov	talkpos,48
notsecondpart:	call	dosometalk
	ret

	endp














Dosometalk	proc	near

	if	cd
dospeech:	mov	al,talkpos
	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cx,ax
	mov	al,talkpos
	mov	ah,0
	add	ax,cx
	add	ax,ax
	mov	si,ax

	mov	es,people
	add	si,persontxtdat
	mov	cx,persontext

	mov	ax,[es:si]
	add	ax,cx
	mov	si,ax
	cmp	byte ptr [es:si],0
	jz	endheartalk
       
	push	es si
	call	createpanel
	call	showpanel
	call	showman
	call	showexit
	call	convicons
	pop	si es

	mov	di,164
	mov	bx,64
	mov	dl,144
	mov	al,0
	mov	ah,0
	call	printdirect

	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cl,talkpos
	mov	ch,0
	add	ax,cx
	mov	cl,"C"
	mov	dl,"R"
	mov	dh,reallocation
	call	loadspeech
	cmp	speechloaded,0
	jz	noplay1
	mov	al,62
	call	playchannel1

noplay1:	mov	pointermode,3
	call	worktoscreenm
	mov	cx,180
	call	hangonpq
	jnc $1
	ret

$1:
	inc	talkpos
          
	mov	al,talkpos
          	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cx,ax
	mov	al,talkpos
	mov	ah,0
	add	ax,cx
	add	ax,ax
	mov	si,ax

	mov	es,people
	add	si,persontxtdat
	mov	cx,persontext

	mov	ax,[es:si]
	add	ax,cx
	mov	si,ax
	cmp	byte ptr [es:si],0
	jz	endheartalk
	cmp	byte ptr [es:si],":"
	jz	skiptalk2
	cmp	byte ptr [es:si],32
	jz	skiptalk2
	
	push	es si
	call	createpanel
	call	showpanel
	call	showman
	call	showexit
	call	convicons
	pop	si es

	mov	di,48
	mov	bx,128
	mov	dl,144
	mov	al,0
	mov	ah,0
	call	printdirect

	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cl,talkpos
	mov	ch,0
	add	ax,cx
	mov	cl,"C"
	mov	dl,"R"
	mov	dh,reallocation
	call	loadspeech
	cmp	speechloaded,0
	jz	noplay2
	mov	al,62
	call	playchannel1

noplay2:	mov	pointermode,3
	call	worktoscreenm
	mov	cx,180
	call	hangonpq
	jnc skiptalk2
	ret

skiptalk2:	inc	talkpos
	jmp	dospeech

endheartalk:	mov	pointermode,0
	ret
	
	else

watchtalk:	mov	al,talkpos
	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cx,ax
	mov	al,talkpos
	mov	ah,0
	add	ax,cx
	add	ax,ax
	mov	si,ax

	mov	es,people
	add	si,persontxtdat
	mov	cx,persontext

	mov	ax,[es:si]
	add	ax,cx
	mov	si,ax
	cmp	byte ptr [es:si],0
	jz	endwatchtalk
	
	push	es si
	call	createpanel
	call	showpanel
	call	showman
	call	showexit
	call	convicons
	pop	si es

	mov	di,164
	mov	bx,64
	mov	dl,144
	mov	al,0
	mov	ah,0
	call	printdirect

	mov	pointermode,3
	call	worktoscreenm
	mov	cx,180
	call	hangonpq
	jnc $1
	ret
$1:

	inc	talkpos
          
	mov	al,talkpos
          	mov	al,character
	and	al,127
	mov	ah,0
	mov	cx,64
	mul	cx
	mov	cx,ax
	mov	al,talkpos
	mov	ah,0
	add	ax,cx
	add	ax,ax
	mov	si,ax

	mov	es,people
	add	si,persontxtdat
	mov	cx,persontext

	mov	ax,[es:si]
	add	ax,cx
	mov	si,ax
	cmp	byte ptr [es:si],0
	jz	endwatchtalk
	cmp	byte ptr [es:si],":"
	jz	skiptalk
	cmp	byte ptr [es:si],32
	jz	skiptalk
	
	push	es si
	call	createpanel
	call	showpanel
	call	showman
	call	showexit
	call	convicons
	pop	si es

	mov	di,48
	mov	bx,128
	mov	dl,144
	mov	al,0
	mov	ah,0
	call	printdirect

	mov	pointermode,3
	call	worktoscreenm
	mov	cx,180
	call	hangonpq
	jnc skiptalk
	ret

skiptalk:	inc	talkpos
	jmp	watchtalk

endwatchtalk:	mov	pointermode,0
	ret

	endif

	endp







Hangonpq 	proc	near

	mov	getback,0
	mov	bx,0
hangloopq:	push	cx bx
	call	delpointer
	call	readmouse
	call	animpointer
	call	showpointer
	call	vsync
	call	dumppointer
	call	dumptextline
	mov	bx,offset cs:quitlist
	call	checkcoords
	pop	bx cx
	cmp	getback,1
	jz	quitconv
	cmp quitrequested, 0
	jnz quitconv
	cmp	speechloaded,1
	jnz	notspeaking
            	cmp	ch1playing,255
	jnz	notspeaking
	inc	bx
	cmp	bx,40     	;pause after speech ends
	jz	finishconv
notspeaking:	cmp	mousebutton,0
	jz	hangloopq
	cmp	oldbutton,0
	jnz	hangloopq
finishconv:	call	delpointer
	mov	pointermode,0
	clc
	ret
	
quitconv:	call	delpointer
	mov	pointermode,0
	call	cancelch1
	stc
	ret

quitlist:	dw	273,320,157,198,getback1
	dw	0,320,0,200,blank
	dw	0ffffh

	endp









Redes	proc	near

	cmp	ch1playing,255
	jnz	cantredes
	cmp	talkmode,2
	jz	canredes
cantredes:	call	blank
	ret

canredes:	cmp	commandtype,217
	jz	alreadyreds
	mov	commandtype,217
	mov	al,50
	call	commandonly
alreadyreds:	mov	ax,mousebutton
	and	ax,1
	jnz	doredes
	ret

doredes:	call	delpointer
	call	createpanel
	call	showpanel
	call	showman
	call	showexit
	call	convicons
	call	starttalk
	call	readmouse
	call	showpointer
	call	worktoscreen
	call	delpointer
	ret

	endp