Cursor Adventure

This file is part of and CATS Library Tape 6. Download the collection to get this file.
Date: 198x
Type: Program
Platform(s): TS 2068

“Cursor, Foiled Again” is a text adventure game adapted from a 1985 article in Enter magazine, originally written for the Apple and ported to the TS2068. The player, shrunk to microscopic size by the evil Cursor, must navigate inside a computer — through components like the modem, CRT, keyboard, and CPU — collecting wires and other items within a 20-minute in-game time limit. A string array `N$` of dimensions (10,12) tracks the player’s inventory, displayed during status reports via a subroutine at line 7000. The correct wire sequence to produce the enlarging beam is Blue, Green, Yellow (choice 2), making the puzzle solvable with careful item collection.


Program Analysis

Program Structure

The program is organized as a branching text adventure with numbered sections corresponding to locations. Flow control is handled entirely through GO TO and INPUT statements, with a single subroutine at line 7000 serving as a universal status/report routine. The main sections are:

  1. Lines 1–5: Introduction, sound fanfare, variable initialization
  2. Lines 20–60: Array setup and game start
  3. Lines 240–580: Classroom (starting area, item selection, computer choice)
  4. Lines 590–800: Loopins Computer interior
  5. Lines 800–990: The CRT/Screen
  6. Lines 990–1160: R Square Database (Cursor encounter)
  7. Lines 1200–1310: CPU (final puzzle)
  8. Lines 1360–1470: CRT port
  9. Lines 1480–1610: Keyboard port
  10. Lines 1650–1700: Train (dead end/time penalty)
  11. Lines 1710–1760: Widgee Computer (wrong path)
  12. Lines 1860–1910: Modem port
  13. Lines 1930–1990: Q Circle Database (wrong database)
  14. Lines 2010–2090: Bus to CPU
  15. Lines 2120–2150: Squashed by finger (dead end)
  16. Lines 7000–7070: Status report subroutine

Inventory System

Inventory is implemented using a two-dimensional string array N$(10,12) declared at line 20, capable of holding up to 10 items of 12 characters each. The variable X acts as an index pointer, incremented each time an item is added. Items that can be collected include: BUS PASS, GUM, RUBBER BAND, BLUE WIRE, GREEN WIRE, YELLOW WIRE, and KEY. Boolean flag variables (BP, GU, RB, BW, GW, YW, K) track whether each item has already been picked up, preventing duplicate collection.

Time Tracking

The variable TI represents elapsed in-game minutes, initialized to 0 at line 30. The comment at line 50 honestly acknowledges that this is not real time — TI is incremented manually at certain narrative decision points (taking the bus, getting squashed, wrong paths) and inside the subroutine at line 7000. When TI exceeds 20, the game branches to line 180 for the “ran out of time” ending.

Status Subroutine

The subroutine at line 7000 is the program’s most reusable component. It increments TI, checks the time limit, prints elapsed minutes, iterates through the inventory array with a FOR/NEXT loop, pauses for the player to read, and returns. It is called with GO SUB 7000 from lines 1446, 1755, 1900, 1980, and elsewhere after wrong-path penalties.

Input Handling

The program mixes two input styles. Numeric choices use bare INPUT CH followed by IF CH=N THEN GO TO chains. String choices use INPUT C$ with string comparison. There is an inconsistency: after numeric INPUT CH at lines 390 and 530, lines 410 and 550 fall through to IF INKEY$="" THEN GO TO loops, which cannot usefully re-prompt after a completed INPUT statement — the INKEY$ checks here are effectively dead code since INPUT already waits for a keypress.

Notable Techniques and Idioms

  • The intro sound fanfare at line 1 uses three ascending BEEP calls (pitches 10, 20, 30) as a simple alert signal.
  • The descending pitch loop FOR A=50 TO 1 STEP -1: BEEP .01,A: NEXT A (lines 1893, 1973, 2053) creates a downward sweep sound effect for “transmission” or penalty events.
  • PAUSE 0 at line 4 is used correctly to wait for any keypress before clearing the intro screen.
  • Delay loops such as FOR D=1 TO 300: NEXT D (lines 1400, 1690) are used as simple timing pauses where PAUSE is not called.
  • The REM at line 1 credits the original source: Enter magazine, April 1985, pp. 21–23, with the full title “Cursor, Foiled Again.”

Puzzle Logic and Win Condition

The game has a single correct solution path. The player must choose Blue Wire (Loopins), take the CRT port, use the Key from the Keyboard to activate the screen, get Green Wire, solve the “pie” riddle by choosing R-Square (π r²), collect Yellow Wire, take the Bus (requiring Bus Pass), and wire the CPU in the sequence Blue, Green, Yellow (choice 2 at line 1307). Choices 1 and 3 at the CPU trigger the “wrong sequence” branch at line 1810, which leads directly to the game-over message at line 190 rather than restarting.

