// wumpus.rtb: // Hunt the Wumpus! // The original code from 1972 by Gregory Yob (died 2005), is included below // for comparison. // This version by Gordon Henderson - more as an excercise in // doing it in a slightly more modern way. (September 2016) // And after writing it... When I compare the code, sure, my code is more // modern and maybe easier to understand, but the old code really wasn't // that bad at all - relatively well structured too for the limits of the // BASIC at the time. // Note: There is a bug (feature?) in the original in that when you // move, the first check in a new room is for the wumpus. If the Wumpus // has moved into a room with a pit, then you move into that room, then // you bump the wumpus (ok, so-far), but if the wumpus then moves, you're // left in a room with a pit - which really ought to kill you. Similarly // for bats. This version fixes that by checking for pits and bats first. // Map data. It's a dodecahedron. 20 nodes - each one connects to // 3 other rooms. There are 20 sets of numbers here, each triplet // corresponds to the rooms that the current room connects to. // Note that the room numbers are 1 to 20. DATA 2, 5, 8, 1, 3,10, 2, 4,12, 3, 5,14, 1, 4, 6 DATA 5, 7,15, 6, 8,17, 1, 7, 9, 8,10,18, 2, 9,11 DATA 10,12,19, 3,11,13, 12,14,20, 4,13,15, 6,14,16 DATA 15,17,20, 7,16,18, 9,17,19, 11,18,20, 13,16,19 dim map (20, 3) for room = 1 to 20 cycle for exit = 1 to 3 cycle read map (room, exit) repeat repeat dbg = FALSE //outputSpeed = 10 // Some "authentic" TTY noises.... click = loadSample ("tty.wav") setChanVol (1, 30) // 30% // The original code uses an array L(6) for the 6 locations. // not sure why, but it can make it easy to do some checks. // Also array M(6) to contain a copy of L() so that the player // can play the same game again. // elelemt 1: Player, 2: Wumpus, 3 & 4: Pits, 5 & 6: Bats dim location (6), savedLocation (6) // Arrow path dim path (5) // Big game loop - to let us play many times sameGame = FALSE cycle proc instructions numArrows = 5 if sameGame then for i = 1 to 6 cycle location (i) = savedLocation (i) repeat sameGame = FALSE else // Pick initial locations of player, 2 bats, 2 bottomles pits // and the wumpus. cycle for i = 1 to 6 cycle location (i) = rnd (20) + 1 repeat // Check for crossovers to make sure no 2 things are in the same room to start with // Not the most efficient bit of code on the planet, but it will work duplicate = FALSE for j = 1 to 5 cycle for k = j + 1 to 6 cycle if location (j) = location (k) then duplicate = TRUE repeat repeat repeat until not duplicate // Copy locations to play same game again for i = 1 to 6 cycle savedLocation (i) = location (i) repeat endif playerDead = FALSE wumpusDead = FALSE // Now we're ready to play cycle proc printPlayerLocation proc printHazards proc ttyPrint ("", TRUE) // Cheat/debug if dbg then print "Locations: "; for i = 1 to 6 cycle print location (i); " "; repeat print endif proc ttyPrint ("Shoot or Move? ", FALSE) cycle k$ = get$ repeat until k$ = "s" or k$ = "m" if k$ = "m" then proc playerMove proc checkHazards else proc playerShoot endif repeat until playerDead or wumpusDead or numArrows = 0 if numArrows = 0 then proc ttyPrint ("You have run out of arrows. Game over.", TRUE) endif proc ttyPrint ("", TRUE) proc ttyPrint ("Want to play again? ", FALSE) cycle k$ = get$ repeat until k$ = "y" or k$ = "n" if k$ = "n" then proc ttyPrint ("No. OK then. Hope you enjoyed it!", TRUE) end endif proc ttyPrint ("Yes.", TRUE) proc ttyPrint ("Same setup? ", FALSE) cycle k$ = get$ repeat until k$ = "y" or k$ = "n" if k$ = "y" then sameGame = TRUE endif repeat end // checkHazards: // See if we've moved somewhere dangerous... //******************************************************************************** def proc checkHazards local myLocation myLocation = location (1) // Fallen into a pit? if (myLocation = location (3)) or (location (1) = location (4)) then // Pit proc ttyPrint ("... YYYIIIIEEEE . . . Fell into a pit.", TRUE) playerDead = TRUE endproc endif // Bumped a bat? if (myLocation = location (5)) or (location (1) = location (6)) then proc ttyPrint ("ZAP -- Super Bat Snatch! Elsewhereville for you!", TRUE) location (1) = rnd (20) + 1 proc checkHazards // Simple recursion works OK here. endproc endif // Finally - see if we're in the same room as the Wumpus if myLocation = location (2) then // Bumped into it proc ttyPRint ("... OOPS! Bumped the Wumpus!", TRUE) newWumpus = rnd (4) + 1 if newWumpus = 4 then // 25% chance of staying put proc ttyPrint ("... The Wumpus eats you! Oh dear...", TRUE) playerDead = TRUE else proc ttyPRint ("... Phew! The Wumpus moves away.", TRUE) location (2) = map (myLocation, newWumpus) endif endproc endif // Not authentic, but ... // proc ttyPrint ("... An empty room.", TRUE) endproc // playerMove: // Move to a new room //******************************************************************************** def proc playerMove local location, k, valid proc ttyPrint ("Move", TRUE) cycle proc ttyPrint ("Where to? ", FALSE) input "", newLoc if newLoc < 1 or newLoc > 20 then proc ttyPrint ("We only have rooms numbered 1 to 20.", TRUE) else break endif repeat // See if it's a connecting room valid = false for k = 1 to 3 cycle if map (location (1), k) = newLoc then valid = true break endif repeat if not valid then proc ttyPrint ("That move isn't possible.", TRUE) else proc ttyPrint ("You move into room number ", FALSE) proc ttyPrintNum (newLoc, TRUE) location (1) = newLoc endif endproc // printPlayerLocation: // Output the current location and adjacent rooms //******************************************************************************** def proc printPlayerLocation proc ttyPrint ("", TRUE) proc ttyPrint ("You are in room number ", FALSE) proc ttyPrintNum (location (1), FALSE) proc ttyPrint (".", TRUE) proc ttyPrint ("Tunnels lead off to rooms: ", FALSE) proc ttyPrintNum (map (location (1), 1), FALSE) proc ttyPrint (", ", FALSE) proc ttyPrintNum (map (location (1), 2), FALSE) proc ttyPrint (" and ", FALSE) proc ttyPrintNum (map (location (1), 3), FALSE) proc ttyPrint (".", TRUE) endproc // printHazards: // Output nearby hazards, if any. //******************************************************************************** def proc printHazards local i, j for i = 2 to 6 cycle for j = 1 to 3 cycle if location (i) = map (location (1), j) then switch (i) case 2 proc ttyPrint ("I smell a Wumpus!", TRUE) endcase case 3, 4 proc ttyPrint ("I feel a draught...", TRUE) endcase default proc ttyPrint ("Bats nearby!", TRUE) endcase endswitch endif repeat repeat endproc // playerShoot // Shoot a crooked arrow //******************************************************************************** def proc playerShoot local numRooms, r, room proc ttyPrint ("Shoot.", TRUE) proc ttyPrint ("You have ", FALSE) proc ttyPrintNum (numArrows, FALSE) if numArrows = 1 then proc ttyPrint (" arrow left.", TRUE) else proc ttyPrint (" arrows left.", TRUE) endif proc ttyPrint ("", TRUE) numArrows = numArrows - 1 cycle proc ttyPrint ("How many rooms? ", FALSE) input "", numRooms repeat until numRooms <= 5 and numRooms >= 1 for r = 1 to numRooms cycle cycle cycle proc ttyPrint ("Room number ", FALSE) proc ttyPrintNum (r, FALSE) proc ttyPrint ("? ", FALSE) input "", room if room < 1 or room > 20 then proc ttyPrint ("We only have rooms numbered 1 to 20.", TRUE) endif repeat until room >= 1 and room <= 20 // Check to make sure the arrow leaves the first room. // the original also checks for out and back in again... if (r = 1) and (room = location (1)) then // Must leave the first room... proc ttyPrint ("The Arrows aren't that crooked! Try again...", TRUE) else break endif repeat path (r) = room repeat // Now "fire" the arrow currentRoom = location (1) // Start where the player is if dbg then proc ttyPrint ("Arrow moving to room ", FALSE) else proc ttyPrint ("Arrow moving ", FALSE) endif for r = 1 to numRooms cycle if dbg then if r > 1 then proc ttyPrint (", ", FALSE) // Can we go from current room to new room? validMove = FALSE for i = 1 to 3 cycle nextRoom = map (currentRoom, i) if nextRoom = path (r) then validMove = TRUE break endif repeat if not validMove then nextRoom = map (currentRoom, rnd (3) + 1) if dbg then proc ttyPrintNum (nextRoom, FALSE) else proc ttyPrint (". ", FALSE) endif // See if we've shot ourselves currentRoom = nextRoom if location (1) = currentRoom then // Oops proc ttyPrint (". . . OOPS! Shot yourself.", TRUE) playerDead = TRUE break endif // See if we've shot the Wumpus if location (2) = currentRoom then // Got him! proc ttyPrint (". . . Woo-hoo! Shot the Wumpus!", TRUE) wumpusDead = TRUE break endif repeat proc ttyPrint ("", TRUE) // Move the wumpus if not wumpusDead then location (2) = map (location (2), rnd (3) + 1) proc ttyPrint ("The noise wakes the Wumpus and he moves...", TRUE) if location (2) = location (1) then // Moved to player location proc ttyPrint ("... into your room and eats you! Oh dear...", TRUE) playerDead = TRUE endif endif endproc // instructions: // Print them out //******************************************************************************** def proc instructions local k$ cls print "Welcome to 'Hunt the Wumpus'" print "============================" print print "Run at TTY speed, or video terminal speed (t or v) ?"; cycle k$ = get$ repeat until k$ = "t" or k$ = "v" if k$ = "t" then outputSpeed = 10 // 110 baud proc ttyPrint ("TTY", TRUE) endif if k$ = "v" then outputSpeed = 120 // 1200 baud proc ttyPrint ("Video", TRUE) endif // Not used - for now if k$ = "f" then outputSpeed = 0 proc ttyPrint ("Normal", TRUE) endif print proc ttyPrint ("Do you need instructions? ", FALSE) cycle k$ = get$ repeat until k$ = "y" or k$ = "n" if k$ = "n" then proc ttyPrint ("No", TRUE) endproc endif proc ttyPrint ("Yes.", TRUE) print print " The Wumpus lives in a cave of 20 rooms. Each room has 3 tunnels leading" print " to other rooms. (Look at a dodecahedron to see how this works. If you" print " don't know what a dodecahedron is, google it)" print print " Hazards:" print " BOTTOMLESS PITS - Two rooms have bottomless pits in them. If you go there," print " you fall into the pit (& LOSE!)" print print " SUPER BATS - Two other rooms have Super bats. If you go there, a bat" print " grabs you and takes you to some other room at random. (Which might" print " be troublesome)" print print " WUMPUS - The wumpus is not bothered by the hazards (He has sucker feet" print " and is too big for a bat to lift). Usually he is asleep. Two things" print " wake him up: Your entering his room or your shooting an arrow. If the" print " wumpus wakes, he has a 75% chance of moving one room, or he stays still." print " After that, if he is where you are, he eats you up (& You Lose!)" print print " YOU - Each turn you may move or shoot a crooked arrow." print " MOVING: You can go one room (through one tunnel)" print " ARROWS: You have 5 arrows. you lose when you run out. Each arrow can go" print " from 1 to 5 rooms. You aim by telling the computer the room numbers" print " you want the arrow to go to. If the arrow can't go that way (ie no" print " tunnel) it moves at ramdom to the next room If the arrow hits the wumpus," print " you win. If the arrow hits you, you lose." print print " Warnings:" print " When you are one room away from the Wumpus or a hazard," print " the computer says:" print " Wumpus - 'I smell a wumpus'" print " Bat - 'Bats nearby'" print " Pit - 'I feel a draft'" print endproc // ttyPrint: // Emulate the speed of a TTY33 printer. 110 baud, or 10 characters/sec. //******************************************************************************** def proc waitClackTime (makeSound) local clackTime clackTime = TIME + 1000 / outputSpeed // mS if makeSound and (outputSpeed < 30) then playSample (click, 1, 0) cycle wait (0.001) repeat until TIME > clackTime endproc def proc ttyPrint (text$, newLine) local i, clackTime local c$ if outputSpeed = 0 then print text$; else if len (text$) > 0 then for i = 0 to len (text$) - 1 cycle c$ = mid$ (text$, i, 1) print c$; update if c$ = " " then proc waitClackTime (FALSE) else proc waitClackTime (TRUE) endif repeat endif endif if newLine then print proc waitClackTime (TRUE) proc waitClackTime (FALSE) endif endproc def proc ttyPrintNum (num, newLine) local n$ n$ = str$ (num) proc ttyPrint (n$, newLine) endproc //------------------------------ // The original program here //------------------------------ REM 0010 REM- HUNT THE WUMPUS REM 0015 REM: BY GREGORY YOB REM 0020 PRINT "INSTRUCTIONS (Y-N)"; REM 0030 INPUT I$ REM 0040 IF I$="N" THEN 52 REM 0050 GOSUB 1000 REM 0052 REM- ANNOUNCE WUMPUSII FOR ALL AFICIONADOS ... ADDED BY DAVE REM 0054 PRINT REM 0056 PRINT " ATTENTION ALL WUMPUS LOVERS!!!" REM 0058 PRINT " THERE ARE NOW TWO ADDITIONS TO THE WUMPUS FAMILY"; REM 0060 PRINT " OF PROGRAMS." REM 0062 PRINT REM 0064 PRINT " WUMP2: SOME DIFFERENT CAVE ARRANGEMENTS" REM 0066 PRINT " WUMP3: DIFFERENT HAZARDS" REM 0067 PRINT REM 0068 REM- SET UP CAVE (DODECAHEDRAL NODE LIST) REM 0070 DIM S(20,3) REM 0080 FOR J=1 TO 20 REM 0090 FOR K=1 TO 3 REM 0100 READ S(J,K) REM 0110 NEXT K REM 0120 NEXT J REM 0130 DATA 2,5,8,1,3,10,2,4,12,3,5,14,1,4,6 REM 0140 DATA 5,7,15,6,8,17,1,7,9,8,10,18,2,9,11 REM 0150 DATA 10,12,19,3,11,13,12,14,20,4,13,15,6,14,16 REM 0160 DATA 15,17,20,7,16,18,9,17,19,11,18,20,13,16,19 REM 0170 DEF FNA(X)=INT(20*RND(0))+1 REM 0180 DEF FNB(X)=INT(3*RND(0))+1 REM 0190 DEF FNC(X)=INT(4*RND(0))+1 REM 0200 REM-LOCATE L ARRAY ITEMS REM 0210 REM-1-YOU,2-WUMPUS,3&4-PITS,5&6-BATS REM 0220 DIM L(6) REM 0230 DIM M(6) REM 0240 FOR J=1 TO 6 REM 0250 L(J)=FNA(0) REM 0260 M(J)=L(J) REM 0270 NEXT J REM 0280 REM-CHECK FOR CROSSOVERS (IE L(1)=L(2),ETC) REM 0290 FOR J=1 TO 6 REM 0300 FOR K=J TO 6 REM 0310 IF J=K THEN 330 REM 0320 IF L(J)=L(K) THEN 240 REM 0330 NEXT K REM 0340 NEXT J REM 0350 REM-SET# ARROWS REM 0360 A=5 REM 0365 L=L(1) REM 0370 REM-RUN THE GAME REM 0375 PRINT "HUNT THE WUMPUS" REM 0380 REM-HAZARD WARNINGS & LOCATION REM 0390 GOSUB 2000 REM 0400 REM-MOVE OR SHOOT REM 0410 GOSUB 2500 REM 0420 GOTO O OF 440,480 REM 0430 REM-SHOOT REM 0440 GOSUB 3000 REM 0450 IF F=0 THEN 390 REM 0460 GOTO 500 REM 0470 REM-MOVE REM 0480 GOSUB 4000 REM 0490 IF F=0 THEN 390 REM 0500 IF F>0 THEN 550 REM 0510 REM-LOSE REM 0520 PRINT "HA HA HA - YOU LOSE!" REM 0530 GOTO 560 REM 0540 REM-WIN REM 0550 PRINT "HEE HEE HEE - THE WUMPUS'LL GETCHA NEXT TIME!!" REM 0560 FOR J=1 TO 6 REM 0570 L(J)=M(J) REM 0580 NEXT J REM 0590 PRINT "SAME SET-UP (Y-N)"; REM 0600 INPUT I$ REM 0610 IF I$#"Y" THEN 240 REM 0620 GOTO 360 REM 1000 REM-INSTRUCTIONS REM 1010 PRINT "WELCOME TO 'HUNT THE WUMPUS'" REM 1020 PRINT " THE WUMPUS LIVES IN A CAVE OF 20 ROOMS. EACH ROOM" REM 1030 PRINT "HAS 3 TUNNELS LEADING TO OTHER ROOMS. (LOOK AT A" REM 1040 PRINT "DODECAHEDRON TO SEE HOW THIS WORKS-IF YOU DON'T KNOW" REM 1050 PRINT "WHAT A DODECAHEDRON IS, ASK SOMEONE)" REM 1060 PRINT REM 1070 PRINT " HAZARDS:" REM 1080 PRINT " BOTTOMLESS PITS - TWO ROOMS HAVE BOTTOMLESS PITS IN THEM" REM 1090 PRINT " IF YOU GO THERE, YOU FALL INTO THE PIT (& LOSE!)" REM 1100 PRINT " SUPER BATS - TWO OTHER ROOMS HAVE SUPER BATS. IF YOU" REM 1110 PRINT " GO THERE, A BAT GRABS YOU AND TAKES YOU TO SOME OTHER" REM 1120 PRINT " ROOM AT RANDOM. (WHICH MIGHT BE TROUBLESOME)" REM 1130 PRINT REM 1140 PRINT " WUMPUS:" REM 1150 PRINT " THE WUMPUS IS NOT BOTHERED BY THE HAZARDS (HE HAS SUCKER" REM 1160 PRINT " FEET AND IS TOO BIG FOR A BAT TO LIFT). USUALLY" REM 1170 PRINT " HE IS ASLEEP. TWO THINGS WAKE HIM UP: YOUR ENTERING" REM 1180 PRINT " HIS ROOM OR YOUR SHOOTING AN ARROW." REM 1190 PRINT " IF THE WUMPUS WAKES, HE MOVES (P=.75) ONE ROOM" REM 1200 PRINT " OR STAYS STILL (P=.25). AFTER THAT, IF HE IS WHERE YOU" REM 1210 PRINT " ARE, HE EATS YOU UP (& YOU LOSE!)" REM 1220 PRINT REM 1230 PRINT " YOU:" REM 1240 PRINT " EACH TURN YOU MAY MOVE OR SHOOT A CROOKED ARROW" REM 1250 PRINT " MOVING: YOU CAN GO ONE ROOM (THRU ONE TUNNEL)" REM 1260 PRINT " ARROWS: YOU HAVE 5 ARROWS. YOU LOSE WHEN YOU RUN OUT." REM 1270 PRINT " EACH ARROW CAN GO FROM 1 TO 5 ROOMS. YOU AIM BY TELLING" REM 1280 PRINT " THE COMPUTER THE ROOM#S YOU WANT THE ARROW TO GO TO." REM 1290 PRINT " IF THE ARROW CAN'T GO THAT WAY (IE NO TUNNEL) IT MOVES" REM 1300 PRINT " AT RAMDOM TO THE NEXT ROOM." REM 1310 PRINT " IF THE ARROW HITS THE WUMPUS, YOU WIN." REM 1320 PRINT " IF THE ARROW HITS YOU, YOU LOSE." REM 1330 PRINT REM 1340 PRINT " WARNINGS:" REM 1350 PRINT " WHEN YOU ARE ONE ROOM AWAY FROM WUMPUS OR HAZARD," REM 1360 PRINT " THE COMPUTER SAYS:" REM 1370 PRINT " WUMPUS- 'I SMELL A WUMPUS'" REM 1380 PRINT " BAT - 'BATS NEARBY'" REM 1390 PRINT " PIT - 'I FEEL A DRAFT'" REM 1400 PRINT "" REM 1410 RETURN REM 2000 REM-PRINT LOCATION & HAZARD WARNINGS REM 2010 PRINT REM 2020 FOR J=2 TO 6 REM 2030 FOR K=1 TO 3 REM 2040 IF S(L(1),K)#L(J) THEN 2110 REM 2050 GOTO J-1 OF 2060,2080,2080,2100,2100 REM 2060 PRINT "I SMELL A WUMPUS!" REM 2070 GOTO 2110 REM 2080 PRINT "I FEEL A DRAFT" REM 2090 GOTO 2110 REM 2100 PRINT "BATS NEARBY!" REM 2110 NEXT K REM 2120 NEXT J REM 2130 PRINT "YOU ARE IN ROOM "L(1) REM 2140 PRINT "TUNNELS LEAD TO "S(L,1);S(L,2);S(L,3) REM 2150 PRINT REM 2160 RETURN REM 2500 REM-CHOOSE OPTION REM 2510 PRINT "SHOOT OR MOVE (S-M)"; REM 2520 INPUT I$ REM 2530 IF I$#"S" THEN 2560 REM 2540 O=1 REM 2550 RETURN REM 2560 IF I$#"M" THEN 2510 REM 2570 O=2 REM 2580 RETURN REM 3000 REM-ARROW ROUTINE REM 3010 F=0 REM 3020 REM-PATH OF ARROW REM 3030 DIM P(5) REM 3040 PRINT "NO. OF ROOMS(1-5)"; REM 3050 INPUT J9 REM 3060 IF J9<1 OR J9>5 THEN 3040 REM 3070 FOR K=1 TO J9 REM 3080 PRINT "ROOM #"; REM 3090 INPUT P(K) REM 3095 IF K <= 2 THEN 3115 REM 3100 IF P(K) <> P(K-2) THEN 3115 REM 3105 PRINT "ARROWS AREN'T THAT CROOKED - TRY ANOTHER ROOM" REM 3110 GOTO 3080 REM 3115 NEXT K REM 3120 REM-SHOOT ARROW REM 3130 L=L(1) REM 3140 FOR K=1 TO J9 REM 3150 FOR K1=1 TO 3 REM 3160 IF S(L,K1)=P(K) THEN 3295 REM 3170 NEXT K1 REM 3180 REM-NO TUNNEL FOR ARROW REM 3190 L=S(L,FNB(1)) REM 3200 GOTO 3300 REM 3210 NEXT K REM 3220 PRINT "MISSED" REM 3225 L=L(1) REM 3230 REM-MOVE WUMPUS REM 3240 GOSUB 3370 REM 3250 REM-AMMO CHECK REM 3255 A=A-1 REM 3260 IF A>0 THEN 3280 REM 3270 F=-1 REM 3280 RETURN REM 3290 REM-SEE IF ARROW IS AT L(1) OR L(2) REM 3295 L=P(K) REM 3300 IF L#L(2) THEN 3340 REM 3310 PRINT "AHA! YOU GOT THE WUMPUS!" REM 3320 F=1 REM 3330 RETURN! REM 3340 IF L#L(1) THEN 3210 REM 3350 PRINT "OUCH! ARROW GOT YOU!" REM 3360 GOTO 3270 REM 3370 REM-MOVE WUMPUS ROUTINE REM 3380 K=FNC(0) REM 3390 IF K=4 THEN 3410 REM 3400 L(2)=S(L(2),K) REM 3410 IF L(2)#L THEN 3440 REM 3420 PRINT "TSK TSK TSK- WUMPUS GOT YOU!" REM 3430 F=-1 REM 3440 RETURN REM 4000 REM- MOVE ROUTINE REM 4010 F=0 REM 4020 PRINT "WHERE TO"; REM 4030 INPUT L REM 4040 IF L<1 OR L>20 THEN 4020 REM 4050 FOR K=1 TO 3 REM 4060 REM- CHECK IF LEGAL MOVE REM 4070 IF S(L(1),K)=L THEN 4130 REM 4080 NEXT K REM 4090 IF L=L(1) THEN 4130 REM 4100 PRINT "NOT POSSIBLE -"; REM 4110 GOTO 4020 REM 4120 REM-CHECK FOR HAZARDS REM 4130 L(1)=L REM 4140 REM-WUMPUS REM 4150 IF L#L(2) THEN 4220 REM 4160 PRINT "...OOPS! BUMPED A WUMPUS!" REM 4170 REM-MOVE WUMPUS REM 4180 GOSUB 3380 REM 4190 IF F=0 THEN 4220 REM 4200 RETURN REM 4210 REM-PIT REM 4220 IF L#L(3) AND L#L(4) THEN 4270 REM 4230 PRINT "YYYIIIIEEEE . . . FELL IN PIT" REM 4240 F=-1 REM 4250 RETURN REM 4260 REM-BATS REM 4270 IF L#L(5) AND L#L(6) THEN 4310 REM 4280 PRINT "ZAP--SUPER BAT SNATCH! ELSEWHEREVILLE FOR YOU!" REM 4290 L=FNA(1) REM 4300 GOTO 4130 REM 4310 RETURN REM 5000 END