29 GOTO 29500 30 DEF SEG=&H40:POKE &H17,PEEK(&H17) AND 71:POKE &H18,0:RETURN 40 IF JR THEN OUT 986,0:OUT 986,0:ELSE OUT &H3D8,2 42 RETURN 45 IF JR THEN OUT 986,0:OUT 986,10:ELSE OUT &H3D8,10 47 RETURN 50 DEF SEG=ASMPROG:TEMP=FBY+YL+DELTAY:BYTE=TEMP*22+FBX+XL+DELTAX: STATE=PEEK(BYTE) 60 IF STATE=0 THEN SPLASH=1:DEF SEG=0:POKE 1050,PEEK(1052) 65 IF (STATE AND 4)=4 THEN LIMIT=1 70 DEF SEG=ASMPROG:RETURN 80 LINE (0,150)-(319,199),0,BF:LOCATE 20,1:RETURN 100 WHILE INKEY$<>"":WEND 110 READ NB,IY,IX,TX$:LOCATE IY,IX:PRINT TX$; 120 FOR B=1 TO NB:READ BX(B),TX$:MID$(TX$,1)=CHR$(ASC(TX$) MOD 128): BL(B)=LEN(TX$):LOCATE IY+2,BX(B):PRINT TX$;:NEXT B 125 IF BGL=0 THEN B=BOX+1 ELSE B=BGL:BGL=0 130 GOSUB 13000:DEF SEG=&H40:REM IF PEEK(&H6B)<>&HA5 THEN SYSTEM 140 GOSUB 1100:GOSUB 30:CH$=INKEY$:IF CH$="" THEN 140 142 IF CH$ = CHR$(20) AND SF THEN SF=1:PLAY BIP$:RETURN 145 IF CH$ = CHR$(5) THEN IF FLAG9 THEN RETURN 3000 ELSE RETURN 15000 147 IF CH$ = CHR$(13) THEN PLAY BIP$:GOSUB 13000:RETURN 148 IF CH$ = CHR$(3) THEN PLAY BIP$:GOSUB 12100 150 LE=LEN(CH$)-1:CH$=RIGHT$(CH$,1) 155 IF ((CH$ = "K" AND LE) OR (CH$ = "," AND NOT LE)) AND B>BOX+1 THEN GOSUB 13000: B = B - 1:PLAY BIP$:GOSUB 13000:GOTO 180 160 IF ((CH$ = "M" AND LE) OR (CH$ = "." AND NOT LE)) AND B = BOX + 1 AND VAL(CH$)<= NB THEN GOSUB 13000:B = VAL(CH$): PLAY BIP$:GOSUB 13000 180 GOTO 140 220 OUT &H3D4,6:WAIT &H3DA,8:TI=11:GOSUB 500:OUT &H3D5,16:RETURN 230 OUT &H3D4,6:WAIT &H3DA,8:TI=11:GOSUB 500:OUT &H3D5,100:RETURN 250 GOSUB 1100 255 WHILE LEN(MOVE$)<2 AND MOVE$<>CHR$(5) AND MOVE$<>CHR$(3) AND MOVE$<>"0" AND MOVE$<>"1" AND MOVE$<>"2":GOSUB 30:MOVE$=INKEY$:WEND:MOVE$=RIGHT$(MOVE$,1) 260 IF MOVE$ = CHR$(5) THEN MOVE$ = "":RETURN 15000 262 IF MOVE$=CHR$(3) THEN GOSUB 12100 265 MOVE = INSTR("HPKMD;<012",MOVE$)-1:MOVE$ = "" 266 IF MOVE = -1 OR (MOVE > 6 AND NOT(JR)) THEN 255 ELSE RETURN 300 LINE (0,33)-(319,199),0,BF:RETURN 350 DEF SEG = ASMPROG: CALL REDRAW%: PUT (XB,YB),FR0%,PSET :RETURN 400 IF TOGGLE THEN EX = RX:EY = RY 403 RX = RX - (G > 0)*SGN(DELTAX) - (G2 > 0)*SGN(DELTAX2): RY = RY - (G1 > 0)*SGN(DELTAY) - (G3 > 0)*SGN(DELTAY2) 405 IF RX > 19 OR RY > 11 OR RX < 0 OR RY < 0 THEN TOGGLE = 0:RETURN 410 AN = (RY+1)*22 + (RX+1):DEF SEG = ASMPROG:IF ZE <> 255 THEN POKE AN,ZE 420 AN = PEEK(AN):RETURN 450 IF NUMPLAY = 0 THEN LOCATE 20,9:PRINT"Y";:GOTO 458 452 LOCATE 20,8 - (LEN(IN$)/2):PRINT IN$;", y"; 458 PRINT "ou have";HOPS;"move";:IF HOPS <> 1 THEN PRINT "s"; 460 PRINT " left. ":IF HOPS = 0 THEN LINE (0,168)-(319,183),0,BF 470 RETURN 500 FOR L9 = 1 TO TI : NEXT L9 501 TI = 50 502 RETURN 550 FLART = (START=0 AND RX=0 AND RY=0) + (START=1 AND RX=19 AND RY=0) + (START=2 AND RX=0 AND RY=11) + (START=3 AND RX=19 AND RY=11): FLART = -FLART : RETURN 570 GOSUB 550 : IF FLART = 0 THEN GOSUB 700:GOSUB 800:GOSUB 350:RETURN 580 RETURN 600 LINE (ULX,ULY)-(ULX+39,ULY+24),0,BF:RETURN 700 RY = -(START>1)*11:RX = -(START=1 OR START=3)*19:X = -(RX>0)*5 + 1: Y = -(RY>0)*3 + 1:FBX = -(RX>0)*14:FBY = -(RY>0)*8:XB = X*40:YB=Y*25:RETURN 750 RESTORE 31110:FOR L=0 TO LEVEL:READ NME$:NEXT L:RETURN 800 DEF SEG=ASMPROG:POKE BASE%,FBY*22+FBX:RETURN 850 G=0:G1=0:G2=0:G3=0:REP=REP+1:RETURN 1000 IF (LEVEL/2)=(LEVEL\2) THEN RETURN 1020 ZE=1 1030 FOR RX=0 TO 19:FOR RY=0 TO 11:IF RND>.75 THEN GOSUB 410 1050 NEXT RY,RX:RETURN 1100 DEF SEG=&H40 1120 IF PEEK(&H1A)=PEEK(&H1C) THEN RETURN 1140 POKE &H1C,PEEK(&H1A)+2+32*(PEEK(&H1A)=60):RETURN 1300 IF GAME AND HOPS<15 THEN TX=0:RETURN 1315 HOPS=HOPS-15:TX=1 1320 GET (XB,YB)-(XB+39,YB+24),TEMP% 1330 GOSUB 40 1335 CLS:DEF SEG=ASMPROG:CALL SMLIL% 1340 GOSUB 750:A$=LEFT$(NME$,LEN(NME$)-1):A$="A "+MID$(A$,-4*(LEVEL>1)+1):LOCATE 22,18.5-LEN(A$)/2:PRINT "* ";A$;" *" 1350 A=LEVEL\2:IF A=0 THEN A$="Two" ELSE IF A=1 THEN A$="Three" ELSE A$="Four" 1360 LOCATE 23,16-LEN(A$)/2:PRINT "- ";A$;" Step -";:GOSUB 45:RETURN 1500 CLS:LOCATE 12,11:PRINT "One moment please...":RETURN 1600 LINE (0,0)-(319,190),2,B:LINE (1,0)-(318,190),2,B:RETURN 1700 PLAY "mbt255l64":JR$="l64o3cdefgabo4cdefgab":JL$="l64o4bagfedco3bagfedc":JU$="l16o2cdefgab":JD$="l16o2bagfedc":SPLASH$="o4l64cdcdefedccdcdccdcdefedccdcdc":BOO$="o0l4cc#c":PAUSE=5.5:SOUNDFLAG=-1:BIP$="o5g50":RETURN 2000 DELTAX=INT(RND*5)+1:DELTAX2=INT(RND*(4-(DELTAX>2)*(DELTAX-2)))+1:TOGGLE=1:ZE=3 2005 IF DELTAX2>4 THEN DELTAX2=4-DELTAX2 2007 DEF SEG=&H40 2010 DELTAY=INT(RND*5)+1:REP=3-(DELTAY=1)+(DELTAY=3):DELTAY2=INT(RND*REP)+1 2020 IF DELTAY=3 AND DELTAY2=2 THEN DELTAY2=-1 2030 IF DELTAY=4 AND DELTAY2>1 THEN DELTAY2=1-DELTAY2 2040 IF DELTAY=5 THEN DELTAY2=-DELTAY2 2050 IF START=1 OR START=3 THEN DELTAX=-DELTAX:DELTAX2=-DELTAX2 2060 BEGIN=-(RND>.5):IF START>1 THEN DELTAY=-DELTAY:DELTAY2=-DELTAY2 2070 IF SGN(DELTAX)=SGN(DELTAX2) OR SGN(DELTAY)=-SGN(DELTAY2) THEN 2075 2073 DELTAY=(INT(RND*2)+2)*SGN(DELTAY):DELTAY2=(2+INT(RND*2)*-(Y=2))*SGN(DELTAY2) 2075 IF SGN(DELTAY)=SGN(DELTAY2) OR SGN(DELTAX)=-SGN(DELTAX2) THEN 2080 2078 IF DELTAX=1 THEN DELTAX=(INT(RND*4)+2)*SGN(DELTAX) 2079 IF DELTAX2=1 THEN DELTAX2=(INT(RND*3)+2)*SGN(DELTAX2) 2080 REP=0:IF BEGIN THEN 2110 2090 GOSUB 850:FOR G=1 TO ABS(DELTAX):GOSUB 400:NEXT G:IF TOGGLE=0 THEN 2200 2100 IF REP=2 THEN 2130 2110 GOSUB 850:FOR G1=1 TO ABS(DELTAY):GOSUB 400:NEXT G1:IF TOGGLE=0 THEN 2200 2120 IF REP=1 THEN 2090 2130 REP=-(LEVEL=2 OR LEVEL=3):IF LEVEL<2 THEN 2080 2140 IF BEGIN THEN 2170 2150 GOSUB 850:FOR G2=1 TO ABS(DELTAX2):GOSUB 400:NEXT G2:IF TOGGLE=0 THEN 2200 2160 IF REP=2 THEN 2080 2170 GOSUB 850:FOR G3=1 TO ABS(DELTAY2):GOSUB 400:NEXT G3:IF TOGGLE=0 THEN 2200 2180 IF REP=1 THEN 2150 2190 GOTO 2080 2200 RX=EX:RY=EY:ZE=129:GOSUB 410:RETURN 2300 DEF SEG=ASMPROG:CALL INITIALIZE%:RETURN 3000 FLAG9=-1:OUT &H3D4,6:WAIT &H3DA,8:TI=12:GOSUB 500:OUT &H3D5,0:CLS:PUT (100,8),THEPOND%:PUT (20,7),FR0%:GOTO 3010 3007 GOSUB 220 3010 RO=6:CO=2:INTRO=INTRO+1:BGL=0:LOCATE RO,CO+12:PRINT "Programming by":LOCATE RO+1,CO+4:PRINT "James Brayton and Michael Fish":LOCATE RO+4,CO+11:PRINT "1. The Practice":LOCATE RO+5,CO+11:PRINT "2. The Game" 3035 LOCATE RO+7,CO+11:PRINT "3. Instructions":LOCATE RO+8,CO+11:PRINT "4. End":LOCATE RO+10,CO+6:PRINT "Find the number you want.":LOCATE RO+12,CO+6:PRINT "Press < or > to move the":LOCATE RO+13,CO+6:PRINT "box to your number." 3060 PUT (56,160),RET%,PSET:LINE (144,160)-STEP(88,8),0,BF:LOCATE RO+15,CO+16:PRINT "." 3065 RESTORE 30000:SF=-1:GOSUB 230:GOSUB 100 3070 X=0:GAME=-(B=2):DONECHK=0 3072 IF SF=1 THEN 3700 ELSE SF=0 3075 IF B=3 THEN 3200 3080 IF B=4 THEN 3500 3085 GOSUB 300:IF GAME THEN WAVE=0:HOPS=HPL 3090 GOSUB 220:LOCATE 6,7:PRINT "Two Step:":LOCATE 10,7:PRINT "Three Step:":LOCATE 14,7:PRINT "Four Step:" 3095 RESTORE 31110:FOR L=1 TO 6:LOCATE L+6-(L>2)*2-(L>4)*2,10:READ NME$:PRINT L;CHR$(29);". ";NME$:NEXT L 3100 IF GAME THEN RESTORE 30040 ELSE RESTORE 30020 3105 GOSUB 230:GOSUB 100 3110 START=INT(RND*4):IF GAME=0 THEN START=0 3115 LEVEL=B-1:GOSUB 750:NME2$=NME$:IF GAME=0 THEN 3199 3120 GOSUB 300:RESTORE 30060:GOSUB 100 3125 NUMPLAY=B-1:IF NUMPLAY=0 THEN 3199 3130 GOSUB 300:LOCATE 8,3:PRINT "What is the first":LOCATE 9,3:PRINT "player's name? ";:SS=10:GOSUB 3900:FIRST$=LEFT$(IN$,LEN(IN$)-1):IF FIRST$="" THEN FIRST$="Player 1" 3135 LOCATE 13,3:PRINT "What is the second":LOCATE 14,3:PRINT "player's name? ";:SS=10:GOSUB 3900:SECOND$=LEFT$(IN$,LEN(IN$)-1):IF SECOND$="" THEN SECOND$="Player 2" 3140 LAST1=-1:LAST2=-1:FIRST=HPL:SECOND=HPL:DONE=0:HOPS=HPL:TURN=1:GOSUB 4050 3199 RETURN 3200 INFLAG=-1:GOSUB 300:LOCATE 12,11:PRINT "One moment please...":RUN "instruct" 3500 GOSUB 300:LOCATE 10,11:PRINT "Would you like to use":LOCATE 11,13:PRINT "another diskette?":BLG=1:IY=12:NB=2:RESTORE 30150:GOSUB 120:IF B=2 THEN GOTO 3600 3540 GOSUB 300:LOCATE 10,9:PRINT "Insert the new diskette." 3550 GOSUB 10000:DEF SEG=&H40:POKE &H72,&H34:POKE &H73,&H12:DEF SEG=&HF000:A%=&HE05B:CALL A% 3600 GOSUB 300:LOCATE 8,2:PRINT "To turn the computer off:":LOCATE 10,4:PRINT "1) Remove the diskette from the":LOCATE 11,7:PRINT "drive and put it in a safe place.":LOCATE 13,4:PRINT "2) Turn the computer off. The" 3650 LOCATE 14,7:PRINT "switch is located ";:IF NOT(JR) THEN PRINT"on the right ":ELSE PRINT"in the back" 3655 LOCATE 15,7:IF NOT(JR) THEN PRINT"side ";:PRINT "of the computer.":LOCATE 17,4:PRINT "3) Turn off your monitor." 3670 GOTO 3670 3700 GOSUB 300:SF=0 3710 LOCATE 7,12:PRINT "Teacher Selection":LOCATE 11,10:PRINT "Would you like sound?" 3730 BGL=1-SOUNDFLAG:IY=13:NB=2:RESTORE 30150:GOSUB 120:IF B=1 THEN GOSUB 1700:GOTO 3750 3745 SOUNDFLAG=0:JR$="":JL$="":JD$="":JU$="":SPLASH$="":BOO$="":PAUSE=0:BIP$="" 3750 GOSUB 300:GOTO 3007 3900 X1=POS(0):Y1=CSRLIN 3910 LENGTH=0:IN$="":LOCATE Y1,X1 3915 IF SN THEN SL=48:SH=58 ELSE SL=32:SH=127 3920 PRINT "_";CHR$(29); 3925 GOSUB 30:CHAR$=INKEY$:IF CHAR$="" THEN 3925 3930 CHAR=ASC(CHAR$):IF CHAR=5 THEN RETURN 15000 3935 IF CHAR=8 AND LENGTH>0 THEN IN$=LEFT$(IN$,LEN(IN$)-1):PRINT CHR$(29);"_ ";CHR$(29);CHR$(29);:LENGTH=LENGTH-1:GOTO 3925 3940 IF CHAR=13 THEN IN$=IN$+CHR$(32):IN=VAL(IN$):SN=0:PRINT " ";:RETURN 3945 IF LENGTH=SL AND CHAR<=SH) THEN PRINT CHAR$;"_";CHR$(29);:LENGTH=LENGTH+1:IN$=IN$+CHAR$ 3950 GOTO 3925 4050 TURN=1-TURN:IF TURN=0 THEN SECOND=HOPS:HOPS=FIRST:IN$=FIRST$:RETURN 4060 FIRST=HOPS:HOPS=SECOND:IN$=SECOND$:RETURN 4100 TI=200:GOSUB 500:PUT (XB,YB),FR0%,PSET:TI=300:GOSUB 500:IF SOUNDFLAG=0 THEN 4125 4120 FOR L9=10 TO 140 STEP 10:FOR L8=700 TO 1200 STEP L9:SOUND L8,.2:NEXT:FOR L8=1200 TO 700 STEP -L9:SOUND L8,.2:NEXT L8,L9 4125 TX=INT(RND*2)*7+14 4130 GET (XB+TX,YB+4)-(XB+TX+2,YB+5),TEMP% 4135 LINE (XB+TX,YB+4)-(XB+TX+2,YB+5),1,BF 4140 TI=500:GOSUB 500 4145 PUT (XB+TX,YB+4),TEMP%,PSET 4150 GOSUB 10000 4160 RETURN 7000 LIMIT=0:SPLASH=0:XL=X:YL=Y 7010 DELTAX=(MOVE>=2)-2*(MOVE=3):DELTAY=(MOVE<=1)-2*(MOVE=1) 7015 IF DIR$<>"" THEN JF=1 ELSE JF=0 7020 ON MOVE+1 GOSUB 7300,7400,7200,7100 7030 IF JF=0 OR SPLASH=0 THEN 7080 7035 TX=FBX:TY=FBY:GOSUB 700 7040 DEF SEG=ASMPROG:ON SGN(TX-FBX)+2 GOTO 7045,7055,7050 7045 FOR L9=TX TO FBX-1:CALL LEFT%:NEXT:GOTO 7055 7050 FOR L9=FBX TO TX-1:CALL RIGHT%:NEXT 7055 ON SGN(TY-FBY)+2 GOTO 7060,7070,7065 7060 FOR L9=TY TO FBY-1:CALL UP%:NEXT L9:GOTO 7070 7065 FOR L9=FBY TO TY-1:CALL DOWN%:NEXT L9 7070 TX=RX:TY=RY:ZE=255:FOR MOVE=0 TO 3 7071 DELTAX=(MOVE>=2)-2*(MOVE=3):DELTAY=(MOVE<=1)-2*(MOVE=1) 7072 RX=TX+DELTAX:RY=TY+DELTAY:GOSUB 410 7073 IF AN=0 THEN RX=TX:RY=TY:ON MOVE+1 GOSUB 7355,7455,7255,7155:MOVE=3 7074 NEXT 7075 RX=TX:RY=TY 7076 TI=400:GOSUB 500:PUT (XB,YB),FR0%,PSET:RETURN 7080 IF SPLASH=0 AND LIMIT=0 THEN RX=RX+DELTAX:RY=RY+DELTAY 7090 X=XL:Y=YL:RETURN 7100 PUT (XB,YB),FR1%,PSET:GOSUB 500 7107 GOSUB 12000 7110 GOSUB 50:IF SPLASH THEN 7140 7113 IF LIMIT THEN PLAY BOO$:RETURN 7115 IF FBX<14 AND XL>=4 THEN CALL LEFT%:FBX=FBX+1:XL=XL-1:XB=XB-40 7120 PLAY JR$ 7125 PUT (XB,YB),FR5%,PSET:GOSUB 500 7130 PUT (XB,YB),LIL%,PSET:PUT (XB+40,YB),FR1%,PSET 7135 XB=XB+40:XL=XL+1:RETURN 7140 PLAY JR$:PUT (XB,YB),FR21%,PSET:GOSUB 500 7145 SOUND 32767,PAUSE:PLAY SPLASH$:PUT (XB,YB),FR11%,PSET:PLAY SPLASH$:GOSUB 500 7150 ULX=XB+40:ULY=YB:PUT (XB,YB),LIL%,PSET:GOSUB 600:IF JF THEN RETURN 7153 GOSUB 500:GOSUB 500 7155 FOR SWIM=XB+53 TO XB+33 STEP -2:TI=100:GOSUB 500:PUT (SWIM,YB),FR12%,PSET:NEXT SWIM:GOSUB 500 7160 PUT (XB,YB),FR13%,PSET:TI=300:GOSUB 500 7165 ULX=XB+40:ULY=YB:GOSUB 600:PUT (XB,YB),FR3%,PSET:RETURN 7200 PUT (XB,YB),FR3%,PSET:GOSUB 500 7207 GOSUB 12000 7210 GOSUB 50:IF SPLASH THEN 7240 7213 IF LIMIT THEN PLAY BOO$:RETURN 7215 IF FBX>0 AND XL<=3 THEN CALL RIGHT%:FBX=FBX-1:XL=XL+1:XB=XB+40 7220 PLAY JL$ 7225 PUT (XB-40,YB),FR7%,PSET:GOSUB 500 7230 PUT (XB,YB),LIL%,PSET:PUT (XB-40,YB),FR3%,PSET 7235 XB=XB-40:XL=XL-1:RETURN 7240 PLAY JL$:PUT (XB-40,YB),FR23%,PSET:GOSUB 500 7245 SOUND 32767,PAUSE:PLAY SPLASH$:PUT (XB-40,YB),FR17%,PSET:PLAY SPLASH$:GOSUB 500 7250 ULX=XB-40:ULY=YB:GOSUB 600:PUT (XB,YB),LIL%,PSET:IF JF THEN RETURN 7253 GOSUB 500:GOSUB 500 7255 FOR SWIM=XB-40 TO XB-26 STEP 2:TI=100:GOSUB 500:PUT (SWIM,YB),FR18%,PSET:NEXT SWIM:GOSUB 500 7260 PUT (XB-40,YB),FR19%,PSET:TI=300:GOSUB 500 7265 ULX=XB-40:ULY=YB:GOSUB 600:PUT (XB,YB),FR1%,PSET:RETURN 7300 PUT (XB,YB),FR2%,PSET:GOSUB 500 7307 GOSUB 12000 7310 GOSUB 50:IF SPLASH THEN 7340 7313 IF LIMIT THEN PLAY BOO$:RETURN 7315 IF FBY>0 AND YL<=2 THEN CALL DOWN%:FBY=FBY-1:YL=YL+1:YB=YB+25 7320 PLAY JU$ 7325 PUT (XB,YB-25),FR6%,PSET:GOSUB 500 7330 PUT (XB,YB),LIL%,PSET:PUT (XB,YB-25),FR2%,PSET 7335 YB=YB-25:YL=YL-1:RETURN 7340 PLAY JU$:PUT (XB,YB-25),FR22%,PSET:GOSUB 500 7345 SOUND 32767,PAUSE:PLAY SPLASH$:PUT (XB,YB-25),FR14%,PSET:PLAY SPLASH$:GOSUB 500 7350 ULX=XB:ULY=YB-25:GOSUB 600:PUT (XB,YB),LIL%,PSET:IF JF THEN RETURN 7353 TI=600:GOSUB 500 7355 FOR SWIM=YB-20 TO YB-4:TI=50:GOSUB 500:PUT (XB,SWIM),FR15%,PSET:NEXT SWIM:GOSUB 500 7360 ULX=XB:ULY=YB-25:GOSUB 600:PUT (XB,YB),FR16%,PSET:TI=300:GOSUB 500 7365 PUT (XB,YB),FR0%,PSET:RETURN 7400 PUT (XB,YB),FR0%,PSET:GOSUB 500 7407 GOSUB 12000 7410 GOSUB 50:IF SPLASH THEN 7440 7413 IF LIMIT THEN PLAY BOO$:RETURN 7415 IF FBY<8 AND YL>=3 THEN CALL UP%:FBY=FBY+1:YL=YL-1:YB=YB-25 7420 PLAY JD$ 7425 PUT (XB,YB),FR4%,PSET:GOSUB 500 7430 PUT (XB,YB),LIL%,PSET:PUT (XB,YB+25),FR0%,PSET 7435 YB=YB+25:YL=YL+1:RETURN 7440 PLAY JD$:PUT (XB,YB),FR20%,PSET:GOSUB 500 7445 SOUND 32767,PAUSE:PLAY SPLASH$:PUT (XB,YB),FR8%,PSET:PLAY SPLASH$:GOSUB 500 7450 ULX=XB:ULY=YB+25:GOSUB 600:PUT (XB,YB),LIL%,PSET:IF JF THEN RETURN 7453 TI=600:GOSUB 500 7455 FOR SWIM=YB+39 TO YB+25 STEP -1:TI=50:GOSUB 500:PUT (XB,SWIM),FR9%,PSET:NEXT SWIM:GOSUB 500 7460 PUT (XB,YB),FR10%,PSET:TI=300:GOSUB 500 7465 ULX=XB:ULY=YB+25:GOSUB 600:PUT (XB,YB),FR2%,PSET:RETURN 10000 WHILE INKEY$<>"":WEND 10010 PUT (72,192),RET% 10020 GOSUB 30:A$=INKEY$:IF A$=CHR$(5) THEN IF LFLAG9 THEN RETURN 3000 ELSE RETURN 15000 10025 IF A$<>CHR$(13) THEN 10020 10030 PUT (72,192),RET%:RETURN 11000 CLS:SCREEN 0:LOCATE 10,7,0:PRINT "Insert the diskette labelled":LOCATE 12,7,0:PRINT "THE POND into the disk drive"; 11010 LOCATE 12,7,0:PRINT "THE POND into the disk drive"; 11020 IF NOT(JR) THEN LOCATE 14,7,0:PRINT "on the left. Close the door.":ELSE PRINT".":LOCATE 14,7,0:PRINT"Close the door." 11025 LOCATE 33,25,10:PRINT "Press ";CHR$(17);CHR$(196);CHR$(217);" to continue"; 11030 CH$=INKEY$:IF CH$="" THEN 11030 11035 SCREEN 1:IF INFLAG THEN RESUME 3000 11040 RESUME 12000 IF (COUNT=0 OR CYCLE=0) AND RX+DELTAX=EX AND RY+DELTAY=EY THEN CE=1:SOUND 32767,PAUSE:PLAY BOO$:RETURN 12020 12010 RETURN 12020 RETURN 12010 12100 CC=1-CC:COLOR 0,CC:RETURN 13000 LE=BL(B):XT=BX(B) 13005 XPOS=8*XT-17:YPOS=IY*8:ON LE GOSUB 13020,13030,13040,13050,13060 13010 RETURN 13020 PUT (XPOS,YPOS),BOX1%:RETURN 13030 PUT (XPOS,YPOS),BOX2%:RETURN 13040 PUT (XPOS,YPOS),BOX3%:RETURN 13050 PUT (XPOS,YPOS),BOX4%:RETURN 13060 PUT (XPOS,YPOS),BOX5%:RETURN 14300 DEF SEG:DIM LIL%(127),FR0%(127),FR1%(127),FR2%(127),FR3%(127),FR4%(252),FR5%(239),FR6%(252),FR7%(239),FR8%(252),FR9%(40),FR10%(172),FR11%(239),FR12%(61),FR13%(202),FR14%(252) 14310 DIM FR15%(50),FR16%(127),FR17%(239),FR18%(70),FR19%(239),FR20%(252),FR21%(239),FR22%(252),FR23%(239),BOX1%(65),BOX2%(86),BOX3%(107),BOX4%(128),BOX5%(149),THEPOND%(332),RET%(181),STOOL%(373) 14320 BLOAD "bigfile.img",VARPTR(LIL%(0)) 14380 RETURN 15000 START=INT(RND*4):CLS:COLOR 0:BOX=0:GOSUB 3000 15001 GOSUB 1500:FLAG9=0:GOSUB 2300:GOSUB 1000 15002 DEF SEG=&H40:SEED=PEEK(&H6C)+256*PEEK(&H6D):RANDOMIZE (SEED-32768!):INIT=0 15003 IF NUMPLAY=0 THEN WAVE=WAVE+1 15011 GOSUB 700:ZE=3:GOSUB 410:GOSUB 2000 15017 GOSUB 700:RX=RX+SGN(DELTAX)*BEGIN:RY=RY+SGN(DELTAY)*-(BEGIN=0):ZE=0:GOSUB 410 15045 GOSUB 700 16000 GOSUB 80:GOSUB 800 16001 GOSUB 350:LOCATE 20:IF GAME THEN PRINT:IF HOPS=0 THEN 16003 16002 PRINT:LOCATE ,11:PRINT "Press ";CHR$(24);", ";CHR$(25);", ";CHR$(27);", and ";CHR$(26):LOCATE ,12:PRINT "to move your frog." 16003 LOCATE 25,3:PRINT "Press F10 when you know the pattern."; 16004 IF GAME THEN GOSUB 450 16005 COUNT=0:IF INIT THEN 16010 16007 IF SOUNDFLAG THEN FOR L=10 TO 1 STEP -1:PUT (XB,YB),LIL%,PSET:FOR L9=150*L TO 100*L STEP -15:SOUND L9,.1:NEXT:PUT (XB,YB),FR0%,PSET:FOR L9=L9 TO 50*L STEP -15:SOUND L9,.1:NEXT:NEXT 16008 INIT=1 16010 GOSUB 250:IF MOVE>6 THEN MOVE=MOVE-3 16015 IF MOVE=6 THEN GOSUB 1300:IF TX=1 THEN GOSUB 10000:GOSUB 40:CLS:DEF SEG=ASMPROG:CALL REDRAW%:PUT (XB,YB),TEMP%,PSET:GOSUB 45:GOTO 16001 ELSE 16010 16020 IF MOVE=4 THEN 17000 16040 IF HOPS=0 AND GAME THEN 16010 16050 IF MOVE=5 THEN 16100 16060 GOSUB 7000:IF GAME=0 THEN 16010 16070 HOPS=HOPS-1:GOSUB 450:GOTO 16010 16100 IF GAME AND HOPS<10 THEN 16010 16105 GET (XB,YB)-(XB+39,YB+24),TEMP% 16107 DEF SEG=ASMPROG 16108 CALL BLINK% 16110 TI=700:GOSUB 500 16112 CALL REDRAW%:TI=20:GOSUB 500 16114 PUT (XB,YB),TEMP%,PSET 16115 IF GAME=0 THEN 16010 16120 HOPS=HOPS-10::GOSUB 450:GOTO 16010 17000 TX=FBX:TY=FBY:L=RX:L9=RY:GOSUB 700:IF TX<>FBX OR TY<>FBY THEN GOSUB 800:GOSUB 350:GOTO 17010 17002 RX=L:RY=L9:GOSUB 550:IF FLART=0 THEN PUT ((RX-TX+1)*40,(RY-TY+1)*25),LIL%,PSET 17010 PUT (XB,YB),FR0%,PSET:DIR$="":GOSUB 80:RESTORE 30080:GOSUB 100:DIR=B-1 17020 GOSUB 80:LOCATE 21,14:PRINT "Pattern: "; 17030 DIR$=DIR$+CHR$(DIR+24+(DIR=3)-(DIR=2)) 17100 LOCATE 21,23:PRINT DIR$;SPC(18-LEN(DIR$));:LOCATE 23,1:PRINT SPC(39);:RESTORE 30100:GOSUB 100:REP=B-1:DIR$=DIR$+CHR$(REP+49)+" " 17140 COUNT=COUNT+1:IF COUNT=6 THEN BOX=4 ELSE BOX=0 17145 LOCATE 21,23:PRINT DIR$;SPC(18-LEN(DIR$)); 17150 LOCATE 23,1:PRINT SPC(39);:RESTORE 30120:GOSUB 100:DIR=B-1:IF DIR<4 THEN 17030 17160 BOX=0:IF DIR=4 THEN 17200 17170 COUNT=COUNT-1:IF COUNT=0 THEN 17010 17175 DIR$=MID$(DIR$,1,COUNT*3):GOTO 17145 17200 GOSUB 80:PRINT:PRINT " Your pattern is: ";DIR$:COUNT2=1 17220 PRINT:PRINT " Press F10 to watch your frog jump.":CYCLE=0:CE=0:WHILE INKEY$<>"":WEND 17225 GOSUB 30:CHAR$=INKEY$:IF CHAR$="" THEN 17225 17226 IF CHAR$=CHR$(5) AND GAME=0 THEN 17300 17227 IF CHAR$=CHR$(5) AND GAME THEN 15000 17228 IF JR AND CHAR$="0" THEN 17240 17230 IF LEN(CHAR$)<>2 OR RIGHT$(CHAR$,1)<>"D" THEN 17225 17240 MOVE=ASC(MID$(DIR$,COUNT2*3-2,1))-24:MOVE=MOVE+(MOVE=3)-(MOVE=2):REPEAT=ASC(MID$(DIR$,COUNT2*3-1,1))-48 17245 LE=2:IY=19:XT=18+COUNT2*3:GOSUB 13005 17250 GOSUB 7000:IF SPLASH OR LIMIT THEN GOSUB 10000:GOTO 17275 17251 GOSUB 30:CHAR$=INKEY$:IF CHAR$=CHR$(5) THEN 17226 17252 IF CE=0 THEN 17255 17253 GOSUB 80:LOCATE 21,14-LEN(DIR$)/2:PRINT "Your pattern: ";DIR$:LOCATE 23,10:PRINT "is too long to repeat.":SPLASH=1:GOSUB 10000:GOTO 17275 17255 IF FBX+X-1=EX AND FBY+Y-1=EY THEN 18000 17260 REPEAT=REPEAT-1:IF REPEAT THEN 17250 17265 GOSUB 13005 17270 COUNT2=COUNT2+1:IF COUNT2>COUNT THEN COUNT2=1:CYCLE=1 17273 GOTO 17240 17275 IF GAME THEN 17400 17300 DIR$="":GOSUB 80:RESTORE 30140:LOCATE 21,6:PRINT "Do you want the same problem?":GOSUB 100:IF B=1 THEN GOSUB 570:PUT (XB,YB),FR0%,PSET:GOSUB 80:GOTO 16001 17305 START=INT(RND*4) 17310 CLS:LOCATE 9,7:GOSUB 220 17312 PRINT "Do you you want to try another":LOCATE 11,18-((LEN(NME$)-1/2)/2) 17313 PRINT "one of ";:L=1:IF LEVEL>1 THEN PRINT "the ";:L=5 17314 PRINT MID$(NME$,L);"?":PUT (144,33),FR0%:GOSUB 230 17315 BLG=2:IY=12:NB=2:RESTORE 30150:GOSUB 120:IF B=1 THEN START=INT(RND*4):GOTO 15001 17320 GOTO 15000 17400 GOSUB 80:HOPS=(HOPS-5)*-(HOPS>5):IF LIMIT THEN LOCATE ,8:PRINT "OOPS! You didn't make it." 17405 IF HOPS=0 THEN 17450 17407 IF SPLASH THEN 17420 17410 PRINT:LOCATE ,12:PRINT " Try it again...":GOSUB 10000 17420 GOSUB 80:GOTO 16001 17450 PRINT:LOCATE ,11:PRINT "You're out of moves.":GOSUB 10000:IF NUMPLAY=0 THEN TR1=0:GOTO 18013 17500 DONE=DONE+TURN+1:IF TURN=0 THEN TR1=WAVE+1:LAST1=LEVEL 17505 IF TURN=1 THEN TR2=WAVE+1:LAST2=LEVEL 17510 IF DONE=3 THEN 18600 17520 GOSUB 4050:GOTO 18220 18000 IF GAME=0 THEN GOSUB 80:PRINT :LOCATE ,16:PRINT"Whoopie!!!":BGL=2:GOTO 18100 18005 IF NUMPLAY THEN 18200 18010 GOSUB 80:IF WAVE<3 THEN PRINT:LOCATE ,15:PRINT"You made it!":GOTO 18100 18011 TR1=0:IF LEVEL=5 THEN PRINT:LOCATE ,15:PRINT "You made it!":TR1=4:GOSUB 4100:GOTO 18013 18012 GOTO 18020 18013 FIRST$="You":LAST1=LEVEL:FIRST=HOPS:COUNT=0:DONE=0:IF TR1<4 THEN TR1=WAVE:DONE=3 18014 GOTO 18603 18020 LOCATE 20,11:PRINT "You made it through":LOCATE 21,20-LEN(NME$)/2,1:PRINT NME$;"!" 18030 LEVEL=LEVEL+1:GOSUB 750:LEVEL=LEVEL-1:LOCATE 23,15-LEN(NME$)/2:PRINT NME$;" are next." 18100 GOSUB 4100 18110 IF GAME=0 THEN GOTO 17300 18120 IF WAVE<3 THEN START=INT(RND*4):GOTO 15001 18130 IF LEVEL=5 THEN 19000 18135 WAVE=0:LEVEL=LEVEL+1:HOPS=HOPS+HPL:GOSUB 750:START=INT(RND*4):GOTO 15001 18200 GOSUB 80:PRINT:LOCATE ,15:PRINT "You made it!":GOSUB 4100 18210 IF DONE THEN 18230 18220 DONECHK=DONECHK+1:IF DONECHK=2 THEN 18230 18225 IF DONE=0 THEN GOSUB 4050 18226 START=INT(RND*4):GOTO 15001 18230 DONECHK=0:WAVE=WAVE+1:IF WAVE<3 THEN 18225 18240 IF LEVEL=5 THEN 18500 18250 WAVE=0:LEVEL=LEVEL+1:HOPS=HOPS+HPL:IF DONE=0 OR DONE=2 THEN FIRST=FIRST+HPL 18260 IF DONE=0 OR DONE=1 THEN SECOND=SECOND+HPL 18270 GOSUB 750:GOSUB 80:LOCATE 22,15-LEN(NME$)/2:PRINT NME$;" are next.":GOSUB 10000:GOTO 18225 18500 IF LAST1=-1 THEN LAST1=5:TR1=4 18505 IF LAST2=-1 THEN LAST2=5:TR2=4 18600 GOSUB 4050:COUNT=1 18603 CLS:LOCATE 3,2:PRINT"Starting at ";NME2$;;":" 18605 X=LAST1*3+TR1+FIRST:Y=LAST2*3+TR2+SECOND:NME2$=FIRST$ 18700 PRINT:PRINT:PRINT:LOCATE ,8:PRINT FIRST$;" made it ";:LEVEL=LAST1:GOSUB 750:IF TR1<4 THEN 18730 18710 PRINT"through":LOCATE ,8:PRINT "all of ";NME$:LOCATE ,8:PRINT "with";FIRST;"move";:IF FIRST<>1 THEN PRINT"s"; 18720 PRINT " left.":GOTO 18750 18730 PRINT "to";TR1;"of":LOCATE ,8:PRINT NME$;"." 18750 IF COUNT THEN COUNT=0:FIRST$=SECOND$:FIRST=SECOND:TR1=TR2:LAST1=LAST2:GOTO 18700 18800 IF DONE=3 THEN GOSUB 1600:GOSUB 10000:GOTO 15000 18803 IF NUMPLAY=0 THEN 18900 18805 PRINT:PRINT:PRINT:LOCATE ,8:IF X=Y THEN PRINT "It's a tie!":GOTO 18900 18810 IF X>Y THEN PRINT NME2$;:GOTO 18830 18820 PRINT SECOND$; 18830 PRINT " is the winner!" 18900 GOSUB 1600:GOSUB 10000 19000 CLS:WHILE INKEY$<>"":WEND:PUT (72,192),RET% 19010 PUT (132,68),STOOL%:CO=1:L1=0 19020 SOUNDBASE=INT(RND*700+50):SX=INT(RND*2)*64:FOR L=SX TO -64*(SX=0) STEP -SGN(SX-2)*2:LINE (L*2+L1+2,L)-(318-L*2+L1,190-L),CO,B 19022 SOUND L*RND*20+SOUNDBASE,ABS(SOUNDFLAG)/5:NEXT 19025 GOSUB 30:A$=INKEY$:IF A$=CHR$(13) OR A$=CHR$(5) THEN 19050 19030 SX=INT(RND*2)*64:FOR L=SX TO -64*(SX=0) STEP -SGN(SX-2)*2:LINE (L*2+L1+2,L)-(318-L*2+L1,190-L),0,B 19032 SOUND L*RND*20+SOUNDBASE,ABS(SOUNDFLAG)/5:NEXT 19035 GOSUB 30:A$=INKEY$:IF A$=CHR$(13) OR A$=CHR$(5) THEN 19050 19040 L1=NOT L1:CO=CO+1+3*(CO=3):GOTO 19020 19050 GOTO 15000 19999 GOTO 15000 29500 SCREEN 9:DEF SEG=&HF000:JR=PEEK(&HFFFE)=&HFD:DIM TEMP%(127):ON ERROR GOTO 11000:GOSUB 14300 29620 BASE%=&H134:UP%=&H136:DOWN%=&H166:LEFT%=&H196:RIGHT%=&H1C0:REDRAW%=&H1EA:BLINK%=&H202:INITIALIZE%=&H20A:SMLIL%=&H26D:CC=1 29625 HPL=35:DEF SEG=0:ASMPROG=INT((((PEEK(&H510)+256*PEEK(&H511))*16+VARPTR(#1))/16)+1) 29660 DEF SEG=ASMPROG:BLOAD "s-screen.bin",0:GOSUB 1700 29999 ON ERROR GOTO 0:CLS:COLOR ,CC:GOTO 15000 30000 DATA 4,21,1,"" 30010 DATA 14,1,18,2,22,3,26,4 30020 DATA 6,21,3,Where would you like to practice? 30030 DATA 10,1,14,2,18,3,22,4,26,5,30,6 30040 DATA 6,21,5,Where would you like to start? 30050 DATA 10,1,14,2,18,3,22,4,26,5,30,6 30060 DATA 2,10,7,How many players are there? 30070 DATA 17,1,23,2 30080 DATA 4,21,10,Enter your first move. 30090 DATA 13,˜,18,™,23,›,28,š 30100 DATA 5,21,2,"How many? " 30110 DATA 10,1,15,2,20,3,25,4,30,5 30120 DATA 6,21,2,Which move? 30130 DATA 7,˜,11,™,15,›,19,š,24,Go!,30,Erase 30140 DATA 2,21,1,"" 30150 DATA 15,Yes,25,No 31110 DATA Farmer Jane's Ponds,Billy Bob's Ponds,The Puzzle Ponds,The Lost Ponds,The Maze Ponds,The Twister Ponds