;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