image of READY prompt

Wang2200.org

Listing of file='WORM' on disk='vmedia/games_vol_3.wvd.zip'

# Sector 296, program filename = 'WORM'
0000 DEFFN'0"\ACT";HEX(22);"WORM";HEX(22);":\85<S>T()";HEX(22);"WORM";HEX(22);
     ":\A0\D20C);";HEX(22);"WORM saved on disk.";HEX(22);";\CD70);";HEX(0D)
0010 REM %* Worm Farm Game *#* Written by RAS *#* Created 17-Feb-82 *
   : REM Original Idea taken from UNIX game of same name
0020 REM %      *---------------- Mods --------------------*
0030 REM \A0\A0\CE\EF\AE  \D7\E8\E5\EE\A0\A0\A0\A0  \D7\E8\EF  \CE\EF\F4\E1\F4
     \E9\EF\EE
0040 REM [001]  17/02/82  RAS  Written
0050 REM [002]  18/02/82  RAS  Best so far code added
0060 REM [003]  23/02/82  RAS  Name changed to "WORM"
0070 REM [004]  23/02/82  RAS  Speedup as game progress.
0080 REM [005]  08/03/82  RAS  Program protect (against illicit hackers)
0090 REM [006]  05/03/86  MPB  Unprotected.  Direction keys added.  To GAMES
1000 REM %Best player so far
   : REM *MUST* be line 1000
   : REM *MUST* be in this format
   : DATA 000202,"                              "
3010 DIM C(2),D$1,F,F(2),F$(1560)2,H,H(2),L,L1,T,U,U$1,U1,U1$2,U2$1,U9$80,W$(1
     560)2
3020 REM C() = Current position of cursor
3030 REM D$ = Direction entered
3040 REM F = Value of food
3050 REM F() = Position of food on screen
3060 REM F$() = Unused screen positions (for creating food)
3070 REM H = Position of head of worm in W$()
3080 REM H() = Next position of worm head
3090 REM L = Current (actual) length of worm
3100 REM T = Position of tail of worm in W$()
3110 REM L1 = Length that worm is supposed to be
   : REM      differs from L only after eating food
