“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:
- Lines 1–5: Introduction, sound fanfare, variable initialization
- Lines 20–60: Array setup and game start
- Lines 240–580: Classroom (starting area, item selection, computer choice)
- Lines 590–800: Loopins Computer interior
- Lines 800–990: The CRT/Screen
- Lines 990–1160: R Square Database (Cursor encounter)
- Lines 1200–1310: CPU (final puzzle)
- Lines 1360–1470: CRT port
- Lines 1480–1610: Keyboard port
- Lines 1650–1700: Train (dead end/time penalty)
- Lines 1710–1760: Widgee Computer (wrong path)
- Lines 1860–1910: Modem port
- Lines 1930–1990: Q Circle Database (wrong database)
- Lines 2010–2090: Bus to CPU
- Lines 2120–2150: Squashed by finger (dead end)
- 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
1uses three ascendingBEEPcalls (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(lines1893,1973,2053) creates a downward sweep sound effect for “transmission” or penalty events. PAUSE 0at line4is used correctly to wait for any keypress before clearing the intro screen.- Delay loops such as
FOR D=1 TO 300: NEXT D(lines1400,1690) are used as simple timing pauses wherePAUSEis not called. - The
REMat line1credits 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, 550 | IF INKEY$="" THEN GO TO after INPUT is unreachable dead code; INPUT already blocks until entry is complete. |
730 | IF 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. |
1760 | GO 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. |
580 | GO 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. |
9997 | Bare STOP after the SAVE line is unreachable during normal play but harmless. |
Content
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.

