ZX81 Programs


Read about, play, run, or list games, animations, and more. These are my programs from the ’80s to today.

ZX81 Program Listing

cq (cq.p)


SYSTEM VARIABLES

PROG  : 16509
D-FILE: 21325
VARS  : 22118
E-LINE: 22119
STKBOT: 22119
STKEND: 22119


LEGEND

9999 means line number
PRINT means treat as KEYWORD P


PROGRAM LISTING

  10 REM *CASTLE QUEST*SLR/2025*
  20 DIM T$(5*4,32*2)
  30 DIM I$(5,10)
  40 DIM P(5)
  50 LET SC=0
  60 LET LO=1
  70 LET IN=0
  80 LET PT=0
  90 REM ***********************
 100 REM LOCATION DATA
 101 REM FORMAT:
 102 REM T$(X)="LOCATION DESCRIP
TION"
 103 REM T$(X+1)="N,02"  <-- COM
BINED EXITS
 104 REM T$(X+2)="ITEM IN LOCATI
ON" (0=NONE)
 105 REM T$(X+3)="SPECIAL ACTION
 TRIGGER" (0=NONE)
 110 LET T$(1)="YOU ARE IN A FOR
EST. A PATH     LEADS NORTH."
 120 LET T$(2)="N,02"
 130 LET T$(3)="0"
 140 LET T$(4)="0"
 150 LET T$(5)="YOU ARE AT A CRO
SSROADS. PATHS  GO S,E,W."
 160 LET T$(6)="S,01,E,03,W,01"
 170 LET T$(7)="1"
 180 LET T$(8)="0"
 190 LET T$(9)="YOU ARE BY A LAK
E. A CASTLE IS  TO THE EAST."
 200 LET T$(10)="E,04,W,02"
 210 LET T$(11)="0"
 220 LET T$(12)="0"
 230 LET T$(13)="YOU ARE AT THE 
CASTLE GATE. IT  IS LOCKED."
 240 LET T$(14)="W,03"
 250 LET T$(15)="2"
 260 LET T$(16)="1"
 270 LET T$(17)="YOU ARE INSIDE 
THE CASTLE       COURTYARD."
 280 LET T$(18)="W,04"
 290 LET T$(19)="0"
 300 LET T$(20)="3"
 310 REM ***********************
 320 REM ITEM DATA
 330 REM 1=SWORD, 2=KEY, 3=TREAS
URE
 340 LET I$(1)="SWORD"
 350 LET I$(2)="KEY"
 360 LET I$(3)="TREASURE"
 390 REM ***********************
 400 REM GAME START
 410 CLS
 420 PRINT "CASTLE QUEST"
 430 PRINT "A TEXT ADVENTURE"
 440 PRINT "BY STEVEN REID (2025
)"
 450 PRINT "TYPE HELP FOR INSTRU
CTIONS."
 460 PRINT
 470 GOSUB 1010
 480 GOTO 520
 490 REM ***********************
 500 REM MAIN GAME LOOP
 510 GOSUB 1000
 520 LET S$=""
 530 INPUT S$
 540 IF S$="" THEN GOTO 530
 550 CLS
 560 PRINT ">";S$
 570 PRINT
 580 GOSUB 2000
 590 GOTO 500
 980 REM ***********************
 990 REM DISPLAY LOCATION
1000 PRINT
1010 PRINT "LOCATION:"
1020 PRINT T$(LO),,
1030 REM PRINT AT 8,0;"EXITS: ";
T$(LO+1)
1040 IF T$(LO+2,1)<>"0" THEN
GOSUB 1200
1050 REM PRINT AT 10,0;"SCORE: "
;SC
1060 IF IN>0 THEN PRINT "INVENTO
RY:"
1070 FOR J=1 TO IN
1080 PRINT "  ";I$(P(J))
1110 NEXT J
1120 IF T$(LO+3,1)="3" THEN
GOTO 8000
1130 RETURN
1200 LET W$=I$(VAL T$(LO+2))
1210 GOSUB 1500
1220 PRINT "A ";Y$;" IS HERE."
1230 PRINT
1240 RETURN
1500 REM TRIM STRING ROUTINE
1510 LET Y$=""
1520 FOR K=1 TO LEN W$
1530 IF W$(K)=" " THEN RETURN
1540 LET Y$=Y$+W$(K)
1550 NEXT K
1560 RETURN
1900 REM ***********************
2000 REM PARSE INPUT
2070 IF S$="QUIT" THEN GOTO 9000
2080 IF S$="LOOK" THEN RETURN
2090 IF S$="HELP" THEN GOTO 3000
2100 IF LEN S$<4 THEN GOTO 2120
2110 IF S$( TO 3)="GET" OR S$(
TO 4)="TAKE" THEN GOTO 4000
2120 IF S$="OPEN GATE" OR S$="UN
LOCK GATE" THEN GOTO 5000
2130 IF S$="ENTER CASTLE" THEN
GOTO 6000
2140 IF S$="NORTH" OR S$="N"
THEN GOTO 7000
2150 IF S$="SOUTH" OR S$="S"
THEN GOTO 7000
2160 IF S$="EAST" OR S$="E"
THEN GOTO 7000
2170 IF S$="WEST" OR S$="W"
THEN GOTO 7000
2180 IF S$="UP" OR S$="U" THEN
GOTO 7000
2190 IF S$="DOWN" OR S$="D"
THEN GOTO 7000
2200 PRINT "I DO NOT UNDERSTAND.
"
2210 GOTO 500
2220 REM ***********************
3000 REM HELP SCREEN
3010 PRINT "INSTRUCTIONS:"
3020 PRINT "TYPE COMMANDS LIKE:"
3030 PRINT "GET SWORD, LOOK, ETC
."
3040 PRINT "USE N, S, E, W FOR D
IRECTIONS."
3050 PRINT "TYPE QUIT TO END."
3060 PRINT "GET ITEMS AND SOLVE 
PUZZLES"
3070 PRINT "TO WIN THE GAME."
3080 RETURN
3100 REM ***********************
4000 REM GET ITEM ROUTINE
4010 LET IT=VAL (T$(LO+2))
4020 IF IT>0 THEN GOTO 4050
4030 PRINT "THERE IS NOTHING TO 
GET HERE."
4040 RETURN
4050 IF IN<5 THEN GOTO 4080
4060 PRINT "YOU ARE CARRYING TOO
 MUCH."
