1 MAXLEV=55›3 GOSUB 10500›4 DIM CH$(1),SCREEN$(320),SAVSCRN$(320),FILNAM$(14),TEN$(1),WON$(1),LINE$(20),BEGSCR$(320)›5 DIM RM$(3),RP$(3),RT$(3),NAM$(3)›6 GOSUB 900›7 TRAP 7:GRAPHICS 1:POKE 16,64:POKE 53774,64:POKE 752,1:POKE 756,224:? :? " ENTER NAME (3 INITIALS)";›8 INPUT NAM$›10 TRAP 10:GRAPHICS 1:POKE 16,64:POKE 53774,64:POKE 752,1:POKE 756,224›11 ? :? " ENTER LEVEL";:INPUT LEVEL›12 IF LEVEL<1 OR LEVEL>MAXLEV THEN ? "ENTER 1-";MAXLEV;". PRESS าลิีาฮ TO CONTINUE";:TRAP 10:INPUT X:GOTO 10›13 GOSUB 10800:IF STAT=2 THEN GOTO 10›16 POKE 18,0:POKE 19,0:POKE 20,0›17 PUSHES=0:MOVES=0:PLACED=0›18 BEGSCR$=SCREEN$:SX=XPOS:SY=YPOS:SB=BOXES:SAVSCRN$=SCREEN$:PITCH=30:OLDX=XPOS:OLDY=YPOS:PUSH=-1›19 POKE 764,255:GOSUB 10740:? :? :? :? :POKE 756,CHSET/256›20 SETCOLOR 0,3,2:SETCOLOR 1,13,4:SETCOLOR 2,8,2:SETCOLOR 3,2,6:SETCOLOR 4,0,0›30 FOR I=1 TO 16›40 POSITION 0,I+1›50 ? #6;SCREEN$((I-1)*20+1,(I*20));›60 NEXT I›80 ? " ";LEVEL;" ";:? :? ›100 POKE 77,0:POSITION XPOS-1,YPOS+1:? #6;"แ";:IF PEEK(764)=10 THEN GOSUB 10900:GOTO 19›101 IF PEEK(764)=28 THEN GOTO 7›102 GOSUB 10600:POSITION 6,19:? #6;"0";HOURS;":";:IF MINS<10 THEN ? #6;"0";MINS;":";:GOTO 104›103 ? #6;MINS;":";›104 IF SECS<10 THEN ? #6;"0";SECS;:GOTO 106›105 ? #6;SECS;›106 IF PLACED=BOXES THEN GOSUB 1080:OLDLEV=LEVEL:LEVEL=LEVEL+1:GOTO 13›107 IF PEEK(53279)=6 THEN SCREEN$=BEGSCR$:XPOS=SX:YPOS=SY:BOXES=SB:GOTO 17›108 ST=STICK(0):IF ST=11 OR ST=7 OR ST=14 OR ST=13 THEN SAVSCRN$=SCREEN$:OLDX=XPOS:OLDY=YPOS›109 SCRPOS=(YPOS-1)*20+XPOS:CH$=SCREEN$(SCRPOS,SCRPOS)›110 IF ST=11 THEN GOSUB 500›120 IF ST=7 THEN GOSUB 600›130 IF ST=14 THEN GOSUB 700›140 IF ST=13 THEN GOSUB 800›150 IF STRIG(0)=1 THEN GOTO 100›155 SCREEN$=SAVSCRN$:XPOS=OLDX:YPOS=OLDY›160 FOR I=1 TO 16:POSITION 0,I+1:? #6;SCREEN$((I-1)*20+1,(I*20));:NEXT I›161 IF PUSH=-1 THEN GOTO 170›162 IF PUSH=1 THEN PUSHES=PUSHES-1›164 MOVES=MOVES-1:GOSUB 10740›165 PUSH=-1›170 GOTO 100›500 IF SCREEN$(SCRPOS-1,SCRPOS-1)="B" THEN RETURN ›505 IF SCREEN$(SCRPOS-1,SCRPOS-1)=" " THEN GOTO 515›510 IF SCREEN$(SCRPOS-1,SCRPOS-1)="ฤ" THEN SCREEN$(SCRPOS-1,SCRPOS-1)="๙":GOTO 515›512 GOTO 520›515 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›517 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›518 POSITION XPOS-1,YPOS+1:? #6;"ๅ";:FOR I=1 TO 5:NEXT I:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);›519 POSITION XPOS-1-1,YPOS+1:? #6;"ๅ";:POSITION XPOS-1-1,YPOS+1:? #6;"แ";:XPOS=XPOS-1:GOSUB 1010:PUSH=0:RETURN ›520 IF SCREEN$(SCRPOS-2,SCRPOS-2)="B" THEN RETURN ›525 IF SCREEN$(SCRPOS-2,SCRPOS-2)="c" THEN RETURN ›527 IF SCREEN$(SCRPOS-2,SCRPOS-2)="z" THEN RETURN ›530 IF SCREEN$(SCRPOS-2,SCRPOS-2)="ฤ" THEN SCREEN$(SCRPOS-2,SCRPOS-2)="z":PLACED=PLACED+1›535 IF SCREEN$(SCRPOS-2,SCRPOS-2)=" " THEN SCREEN$(SCRPOS-2,SCRPOS-2)="c"›550 IF SCREEN$(SCRPOS-1,SCRPOS-1)="z" THEN SCREEN$(SCRPOS-1,SCRPOS-1)="๙":PLACED=PLACED-1:GOTO 560›555 SCREEN$(SCRPOS-1,SCRPOS-1)="แ"›560 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›570 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›575 POSITION XPOS-1,YPOS+1:? #6;"ๅ";:GOSUB 1000›577 POSITION XPOS-1-2,YPOS+1:? #6;"fg";›579 IF SCREEN$(SCRPOS,SCRPOS)="c" THEN POSITION XPOS-1,YPOS+1:? #6;"ศ";:GOTO 582›580 POSITION XPOS-1,YPOS+1:? #6;"้";›582 GOSUB 1000:POSITION XPOS-2-1,YPOS+1:? #6;"cๅ";SCREEN$(SCRPOS,SCRPOS);:GOSUB 1000›584 POSITION XPOS-1-1,YPOS+1:? #6;"แ";›585 PUSH=1:XPOS=XPOS-1:GOSUB 10700:RETURN ›600 IF SCREEN$(SCRPOS+1,SCRPOS+1)="B" THEN RETURN ›605 IF SCREEN$(SCRPOS+1,SCRPOS+1)=" " THEN GOTO 615›610 IF SCREEN$(SCRPOS+1,SCRPOS+1)="ฤ" THEN SCREEN$(SCRPOS+1,SCRPOS+1)="๙":GOTO 615›612 GOTO 620›615 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›617 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›618 POSITION XPOS-1,YPOS+1:? #6;"๊";:FOR I=1 TO 5:NEXT I:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);›619 POSITION XPOS+1-1,YPOS+1:? #6;"๊";:POSITION XPOS+1-1,YPOS+1:? #6;"แ";:XPOS=XPOS+1:GOSUB 1010:PUSH=0:RETURN ›620 IF SCREEN$(SCRPOS+2,SCRPOS+2)="B" THEN RETURN ›625 IF SCREEN$(SCRPOS+2,SCRPOS+2)="c" THEN RETURN ›627 IF SCREEN$(SCRPOS+2,SCRPOS+2)="z" THEN RETURN ›630 IF SCREEN$(SCRPOS+2,SCRPOS+2)="ฤ" THEN SCREEN$(SCRPOS+2,SCRPOS+2)="z":PLACED=PLACED+1›635 IF SCREEN$(SCRPOS+2,SCRPOS+2)=" " THEN SCREEN$(SCRPOS+2,SCRPOS+2)="c"›650 IF SCREEN$(SCRPOS+1,SCRPOS+1)="z" THEN SCREEN$(SCRPOS+1,SCRPOS+1)="๙":PLACED=PLACED-1:GOTO 660›655 SCREEN$(SCRPOS+1,SCRPOS+1)="แ"›660 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›670 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›675 POSITION XPOS-1,YPOS+1:? #6;"๊";:GOSUB 1000›677 IF SCREEN$(SCRPOS,SCRPOS)="c" THEN POSITION XPOS-1,YPOS+1:? #6;"ฬ";:GOTO 681›680 POSITION XPOS-1,YPOS+1:? #6;"๋";›681 POSITION XPOS+1-1,YPOS+1:? #6;"mn";›682 GOSUB 1000:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);"๊c";:GOSUB 1000›684 POSITION XPOS+1-1,YPOS+1:? #6;"แ";›685 PUSH=1:XPOS=XPOS+1:GOSUB 10700:RETURN ›700 IF SCREEN$(SCRPOS-20,SCRPOS-20)="B" THEN RETURN ›705 IF SCREEN$(SCRPOS-20,SCRPOS-20)=" " THEN GOTO 715›710 IF SCREEN$(SCRPOS-20,SCRPOS-20)="ฤ" THEN SCREEN$(SCRPOS-20,SCRPOS-20)="๙":GOTO 715›712 GOTO 720›715 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›717 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›718 POSITION XPOS-1,YPOS+1:? #6;"๏";:FOR I=1 TO 5:NEXT I:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);›719 POSITION XPOS-1,YPOS-1+1:? #6;"๏";:POSITION XPOS-1,YPOS-1+1:? #6;"แ";:YPOS=YPOS-1:GOSUB 1010:PUSH=0:RETURN ›720 IF SCREEN$(SCRPOS-40,SCRPOS-40)="B" THEN RETURN ›725 IF SCREEN$(SCRPOS-40,SCRPOS-40)="c" THEN RETURN ›727 IF SCREEN$(SCRPOS-40,SCRPOS-40)="z" THEN RETURN ›730 IF SCREEN$(SCRPOS-40,SCRPOS-40)="ฤ" THEN SCREEN$(SCRPOS-40,SCRPOS-40)="z":PLACED=PLACED+1›735 IF SCREEN$(SCRPOS-40,SCRPOS-40)=" " THEN SCREEN$(SCRPOS-40,SCRPOS-40)="c"›750 IF SCREEN$(SCRPOS-20,SCRPOS-20)="z" THEN SCREEN$(SCRPOS-20,SCRPOS-20)="๙":PLACED=PLACED-1:GOTO 760›755 SCREEN$(SCRPOS-20,SCRPOS-20)="แ"›760 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›770 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›775 POSITION XPOS-1,YPOS+1:? #6;"๏";:GOSUB 1000›777 IF SCREEN$(SCRPOS,SCRPOS)="c" THEN POSITION XPOS-1,YPOS+1:? #6;"ั";:GOTO 781›780 POSITION XPOS-1,YPOS+1:? #6;"๐";›781 POSITION XPOS-1,YPOS-1+1:? #6;"r";:POSITION XPOS-1,YPOS-2+1:? #6;"s";›782 GOSUB 1000:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);:POSITION XPOS-1,YPOS-1+1:? #6;"๏";›783 POSITION XPOS-1,YPOS-2+1:? #6;"c";:GOSUB 1000›784 POSITION XPOS-1,YPOS-1+1:? #6;"แ";›785 PUSH=1:YPOS=YPOS-1:GOSUB 10700:RETURN ›800 IF SCREEN$(SCRPOS+20,SCRPOS+20)="B" THEN RETURN ›805 IF SCREEN$(SCRPOS+20,SCRPOS+20)=" " THEN GOTO 815›810 IF SCREEN$(SCRPOS+20,SCRPOS+20)="ฤ" THEN SCREEN$(SCRPOS+20,SCRPOS+20)="๙":GOTO 815›812 GOTO 820›815 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›817 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›818 POSITION XPOS-1,YPOS+1:? #6;"๔";:FOR I=1 TO 5:NEXT I:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);›819 POSITION XPOS-1,YPOS+1+1:? #6;"๔";:POSITION XPOS-1,YPOS+1+1:? #6;"แ";:YPOS=YPOS+1:GOSUB 1010:PUSH=0:RETURN ›820 IF SCREEN$(SCRPOS+40,SCRPOS+40)="B" THEN RETURN ›825 IF SCREEN$(SCRPOS+40,SCRPOS+40)="c" THEN RETURN ›827 IF SCREEN$(SCRPOS+40,SCRPOS+40)="z" THEN RETURN ›830 IF SCREEN$(SCRPOS+40,SCRPOS+40)="ฤ" THEN SCREEN$(SCRPOS+40,SCRPOS+40)="z":PLACED=PLACED+1›835 IF SCREEN$(SCRPOS+40,SCRPOS+40)=" " THEN SCREEN$(SCRPOS+40,SCRPOS+40)="c"›850 IF SCREEN$(SCRPOS+20,SCRPOS+20)="z" THEN SCREEN$(SCRPOS+20,SCRPOS+20)="๙":PLACED=PLACED-1:GOTO 860›855 SCREEN$(SCRPOS+20,SCRPOS+20)="แ"›860 IF SCREEN$(SCRPOS,SCRPOS)="๙" THEN SCREEN$(SCRPOS,SCRPOS)="ฤ"›870 IF SCREEN$(SCRPOS,SCRPOS)="แ" THEN SCREEN$(SCRPOS,SCRPOS)=" "›875 POSITION XPOS-1,YPOS+1:? #6;"๔";:GOSUB 1000›877 IF SCREEN$(SCRPOS,SCRPOS)="c" THEN POSITION XPOS-1,YPOS+1:? #6;"ึ";:GOTO 881›880 POSITION XPOS-1,YPOS+1:? #6;"๕";›881 POSITION XPOS-1,YPOS+1+1:? #6;"w";:POSITION XPOS-1,YPOS+2+1:? #6;"x";›882 GOSUB 1000:POSITION XPOS-1,YPOS+1:? #6;SCREEN$(SCRPOS,SCRPOS);:POSITION XPOS-1,YPOS+1+1:? #6;"๔";›883 POSITION XPOS-1,YPOS+2+1:? #6;"c";:GOSUB 1000›884 POSITION XPOS-1,YPOS+1+1:? #6;"แ";›885 PUSH=1:YPOS=YPOS+1:GOSUB 10700:RETURN ›900 POKE 106,PEEK(106)-8:GRAPHICS 0:CHSET=PEEK(106)*256›902 IF PEEK(CHSET+(32+1)*8)=24 THEN RETURN ›905 FOR I=0 TO 511:POKE CHSET+I,PEEK(57344+I):NEXT I›910 GRAPHICS 1:POKE 756,CHSET/256›915 FOR I=1 TO 26›917 FOR J=0 TO 7›919 READ A:POKE CHSET+((I+32)*8)+J,A›921 NEXT J›922 NEXT I›950 DATA 24,88,48,30,16,16,40,36›952 DATA 221,221,221,0,119,119,119,0›954 DATA 0,126,102,90,90,102,126,0›956 DATA 0,24,36,66,66,36,24,0›958 DATA 48,48,144,112,8,20,20,18›960 DATA 0,7,6,5,5,6,7,0›962 DATA 3,227,105,167,160,96,224,0›964 DATA 0,24,36,66,194,164,152,128›966 DATA 0,0,0,0,128,128,128,128›968 DATA 12,12,9,14,16,40,40,72›970 DATA 0,0,0,0,1,1,1,1›972 DATA 0,29,36,66,67,37,25,1›974 DATA 192,199,150,229,5,6,7,0›976 DATA 0,224,96,160,160,96,224,0›978 DATA 84,84,56,16,24,32,32,0›980 DATA 28,0,0,0,0,0,0,0›982 DATA 28,24,36,66,66,36,24,0›984 DATA 90,102,126,0,42,42,28,8›986 DATA 0,0,0,0,0,126,102,90›988 DATA 0,32,32,24,16,56,86,86›990 DATA 0,0,0,0,0,0,0,28›992 DATA 0,24,36,66,66,36,24,28›994 DATA 8,28,42,42,0,126,102,90›996 DATA 90,102,126,0,0,0,0,0›997 DATA 24,88,48,30,16,16,40,36›998 DATA 0,126,102,90,90,102,126,0›999 RETURN ›1000 SOUND 0,PITCH+50,10,8:FOR W=1 TO 2:NEXT W:PITCH=30-PITCH:SOUND 0,0,0,0:RETURN ›1010 SOUND 0,50,10,8:SOUND 0,0,0,0:MOVES=MOVES+1:GOSUB 10750:RETURN ›1080 FOR I=1 TO 80:A=INT(RND(0)*256):SOUND 0,A,10,8:SETCOLOR 1,A,A/16:NEXT I:SOUND 0,0,0,0:SETCOLOR 1,13,4›1085 TIME=HOURS*60*60+MINS*60+SECS›1090 IF MOVES6 THEN GOTO 10530›10540 RETURN ›10600 TIME=INT((PEEK(18)*256*256+PEEK(19)*256+PEEK(20))/60)›10605 HOURS=INT(TIME/60/60):TIME=TIME-HOURS*60*60›10610 MINS=INT(TIME/60):TIME=TIME-MINS*60›10615 SECS=INT(TIME)›10620 RETURN ›10700 MOVES=MOVES+1:PUSHES=PUSHES+1:GOSUB 10740:RETURN ›10740 POSITION 15,19:IF PUSHES<10 THEN ? #6;"000";PUSHES;:GOTO 10750›10742 IF PUSHES<100 THEN ? #6;"00";PUSHES;:GOTO 10750›10744 IF PUSHES<1000 THEN ? #6;"0";PUSHES;:GOTO 10750›10746 ? #6;PUSHES;›10750 POSITION 1,19:IF MOVES<10 THEN ? #6;"000";MOVES;:GOTO 10760›10752 IF MOVES<100 THEN ? #6;"00";MOVES;:GOTO 10760›10754 IF MOVES<1000 THEN ? #6;"0";MOVES;:GOTO 10760›10756 ? #6;MOVES;›10760 RETURN ›10800 IF LEVEL>MAXLEV THEN STAT=2:GOTO 10860›10809 STAT=1:TEN$=CHR$(INT(LEVEL/10)+48):WON$=CHR$(LEVEL-INT(LEVEL/10)*10+48)›10810 FILNAM$(1,8)="D:SCREEN":FILNAM$(9,9)=TEN$:FILNAM$(10,10)=WON$:FILNAM$(11,14)=".DAT"›10820 TRAP 10850:OPEN #1,4,0,FILNAM$›10825 FOR I=1 TO 16:INPUT #1;LINE$:SCREEN$((I-1)*20+1,I*20)=LINE$:NEXT I:INPUT #1;XPOS:INPUT #1;YPOS›10827 INPUT #1;BOXES:INPUT #1;RM:INPUT #1;RM$:INPUT #1;RP:INPUT #1;RP$:INPUT #1;RT:INPUT #1;RT$›10828 XP=XPOS:YP=YPOS:BO=BOXES›10830 CLOSE #1:GOTO 10860›10850 CLOSE #1:? "DISK ERROR. PRESS าลิีาฮ TO CONTINUE";:TRAP 40000:STAT=2:TRAP 10:INPUT X›10860 RETURN ›10900 T1=PEEK(20):T2=PEEK(19):T3=PEEK(18)›10905 GRAPHICS 2+16:POKE 16,64:POKE 53774,64:POKE 752,1:POKE 756,224›10910 POSITION 0,0:? #6;" soko-ban records";:POSITION 4,1:? #6;"for level ";:? #6;CHR$(INT(LEVEL/10)+48);›10911 ? #6;CHR$(LEVEL-INT(LEVEL/10)*10+48);:POSITION 0,4:? #6;"ํ๏๖ๅ๓   ๔้ํๅ  ๐๕๓่ๅ๓";›10912 POSITION 1,5:IF RM<10 THEN ? #6;"000";RM;:GOTO 10920›10914 IF RM<100 THEN ? #6;"00";RM;:GOTO 10920›10916 IF RM<1000 THEN ? #6;"0";RM;:GOTO 10920›10918 ? #6;RM;›10920 TIME=RT:GOSUB 10605›10925 POSITION 6,5:? #6;"0";HOURS;":";:IF MINS<10 THEN ? #6;"0";MINS;":";:GOTO 10935›10930 ? #6;MINS;":";›10935 IF SECS<10 THEN ? #6;"0";SECS;:GOTO 10945›10940 ? #6;SECS;›10945 POSITION 15,5:IF RP<10 THEN ? #6;"000";RP;:GOTO 10960›10948 IF RP<100 THEN ? #6;"00";RP;:GOTO 10960›10950 IF RP<1000 THEN ? #6;"0";RP;:GOTO 10960›10955 ? #6;RP;›10960 POSITION 2,6:FOR I=1 TO 3:? #6;CHR$(ASC(RM$(I,I))+128);:NEXT I›10962 POSITION 8,6:FOR I=1 TO 3:? #6;CHR$(ASC(RT$(I,I))+128);:NEXT I›10964 POSITION 15,6:FOR I=1 TO 3:? #6;CHR$(ASC(RP$(I,I))+128);:NEXT I›10970 POSITION 3,10:? #6;"press trigger";›10980 IF STRIG(0)=1 THEN GOTO 10980›10990 GRAPHICS 1:POKE 16,64:POKE 53774,64:POKE 752,1:POKE 18,T3:POKE 19,T2:POKE 20,T1:RETURN ›