1000 REM - FOUR LETTER WORDS›1005 REM - the Prototype›1010 REM - Joel Gluck, Nov/Dec '83›1020 REM - 2 players, joysticks›1030 REM ›1200 GOSUB 2000:REM - INITIALIZE›1300 GOSUB 3000:REM - GAME›1400 END ›2000 REM - INITIALIZE›2100 DIM XSTIK(15),YSTIK(15),GMAN(1),NWORDS(1),XWORD(1),XQUE(1),XMAN(1),YMAN(1),NLTS(1),WORD$(200),LTTER$(10)›2110 DIM STP$(4),ADJUST(1),CONVERT$(4)›2150 FOR Z=5 TO 15:READ X,Y:XSTIK(Z)=X:YSTIK(Z)=Y:NEXT Z›2160 DATA 1,1,1,-1,1,0,0,0,-1,1,-1,-1,-1,0,0,0,0,1,0,-1,0,0›2200 WALL=138:DELETE=131:BLANK=32:SLOT=13›2250 XFLD=6:YFLD=3:WDSLEFT=23›2300 GMAN(0)=49:GMAN(1)=178:XWORD(0)=5:XWORD(1)=11›2310 XQUE(0)=1:XQUE(1)=15:ADJUST(0)=-32:ADJUST(1)=96›2320 LTTER$="1234567890"›2330 FOR Z=0 TO 19:WORD$(Z*10+1,Z*10+10)=LTTER$(1,10):NEXT Z›2350 FOR Z=1 TO 4›2360 STP$(Z,Z)=CHR$(65+INT(RND(1)*26))›2370 IF Z=1 THEN 2410›2380 FOR N=1 TO Z-1›2390 IF STP$(N,N)=STP$(Z,Z) THEN POP :GOTO 2360›2400 NEXT N›2410 NEXT Z›2500 GOSUB 8000:REM - flash killer word›2505 GRAPHICS 1+16›2510 SETCOLOR 0,12,6:SETCOLOR 2,4,6:SETCOLOR 3,9,4:SETCOLOR 1,1,6›2550 COLOR WALL:PLOT 5,2:DRAWTO 14,2:DRAWTO 14,23:DRAWTO 5,23:DRAWTO 5,2›2552 FOR Z=0 TO 4:PLOT Z,14:DRAWTO Z,23:PLOT Z+15,14:DRAWTO Z+15,23:NEXT Z›2553 PLOT 0,2:DRAWTO 0,13:PLOT 19,2:DRAWTO 19,23›2554 COLOR DELETE:PLOT 9,12:PLOT 9,13:PLOT 10,12:PLOT 10,13›2560 COLOR GMAN(0):PLOT 1,0:COLOR GMAN(1):PLOT 18,0›2570 FOR LT=1 TO 4:GLT=ASC(STP$(LT,LT))+32›2580 FOR N=1 TO 4:REM - number of each letter on field›2600 GOSUB 2900:REM - PLACE LETTER GLT›2620 NEXT N:NEXT LT›2660 FOR P=0 TO 1›2670 GLT=GMAN(P):GOSUB 2900:REM - PLACE MAN›2680 XMAN(P)=X:YMAN(P)=Y›2685 GOSUB 7000:REM - CLEAR SLOTS›2690 NWORDS(P)=0›2700 NEXT P›2890 RETURN ›2900 REM - PLACE LETTER GLT (rtn X,Y)›2910 X=(INT(RND(1)*4)+1)*2+XFLD-1:Y=INT(RND(1)*10)*2+YFLD›2930 LOCATE X,Y,GS:IF GS<>BLANK THEN 2910›2940 SOUND 0,X+Y,12,8›2950 COLOR GLT:PLOT X,Y›2955 SOUND 0,0,0,0›2960 RETURN ›3000 REM - GAME›3020 P=INT(RND(1)*2)›3100 P=1-P›3120 S=STICK(P):IF S=15 THEN 3100›3130 GOSUB 4000:REM - MOVE›3140 GOTO 3100›4000 REM - CHECK MOVE›4100 XD=XSTIK(S):YD=YSTIK(S):POKE 77,0›4110 LOCATE XMAN(P)+XD,YMAN(P)+YD,G:IF G=WALL THEN GOSUB 7050:RETURN ›4112 IF G=GMAN(1-P) THEN GOSUB 6000:RETURN ›4115 IF G=DELETE THEN GOSUB 7100:RETURN :REM - DELETE CHAR›4120 IF G<>BLANK THEN GOSUB 4200:RETURN :REM - BUMPED SUMTHIN'›4125 REM - MOVE MAN›4130 COLOR BLANK:PLOT XMAN(P),YMAN(P)›4135 SOUND 0,P*30+10,8,8›4140 XMAN(P)=XMAN(P)+XD:YMAN(P)=YMAN(P)+YD›4150 COLOR GMAN(P):PLOT XMAN(P),YMAN(P)›4155 SOUND 0,0,0,0›4160 RETURN ›4200 REM - BUMP›4210 IF G=EXCLAM THEN 6000›4220 COLOR G+128:PLOT XMAN(P)+XD,YMAN(P)+YD›4230 IF NLTS(P)=0 OR NLTS(P)=4 THEN GOSUB 7000:GOTO 4300:REM -1st letter›4240 FOR Z=1 TO NLTS(P)›4250 IF CHR$(G+ADJUST(P))=LTTER$(P*5+Z,P*5+Z) THEN 4270›4260 NEXT Z:GOTO 4300›4270 SOUND 0,0,4,12:FOR PAUZ=1 TO 50:NEXT PAUZ:SOUND 0,0,0,0:REM - repeated letter›4280 COLOR G:PLOT XMAN(P)+XD,YMAN(P)+YD›4290 RETURN ›4300 REM - letter is OK›4310 NLTS(P)=NLTS(P)+1›4320 LTTER$(P*5+NLTS(P),P*5+NLTS(P))=CHR$(G+ADJUST(P))›4330 COLOR BLANK:PLOT XMAN(P)+XD,YMAN(P)+YD›4340 COLOR G+ADJUST(P):PLOT XWORD(P)-1+NLTS(P),0›4350 FOR SFX=20 TO 50 STEP 2:SOUND 0,SFX+P*20,10,8:NEXT SFX:SOUND 0,0,0,0›4360 GOSUB 4125:REM - move man›4370 GLT=G:GOSUB 2900:REM - replace letter on field›4380 IF NLTS(P)<4 THEN RETURN ›4400 REM - WORD COMPLETED›4410 FOR Z=1 TO 4›4420 IF ASC(LTTER$(P*5+Z,P*5+Z))<>ASC(STP$(Z,Z))+ADJUST(P)+32 THEN 4450›4430 NEXT Z›4440 NWORDS(1-P)=13:POSITION 5,1:? #6;"forbidden":GOTO 5000:REM - word was deadly›4450 REM - DID OPPONENT USE WORD?›4455 IF NWORDS(1-P)=0 THEN 4600:REM - opponent has no words›4460 FOR Z=1 TO 4›4470 CONVERT$(Z,Z)=CHR$(ASC(LTTER$(P*5+Z,P*5+Z))-ADJUST(P)+ADJUST(1-P))›4480 NEXT Z›4490 FOR CH=1 TO NWORDS(1-P)›4500 IF CONVERT$(1,4)=WORD$((1-P)*96+CH*4,(1-P)*96+CH*4+3) THEN 4520:REM - word was used already›4510 NEXT CH:GOTO 4600›4520 GOSUB 7200:REM - transfer a word›4530 GOSUB 7000:REM - clear slots›4540 IF NWORDS(1-P)>=12 THEN 5000›4550 RETURN ›4600 REM - DID P(LAYER) USE WORD?›4610 IF NWORDS(P)=0 THEN 4700:REM - P has no words›4620 FOR CH=1 TO NWORDS(P)›4630 IF LTTER$(P*5+1,P*5+4)=WORD$(P*96+CH*4,P*96+CH*4+3) THEN 4650:REM - word was used already›4640 NEXT CH:GOTO 4700›4650 FOR Z=0 TO 3:COLOR ASC(WORD$(P*96+CH*4+Z,P*96+CH*4+Z))-ADJUST(P)+128›4655 PLOT Z+XQUE(P),CH+1:NEXT Z›4660 FOR SFX=15 TO 0 STEP -0.2:SOUND 0,15-SFX,4,SFX:NEXT SFX›4670 FOR Z=0 TO 3:COLOR ASC(WORD$(P*96+CH*4+Z,P*96+CH*4+Z))›4675 PLOT Z+XQUE(P),CH+1:NEXT Z›4680 GOSUB 7000:RETURN ›4700 REM - THE WORD IS BRAND NEW!›4710 NWORDS(P)=NWORDS(P)+1›4720 FOR Z=1 TO 4›4730 WORD$(P*96+NWORDS(P)*4+Z-1,P*96+NWORDS(P)*4+Z-1)=LTTER$(P*5+Z,P*5+Z)›4740 NEXT Z›4745 Y=NWORDS(P)+1:IF Y>23 THEN Y=1›4750 POSITION XQUE(P),Y:? #6;WORD$(P*96+NWORDS(P)*4,P*96+NWORDS(P)*4+3);›4770 FOR SFX=150 TO 50 STEP -20:SOUND 0,SFX,10,10:FOR PAUZ=1 TO 10:NEXT PAUZ:SOUND 0,0,0,0:NEXT SFX›4780 SOUND 0,0,0,0›4785 WDSLEFT=WDSLEFT-1›4790 GOSUB 7000›4800 IF WDSLEFT>0 AND NWORDS(P)<12 THEN RETURN ›5000 REM - WE HAVE A WINNER›5100 WINNER=P:IF NWORDS(1-P)>NWORDS(P) THEN WINNER=1-P›5110 X=XQUE(WINNER)›5120 POSITION X,0:? #6;"win"›5125 FOR Z=X TO X+3:LOCATE Z,0,G:COLOR G:PLOT Z,14:DRAWTO Z,23:NEXT Z›5130 FOR N=4 TO 15›5140 FOR SFX=100 TO 0 STEP -N›5150 SOUND 0,SFX,10,8:SOUND 1,SFX/2,8,4:SETCOLOR 4,0,SFX›5160 NEXT SFX:NEXT N›5170 SOUND 0,0,0,0:SETCOLOR 4,0,0:SOUND 1,0,0,0›5180 IF STRIG(0)=0 OR STRIG(1)=0 THEN RUN ›5190 GOTO 5180›6000 REM - SWAP TOP DISPLAYS›6005 IF NLTS(0)=0 AND NLTS(1)=0 THEN GOSUB 7050:RETURN ›6010 SOUND 2,10,12,8:SOUND 3,12,12,8›6020 CONVERT$(1,4)=LTTER$(1,4)›6030 FOR Z=1 TO 4›6040 IF Z<=NLTS(1) THEN LTTER$(Z,Z)=CHR$(ASC(LTTER$(5+Z,5+Z))-ADJUST(1)+ADJUST(0))›6050 IF Z<=NLTS(0) THEN LTTER$(5+Z,5+Z)=CHR$(ASC(CONVERT$(Z,Z))-ADJUST(0)+ADJUST(1))›6060 NEXT Z›6070 Z=NLTS(0):NLTS(0)=NLTS(1):NLTS(1)=Z›6080 SETCOLOR 4,0,15›6100 FOR N=0 TO 1›6110 FOR Z=1 TO 4›6120 IF Z>NLTS(N) THEN COLOR SLOT:PLOT XWORD(N)+Z-1,0:GOTO 6140›6130 COLOR ASC(LTTER$(N*5+Z,N*5+Z)):PLOT XWORD(N)+Z-1,0›6140 NEXT Z:NEXT N›6150 SETCOLOR 4,0,0›6160 FOR SFX=10 TO 0 STEP -1:SOUND 2,SFX,12,SFX:SOUND 3,SFX+2,12,SFX:NEXT SFX›6170 RETURN ›7000 REM - CLEAR SLOTS›7010 COLOR SLOT:PLOT XWORD(P),0:DRAWTO XWORD(P)+3,0›7020 NLTS(P)=0›7030 RETURN ›7050 REM - BUMP SOUND›7060 FOR SFX=15 TO 0 STEP -1.5›7070 SOUND 0,255-SFX,10,SFX:FOR N=1 TO 1:NEXT N›7080 SOUND 0,0,0,0:FOR N=1 TO 1:NEXT N:NEXT SFX›7090 RETURN ›7100 REM - DELETE LETTER›7110 IF NLTS(P)=0 THEN GOSUB 7050:RETURN ›7120 FOR SFX=50 TO 0 STEP -3:SOUND 0,SFX,8,10:NEXT SFX:SOUND 0,0,0,0›7130 COLOR SLOT:PLOT XWORD(P)+NLTS(P)-1,0›7140 NLTS(P)=NLTS(P)-1›7150 RETURN ›7200 REM - TRANSFER A WORD FROM P TO 1-P›7250 Y=CH+1:IF Y>23 THEN Y=1›7260 POSITION XQUE(1-P),Y:? #6;LTTER$(P*5+1,P*5+4);›7265 SOUND 0,254,10,8:SOUND 1,255,10,8›7270 IF NWORDS(P)=0 THEN 7400›7280 Y=NWORDS(P)+1:IF Y>23 THEN Y=1›7290 POSITION XQUE(P),Y:? #6;" ":REM - 4 SPACES›7295 NWORDS(1-P)=NWORDS(1-P)+1›7297 Y=NWORDS(1-P)+1:IF Y>23 THEN Y=1›7300 FOR Z=0 TO 3›7305 CONVERT$(1,1)=CHR$(ASC(WORD$(P*96+NWORDS(P)*4+Z,P*96+NWORDS(P)*4+Z))-ADJUST(P)+ADJUST(1-P))›7310 WORD$((1-P)*96+NWORDS(1-P)*4+Z,(1-P)*96+NWORDS(1-P)*4+Z)=CONVERT$(1,1)›7315 COLOR ASC(CONVERT$(1,1)):PLOT XQUE(1-P)+Z,Y›7320 NEXT Z›7325 FOR SFX=0 TO 50 STEP 4:SOUND 2,SFX,8,15:NEXT SFX:SOUND 0,0,0,0:SOUND 1,0,0,0:SOUND 2,0,0,0›7330 NWORDS(P)=NWORDS(P)-1›7400 FOR SFX=0 TO 240 STEP 10:SOUND 0,SFX,10,8:SOUND 1,SFX+10,10,8:NEXT SFX:SOUND 0,0,0,0:SOUND 1,0,0,0›7500 RETURN ›8000 REM - FLASH SECRET WORD›8010 GRAPHICS 2+16›8020 SETCOLOR 0,0,15:SETCOLOR 1,4,4›8050 POSITION 4,4:? #6;"do not spell"›8100 FOR Z=1 TO 7›8110 POSITION 8,6:? #6;STP$›8120 FOR SFX=15 TO 0 STEP -0.7+0.6*(Z=7)›8130 SETCOLOR 0,Z,SFX:SOUND 0,135,12,SFX/2:SOUND 1,SFX*2,8,4:NEXT SFX:SOUND 1,0,0,0›8140 POSITION 8,6:? #6;" ":REM - four spaces›8150 FOR SFX=1 TO 20:NEXT SFX›8160 NEXT Z›8170 RETURN ›