$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
