$COM ASM PUSH AX ASM MOV AX,00 ASM INT 51 ASM CMP AX,0 ASM JNZ working ASM POP AX LOCATE 12,28 PRINT "MOUSE NOT DETECTED" LOCATE 14,18 PRINT "A MOUSE IS REQUIRED TO PLAY THIS GAME" BEEP BEEP END working: ASM POP AX 'turn off cursor ASM PUSH AX ASM MOV AH,01 ASM MOV CH,32 ASM INT 16 ASM POP AX COLOR 14,1 CLS COLOR 15,2 LOCATE 3,28 PRINT " WORDY " LOCATE 4,28 PRINT " BY KEVIN BAKER " LOCATE 5,28 PRINT " (C) 1997 KB SOFTWARE " COLOR 14, 1 LOCATE 12,16 PRINT "THE OBJECT OF THE GAME IS TO MATCH WORDS AND TRY TO" LOCATE 14,14 PRINT "BEAT THE BEST TIME DISPLAYED IN THE UPPER RIGHT CORNER." LOCATE 18,20 PRINT "PRESS ANY KEY OR LEFT MOUSE BUTTON TO START." tle: ka = INSTAT IF ka THEN GOTO stp CALL MOUSE IF tx = 1 THEN GOTO stp GOTO tle stp: his$ ="WORDY.HIS" cr$ = "1912" hc = EXIST his$ IF hc = 0 THEN OPEN his$ FOR OUTPUT AS 1 PUT$ 1,cr$ CLOSE 1 END IF DEF SEG = &HB800 ste = 1 vtop: OPEN his$ FOR INPUT AS 1 GET$ 1,4,n1$ CLOSE 1 tc = VAL(n1$) SCREEN 0 COLOR 14, 1 CLS 'turn off cursor ASM PUSH AX ASM MOV AH,01 ASM MOV CH,32 ASM INT 16 ASM POP AX nx = 0 zx = 0 lx = 0 cnt = 0 sc = 0 bk: zx = 0 FOR i = 1 to 72 POKE nx, i INCR nx NEXT nx = 72 FOR i = 1 to 72 POKE nx, i INCR nx NEXT FOR i = 1 to 144 nk: vx = RANDOM 144 vy = RANDOM 144 'make random number 0 come up more often IF vx <> 0 THEN DECR vx IF vy <> 0 THEN DECR vy rx = PEEK(vx) ry = PEEK(vy) zx = rx IF vx = vy THEN GOTO nk POKE vx,ry POKE vy,zx NEXT i = 1:nx = 0 lx = 0:n = 2 dve = 0:dep = 0 cnt = 0 ltop: IF dve = 1 THEN n = 14 atop: LOCATE n,5 ztop: RESTORE lx = PEEK(nx) FOR i = 1 TO lx READ L1,L2,L3 NEXT NUM = lx IF num > 0 AND num < 10 THEN z = 4 IF num > 9 AND num < 20 THEN z = 5 IF num > 19 AND num < 30 THEN z = 6 IF num > 29 AND num < 40 THEN z = 1 IF num > 39 AND num < 50 THEN z = 9 IF num > 49 AND num < 60 THEN z = 12 IF num > 59 AND num < 73 THEN z = 14 COLOR z, 7 nx = nx + 1 wrd$ = CHR$(L1) + CHR$(L2) + CHR$(L3) PRINT " ";wrd$;" "; COLOR 7,1 PRINT " "; INCR dep IF dep < 12 THEN GOTO ztop dep = 0 INCR n INCR n INCR cnt IF cnt < 6 THEN GOTO atop cnt = 0 INCR dve IF dve = 1 THEN GOTO ltop n = 0 z = 0 i = 1 'CLEAR top screen line 'used for a temporary buffer FOR i = 1 to 72 POKE n,32 z = n + 1 POKE z, 25 n = n + 2 NEXT COLOR 14, 1 LOCATE 18,1 MAIN: xd = 0:mx = 0:my = 0 tx = 1:hz = 6:az = 6 nv = 0:kz = 0:u = 0 rt = 0:pn = 0 ASM PUSH AX ASM PUSH BX ASM PUSH CX ASM PUSH DX 'initialize mouse ASM MOV AX,0 ASM INT 51 'Set mouse cursor color ASM MOV AX,10 ASM XOR BX,BX ASM MOV CX,-1 ASM MOV DX,28672 ASM INT 51 'Position mouse cursor ASM MOV AX,4 ASM MOV CX,288 ASM MOV DX,96 ASM INT 51 'Show mouse cursor ASM MOV AX,1 ASM INT 51 'Set x and y mouse limits ASM MOV AX,7 ASM MOV CX,32 ASM MOV DX,632 ASM INT 51 ASM MOV AX,8 ASM MOV CX,8 ASM MOV DX,184 ASM INT 51 ASM POP DX ASM POP CX ASM POP BX ASM POP AX dz: hh = 48:hl = 48:sh = 48 sl = 47:cn = 58 LOCATE 1,5 PRINT "Timer"; POKE 20,hh:POKE 21,30 POKE 22,hl:POKE 23,30 POKE 24,cn:POKE 25,30 POKE 26,sh:POKE 27,30 POKE 28,sl:POKE 29,30 LOCATE 1,61 sn1$ = MID$(n1$,1,2) sn2$ = MID$(n1$,3,2) PRINT "Best Time";" ";sn1$;":";sn2$ COLOR 4,2 LOCATE 2,79 PRINT "N " LOCATE 3,79 PRINT "E " LOCATE 4,79 PRINT "W " LOCATE 21,79 PRINT "E " LOCATE 22,79 PRINT "X " LOCATE 23,79 PRINT "I " LOCATE 24,79 PRINT "T " COLOR 14, 1 DO CALL mouse IF tx = 0 THEN xd = 1 'PUT TIMER HERE IF tmr1$ <> tmr$ THEN tm$ = TIME$ zm$ = MID$(tm$, 7, 2) tmr1$ = zm$ INCR sl END IF tm$ = TIME$ zm$ = MID$(tm$, 7, 2) tmr$ = zm$ IF sl < 58 THEN POKE 28,sl END IF IF sl = 58 AND sh < 54 THEN sl = 48 POKE 28,sl INCR sh POKE 26,sh END IF IF sh = 54 THEN sh = 48 sl = 48 POKE 26, sl POKE 26, sh INCR hl POKE 22, hl END IF IF hl = 58 THEN sl = 48 sh = 48 hl = 48 INCR hh POKE 20,hh POKE 22,hl END IF LOCATE 1,4 IF hh = 54 THEN sl = 48 POKE 28,sl sh = 48 POKE 26,sh hl = 48 POKE 22, hl hh = 48 POKE 20,hh LOCATE 1,29 PRINT " YOUR TIME LIMIT IS UP"; GOTO srt END IF IF mx = 624 AND my = 8 AND tx = 1 THEN GOTO vtop IF mx = 624 AND my = 16 AND tx = 1 THEN GOTO vtop IF mx = 624 AND my = 24 AND tx = 1 THEN GOTO vtop IF mx = 632 AND my = 8 AND tx = 1 THEN GOTO vtop IF mx = 632 AND my = 16 AND tx = 1 THEN GOTO vtop IF mx = 632 AND my = 24 AND tx = 1 THEN GOTO vtop IF mx = 624 AND my = 160 AND tx = 1 THEN GOTO eop IF mx = 624 AND my = 168 AND tx = 1 THEN GOTO eop IF mx = 624 AND my = 176 AND tx = 1 THEN GOTO eop IF mx = 624 AND my = 184 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 160 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 168 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 176 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 184 AND tx = 1 THEN GOTO eop ka = INKEY IF ka = 110 THEN GOTO vtop IF ka = 78 THEN GOTO vtop IF ka = 27 THEN GOTO eop IF ka = 115 THEN ste = 1 IF ka = 83 THEN ste = 1 IF ka = 111 THEN ste = 0 IF ka = 79 THEN ste = 0 v1 = 0 IF ka = 112 THEN v1 = 1 IF ka = 80 THEN v1 = 1 IF v1 = 1 THEN CALL scrn v1 = 0 IF my = 8 THEN hz = 166 IF my = 24 THEN hz = 166 + 320 IF my = 40 THEN hz = 166 + 640 IF my = 56 THEN hz = 166 + 960 IF my = 72 THEN hz = 166 + 1280 IF my = 88 THEN hz = 166 + 1600 IF my = 104 THEN hz = 166 + 1920 IF my = 120 THEN hz = 166 + 2240 IF my = 136 THEN hz = 166 + 2560 IF my = 152 THEN hz = 166 + 2880 IF my = 168 THEN hz = 166 + 3200 IF my = 184 THEN hz = 166 + 3520 IF my = 16 THEN GOTO hy IF my = 32 THEN GOTO hy IF my = 48 THEN GOTO hy IF my = 64 THEN GOTO hy IF my = 80 THEN GOTO hy IF my = 96 THEN GOTO hy IF my = 112 THEN GOTO hy IF my = 128 THEN GOTO hy IF my = 144 THEN GOTO hy IF my = 160 THEN GOTO hy IF my = 176 THEN GOTO hy v1 = 0 IF mx > 24 THEN INCR v1 IF mx < 72 THEN INCR v1 IF v1 = 2 THEN nz = 6 v1 = 0 IF mx > 72 THEN INCR v1 IF mx < 120 THEN INCR v1 IF v1 = 2 THEN nz = 18 v1 = 0 IF mx > 120 THEN INCR v1 IF mx < 168 THEN INCR v1 IF v1 = 2 THEN nz = 30 v1 = 0 IF mx > 168 THEN INCR v1 IF mx < 216 THEN INCR v1 IF v1 = 2 THEN nz = 42 v1 = 0 IF mx > 216 THEN INCR v1 IF mx < 264 THEN INCR v1 IF v1 = 2 THEN nz = 54 v1 = 0 IF mx > 264 THEN INCR v1 IF mx < 312 THEN INCR v1 IF v1 = 2 THEN nz = 66 v1 = 0 IF mx > 312 THEN INCR v1 IF mx < 360 THEN INCR v1 IF v1 = 2 THEN nz = 78 v1 = 0 IF mx > 360 THEN INCR v1 IF mx < 408 THEN INCR v1 IF v1 = 2 THEN nz = 90 v1 = 0 IF mx > 408 THEN INCR v1 IF mx < 456 THEN INCR v1 IF v1 = 2 THEN nz = 102 v1 = 0 IF mx > 456 THEN INCR v1 IF mx < 504 THEN INCR v1 IF v1 = 2 THEN nz = 114 v1 = 0 IF mx > 504 THEN INCR v1 IF mx < 552 THEN INCR v1 IF v1 = 2 THEN nz = 126 v1 = 0 IF mx > 552 THEN INCR v1 IF mx < 600 THEN INCR v1 IF v1 = 2 THEN nz = 138 pz = nz + hz kz = PEEK(pz) IF kz = 32 THEN GOTO hy v1 = 0 IF mx > 24 AND mx < 72 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az, 32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz POKE az, 32:nv = az + 1 POKE nv, 76 :nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 72 AND mx < 120 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 12:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 120 AND mx < 168 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 24:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13 :POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 168 AND mx < 216 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az, 32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 36:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 216 AND mx < 264 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az, 32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 48:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 264 AND mx < 312 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 60:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 312 AND mx < 360 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 72:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 360 AND mx < 408 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 84:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 408 AND mx < 456 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az, 32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 96:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 456 AND mx < 504 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 108:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 504 AND mx < 552 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 120:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE nv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF v1 = 0 IF mx > 552 AND mx < 600 THEN INCR v1 IF tx = 1 AND xd = 1 THEN INCR v1 IF v1 = 2 THEN POKE az,32:nv = az + 1 POKE nv, 23:nv = az + 12 POKE nv, 32:nv = az + 13 POKE nv, 23:az = hz az = az + 132:POKE az, 32 nv = az + 1:POKE nv, 76 nv = az + 12:POKE bv, 32 nv = az + 13:POKE nv, 76 INCR u xd = 0 END IF GOTO bg hy: xd = 0 bg: v1 = 0 IF u = 1 THEN INCR v1 IF rt = 0 THEN INCR v1 IF v1 = 2 AND ste = 1 THEN SOUND 400,2 IF v1 = 2 THEN bz = az + 4 ez = peek(bz) nv = bz + 2 fz = peek(nv) nv = bz + 4 gz = peek(nv) rt = 1 END IF v1 = 0 nv = az + 6 kz = PEEK(nv) IF u <> 0 THEN INCR v1 IF kz = 32 THEN INCR v1 IF v1 = 2 THEN u = 2 GOTO ey END IF v1 = 0 'FOUND A MATCH IF u = 0 THEN zl = nz led = my END IF IF u => 2 AND zl <> nz THEN v1 = 1 IF u => 2 AND my <> led THEN v1 = 1 LOCATE 22,1 nv = az + 4 kz = PEEK(nv) IF ez = kz THEN INCR v1 nv = az + 6 kz = PEEK(nv) IF fz = kz THEN INCR v1 nv = az + 8 kz = PEEK(nv) IF gz = kz THEN INCR v1 sn1 = 0 IF v1 = 4 AND ste = 1 THEN sn1 = 1 IF v1 = 4 THEN PAUSE (5) zl = 0 lz = az bz = bz - 4 ASM PUSH AX ASM MOV AX,02 ASM INT 51 ASM POP AX FOR i = 1 to 7 POKE az, 32 nv = az + 1 POKE nv, 23 POKE bz, 32 nv = bz + 1 POKE nv, 23 az = az + 2 bz = bz + 2 NEXT ASM PUSH AX ASM MOV AX,01 ASM INT 51 ASM POP AX u = 0 ez = 0 fz = 0 gz = 0 rt = 0 sc = sc + 1 az = lz END IF IF sn1 = 1 THEN SOUND 600,2 SOUND 500,2 END IF bypass: IF sc = 72 THEN LOCATE 12,36 PRINT "GAME OVER"; END IF IF sc <> 72 THEN GOTO etp h1 = PEEK(20) h2 = PEEK(22) h3 = PEEK(26) h4 = PEEK(28) n2$ = CHR$(h1) + CHR$(h2) + CHR$(h3) + CHR$(h4) k5 = VAL(n2$) IF k5 < tc THEN OPEN his$ FOR OUTPUT AS 1 POKE 140,h1:POKE 142,h2 POKE 144,58 POKE 146,h3:POKE 148,h4 PUT$ 1, n2$ CLOSE 1 END IF etp: IF sc <> 72 THEN GOTO np srt: ka = INKEY IF ka = 110 THEN GOTO vtop IF ka = 78 THEN GOTO vtop IF ka = 27 THEN GOTO eop CALL mouse IF mx = 624 AND my = 8 AND tx = 1 THEN GOTO vtop IF mx = 624 AND my = 16 AND tx = 1 THEN GOTO vtop IF mx = 624 AND my = 24 AND tx = 1 THEN GOTO vtop IF mx = 632 AND my = 8 AND tx = 1 THEN GOTO vtop IF mx = 632 AND my = 16 AND tx = 1 THEN GOTO vtop IF mx = 632 AND my = 24 AND tx = 1 THEN GOTO vtop IF mx = 624 AND my = 160 AND tx = 1 THEN GOTO eop IF mx = 624 AND my = 168 AND tx = 1 THEN GOTO eop IF mx = 624 AND my = 176 AND tx = 1 THEN GOTO eop IF mx = 624 AND my = 184 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 160 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 168 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 176 AND tx = 1 THEN GOTO eop IF mx = 632 AND my = 184 AND tx = 1 THEN GOTO eop GOTO srt eop: SCREEN 0 END np: 'NO MATCH ey: LOCATE 1,29 v1 = 0 IF u => 2 AND zl <> nz THEN v1 = 1 IF u => 2 AND led <> my THEN v1 = 1 IF v1 = 1 THEN PRINT "WORDS DO NOT MATCH."; pn = 1 GOTO gb END IF pn = 0 gb: 'WORDS DONT MATCH IF u => 2 THEN PAUSE (5) POKE az, 32 nv = az + 12 POKE nv, 32 nv = az + 1 POKE nv, 23 nv = az + 13 POKE nv, 23 u = 0 rt = 0 END IF v1 = 0 IF pn = 1 AND ste = 1 THEN v1 = 1 IF v1 = 1 THEN SOUND 200,2 SOUND 100,2 END IF IF pn = 1 THEN LOCATE 1,29 PRINT " "; pn = 0 END IF LOOP SUB mouse ASM push ax ASM push bx ASM push cx ASM push dx ASM mov ax,3 ASM int 51 ASM and bx,1 ASM mov tx,bx ASM mov mx,cx ASM mov my,dx ASM pop dx ASM pop cx ASM pop bx ASM pop ax END SUB SUB scrn 'turn off mouse cursor ASM PUSH AX ASM MOV AX,02 ASM INT 51 ASM POP AX MyVar = ALLOC(4000) GetScreen MyVar COLOR 14,1 CLS LOCATE 8,35 PRINT "GAME PAUSED" LOCATE 10,28 PRINT "PRESS P TO RETURN TO WORDY" sk: v1 = 0 ka = INKEY IF ka = 112 THEN v1 = 1 IF ka = 80 THEN v1 = 1 IF v1 = 1 THEN PutScreen MyVar 'turn on mouse cursor ASM PUSH AX ASM MOV AX,01 ASM INT 51 ASM POP AX GOTO done END IF GOTO sk done: END SUB DATA F,U,N,W,I,N,F,I,N,H,U,G,T,U,G,B,Y,E,B,U,Y,B,E,T,W,E,T,B,O,X,F,O,X,O,N,E DATA W,O,N,P,E,N,D,E,N,E,Y,E,P,I,E,T,O,W,T,O,E,B,A,T,R,A,T,S,E,A,K,E,Y,F,A,N DATA R,A,N,C,O,W,S,O,W,L,U,G,J,U,G,P,A,D,S,A,D,N,E,T,P,E,T,L,A,D,B,A,D,C,A,T DATA H,A,T,H,U,B,C,U,B,D,R,Y,F,R,Y,O,W,E,L,O,W,D,A,Y,M,A,Y,S,I,P,D,I,P,B,A,Y DATA L,A,Y,H,A,M,Y,A,M,C,A,N,B,A,N,F,L,Y,S,L,Y,B,I,D,L,I,D,R,U,G,B,U,G,T,A,R DATA F,A,R,M,E,T,J,E,T,F,I,X,M,I,X,L,A,W,S,A,W,H,A,Y,P,A,Y,C,A,R,J,A,R,S,U,N