Bugs and Anomalies

Line(s)Issue
410, 550IF INKEY$="" THEN GO TO after INPUT is unreachable dead code; INPUT already blocks until entry is complete.
730IF INKEY$="" THEN GO TO 730 immediately after INPUT "WHICH WAY DO YOU GO?";C$ creates an infinite loop that can never be broken, because the keyboard buffer is always empty after a completed INPUT. This effectively freezes the game after entering the Loopins port selection unless lines 731–735 have already branched away.
1760GO TO 290 jumps into the middle of the Classroom section (the time display line) rather than to line 240 (Classroom start with CLS), skipping the screen clear and early prints.
580GO TO 50 re-initializes X=1 and TI=0, effectively resetting inventory and time — reachable only if neither computer choice (1 or 2) is selected at line 530.
9997Bare STOP after the SAVE line is unreachable during normal play but harmless.

Content

Appears On

Capital Area Timex Sinclair User Group’s Library Tape.

Related Products

Related Articles

Related Content

Image Gallery

Cursor Adventure

Source Code

    1 BEEP .5,10: BEEP .5,20: BEEP .5,30: REM FROM ENTER MAGAZINE FOR APRIL, 1985,pp. 21-23; FULL NAME "CURSOR, FOILED AGAIN"
    2 BORDER 4: PAPER 1: INK 6: REM original for Apple---redone for TS2068
    3 PRINT "THIS ADVENTURE GAME  BY SENIOR  EDITOR OF ENTER, JIM LEWIS,     STARTS WITH THE HERO'S BEING    ZAPPED BY THE EVIL CURSOR,      AND  SHRUNK TO MICROSCOPIC      SIZE. MISSION: TO FIND THE      ENLARGING  BEAM, WITHOUT        WHICH THE HERO WILL KEEP        SHRINKING INTO                  NOTHINGNESS!"
    4 PRINT ''''"PRESS ANY KEY": PAUSE 0: CLS 
    5 LET BP=0: LET GU=0: LET RB=0: LET BW=0: LET GW=0: LET YW=0: LET K=0
   20 DIM N$(10,12)
   30 LET X=1: LET TI=0
   50 REM TI FOR TIME WILL NOT BE ACCURATELY 20 MINUTES
   60 GO TO 240
  180 BEEP 1,30: PRINT "YOU RAN OUT OF TIME","AND",,                            "DISAPPEARED!"
  185 PRINT : PRINT 
  190 BEEP 3,-35: PRINT "GAME OVER"
  200 GO TO 230
  210 PRINT "YOU DID IT! YOU REWIRED IN THE  CORRECT ORDER"
  220 PRINT "THE ENLARGING BEAM ZAPS YOU BACK TO FULL SIZE"
  230 STOP 
  240 REM CLASSROOM
  250 CLS 
  260 PRINT "YOU ARE IN THE COMPUTER LAB"
  270 PRINT "AND HAVE JUST BEEN ZAPPED BY A  BLUE BEAM OF LIGHT"
  280 PRINT "YOU FIND YOURSELF SHRINKING"
  290 PRINT "YOU MUST FIND CURSOR WITHIN ";      20-TI;"  MINUTES"
  300 PRINT "OR YOU WILL COMPLETELY DISAPPEAR"
  310 PRINT : PRINT "YOU SEE IN FRONT OF YOU:"
  320 IF BP<>0 THEN GO TO 340
  330 PRINT "A BUS PASS(1)"
  340 IF GU<>0 THEN GO TO 360
  350 PRINT "A PIECE OF GUM(2)"
  360 IF RB<>0 THEN GO TO 380
  370 PRINT "A RUBBER BAND(3)"
  380 PRINT "CHOOSE ONE (BY NUMBER)"
  390 INPUT CH
  400 IF CH=1 THEN GO TO 420
  401 IF CH=2 THEN GO TO 440
  402 IF CH=3 THEN GO TO 460
  410 IF INKEY$="" THEN GO TO 390
  420 LET N$(X)="BUS PASS"
  430 LET BP=1: GO TO 480
  440 LET N$(X)="GUM"
  450 LET GU=1: GO TO 480
  460 LET N$(X)="RUBBER BAND"
  470 LET RB=1
  480 LET X=X+1
  485 PRINT : PRINT 
  490 PRINT "THERE ARE TWO COMPUTERS HERE"
  500 PRINT "YOU CAN ENTER ONE OF THEM"
  510 PRINT "THE LOOPINS(1) OR THE WIDGEE(2)"
  520 PRINT "PICK ONE"
  530 INPUT CH
  540 IF CH=1 THEN GO TO 590
  545 IF CH=2 THEN GO TO 1710
  550 IF INKEY$="" THEN GO TO 530
  580 GO TO 50
  590 REM LOOPINS COMPUTER
  600 CLS 
  610 PRINT "YOU ARE IN THE LOOPINS COMPUTER"
  620 IF BW=1 THEN GO TO 700
  630 PRINT "YOU SEE A BLUE WIRE"
  640 PRINT "YOU PICK IT UP"
  650 LET N$(X)="BLUE WIRE": LET X=X+1
  660 LET BW=1
  670 PRINT "YOU ARE HOT ON CURSOR'S TRAIL"
  680 PRINT "BUT IT'S DARK IN HERE"
  690 PRINT "YOU COULD USE SOME LIGHT"
  700 PRINT "AHEAD YOU SEE THREE PORTS"
  710 PRINT "MDM(1),CRT(2),AND KBD(3)"
  720 INPUT "WHICH WAY DO YOU GO?";C$
  730 IF INKEY$="" THEN GO TO 730
  731 IF C$="1" THEN GO TO 1860
  733 IF C$="2" THEN GO TO 1360
  735 IF C$="3" THEN GO TO 1480
  800 REM THE SCREEN
  810 CLS 
  820 IF GW=1 THEN GO TO 880
  830 PRINT "YOUR KEY TURNED ON THE SCREEN"
  835 BEEP .05,1: BEEP 2,10
  840 PRINT "BY ITS LIGHT YOU SEE A GREEN    WIRE"
  850 PRINT "YOU PICK IT UP"
  860 LET N$(X)="GREEN WIRE": LET X=X+1
  870 LET GW=1
  880 PRINT "ON THE SCREEN IS A RIDDLE"
  890 PRINT "IT SAYS:CATCH ME AT THE         DATABASE WHERE YOU SEE THE PIE"
  900 PRINT "BELOW THE RIDDLE ARE TWO        DATABASES TO CHOOSE FROM"
  910 PRINT "Q-CIRCLE(1) AND R-SQUARE(2)"
  920 INPUT "WHICH DO YOU CHOOSE?";C$
  930 IF C$="" THEN GO TO 920
  935 IF C$="1" THEN GO TO 1930
  940 IF C$="2" THEN GO TO 990
  990 REM R SQUARE
 1000 CLS 
 1010 PRINT "YOU ARE IN THE R SQUARE         DATABASE"
 1020 PRINT "YOU MUST HAVE GOT CURSOR'S JOKE ABOUT PIE R SQUARED"
 1030 PRINT 
 1040 IF YW=1 THEN GO TO 1090
 1050 PRINT "IN FRONT OF YOU IS A YELLOW WIRE"
 1060 PRINT "YOU PICK IT UP"
 1070 LET N$(X)="YELLOW WIRE": LET X=X+1
 1080 LET YW=1
 1090 PRINT "YOU TURN A CORNER AND THERE IS  CURSOR"
 1100 PRINT "'I'VE HIDDEN THE ENLARGING BEAM IN THE CPU' HE CACKLES"
 1110 PRINT : PRINT "THERE'S ONLY ONE WAY TO GET     THERE"
 1120 PRINT "BY BUS(1) OR BY TRAIN(2)?"
 1130 PRINT "CHOOSE ONE"
 1140 INPUT CH
 1150 IF CH=1 THEN GO TO 2010
 1155 IF CH=2 THEN GO TO 1650
 1160 GO TO 1110
 1200 REM THE CPU
 1210 CLS 
 1220 PRINT "YOU ARE IN THE CENTRAL PROCESS- ING UNIT"
 1230 PRINT "YOU MUST REWIRE THE COMPUTER"
 1240 PRINT "TO PRODUCE THE ENLARGING BEAM"
 1250 PRINT 
 1260 PRINT "WHICH SEQUENCE DO YOU CONNECT   THE WIRES IN?"
 1265 PRINT 
 1270 PRINT "GREEN,BLUE,YELLOW(1)"
 1275 PRINT 
 1280 PRINT "BLUE,GREEN,YELLOW(2)"
 1285 PRINT 
 1290 PRINT "YELLOW,BLUE,GREEN(3)"
 1300 INPUT "CHOOSE <1>,<2>,OR <3>";C$
 1303 IF C$="" THEN GO TO 1300
 1305 IF C$="1" THEN GO TO 1810
 1307 IF C$="2" THEN GO TO 210
 1309 IF C$="3" THEN GO TO 1810
 1360 REM THE CRT
 1370 CLS 
 1380 PRINT "YOU ARE STANDING IN FRONT OF A  CRT"
 1390 PRINT "THERE IS A KEYHOLE UNDER IT"
 1400 FOR D=1 TO 300: NEXT D
 1410 IF K=0 THEN GO TO 1430
 1420 GO TO 800
 1430 PRINT "UNFORTUNATELY, YOU DON'T HAVE   THE KEY"
 1440 PRINT "YOU GO BACK TO THE LOOPINS TO   LOOK FOR IT"
 1445 PAUSE 420
 1446 GO SUB 7000
 1450 GO TO 590
 1480 REM KBD
 1490 CLS 
 1500 PRINT "KBD STANDS FOR KEYBOARD"
 1510 PRINT "THERE IS A KEY HERE-DO YOU TAKE IT? Y/N"
 1520 INPUT C$
 1530 IF C$="N" THEN GO TO 1560
 1540 LET N$(X)="KEY": LET X=X+1
 1550 LET K=1
 1560 PRINT "THERE ARE FINGERS TYPING ALL    AROUND YOU"
 1570 PRINT "YOU CAN STAY HERE OR GO BACK TO LOOPINS"
 1580 PRINT "STAY HERE?(1) OR GO BACK?(2)"
 1590 INPUT CH
 1600 IF CH=1 THEN GO TO 2120
 1605 IF CH=2 THEN GO TO 590
 1610 GO TO 1570
 1650 REM TRAIN
 1660 CLS 
 1670 PRINT "THIS TRAIN IS A LOCAL"
 1690 FOR D=1 TO 300: NEXT D
 1700 GO TO 180
 1710 REM WIDGEE
 1720 CLS 
 1730 PRINT "AN EVIL GUY LIKE CURSOR WOULD   NEVER GO TO "
 1740 PRINT "A COMPUTER NAMED WIDGEE"
 1750 PRINT "YOU MUST GO BACK TO THE COMPUTER LAB"
 1752 PAUSE 480
 1755 GO SUB 7000
 1760 GO TO 290
 1790 REM YOU WIN
 1800 GO TO 210
 1810 REM WRONG SEQUENCE
 1820 CLS 
 1830 PRINT "SORRY--THAT WAS THE WRONG       SEQUENCE"
 1840 GO TO 190
 1860 REM MODEM
 1870 CLS 
 1880 PRINT "YOU ARE IN THE MDM--THE MODEM"
 1890 PRINT "YOU ARE TRANSMITTED BACK TO THE COMPUTER LAB"
 1893 FOR A=50 TO 1 STEP -1: BEEP .01,A: NEXT A
 1895 PAUSE 240
 1900 GO SUB 7000
 1910 GO TO 290
 1930 REM Q CIRCLE
 1940 CLS 
 1950 PRINT "YOU ARE IN THE Q CIRCLE DATABASE"
 1960 PRINT "THERE'S NO PIE HERE"
 1970 PRINT "YOU MUST RETURN TO THE CRT"
 1973 FOR A=50 TO 1 STEP -1: BEEP .01,A: NEXT A
 1975 PAUSE 60
 1980 GO SUB 7000
 1990 GO TO 800
 2010 REM THE BUS
 2020 CLS 
 2030 IF BP=1 THEN GO TO 2070
 2040 PRINT "SORRY, YOU DON'T HAVE A BUS PASS"
 2050 PRINT "YOU MUST GO BACK TO THE COMPUTER LAB TO GET IT"
 2053 FOR A=50 TO 1 STEP -1: BEEP .01,A: NEXT A
 2055 PAUSE 60
 2060 LET TI=TI+1: GO TO 290
 2070 PRINT "GOOD THING YOU HAD A BUS PASS"
 2080 PRINT "YOU ARE ON THE BUS GOING TO THE CPU"
 2085 PAUSE 360
 2090 LET TI=TI+1: GO TO 1200
 2120 REM SQUASHED
 2130 CLS 
 2140 PRINT "YOU GOT SQUASHED BY A FINGER": PRINT : PRINT 
 2145 PAUSE 360
 2150 LET TI=TI+1: GO TO 190
 7000 REM REPORT
 7005 LET TI=TI+1
 7010 CLS 
 7015 IF TI>20 THEN GO TO 180
 7020 PRINT "YOU HAVE USED UP ";TI;" MINUTES"
 7030 PRINT "YOU ARE CARRYING:  "
 7040 FOR D=1 TO X
 7050 PRINT N$(D): NEXT D
 7060 PAUSE 420
 7070 RETURN 
 9997 STOP 
 9998 SAVE "CURSORADV" LINE 1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top