3120 REM U vars = Temps
3130 REM W$() = Each element is a segment of worm
   : REM        packed as PACK(##)W$(s)FROM row, column
4000 REM %.....   Image Statements   .....
4010 %                                   \C2\E1\E3\EB\E7\F2\EF\F5\EE\E4
4020 %          You  are  a  farmer  of a rather unusual sort.  Your farm prod
     uces
4030 %     worms.   Understandably  there  is  not  much competition in this a
     rea,
4040 %     however worm farmers are a proud lot and this keeps the standards h
     igh.
4050 %     The  International Annual Worm Farmers Convention is coming up soon
      and
4060 %     one of the star attractions is the Mister Wormy-Verse competition.
      The
4070 %     winning entry is the world's    l o n g e s t   worm.  You have ent
     ered
4080 %     this competition.  Your task now is to grow your worm.
4090 %                                  \C9\EE\F3\F4\F2\F5\E3\F4\E9\EF\EE\F3
4100 %          The  worm  appears  as  an  '@' (the head) followed by a strin
     g of
4110 %     'ooooooo's (the body).  Its movement is directed by the following k
     eys:
4120 %     8 - up, 2 - down, 4 - left, 6 right.  Periodically a digit will app
     ear.
4130 %     This  is  the worm's food.  When the worm runs through (eats) the d
     igit
4140 %     he grows by the size of the digit.  However if he tries to eat the
     wall
4150 %     or himself he dies (and is pickled for display).
4160 %                            Press RETURN to Continue
4180 %                        Your worm is ##### segments long
5000 REM %.....   Start up   .....
5010 REM %Instructions
   : PRINT HEX(0306);TAB(28);HEX(020400020E);" * W O R M    F A R M * ";HEX(02
     0402000F)
   : PRINT
   : PRINTUSING 4010
   : PRINT
   : PRINTUSING 4020
   : PRINTUSING 4030
   : PRINTUSING 4040
   : PRINTUSING 4050
   : PRINTUSING 4060
   : PRINTUSING 4070
   : PRINTUSING 4080
   : PRINT
   : PRINTUSING 4090
   : PRINT
   : PRINTUSING 4100
   : PRINTUSING 4110
   : PRINTUSING 4120
   : PRINTUSING 4130
   : PRINTUSING 4140
   : PRINTUSING 4150
   : PRINT
   : PRINT
   : PRINT HEX(020404000E);
   : PRINTUSING 4160
   : PRINT HEX(020402000F);
5020 KEYIN U$,5020,5020
   : IF U$=HEX(1F)OR U$=HEX(81)THEN LOAD RUN "Games"
   : IF U$<>HEX(0D)THEN 5020
5030 REM %Initialise Screen
   : PRINT AT(9,20);BOX(-5,-40);AT(2,0,);HEX(020400020E);
   : SELECT PRINT 705(255)
   : PRINT AT(2,0);
   : GOSUB 9010
   : PRINT AT(2,79);
   : GOSUB 9010
   : U9$=ALL(CF)
   : PRINT HEX(0202020E);AT(2,0);U9$
   : U9$=ALL(FC)
   : PRINT AT(23,0);U9$
   : PRINT HEX(020402000F0202000F);
   : SELECT PRINT 005(80)
5040 REM %Initialise Game
   : U9$="Initialising ..."
   : PRINT HEX(020404000E);AT(12,40-LEN(U9$)/2);U9$;HEX(020402000F);
   : W$()=ALL(00)
   : FOR U=1TO 20
   : FOR U1=1TO 78
   : PACK(##)F$((U-1)*78+U1)FROMU,U1
   : NEXT U1,U
   : D$="6"
   : H=0
   : T=1
   : L=0
   : L1=5
   : H(1)=5
   : H(2)=15
   : GOSUB 9020
   : MAT C=CON
   : PRINT AT(12,3,70);AT(3,1);
5050 REM %Create a new piece of food
   : UNPACK(##)F$(RND(1)*(1560-L)+1)TO F()
   : MAT H=F
   : F=INT(RND(1)*9+1)
   : CONVERT FTO U$,(#)
   : GOSUB 9100
5060 REM %Enter Direction
   : U=20*(1-L1/1560)
   : U1=255*(1-L1/1560)
5070 KEYIN U$,5080,5080
   : $BREAKU1
   : U=U-1
   : IF U>0THEN 5070
   : GOTO 5090
5080 KEYIN U2$,5080,5080
   : IF U$=HEX(1F)OR U$=HEX(81)THEN LOAD T"GAMES"
   : $TRAN(U$,HEX(344D345D32453255365C364C38563846))R
   : IF POS("2468"=U$)=0THEN 5070
   : D$=U$
5090 GOSUB 9040
   : PACK(##)U1$FROMH()
   : MAT SEARCHW$(),=STR(U1$)TO U9$STEP 2
   : IF STR(U9$,3,2)<>HEX(0000)OR H(1)<1OR H(1)>20OR H(2)<1OR H(2)>78THEN 5100
   : IF H(1)<>F(1)OR H(2)<>F(2)THEN 5060
   : L1=L1+F
   : GOTO 5050
5100 REM %End of Game
   : SELECT PRINT 005(80)
   : FOR U=7TO 16
   : PRINT AT(U,1,78);
   : NEXT U
   : RESTORE LINE1000
   : U9$=HEX(0000)
   : PRINTUSING TO U9$,"Your worm is ###### segments long";L;
   : PRINT AT(8,41-LEN(U9$)/2);STR(U9$,3,LEN(U9$)-2)
5110 U9$="The winner of the Wormy-Verse competition so far was grown by"
   : PRINT AT(10,40-LEN(U9$)/2);U9$
   : READ U,U9$
   : U9$=U9$&".  That entry is ##### segments long."
   : F$()=HEX(0000)
   : PRINTUSING TO F$(),U9$,U;
   : PRINT AT(11,41-LEN(F$())/2);STR(F$(),3,LEN(F$())-2)
   : IF L<=UTHEN 5140
5120 U9$="You are the new progressive winner.  Please enter your name below."
   : PRINT AT(14,40-LEN(U9$)/2);U9$
   : U9$=" "
   : PRINT AT(15,24);
   : LINPUT -STR(U9$,,30)
   : PRINT HEX(06);
   : $OPEN #0
   : LIMITS T"WORM",U,U1,U1
5130 U=U+1
   : DATA LOAD BA T(U)F$()
   : MAT SEARCHF$(),=HEX(00FF1000)TO U1$
   : IF U1$=HEX(0000)THEN 5130
   : U1=VAL(U1$,2)
   : U1=POS(STR(F$(),U1)=HEX(97))+U1
   : CONVERT LTO STR(F$(),U1,6),(######)
   : STR(F$(),U1+8,30)=U9$
   : DATA SAVE BA T(U)F$()
   : $CLOSE#0
   : LOAD T"WORM"BEG 5030
5140 U9$="Press RETURN to Continue"
   : PRINT AT(14,10,60);AT(15,10,60);AT(14,40-LEN(U9$)/2);U9$
   : GOTO 5020
9000 REM %.....   Subroutines   .....
9010 REM %Print side of box
   : PRINT " ";
   : FOR U=3TO 22
   : PRINT HEX(080A20);
   : NEXT U
   : RETURN
9020 REM %Add a worm segment
   : H=MOD(H,1560)+1
   : PACK(##)W$(H)FROMH()
   : MAT SEARCHF$(),=STR(W$(H))TO U1$STEP 2
   : U1=VAL(U1$,2)
   : IF U1=0THEN RETURN
   : IF U1=3119THEN 9030
   : STR(F$(),U1)=STR(F$(),U1+2)
9030 F$(1560)=ALL(00)
   : L=L+1
   : RETURN
9040 REM %Move worm
   : IF L<L1THEN 9050
   : REM Tail
   : UNPACK(##)W$(T)TO H()
   : U$=" "
   : GOSUB 9100
   : L=L-1
   : F$(1560-L)=W$(T)
   : W$(T)=ALL(00)
   : T=MOD(T,1560)+1
9050 REM Head
   : UNPACK(##)W$(H)TO H()
   : U$="o"
   : GOSUB 9100
   : ON POS("2468"=D$)GOSUB 9060,9070,9080,9090
   : GOSUB 9020
   : U$="@"
   : GOSUB 9100
   : RETURN
9060 REM Down
   : H(1)=H(1)+1
   : RETURN
9070 REM Left
   : H(2)=H(2)-1
   : RETURN
9080 REM Right
   : H(2)=H(2)+1
   : RETURN
9090 REM Up
   : H(1)=H(1)-1
   : RETURN
9100 REM %Print a character
   : ON SGN(C(1)-H(1))+2GOTO 9110,9130,9120
   : END
9110 U9$=ALL(0A)
   : $GIO/005(A000)STR(U9$,,H(1)-C(1))
   : GOTO 9130
9120 U9$=ALL(0C)
   : $GIO/005(A000)STR(U9$,,C(1)-H(1))
9130 ON SGN(C(2)-H(2))+2GOTO 9140,9160,9150
   : END
9140 U9$=ALL(09)
   : $GIO/005(A000)STR(U9$,,H(2)-C(2))
   : GOTO 9160
9150 U9$=ALL(08)
   : $GIO/005(A000)STR(U9$,,C(2)-H(2))
9160 $GIO/005(A000)U$
   : C(1)=H(1)
   : C(2)=H(2)+1
   : RETURN