4070 RETURN
4080 LET S$=S$+"          "
4090 IF S$( TO 3)="GET" THEN
LET S$=S$(5 TO )
4100 IF S$( TO 4)="TAKE" THEN
LET S$=S$(6 TO )
4110 IF S$( TO 10)=I$(IT) THEN
GOTO 4140
4120 PRINT "THAT ITEM IS NOT HER
E."
4130 RETURN
4140 PRINT "YOU GET THE ";I$(IT)
4150 LET IN=IN+1
4160 LET P(IN)=IT
4170 LET SC=SC+10
4180 REM REMOVE ITEM FROM LOCATI
ON
4190 LET T$(LO+2)="0"
4200 RETURN
4900 REM ***********************
5000 REM OPEN GATE ROUTINE
5010 IF LO=13 THEN GOTO 5040
5020 PRINT "THERE IS NO GATE HER
E."
5030 RETURN
5040 LET HASKEY=0
5050 FOR J=1 TO IN
5060 IF P(J)=2 THEN LET HASKEY=1
5070 NEXT J
5080 IF T$(LO+3,1)="1" THEN
GOTO 5110
5090 PRINT "THE GATE IS ALREADY 
OPEN."
5100 RETURN
5110 IF HASKEY=1 THEN GOTO 5140
5120 PRINT "THE GATE IS LOCKED. 
YOU NEED A  KEY."
5130 RETURN
5140 PRINT "YOU UNLOCK THE GATE.
"
5150 LET SC=SC+20
5160 LET T$(13)="YOU ARE AT THE 
CASTLE GATE. IT  IS OPEN."
5170 LET T$(14)="W,04,E,05"
5180 LET T$(15)="0"
5190 RETURN
5900 REM ***********************
6000 REM ENTER CASTLE ROUTINE
6010 IF LO=13 THEN GOTO 6040
6020 PRINT "YOU CANNOT ENTER FRO
M HERE"
6030 RETURN
6040 LET LO=17
6050 RETURN
6100 REM ***********************
7000 REM MOVE ROUTINE
7010 LET E$=T$(LO+1)
7020 LET S$=S$(1)
7030 GOSUB 7200
7040 IF Q THEN GOTO 7070
7050 PRINT "YOU CAN NOT GO THAT 
WAY."
7060 RETURN
7070 LET LO=4*(Q-1)+1
7080 RETURN
7200 REM CHECK IF DIRECTION IS V
ALID
7210 LET Q=0
7220 FOR K=1 TO LEN E$ STEP 5
7230 IF S$=E$(K) THEN GOTO 7300
7240 NEXT K
7250 RETURN
7300 REM GET NEW LOCATION
7310 LET Q=VAL (E$(K+2 TO K+3))
7320 PRINT "YOU MOVED."
7330 RETURN
7900 REM ***********************
8000 REM VICTORY
8010 PRINT
8020 PRINT "CONGRATULATIONS/"
8030 PRINT "YOU MADE IT TO THE C
ASTLE."
8040 PRINT
9000 REM ***********************
9010 REM GAME OVER ROUTINE
9020 PRINT "GAME OVER"
9030 PRINT "YOU SCORED ";SC;" OU
T OF 40 POINTS."
9040 PRINT "THANKS FOR PLAYING/"
9050 PRINT
9060 PRINT "PRESS A KEY TO PLAY 
AGAIN."
9070 PAUSE 4E4
9080 CLS
9090 RUN
9100 SAVE "CQ"
9110 RUN