1757 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 INCLUDE MCGA_GFX.MAC .STACK .DATA man_r_frametab dw 12160,12204,12252,12302,12252,12204,0ffffh man_l_frametab dw 38084,38129,38181,38227,38181,38129,0ffffh man_r_x dw 4,4,4,4,4,4 man_l_x dw 4,4,4,4,4,4 man_x dw ? man_y dw ? man_pos dw ? man_frame dw ? frame_ndx dw 0 man_delay dw ? man_wdth dw 40 man_hght dw 72 m_evnt dw ? mouse_plotx dw ? mouse_ploty dw ? x_when_clicked dw ? cursortype dw ? current_cursor dw 130 cur_wdth dw 11 cur_hght dw 10 direction dw ? walk dw ? backname db 'back.pcx',0 maskname db 'MASK.pcx',0 spritename db 'SPRITES.pcx',0 inbyte db ? handle dw ? vidseg dw 0A000h backseg dw ? backdupseg dw ? maskseg dw ? spriteseg dw ? sampname db 'ZZTOP.VOC',0 zztop dw ? ball1_x dw 30 ball1_y dw 10 ball2_x dw 140 ball2_y dw 30 ball3_x dw 270 ball3_y dw 90 ball_delay dw 2 .CODE .STARTUP @ModBlock 65536/16 call init call dis_clock again: dec man_delay jnz no_man mov man_delay,4 cmp walk,1 jnz no_man call do_man no_man: dec ball_delay jnz no_balls mov ball_delay,1 call do_balls no_balls: cmp event_flags,0 jz no_mouse call do_mouse no_mouse: invoke putspriteinv,man_x,man_y,man_wdth,man_hght,spriteseg,man_frame,backseg invoke putimginv,man_x,man_y,man_wdth,man_hght,maskseg,backseg invoke putspriteinv,ball1_x,ball1_y,40,40,spriteseg,5*320+193,backseg invoke putspriteinv,ball2_x,ball2_y,31,40,spriteseg,5*320+238,backseg invoke putspriteinv,ball3_x,ball3_y,31,40,spriteseg,5*320+278,backseg call vsync invoke putimg,man_x,man_y,man_wdth,man_hght,backseg,vidseg invoke putimg,ball1_x,ball1_y,40,40,backseg,vidseg invoke putimg,ball2_x,ball2_y,31,40,backseg,vidseg invoke putimg,ball3_x,ball3_y,31,40,backseg,vidseg invoke putspriteinv,mouse_plotx,mouse_ploty,cur_wdth,cur_hght,spriteseg,current_cursor,vidseg mov ah,1 int 16h jz again call ena_clock call quit init PROC call xms_setup mov dx,offset sampname call xms_load mov zztop,ax @SetMode 13h INVOKE init_mouse,319,199,12,11 call init_ctvoice call load_gfx mov mousex,12 mov mousey,11 mov man_x,50 mov man_y,105 mov man_frame,12160 mov man_delay,4 mov x_when_clicked,50 mov walk,0 mov cursortype,WALK_CURSOR mov current_cursor,130 mov dx,zztop mov di,0 mov si,1ah ; call play_xms_sample ret init ENDP quit PROC call stop_sample @GetChar mov es,backseg @FreeBlock mov es,maskseg @FreeBlock mov es,spriteseg @FreeBlock mov es,backdupseg @FreeBlock mov dx,zztop call xms_free call exit_ctvoice call exit_mouse @SetMode 3 .EXIT quit ENDP do_mouse PROC mov dx,event_flags mov event_flags,0 bt dx,0 jnc no_move call move_cursor ret no_move: 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,3 jnc no_rightclick no_rightclick: ret do_mouse ENDP move_cursor PROC invoke putimg,mouse_plotx,mouse_ploty,cur_wdth,cur_hght,backdupseg,vidseg mov dx,mousex sub dx,11 mov mouse_plotx,dx mov dx,mousey mov mouse_ploty,dx mov current_cursor,130 ret move_cursor ENDP walk_rte PROC mov dx,mousex mov x_when_clicked,dx sub dx,20 cmp man_x,dx jz no_walk mov walk,1 jg 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 putimg,man_x,man_y,man_wdth,man_hght,backdupseg,backseg mov dx,x_when_clicked sub dx,20 mov di,frame_ndx cmp direction,RIGHT jnz walk_left mov bp,offset man_r_frametab mov ax,man_r_x[di] add man_x,ax cmp man_x,dx jl go_on mov walk,0 jmp go_on walk_left: mov bp,offset man_l_frametab mov ax,man_l_x[di] sub man_x,ax cmp man_x,dx jg go_on mov walk,0 go_on: mov dx,word ptr[bp+di] add di,2 cmp word ptr[bp+di],0ffffh jnz no_framereset mov di,0 no_framereset: mov man_frame,dx mov frame_ndx,di ret do_man ENDP do_balls PROC invoke putimg,ball1_x,ball1_y,31,40,backdupseg,backseg invoke putimg,ball2_x,ball2_y,31,40,backdupseg,backseg invoke putimg,ball3_x,ball3_y,31,40,backdupseg,backseg add ball1_x,2 cmp ball1_x,320 jle no_ball1_reset mov ball1_x,-40 no_ball1_reset: add ball2_y,2 cmp ball2_y,200 jle no_ball2_reset mov ball2_y,-40 no_ball2_reset: add ball3_y,2 cmp ball3_y,200 jle no_ball3_reset mov ball3_y,-40 no_ball3_reset: ret do_balls ENDP load_gfx PROC INVOKE load_pcx,1,offset backname mov backseg,ax INVOKE load_pcx,1,offset maskname mov maskseg,ax INVOKE load_pcx,1,offset spritename mov spriteseg,ax @Getblock 64000/4 mov backdupseg,ax mov si,0 mov di,0 mov es,backdupseg push ds mov ds,backseg mov cx,64000/4 rep movsd pop ds call show_back ret load_gfx ENDP show_back PROC mov si,0 mov di,0 mov es,vidseg push ds mov ds,backseg mov cx,64000/4 rep movsd pop ds ret show_back 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,11111110b out dx,al ret ena_clock ENDP END . 0