Recuperé este juego de un listado escrito probablemente en el verano de 1986, a 300 kilómetros del Spectrum de mi familia (o de lo que quedase de él). Sin embargo, casi todos los errores sintácticos que he tenido que corregir posteriormente estaban en lo que he añadido a la hora de convertirlo en un archivo .TAP de emulador: las rutinas de las líneas 1000 y siguientes, donde me ha costado hacerme al BASIC del Spectrum – irónicamente, lo contrario de lo que me pasó al comenzar a programar en GWBasic para PC.
Todos los REM son adiciones de la versión moderna, y en ocasiones muestran cambios realizados a la versión original.
0 REM CAVERNAS DE HITKNA -- CREADO EN 2014 DESDE LISTADO A MANO DE HACIA 1986 1 PRINT INVERSE 1;AT 21,0; "ESPERE UN MOMENTO, POR FAVOR": GO SUB 1000:REM INICIACION 10 PRINT "HUNT THE WUMPUS!!" 20 PRINT AT 0,0; "Encuentra los diversos wumpii que se mueven por las cavernas de Hitkna"'"Los Wumpii son:" 30 PRINT "Wumpus No", "Nombre":FOR A=1 TO 5: PRINT A,A$(a):NEXT A:PRINT "PULSA UNA TECLA "; "EN MAYUSCULAS" 40 IF INKEY$<"]" THEN GO TO 60 50 LET A=A+1:IF A=65536 THEN GO TO 30 60 RANDOMIZE A: LET B=INT(RND*8)+1 70 REM ERA PRINT AT 0,0; 80 GO SUB 2000:CLS 81 REM ERA GO SUB 2000 90 FOR U=1 TO 5 100 LET X(U)=INT (RND*3)-1 110 LET Y(U)=INT (RND*3)-1 120 LET E=X(U)+C(U) 130 LET F=Y(U)+D(U):LET P=T(U) 140 IF F<10 AND F>0 THEN IF E>0 THEN GO TO 160 150 GO TO 100 160 IF B$(E,F,P)>"2" THEN LET C(U)=E:LET D(U)=F 170 IF B$(E,F,P)>"2" THEN IF INT (RND+0.5)=1 THEN LET T(U)=T(U)+1 180 IF B$(E,F,P)="4" AND P>1 THEN LET T(U)=T(U)-1 190 IF B$(E,F,P)="8" THEN IF INT(RND+0.5)=1 THEN LET T(U)=T(U)-1 200 IF B$(E,F,P)="B" THEN LET R(U)=R(U)+10:LET B$(E,F,P)="5" 210 NEXT U:GO TO 220 211 REM ERA RETURN 220 REM LET A=0 230 IF B$(N,O,H)="9" THEN PRINT "AQUI HAY UN TRASGO" 240 FOR U=1 TO 5: LET E=C(U):LET F=D(U):LET P=T(U) 250 IF N=E AND O=F THEN GO SUB 400 260 IF N=E AND H=P THEN GO SUB 440 270 IF O=F AND H=P THEN GO SUB 480 280 IF N<10 THEN IF B$(N+1,O,H)="9" THEN PRINT "TRASGO AL N" 290 IF N>1 THEN IF B$(N-1,O,H)="9" THEN PRINT "TRASGO AL S" 300 IF O<10 THEN IF B$(N,O+1,H)="9" THEN PRINT "TRASGO AL E" 310 IF O>1 THEN IF B$(N,O-1,H)="9" THEN PRINT "TRASGO AL W" 320 IF B$(N,O,H)="A" OR B$(N,O,H)="B" THEN PRINT "AQUI HAY UNA POCIMA":GO SUB 600: REM 520? 330 IF N<10 THEN PRINT "NORTE: ";("AGUJERO" AND B$(N+1,O,H)="4")+("PARED" AND B$(N+1,O,H)="1")+("ABIERTO" AND B$(N+1,O,H)>"1") 340 IF N>1 THEN PRINT "SUR: ";("AGUJERO" AND B$(N-1,O,H)="4")+("PARED" AND B$(N-1,O,H)="1")+("ABIERTO" AND B$(N-1,O,H)>"1") 350 IF O<10 THEN PRINT "ESTE: ";("AGUJERO" AND B$(N,O+1,H)="4")+("PARED" AND B$(N,O+1,H)="1")+("ABIERTO" AND B$(N,O+1,H)>"1") 360 IF O>1 THEN PRINT "OESTE: ";("AGUJERO" AND B$(N,O-1,H)="4")+("PARED" AND B$(N,O-1,H)="1")+("ABIERTO" AND B$(N,O-1,H)>"1") 370 IF B$(N,O,H)="C" THEN PRINT "CARCAJ":GO SUB 590 380 IF B$(N,O,H)="D" THEN PRINT "AQUI HAY UNA ESPADA":GO SUB 650 390 IF B$(N,O,H)="4" THEN PRINT "HAS CAIDO POR UN AGUJERO...":LET H=H(-1 AND H>0):PRINT ("NO TIENE FONDO, MORIRAS..." AND H>0)+("PIERDES UN PUNTO DE CARISMA" AND H=H): LET RR=RR-1: PRINT "CARISMA ";RR: GO TO (390 AND H>0) + (3000 AND RR<=0) 395 GO TO 70 396 REM ERA NEXT U + RETURN 400 IF H=P THEN PRINT "AQUI HAY UN ";A$(U) 410 IF H+1=P THEN PRINT "SUENAN PISADAS DE "; A$(U); "EN EL TECHO" 420 IF H-1=P THEN PRINT "SUENAN PISADAS DE "; A$(U); "EN EL SUELO" 430 RETURN 440 IF O=F THEN PRINT "AQUI HAY UN ";A$(U) 450 IF O+1=F THEN PRINT "AL OESTE HAY UN ";A$(U) 460 IF O-1=F THEN PRINT "AL ESTE HAY UN ";A$(U) 470 RETURN 480 IF N=E THEN PRINT "AQUI HAY UN ";A$(U) 490 IF N+1=E THEN PRINT "HAY UN ";A$(U);"AL NORTE" 500 IF N-1=E THEN PRINT "HAY UN ";A$(U);"AL SUR" 510 RETURN 520 PRINT "LA TOMAS?";: INPUT C$ 530 IF C$="N" THEN RETURN 540 LET X$=A$(N,O,H) 543 IF X$="A" THEN LET RES=-10:LET RR=RR-10 547 IF X$="B" THEN LET RES=10:LET RR=RR+10 550 PRINT "LA POCIMA TIENE UN EFECTO ";RES;" EN TU CARISMA": PRINT "TU CARISMA ES DE ";RR 560 IF RR<1 THEN PRINT "ESTAS MUERTO": IF INT(RND*3)+1=3 THEN PRINT "BUENO, TIENES OTRA OPORTUNIDAD": LET RR=RR+10:RETURN 570 IF RR<1 THEN GO TO 3000 580 RETURN 590 PRINT "TIENE ";A(H);" FLECHAS" 600 PRINT "A TI TE FALTAN ";25-AA;" FLECHAS" 610 PRINT "CUANTAS COGES?":INPUT C$ 620 IF VAL(C$)>(25-AA) OR VAL(C$)>A(H) THEN PRINT "NO PUEDES COGER TANTAS":GO TO 590 640 LET AA=AA+VAL(C$):RETURN 641 REM ERA LET AA=AA+A(H) 650 PRINT "AQUI HAY UNA ESPADA":INPUT "LA COGES?";C$ 660 IF C$="S" THEN LET EB=BB:LET BB=B(H):LET B(H)=EB 670 RETURN 680 REM ***LUCHAR*** 690 REM ***LUCHAR*CON*EL*TRASGO*** 700 IF BB<>0 THEN INPUT "USAS LA ESPADA?";C$: IF C$="S" THEN PRINT "TU ESPADA";BB:LET RT=RT-INT(RND*(5+BB)) 710 PRINT RT;"<RESISTENCIA TRASGO" 720 IF RT<0 THEN LET B$(N,O,H)="5":RETURN 730 IF AA>0 THEN PRINT "DISPARAS FLECHAS?";C$:IF C$="S" THEN LET AA=AA-1:IF INT (RND+0.5)>1 THEN PRINT "ACIERTAS": LET RT=RT-INT(RND*4+1):PRINT RT;"<RESISTENCIA TRASGO" 740 LET RR=RR +(-1 AND RT>0) 750 PRINT "TU CARISMA ";RR:GO TO 700 760 REM LUCHA CONTRA WUMPUS 770 IF BB<>0 THEN INPUT "USAS LA ESPADA?";C$:IF C$="S" THEN PRINT "TU ESPADA";BB:LET R(U)=R(U)-INT(RND*5+BB) 780 PRINT R(U);"<RESISTENCIA";A$(U) 790 IF R(U)<0 THEN PRINT A$;" CONQUISTADO": RETURN 800 IF AA>0 THEN INPUT "DISPARAS FLECHAS?";C$:IF C$="S" THEN LET AA=AA-1:IF INT(RND+0.5)=1 THEN PRINT "ACIERTAS":LET R(U)=R(U)-INT(RND*4+1):PRINT "RESISTENCIA ";A$(U) 801 REM ERA ... LET AA=AA-1 ... IF ... 810 LET RR=RR + (-1 AND RT>0) 820 PRINT "TU CARISMA":GO TO 770 830 REM DATAS DE LOS WUMPII 840 DATA "UNICORNIO","AVE FENIX","GRIFO", "PEGASO","DRAGON DORADO":REM NOMBRE 850 DATA 10,20,25,15,30 860 REM DATAS DEL MAPEADO 870 DATA "1111111111","1555115551","1651551551", "1551451551","1515555151","1551551551","1555555551","1515555151","1551551551","1111111111" 880 DATA "1111111111","12456789B1","1555555551","1511111151","1515555151","1515115151","1555115551","1813115151","1515115151","1111111111" 890 DATA "1111111111","1A1B583151","1511511151","1551555551","1551551151","1551554151","1591191151","1358151591","1555555551","1111111111" 1000 REM ESTO FALTABA EN EL ORIGINAL 1010 DIM X(5):DIM Y(5):REM MOVIMIENTO WUMPUS 1020 DIM C(5):DIM D(5):DIM T(5):REM COORDENADAS WUMPUS 1030 DIM B$(10,10,10):REM MAPA 1040 DIM R(5): REM RESISTENCIA WUMPUS 1050 DIM A$(5,20):REM NOMBRE WUMPUS 1060 DIM A(10):REM CARCAJ 1070 DIM B(10):REM ESPADAS 1080 RESTORE 840: FOR F=1 TO 5:READ A$(F):NEXT F 1090 RESTORE 850:FOR F=1 TO 5:READ R(F):NEXT F 1100 RESTORE 870:LET UU=1:REM WUMPUS ACTUAL 1105 LET H=1+INT(RND*3):LET N=1+INT(RND*9):LET O=1+INT(RND*9):REM COORDENADAS JUGADOR 1110 FOR I=1 TO 3:REM PISOS 1120 FOR J=1 TO 10:REM NORTE-SUR 1150 READ M$:REM MAPA 1160 FOR K=1 TO 10:REM ESTE-OESTE 1170 LET B$(J,K,I)=M$(K) 1180 IF B$(J,K,I)="9" THEN LET C(UU)=J:LET D(UU)=K:LET T(UU)=I:LET UU=UU+1:LET R(UU)=INT(RND*5+2):REM WUMPUS 1190 NEXT K:NEXT J:NEXT I 1194 REM (MONSTRUOS INSUFICIENTES EN MAPA?) 1195 FOR F=UU TO 5:LET C(F)=C(1+F-UU):LET D(F)=D(1+F-UU):LET T(F)=T(F-UU+1): NEXT F 1200 LET RR=INT(5+RND*5):REM CARISMA INICIAL 1210 RETURN 2000 REM ESTO FALTABA EN EL ORIGINAL 2010 INPUT "MOVIMIENTO? (N-S-E-W)";C$ 2020 IF C$="S" AND N>1 THEN IF B$(N-1,O,H)>"1" THEN LET N=N-1 2030 IF C$="N" AND N<10 THEN IF B$(N+1,O,H)>"1" THEN LET N=N+1 2040 IF C$="W" AND N>1 THEN IF B$(N,O-1,H)>"1" THEN LET O=O-1 2050 IF C$="E" AND N<10 THEN IF B$(N,O+1,H)>"1" THEN LET O=O+1 2060 RETURN