1182 calc_abs_pos PROTO SYSCALL, x_val:WORD, y_val:WORD INCLUDELIB GRAPHICS INCLUDELIB SOUND INCLUDELIB XMS INCLUDE GRAPHICS.INC INCLUDE SOUND.INC INCLUDE XMS.INC INCLUDE DOS.INC INCLUDE BIOS.INC LEFT EQU 1 RIGHT EQU 2 UP EQU 3 DOWN EQU 4 WALK_CURSOR EQU 1 LOOK_CURSOR EQU 2 TAKE_CURSOR EQU 3 TALK_CURSOR EQU 4 DOSSEG .MODEL SMALL,SYSCALL .386 .STACK .DATA man_table dw 12480,12501,12525,12549,12525,12501,0ffffh man_x dw ? man_y dw ? man_pos dw ? man_frame dw ? frame_ndx dw 0 man_delay dw ? m_evnt dw ? mouse_plotpos dw ? x_when_clicked dw ? cursortype dw ? current_cursor dw ? direction dw ? walk dw ? sampname1 db 'queensr.voc',0 sampname2 db 'yes.voc',0 sample1 dw ? sample2 dw ? backname db 'BACK.LBM',0 maskname db 'MASK.LBM',0 spritename db 'SPRITES.LBM',0 inbyte db ? handle dw ? vidseg dw 0A000h backseg dw ? maskseg dw ? spriteseg dw ? sampseg dw ? samp1_off dw ? samp2_off dw ? samp3_off dw ? samp4_off dw ? .CODE .STARTUP @ModBlock 65536/16 ; call init_ctvoice ; call xms_setup ; mov dx,offset sampname1 ; call xms_load ; mov sample1,ax @SetMode 13h INVOKE init_mouse,319,199,12,11 call load_gfx ; mov dx,sample1 ; mov di,0 ; mov si,1ah ; call play_xms_sample mov mousex,12 mov mousey,11 mov man_y,140 mov man_frame,12480 INVOKE calc_abs_pos, 0,man_y mov man_pos,ax mov man_x,0 mov x_when_clicked,0 mov walk,0 mov cursortype,WALK_CURSOR mov current_cursor,130 again: inc man_delay cmp man_delay,4 jnz no_man mov man_delay,0 cmp walk,1 jnz no_man call do_man no_man: INVOKE plot,15,38,spriteseg,man_frame,vidseg,man_pos INVOKE plot,15,38,maskseg,man_pos,vidseg,man_pos cmp event_flags,0 jz no_mouse_event call process_mouse no_mouse_event: INVOKE calc_abs_pos,mousex,mousey sub ax,11 mov mouse_plotpos,ax INVOKE plot,11,10,spriteseg,current_cursor,vidseg,mouse_plotpos mov ah,1 int 16h jnz quit call vsync INVOKE rest,12,10,backseg,mouse_plotpos,vidseg,mouse_plotpos jmp again quit: @GetChar ; call stop_sample ;stop any voice ; call exit_ctvoice ; mov dx,sample1 ; call xms_free mov es,backseg @FreeBlock mov es,maskseg @FreeBlock mov es,spriteseg @FreeBlock call exit_mouse @SetMode 3 .EXIT process_mouse PROC mov dx,event_flags mov event_flags,0 bt dx,1 jnc no_leftclick cmp cursortype,WALK_CURSOR jnz l1 call walk_rte ret l1: cmp cursortype,LOOK_CURSOR jnz l2 call look_rte ret l2: cmp cursortype,TAKE_CURSOR jnz l3 call take_rte ret l3: no_leftclick: bt dx,4 jnc no_rightclick no_rightclick: ret process_mouse ENDP walk_rte PROC mov dx,mousex mov x_when_clicked,dx cmp man_x,dx jz no_walk mov walk,1 cmp dx,man_x jb walk_left mov direction,RIGHT jmp no_walk walk_left: mov direction,LEFT no_walk: ret walk_rte ENDP look_rte PROC ret look_rte ENDP take_rte PROC ret take_rte ENDP talk_rte PROC ret talk_rte ENDP do_man PROC INVOKE rest,16,38,backseg,man_pos,vidseg,man_pos; cmp direction,RIGHT jnz walk_left add man_x,2 mov dx,x_when_clicked cmp man_x,dx jb go_on mov walk,0 jmp go_on walk_left: sub man_x,2 mov dx,x_when_clicked cmp man_x,dx ja go_on mov walk,0 go_on: INVOKE calc_abs_pos, man_x, man_y mov man_pos,ax mov bx,frame_ndx mov dx,man_table[bx] cmp dx,0ffffh jnz no_framereset mov frame_ndx,0 mov dx,man_table[0] no_framereset: mov man_frame,dx INVOKE plot ,15,38,spriteseg,man_frame,vidseg,man_pos add frame_ndx,2 ret do_man ENDP load_gfx PROC INVOKE load_iff,0,offset backname mov backseg,ax mov si,0 mov di,0 mov es,vidseg push ds mov ds,backseg mov cx,64000/4 rep movsd pop ds INVOKE load_iff,0,offset maskname mov maskseg,ax INVOKE load_iff,0,offset spritename mov spriteseg,ax ret load_gfx ENDP dis_clock PROC mov dx,21h in al,dx or al,1 out dx,al ret dis_clock ENDP ena_clock PROC mov dx,21h in al,dx and al,0feh out dx,al ret ena_clock ENDP calc_abs_pos PROC SYSCALL, x_val:WORD, y_val:WORD mov ax,y_val mov dx,320 mul dx add ax,x_val ret calc_abs_pos ENDP END . 0