Set Buffer 30
'
'   constantes 5.8.95
'
TCX=32 : TCY=32
SALTO=4 : HSALTO=8
OX=16 : OY=16
NX=6 : NY=4
OFFX=10 : OFFY=12
OBJMAX=9
'
'   variables  
'
Dim XNIVEL(10),YNIVEL(10),IX(10),IY(10),GMAP$(10) : NIVEL=0
Dim Z(NX,NY),CTRL(128),ME$(100),HE$(9) : Flash Off 
Dim TI(128)
LH=1500
'
Dim OBJ$(51),FOBJ(51),POBJ(51),NOBJ(51),ENE$(10),FENE(10)
Dim OB(100) : Dim ARTI(7,11)
'
Dim RGB(31,2)
Data $0,$FFF,$FF0,$CA0,$4A0,$AE0,$F,$28C,$0,$273,$A82,$FCA,$C00,$CCC,$888,$444
Data $0,$FFF,$FF0,$CA0,$4A0,$AE0,$F,$28C,$0,$273,$A82,$FCA,$C00,$CCC,$888,$444
For T=0 To 31 : Read RGB
RGB(T,0)=RGB and 15 : RGB(T,1)=(RGB and 240)/16 : RGB(T,2)=(RGB-(RGB(T,1)*16+RGB(T,0)))/256
Next 
'
' mensajes del programa en M va el valor 
'
ME$(1)="La puerta está cerrada con llave."
ME$(2)="Modo Supervisor activado."
ME$(3)="Modo Supervisor desactivado."
ME$(4)="encuentras comida."
ME$(5)="encuentras dinero."
ME$(6)="encuentras un mapa."
ME$(7)="está vacio."
ME$(8)="¡ugh, este agua no es potable!."
ME$(9)="¡buenisima!."
ME$(10)="Tu enemigo yace muerto."
ME$(11)="¡Estás muerto!"
ME$(12)="Una fuerza terrible me impide avanzar."
ME$(13)="Puedo llevarte a "
ME$(14)="Navegas por un mar en calma."
ME$(15)="No existe."
ME$(16)="O.K."
ME$(17)="Duermes 7 horas."
ME$(18)="No puedo."
ME$(19)="No puedes llevar nada más."
ME$(20)="¡Que gran negocio haces!."
ME$(21)="Por eso te puedo dar"
ME$(22)="¡Buen viaje!."
ME$(23)="Encuentras una llave"
ME$(24)="No tienes dinero suficiente."
ME$(25)="¡Buena compra!."
ME$(26)="No dispongo de ese articulo."
ME$(27)="¿Seguro que quieres tirarlo?."
ME$(28)="Elige los ingredientes."
ME$(29)="Hechizo lanzado."
ME$(30)="Yo, en tu lugar no usaria eso."
ME$(31)="Me siento muy mal."
ME$(32)="Encuentras un anillo."
ME$(33)="Recoges una Flor Roja."
ME$(34)="¡es el fabuloso Yelmo del Ojo!."
ME$(35)="¡es la Espada del Poder!."
ME$(36)="¡Cobarde!."
ME$(37)="En la huida pierdes todas tus posesiones."
ME$(38)="Encuentras un viejisimo mapa."
ME$(39)="¡Es un libro de Hechizos!."
ME$(40)="¡durante el sueño te roban todas  tus posesiones!."
ME$(41)="¡buena pesca!."
ME$(42)="Intentas pescar durante dos horas,pero sin suerte."
ME$(43)="Esta casa desprende un aura malig-na."
'  
'CARGA DE GRAFICOS 
'
' dos pantallas de 7*9 teselas de 32*32 puntos 
'  
Screen Open 0,320,256,32,Lowres : Flash Off 
Load Iff "g/pinicio"
Gosub MWAIT
Wait 50
Screen Hide 
For ZZ=49 To 50 : N$="g/cuadros"+Chr$(ZZ) : Load Iff N$
   For YY=0 To 6 : For XX=0 To 8 : CONTA=CONTA+1
      Get Icon CONTA,XX*(TCX+1),YY*(TCY+1) To XX*(TCX+1)+TCX,YY*(TCY+1)+TCY
Next : Next : Next : Cls 
'
'lectura del SPRITE PERSONAJE    
'  
Load Iff "g/sprites"
For YY=0 To 1 : For XX=0 To 10
      Get Sprite YY*13+XX+1,XX*17,YY*17 To XX*17+16,YY*17+16
Next : Next 
'
'lectura graficos objetos 3 lineas de 17 objetos c.u.
'
For YY=2 To 4 : For XX=0 To 16 : CONTA=CONTA+1
      Get Icon CONTA,XX*17,YY*17 To XX*17+16,YY*17+16
Next : Next : Cls 
'
'lectura graficos armaduras y cascos grandes 
'
Load Iff "g/sprites2"
For YY=0 To 1 : For XX=0 To 5 : CONTA=CONTA+1
   Get Icon CONTA,XX*48,YY*61 To XX*48+47,YY*61+58
   Make Icon Mask CONTA
Next : Next 
Cls 
'
Rem lectura del grafico de fondo (IFF) 
'
Load Iff "g/fond00"
Gosub PALETA
Pen 24 : Paper 19
Gosub CONTROL
'
'lectura del mapa general inicial  
COMIENZO:
X=101 : Y=66 : IX=15 : IY=15 : YDIR=-1 : HORA=10 : DIA=1 : Gosub LUZ : Gosub VIDA
MAP$="m/isla00" : NIVEL=0 : GMAP$(NIVEL)=MAP$
Gosub CARGAMAPA : Gosub PANTALLA : Gosub CAMBICON : DI=1 : Gosub RUTSPRITES
'
' programa principal 
'
Screen Show 
Key Speed 10,1
Change Mouse 2
Gosub MOVER : Randomize(Timer)
'
INICIO:
'  
   Q=Rnd(100000) : If Q<100*(EST+1) Then Gosub COMBATE
   Gosub MOVER : Rem Wait 5 
   Gosub SITUACION
   Gosub HORA
Goto INICIO
'
'
SITUACION:
If P$="p" Then SX=AX : SY=AY : Else SX=X : SY=Y
X$="00"+Right$(Str$(SX),Len(Str$(SX))-1) : X$=Right$(X$,3)
Y$="00"+Right$(Str$(SY),Len(Str$(SY))-1) : Y$=Right$(Y$,3)
COOR$=P$+"x"+X$+"y"+Y$
PTR=Instr(LOCAL$,COOR$,1) : If PTR=0 Then Return 
Rem If GPTR=PTR Then Return : Else GPTR=PTR
If P$="p" Then PTR=PTR+1
INI=PTR+8 : ME$(0)="" : L$=""
While L$<>"."
   L$=Mid$(LOCAL$,INI,1) : INI=INI+1
   ME$(0)=ME$(0)+L$
Wend 
M=0 : Gosub MENSAJES
Return 
'
'
HORA:
'
T=Timer : If T<(LH) Then Return 
Gosub HORAHECHIZOS
Inc HORA : If HORA>23 Then HORA=HORA-24 : Inc DIA
If OB(20)=4 Then Dec ANTOR : If ANTOR<1 Then OB(20)=0 : Gosub CAMBICON : Dec NOBJ(4)
If OB(21)=4 Then Dec ANTOR : If ANTOR<1 Then OB(21)=0 : Gosub CAMBICON : Dec NOBJ(4)
For T=1 To NP
OB(4)=OB(4)-2
OB(2)=OB(2)+7 : OB(3)=OB(3)+5 : OB(1)=OB(1)+3
If DESIERTO=1 Then OB(2)=OB(2)+14 : OB(1)=OB(1)+3
If NIEVE=1 Then OB(3)=OB(3)+5 : OB(1)=OB(1)+3
If SELVA=1 Then OB(1)=OB(1)+5
If CAMINO=1 Then OB(2)=OB(2) : OB(3)=OB(3)-1 : OB(1)=OB(1)-2
If SUENO=1 Then OB(1)=OB(1)-50 : OB(4)=OB(4)-5
If OB(1)<0 Then OB(1)=0
If OB(4)<0 Then OB(4)=0
If OB(2)>1000 or OB(1)>1000 or OB(3)>1000 or OB(4)>1000 Then Goto MORIR
Next 
Timer=0
If OB(22)=48 Then OB(1)=0 : OB(4)=0
If OB(22)=50 Then ULTRA=1 : For T=1 To 4 : OB(T)=OB(T)+100 : Next : Else ULTRA=0
If OB(36)=39 Then INFRA=1
Gosub LUZ : Gosub VIDA
Return 
'
PANTALLA:
'
Gosub LEEMAPA : If CTRL=1 Then CTRL=0 : Return 
Clip OX,OY To NX*TCX+OX,NY*TCY+OY : Rem evita que los graficos se salgan de limites
For YY=0 To NY : For XX=0 To NX
      Paste Icon IX+(TCX*XX-TCX)+OX,IY+(TCY*YY-TCY)+OY,Z(XX,YY)
Next : Next 
Clip 
'
LEEMAPA:
'
'los mapas deben dejar un borde de piezas iguales inicio-final 
'
JX=Int(NX/2) : JY=Int(NY/2)
For YY=0 To NY : For XX=0 To NX
      POSIX=(X+XX-JX) and XMAX
      POSIY=(Y+YY-JY) and YMAX
      POSI#=POSIY*(XMAX+1)+POSIX+Varptr(MAPA$)
      Z(XX,YY)=Peek(POSI#) : If Z(XX,YY)>107 Then Gosub CASILLASOCULTAS
Next : Next 
CU=Z(JX,JY)
'
 If CTRL(CU)>900 and TRAMPA=0 Then Gosub NOPASAR : Return : Else NADAR=0
 Gosub TERRENO
 INV=0
 Return 
'
CARGAMAPA:
'
MAPA$="" : Open In 1,MAP$
N$=Input$(1,2) : XMAX=Deek(Varptr(N$))
N$=Input$(1,2) : YMAX=Deek(Varptr(N$))
MAPA$=Input$(1,(XMAX+1)*(YMAX+1))
Close 1
If Len(MAPA$)<15000 Then Return 
LOCAL$="" : MAPTXT$=MAP$+".text"
Open In 1,MAPTXT$
LOCAL$=Input$(1,Lof(1))
Close 1
Return 
'
MOVER:
A$=Inkey$ : S=Scancode : Clear Key 
Gosub ACCION
D=Joy(1)
FUEGO=Fire(1)
         If S=95 Then Gosub TRAMPAS
         D=(D and 15)
         If D=1 or S=62 or S=76 Then DI=1 : YDIR=-1 : XDIR=0
         If D=2 or S=30 or S=77 Then DI=5 : YDIR=1 : XDIR=0
         If D=4 or S=45 or S=79 Then DI=7 : YDIR=0 : XDIR=-1
         If D=5 or S=61 Then DI=8 : YDIR=-1 : XDIR=-1
         If D=6 or S=29 Then DI=6 : YDIR=1 : XDIR=-1
         If D=8 or S=47 or S=78 Then DI=3 : YDIR=0 : XDIR=1
         If D=9 or S=63 Then DI=2 : YDIR=-1 : XDIR=1
         If D=10 or S=31 Then DI=4 : YDIR=1 : XDIR=1
         If D=0 and S=0 Then DI=0 : YDIR=0 : XDIR=0
Gosub RUTSPRITES
GX=X : GY=Y : GIX=IX : GIY=IY
IY=IY+(SALTO*YDIR*-1)
IX=IX+(SALTO*XDIR*-1)
If IY>(TCY-1) Then IY=0 : Y=Y-1 : If Y<0 Then Y=YMAX
If IY<0 Then IY=TCY-1 : Y=Y+1 : If Y>YMAX Then Y=0
If IX>(TCX-1) Then IX=0 : X=X-1 : If X<0 Then X=XMAX
If IX<0 Then IX=TCX-1 : X=X+1 : If X>XMAX Then X=0
Goto PANTALLA
'
'
RUTSPRITES:
If DI=0 Then Return 
If INV=1 Then Sprite 8,100,30,SPRIT : Return 
SP=(SP+1) and 1
SPRIT=DI
If SELVA=1 Then SPRIT=9
If NADAR=1
      SPRIT=9 : Wait 5
       For T=1 To NP : OB(1)=OB(1)+10 : Next 
      Gosub VIDA
    End If 
If SP=0 and LEVIT=0 Then SPRIT=SPRIT+13
RUTSP:
Sprite 8,NX/2*TCX-OFFX+OX+129,NY/2*TCY-OFFY+OY+45,SPRIT
Gosub CONTROLSYS
Return 
'
'
NOPASAR:
CTRL=0
If CTRL(CU)=999 Then CTRL=1
If CTRL(CU)=998 and IX<(TCX/2) and IY<(TCY/2) Then CTRL=1
If CTRL(CU)=997 and IX>(TCX/2-1) and IY<(TCY/2) Then CTRL=1
If CTRL(CU)=996 and IX<(TCX/2) and IY>(TCY/2-1) Then CTRL=1
If CTRL(CU)=995 and IX>(TCX/2-1) and IY>(TCY/2-1) Then CTRL=1
If CTRL(CU)=994 and IX>(TCX/2-1) Then CTRL=1
If CTRL(CU)=993 and IX<(TCX/2) Then CTRL=1
If CTRL(CU)=992 and IY>(TCY/2-1) Then CTRL=1
If CTRL(CU)=991 and IY<(TCY/2) Then CTRL=1
If CTRL(CU)=990 and IX>(TCX/4-1) and IX<((TCX/4)*3) Then CTRL=1
If CTRL(CU)=989 and IY<((TCY/4)*3) and IY>(TCY/4-1) Then CTRL=1
If CTRL(CU)=988 and IX>(TCX/4-1) and IX<((TCX/4)*3) and IY<((TCY/4)*3) and IY>(TCY/4-1) Then CTRL=1
If CTRL(CU)=987 Then INV=1 : Rem el personaje no se ve
If CTRL(CU)=986 Then CTRL=1
'
If CTRL(CU)=985 Then CTRL=1 : If IY<(TCY/2) and IX>(TCX/2-1) Then CTRL=0
If CTRL(CU)=984 Then CTRL=1 : If IY<(TCY/2) and IX<(TCX/2) Then CTRL=0
If CTRL(CU)=983 Then CTRL=1 : If IY>(TCY/2-1) and IX>(TCX/2-1) Then CTRL=0
If CTRL(CU)=982 Then CTRL=1 : If IY>(TCY/2-1) and IX<(TCX/2) Then CTRL=0
If CTRL(CU)=981 and IY>(TCY/2-1) and IX<((TCX/4)*3) and IX>(TCX/4-1) Then CTRL=1
If X=0 or Y=0 or X=XMAX or Y=YMAX Then M=12 : Gosub MENSAJES
If LEVIT>0 Then Goto LEVITAR
Gosub TERRENO
If CTRL=1 or M=12 Then AX=X : AY=Y : X=GX : Y=GY : IX=GIX : IY=GIY
Gosub CASILLAS
Return 
LEVITAR:
NADAR=0
If CTRL=0 Then Return 
If CU=62 or CU=63 or M=12 Then X=GX : Y=GY : IX=GIX : IY=GIY : Return 
CTRL=0
Return 
'------------------- 
CONTROL:
Rem el valor 0 permite el paso libremente, el 999 lo impide otros valores
Rem mayores que 900 realizan otras funciones (final rutina leemapa)
Data 999,984,985,982,983,999,999,999,999
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,0,0,0,0,0
Data 0,0,0,0,986,986,986,980,901
Data 0,0,0,0,0,0,0,988,988
Data 999,989,990,999,986,995,986,999,0
Data 0,992,0,999,986,901,981,999,986
'
Data 999,984,985,982,983,999,999,999,999
Data 0,998,997,996,995,0,0,992,0
Data 0,0,988,988,999,999,999,999,999
Data 983,999,982,999,999,999,985,999,984
Data 999,999,999,986,986,995,988,999,0
Data 0,0,0,0,0,0,0,980,980
Data 988,999,0,968,0,968,986,986,986
For T=1 To 126 : Read CTRL(T) : Next 
'
Data 6,6,6,6,6,6,6,6,6
Data 2,2,2,2,2,2,2,2,2
Data 1,1,1,1,1,1,1,1,1
Data 5,10,10,6,10,10,10,6,14
Data 14,14,14,14,14,14,14,4,4
Data 15,15,15,15,10,10,14,4,4
Data 13,10,10,10,10,10,15,9,9
'
Data 12,12,12,12,12,12,12,12,12
Data 14,14,14,14,14,14,14,10,14
Data 4,5,4,15,15,15,15,15,15
Data 3,3,10,3,10,10,3,10,10
Data 3,10,12,15,0,13,12,15,13
Data 0,0,0,0,0,0,0,0,13
Data 4,4,13,4,13,13,10,13,13
For T=1 To 126 : Read TI(T) : Next 
Rem si fobj<0 es valor defensivo si 0 se pueden llevar hasta 3 
Data "comida",0,5,"un odre de agua",0,5,"una caña de pescar",1,10,"una antorcha",1,50
Data "un martillo",1,35,"luthil",0,25,"thembros",0,25,"pirit",0,25
Data "clorphil",0,25,"azur",0,25,"un mapa",0,1000,"una pócima curativa",0,500
Data "la flor roja",0,10000,"un viejo mapa",0,100,"un libro de hechizos",0,10000
Data "espejo",0,500,"una bola de cristal",0,300,"una estatuilla",0,500,"una jarra",0,50
Data "un dado",0,10,"un escudo",3,150,"un escudo",6,300,"un escudo mágico",12,600
Data "una coraza",3,150,"una coraza mágica",10,500,"una coraza",6,300,"una coraza mágica",14,700
Data "un hacha",7,350,"un puñal",2,100,"una espada",5,250,"una espada",8,400
Data "una espada mágica",10,500,"una espada mágica",16,800,"una maza",5,250,"un yelmo",2,100
Data "un yelmo",3,150,"un yelmo mágico",5,250,"un yelmo mágico",10,500,"el yelmo del Ojo",10,1500
Data "la espada del poder",30,5000
Data "",0,0,"",0,0,"",0,0,"",0,0
Data "la llave dorada",0,500,"Elixir Rojo",0,500,"el anillo Rubí",0,10000
Data "el anillo zafiro",0,10000,"el anillo esmeralda",100,10000,"el anillo Maldito",500,50000
For T=1 To 50 : Read OBJ$(T),FOBJ(T),POBJ(T) : Next : Rem nombre,fuerza,precio 
Data "Serpiente",300,"Orco",700,"Reptiloide",900
Data "Licántropo",1100,"Bandido",1300,"Troll",3000,"Dragón",5000
For T=1 To 7 : Read ENE$(T),FENE(T) : Next 
Data 1,2,4,8,10,11,12,16,18,0,0,0
Data 1,2,4,5,7,9,11,16,17,0,0,0
Data 1,2,3,4,5,8,17,20,0,0,0,0
Data 1,2,3,4,5,6,9,10,11,19,20,0
Data 21,22,24,26,29,30,31,34,35,0,0,0
Data 21,23,25,26,27,28,31,32,34,36,0,0
Data 21,22,24,29,31,33,34,37,38,0,0,0
Data 23,24,27,28,29,31,33,37,38,0,0,0
For Q=0 To 7 : For T=0 To 11 : Read ARTI(Q,T) : Next : Next 
Return 
'
TERRENO:
SELVA=0 : DESIERTO=0 : NIEVE=0 : NADAR=0 : CAMINO=0 : AGUA=0 : CUEVA=0
If CU>0 and CU<10 and CTRL=1
   'agua
   NADAR=1 : CTRL=0 : AGUA=1
End If 
If CU>63 and CU<73 and CTRL=1
   'lava
   If OB(22)=47 : CTRL=0 : Return : End If 
   OB(4)=OB(4)+250 : If OB(4)>999 : Gosub MORIR : Else Gosub VIDA : End If 
End If 
If CU>9 and CU<19
   'desierto
   Wait 1 : DESIERTO=1
End If 
If CU>18 and CU<28
   'nieve 
   Wait 1 : NIEVE=1
End If 
If CU>36 and CU<44
   'camino
   CAMINO=1
End If 
If CU=54
   'selva 
   If TRAMPA=1 : Return : End If 
   Wait 5 : SELVA=1
End If 
If CU>72 and CU<80 Then CUEVA=1
Return 
MENSAJES:
If GM$=Left$(ME$(M),15) Then Return 
GM$=Left$(ME$(M),15)
Cls 19,24,200 To 296,232
Locate 3,25 : Print Mid$(ME$(M),1,34)
Locate 3,26 : Print Mid$(ME$(M),34+1,34)
Locate 3,27 : Print Mid$(ME$(M),34*2+1,34)
Locate 3,28 : Print Mid$(ME$(M),34*3+1,34)
Return 
'
MENLARGOS:
Open In 1,ML$ : ME$=Input$(1,Lof(1)) : Close 1 : N=1
ML1:
Cls 19,24,200 To 296,232
Locate 3,25 : Print Mid$(ME$,N,34)
Locate 3,26 : Print Mid$(ME$,N+34,34)
Locate 3,27 : Print Mid$(ME$,N+34*2,34)
Locate 3,28 : Print Mid$(ME$,N+34*3,34)
Gosub MWAIT
N=N+34*4 : If N>Len(ME$) Then Clear Key : Return 
Goto ML1
'
CAMBIO:
          CASX=AX : CASY=AY
          IX(NIVEL)=IX : IY(NIVEL)=IY
          XNIVEL(NIVEL)=X : YNIVEL(NIVEL)=Y
          NIVEL=NIVEL+1 : IX=15 : IY=15
          Gosub CARGAMAPA : Gosub LUZ
Return 
' las casillas cuyo valor sea especial se controlan aqui 
CASILLAS:
If CU=32
         'tienda  
          ARM=(AY and 1)+(AX and 1)*2
          Load Iff "g/tien00" : Gosub PALETA
          Gosub ARTICULOS
          Gosub COMPRAVENTA : Gosub LUZ
End If 
If CU=33 or CU=124
         'casa ciudad 
          If MAP$="m/isla00" and AX=112 and AY=102
              GMAP$(NIVEL)=MAP$ : MAP$="m/bibl00"
              SEG=1 : Gosub CAMBIO : X=7 : Y=12 : Return : End If 
          If MAP$="m/isla01" and AX=119 and AY=8
              GMAP$(NIVEL)=MAP$ : MAP$="m/bibl01"
              SEG=1 : Gosub CAMBIO : X=7 : Y=12 : Return : End If 
          If MAP$="m/isla03" and AX=64 and AY=86
              M=43 : Gosub MENSAJES
              Wait 100 : LLAVE=1
            End If 
          If LLAVE=0 and ABREP=0 : M=1 : Gosub MENSAJES : Return : End If 
          GMAP$(NIVEL)=MAP$
          If CU=33 : MAP$="m/casa00" : Else MAP$="m/casa01" : End If 
          LLAVE=0 : ABREP=0 : SEG=1 : Gosub CAMBIO
          X=(AX and 3)*16+6 : Y=(AY and 3)*16+12
          Return 
   End If 
If CU=34
         'casa de campo 
          GMAP$(NIVEL)=MAP$ : MAP$="m/caba00" : SEG=1 : Gosub CAMBIO
          X=(AX and 3)*8+2 : Y=(AY and 3)*8+5
          Return 
   End If 
If CU=36 or CU=60
         'estrellas 
         If IX<12 or IX>20 or IY<12 or IY>20 : Return : End If 
         If MISION=2 : MISION=3 : End If 
         If CU=36 : Inc EST : Else Dec EST : End If 
         N$=Chr$(48+EST)
         GMAP$(NIVEL)=MAP$ : MAP$="m/isla0"+N$ : GLUZ=0 : LUZ=0
         Gosub CARGAMAPA : Gosub LUZ
         Return 
   End If 
If CU=45
        'mallorn 
         If OB(1)+OB(4)>0 : OB(1)=0 : OB(4)=0 : Gosub VIDA : End If 
   End If 
If CU=50
         'armeria 
          ARM=(AY and 1)+(AX and 1)*2+4
          Load Iff "g/arme00" : Gosub PALETA
          Gosub ARTICULOS
          Gosub COMPRAVENTA : Gosub LUZ
End If 
If CU=52
         'trampilla  despues se seleccionan coordenadas 
          GMAP$(NIVEL)=MAP$
          GLUZ=LUZ : LUZ=1 : Gosub LUZ
          MAP$="m/labe0"+Chr$(48+(AY and 1))
          Gosub CAMBIO : X=16 : Y=2
          Return 
   End If 
If CU=56
         'armario 
          J$="n"+Chr$(NIVEL)+"x"+Chr$(CASX)+"y"+Chr$(CASY)
          PTR=Instr(ARM$,J$) : If PTR>0 : M=7 : Gosub MENSAJES : Return : End If 
          Q=Rnd(100)
          If Q>38 or Q=13 or Q=14 or Q=15 : 
             Q=Rnd(49)+1 : OB(5)=OB(5)+Q : M=5 : Gosub MENSAJES
             Else OBJ=Q : Gosub GUARDAR
             Locate 3,25 : Print "al abrir el armario encuentras:  "
             Locate 3,26 : Print OBJ$(Q)
          End If 
         Wait 50
         ARM$=ARM$+J$
         Return 
   End If 
If CU=59
         'posada
          NO$="g/posa00"
          Load Iff NO$ : Gosub PALETA
          SEG=1 : Gosub POSADA : SEG=0 : Gosub LUZ
          Gosub RUTSP : Gosub MOVER
   End If 
If CU=116
         'libro 
          If LIBRO<1 : OBJ=15 : Gosub GUARDAR : If M<>19 : Inc LIBRO : End If 
          M=39 : Gosub MENSAJES : End If 
End If 
If CU=117
         'mapa  
          If VMAP<1 : OBJ=14 : Gosub GUARDAR : If M<>19 : Inc VMAP : End If 
          M=38 : Gosub MENSAJES : End If 
   End If 
If CU=63
         NIVEL=NIVEL-1 : X=XNIVEL(NIVEL) : Y=YNIVEL(NIVEL)
         IX=IX(NIVEL) : IY=IY(NIVEL)
         MAP$=GMAP$(NIVEL) : Gosub CARGAMAPA
         LUZ=GLUZ : Gosub LUZ : SEG=0
         Return 
    End If 
'
If CU=80 and IY<16 Then Gosub VIAJES
'
If CU=103
         'cueva 
          GMAP$(NIVEL)=MAP$
          GLUZ=LUZ : LUZ=1 : Gosub LUZ
          MAP$="m/cuev"+Chr$((AX and 1)+48)+Chr$((AY and 1)+48)
          SEG=1 : Gosub CAMBIO : X=8 : Y=27
          Return 
   End If 
If CU=104
         'templo
          GMAP$(NIVEL)=MAP$
          MAP$="m/temp00"
          Gosub CAMBIO : X=15 : Y=29
          Return 
   End If 
If CU=105
         'libro 
          If CTRL=0 : Return : End If 
 If X>19 : ML$="t/mens2"+Chr$(X+28) : End If 
 If X>9 and X<20 : ML$="t/mens1"+Chr$(X+38) : End If 
 If X<10 : ML$="t/mens0"+Chr$(X+48) : End If 
          IY=10
          Gosub MENLARGOS
   End If 
If CU=107
      'puerta dorada 
      If ABREP<1 : ML$="t/mens16" : Gosub MENLARGOS : IY=15 : Return : End If 
          GMAP$(NIVEL)=MAP$
          GLUZ=LUZ : LUZ=1 : Gosub LUZ
          MAP$="m/labe02"
          Gosub CAMBIO : X=2 : Y=2
          Return 
       Return 
   End If 
If CU=118
         'caminante 
         If IX<12 or IX>22 or IY>11 or IY<1 : Return : End If 
         If MISION=0 : ML$="t/mens00" : DINERO=300 : OBJ=46 : End If 
         If MISION=3 : ML$="t/mens02" : DINERO=500 : OBJ=12 : End If 
         Gosub MENLARGOS : Gosub GUARDAR : IY=0 : Inc MISION
         OB(5)=OB(5)+DINERO
   End If 
If CU=119
        'muerto
         ML$="t/mens01"
         Gosub MENLARGOS : MISION=2
   End If 
If CU=121
        'flor
         M=33 : Gosub MENSAJES : OBJ=13 : Gosub GUARDAR : If M<>19 : FLOR=1 : End If 
   End If 
If CU=123
        'anillo
         GANILLO=ANILLO : M=32 : Gosub MENSAJES
         If X=29 : ANILLO=ANILLO or 1 : OBJ=47 : End If 
         If X=24 : ANILLO=ANILLO or 2 : OBJ=48 : End If 
         If X=75 : ANILLO=ANILLO or 4 : OBJ=49 : End If 
         If X=10 : ANILLO=ANILLO or 8 : OBJ=50 : ML$="t/mens30" : Gosub MENLARGOS : End If 
         Gosub GUARDAR : If M=19 : ANILLO=GANILLO : End If 
   End If 
If CU=125
        'yelmo 
         M=34 : Gosub MENSAJES : OBJ=39 : Gosub GUARDAR : If M<>19 : Inc YELMO : End If 
   End If 
If CU=126
        'espada
         M=35 : Gosub MENSAJES : OBJ=40 : Gosub GUARDAR : If M<>19 : Inc ESPADA : End If 
   End If 
Return 
'
PESCAR:
   If CU>9 Then M=18 : Goto FPESCAR
   If OB(20)<>3 and OB(21)<>3 Then M=18 : Goto FPESCAR
   Timer=LH+1 : Gosub HORA : Timer=LH+1 : Gosub HORA
   R=Rnd(100) : If R<20 Then OBJ=1 : Gosub GUARDAR : M=41 : Else M=42
FPESCAR:
   Gosub MENSAJES
Return 
BEBER:
   M=18 : C=0
   If CU<10 or CU=31 or CU=35 Then M=9
   For T=-2 To 2 : For Q=-2 To 2
     If Z(JX+Q,JY+T)=1 Then C=C+1
   Next : Next 
   If C>1 Then M=8
   If M<>9 Then OBJ=2 : Gosub SACAR : If ESTA>0 Then M=9
   If M=9 Then OB(2)=0 : Gosub VIDA
Gosub MENSAJES
Return 
'
COMER:
M=18 : OBJ=1
Gosub SACAR
If ESTA>0 Then OB(3)=OB(3)-500 : M=9 : If OB(3)<0 Then OB(3)=0
Gosub VIDA
Gosub MENSAJES
Return 
'
VENENO:
Gosub SACAR
For T=1 To 4 : If OB(T)<900 Then OB(T)=900 : Next 
Gosub VIDA : M=31 : Gosub MENSAJES
Return 
MORIR:
M=11 : Gosub MENSAJES
Gosub MOVER
Sprite 8,NX/2*TCX-OFFX+OX+129+(IX-TCX/2),NY/2*TCY-OFFY+OY+45+(IY-TCY/2),11
Gosub MWAIT
For T=1 To NP : For Q=0 To 100 : OB(Q)=0 : Next : Next 
ARM$="" : LUZ=0 : GLUZ=0 : ANTOR=0 : GANT=0 : ULTRA=0 : LLAVE=0 : MISION=0 : ANILLO=0
FLOR=0 : YELMO=0 : ESPADA=0 : EST=0
For T=0 To 10 : XNIVEL(T)=0 : YNIVEL(T)=0 : IX(T)=0 : IY(T)=0 : GMAP$(T)="" : Next 
For T=1 To 51 : NOBJ(T)=0 : Next 
Gosub MWAIT
Goto COMIENZO
Return 
'
SUENO:
If CU<10 Then M=18 : Gosub MENSAJES : Return 
Sprite 8,NX/2*TCX-OFFX+OX+129+(IX-TCX/2),NY/2*TCY-OFFY+OY+45+(IY-TCY/2),10
For SU=1 To 7 : Timer=LH+1 : SUENO=1 : Gosub HORA : Next : SUENO=0
M=17 : If SEG<1 Then Gosub ROBO
 Gosub MENSAJES
Return 
ROBO:
R=Rnd(100) : If R>9 Then Return 
For T=20 To 36
If OB(T)<47 Then NOBJ(OB(T))=0 : OB(T)=0
Next : Gosub CAMBICON : If FLOR=1 Then FLOR=0
M=40
Return 
'  
MAPA:
If XMAX<63 and TRAMPA=0 Then Return 
OBJ=11 : Gosub SACAR : If ESTA=0 and TRAMPA=0 Then Return 
KX=16 : KY=16 : H=1
OXMAP=X-16
OYMAP=Y-16
 If X<16 Then OXMAP=0 : KX=X
 If Y<16 Then OYMAP=0 : KY=Y
 If X>(XMAX-16) Then OXMAP=XMAX-31 : KX=(X and 31)
 If Y>(YMAX-16) Then OYMAP=YMAX-31 : KY=(Y and 31)
For T=0 To 31 : For Q=0 To 31
      N1=(T+OYMAP)*(YMAX+1)+Q+OXMAP
      N=Peek(Varptr(MAPA$)+N1)
      For F=0 To H : For G=0 To H
            Plot Q*(H+1)+20+G,T*(H+1)+20+F,TI(N)
      Next : Next 
Next : Next 
Plot 16,16,8
Box 19,19 To 16+68,16+68
Plot 20+KX*(H+1),20+KY*(H+1),12
Plot 21+KX*(H+1),20+KY*(H+1),12
Plot 20+KX*(H+1),21+KY*(H+1),12
Plot 21+KX*(H+1),21+KY*(H+1),12
Gosub MWAIT
Return 
'
TRAMPAS:
If TRAMPA=1 Then TRAMPA=0 : SALTO=GSALTO : M=3 : Gosub MENSAJES : Return 
GSALTO=SALTO : SALTO=32 : TRAMPA=1
M=2 : Gosub MENSAJES
Return 
CONTROLSYS:
If TRAMPA=0 Then Return 
If LLAVE=0 Then LLAVE=1
MX=X Mouse : MY=Y Mouse
Locate 3,28 : Print Using "X=### ";X;
              Print Using "Y=### ";Y;
              Print Using "CU=### ";CU;
              Print Using "MX=### ";X Mouse;
              Print Using "MY=###";Y Mouse;
Return 
'
LEER:
Cls 19,24,200 To 296,232
Locate 3,25 : Input "¿Nombre? ";N$ : If N$="" Then Return 
If Exist(N$)=True Then Open In 1,N$ : Else M=15 : Gosub MENSAJES : Return 
Input #1,SALTO,GSALTO,X,Y,IX,IY,NP,NIVEL,HORA,DIA,DI,XDIR,YDIR,CU,TRAMPA
Input #1,LUZ,GLUZ,ANTOR,GANT,INFRA,ULTRA,LLAVE,MISION,ANILLO,FLOR,YELMO,ESPADA,EST,VMAP,LIBRO,SEG
For T=0 To 10 : Input #1,XNIVEL(T),YNIVEL(T),IX(T),IY(T),GMAP$(T) : Next 
For T=1 To NP : For Q=1 To 100 : Input #1,OB(Q) : Next : Next 
For T=1 To 51 : Input #1,NOBJ(T) : Next 
Input #1,MAP$,ARM$
Close 1
Gosub CAMBICON : Gosub VIDA : M=16 : Gosub MENSAJES
Gosub LUZ : Gosub CARGAMAPA
Return 
'
GRABAR:
Cls 19,24,200 To 296,232
Locate 3,25 : Input "¿Nombre? ";N$ : If N$="" Then Return 
Open Out 1,N$ : R$=Chr$(13)
Print #1,SALTO;R$;GSALTO;R$;X;R$;Y;R$;IX;R$;IY;R$;NP;R$;NIVEL;R$;
Print #1,HORA;R$;DIA;R$;DI;R$;XDIR;R$;YDIR;R$;CU;R$;TRAMPA;R$;LUZ;R$;GLUZ;R$;
Print #1,ANTOR;R$;GANT;R$;INFRA;R$;ULTRA;R$;LLAVE;R$;MISION;R$;ANILLO;R$;FLOR;R$;YELMO;R$;ESPADA;R$;EST;R$;VMAP;R$;LIBRO;R$;SEG;R$;
For T=0 To 10 : Print #1,XNIVEL(T);R$;YNIVEL(T);R$;IX(T);R$;IY(T);R$;" ";GMAP$(T);R$; : Next 
For T=1 To NP : For Q=1 To 100 : Print #1,OB(Q);R$; : Next : Next 
For T=1 To 51 : Print #1,NOBJ(T);R$; : Next 
Print #1," ";MAP$;R$;" ";ARM$;R$;Chr$(10)
Close 1
M=16 : Gosub MENSAJES
Return 
'
RATON:
MO=0
MO=Mouse Click
MX=X Mouse : MY=Y Mouse
Return 
'
ACCION:
Gosub RATON : If MO=0 Then Return 
If MX>143 and MX<432 and MY>201 and MY<219 Then MSEL=Int((MX-144)/16) : Else If MO=2 Then Gosub TIRAR : Return : Else Return 
If MSEL=0 Then Gosub GRABAR
If MSEL=1 Then Gosub LEER
If MSEL=2 Then Gosub BEBER
If MSEL=3 Then Gosub SUENO
If MSEL=4 Then Gosub PESCAR
If MSEL=5 Then Gosub LLAVES
If MSEL=6 Then Gosub MAPA
If MSEL=7 Then Gosub DINERO
If MSEL=8 Then Gosub RELOJ
If MSEL=9 Then Gosub HECHIZOS
If MSEL=10 Then Gosub LANZAHECHIZOS
If MSEL=11 Then Return 
Return 
'
LLAVES:
If OB(6)>0 and LLAVE=0 : Dec OB(6) : LLAVE=1 : M=0
       ME$(0)="Te quedan"+Str$(OB(6))+" llaves."
       Gosub MENSAJES : Return : End If 
M=18 : Gosub MENSAJES
Return 
VIDA:
For T=0 To 3
V=OB(T+1)/20 : If V>49 Then Goto MORIR
               If V>45 Then M=31 : Gosub MENSAJES
Ink 28 : If V>0 Then Bar 227+T*7+(T/2*50),18 To 230+T*7+(T/2*50),18+V
Ink 20 : If V<49 Then Bar 227+T*7+(T/2*50),18+V To 230+T*7+(T/2*50),68
Next 
Return 
LUZ:
P#=0.1
If HORA=5 or HORA=23 Then P#=0.2
If HORA=6 Then P#=0.4
If HORA=7 Then P#=0.6
If HORA=22 Then P#=0.5
If HORA=8 or HORA=21 Then P#=0.7
If HORA=9 or HORA=20 Then P#=0.8
If HORA=10 or HORA=19 Then P#=0.9
If HORA>10 and HORA<19 Then P#=1
If OB(20)=4 or OB(21)=4 Then ANT=1 : Else ANT=0
If LUZ=1 or P#<0.7 Then LUZMENOR=1 : Else LUZMENOR=0
For T=1 To 15
  If ANT>0 and LUZMENOR=1 Then P#=0.7
     C0=RGB(T,0)*P# : C1=RGB(T,1)*P# : C2=RGB(T,2)*P#
  If ANT>0 Then Goto SALLUZ
  If INFRA>0 and LUZMENOR=1 Then C0=0 : C1=0 : C2=RGB(T,2) : Goto SALLUZ
  If ULTRA>0 and LUZMENOR=1 Then C2=0 : C1=0 : C0=RGB(T,0) : Goto SALLUZ
     If LUZ=1 Then C0=0 : C1=0 : C2=0 : Rem oscuridad  
SALLUZ:
     Colour T,(C2*256+C1*16+C0)
Next 
Return 
PALETA:
 For T=0 To 31
   Colour T,(RGB(T,2)*256+RGB(T,1)*16+RGB(T,0))
 Next 
Return 
'
Rem ------------------------------------ 
CAMBICON:
   For T=20 To 35 : IOY=Int((T-20)/4)*20 : IOX=(T and 3)*20
      OBJ=OB(T) : If OBJ=0 and T<24 Then OBJ=21+T
                       If OBJ=0 and T>23 Then OBJ=51
      Paste Icon IOX+226,IOY+100,OBJ+126
   Next 
ICONGRANDE:
Paste Icon 241,18,178
OBJ=OB(36)
If OBJ>0 Then Paste Icon 241,18,OBJ+126+22
OBJ=OB(37)
If OBJ>0 Then Paste Icon 241,18,OBJ+126+29
Return 
'----------------------------------------
SACAR:
If OBJ=50 and CU=106 Then Goto FINAL
If OBJ=13 Then FLOR=0
If OBJ>46 Then M=18 : Gosub MENSAJES : Return 
ESTA=0
For T=20 To 37
   If OB(T)=OBJ
       ESTA=OBJ : Dec NOBJ(OBJ)
       If NOBJ(OBJ)=0 or FOBJ(OBJ)<>0
         OB(T)=0 : Gosub CAMBICON : Return 
       End If 
   End If 
Next 
Return 
'--------------------------------- 
GUARDAR:
If NOBJ(OBJ)>OBJMAX Then M=19 : Gosub MENSAJES : Return 
If FOBJ(OBJ)=0 Then Gosub GUARDVAR : If T=40 Then Goto FINGUARDAR
For T=24 To 35
If OB(T)=0 Then OB(T)=OBJ : Inc NOBJ(OBJ) : Goto FINGUARDAR
Next 
M=19 : Gosub MENSAJES : Return 
FINGUARDAR:
Gosub CAMBICON
Gosub MENSAJES
Return 
GUARDVAR:
For T=24 To 35
If OB(T)=OBJ Then Inc NOBJ(OBJ) : T=39
Next 
Return 
'----------------------------------- 
INFORME:
   If Point(X Mouse-128,Y Mouse-42)=8 Then M=26 : Gosub MENSAJES : Return 
INFOR2:
   If OBJ<1 Then Return 
   ME$(0)="" : GM$="*" : M=0 : Gosub MENSAJES
   Locate 3,25 : Print OBJ$(OBJ);
   If FOBJ(OBJ)<>0 Then Print " de +";Abs(FOBJ(OBJ));
   Locate 3,26 : Print "su precio es de";POBJ(OBJ);" monedas"
   Locate 3,27 : Print "en tu mochila hay";NOBJ(OBJ)
Return 
'------------------------------------
CUERPO:
CUERPO=0
If LUG=16 and OBJ>34 and OBJ<40 Then CUERPO=1
If LUG=17 and OBJ>23 and OBJ<28 Then CUERPO=1
If LUG=3
   If OBJ=1 : Gosub COMER : CUERPO=1 : End If 
   If OBJ=2 : OB(2)=0 : Gosub SACAR : Gosub VIDA : CUERPO=1 : End If 
   If OBJ>5 and OBJ<11 : Gosub VENENO : CUERPO=1 : End If 
   If OBJ=12 : Gosub SACAR : For T=1 To 4 : OB(T)=0 : Next : Gosub VIDA : CUERPO=1 : End If 
   If OBJ=13 : Gosub SACAR : FLOR=2 : LEVIT=1 : Timer=LH+1 : Gosub HORA : End If 
   If OBJ=46 : Gosub SACAR : INFRA=24 : CUERPO=1 : End If 
End If 
If CUERPO=0 Then M=18 : Gosub MENSAJES
Return 
TIRAR:
Gosub OBJYLUG2
If LUG<0 or OBJ<1 Then Return 
If OBJ=14 Then Sprite Off 8 : Load Iff "g/mapa00" : Gosub PALETA : Gosub MWAIT : Gosub RUTSP : Gosub MOVER
If OBJ=15 Then ML$="t/mens18" : Gosub MENLARGOS : Gosub MWAIT : Return 
Gosub INFOR2
LUG2=LUG : OBJ2=OBJ
Gosub OBJYLUG
Swap OBJ,OBJ2
If LUG<0 Then M=27 : Gosub MENSAJES : Gosub NOSI : If NOSI=False Then Return : Else M=16 : Gosub MENSAJES : Gosub SACAR : Return 
If LUG=3 or LUG=16 or LUG=17 Then Gosub CUERPO : If CUERPO=0 Then Return 
If LUG<>3 Then Swap OB(LUG+20),OB(LUG2+20)
If OB(22)>0 and OB(22)<47 Then Swap OB(LUG+20),OB(LUG2+20)
If OB(20)=4 and ANTOR=0 Then ANTOR=6
If OB(21)=4 and ANTOR=0 Then ANTOR=6
Gosub CAMBICON : Gosub LUZ
Return 
'
COMPRAVENTA:
Sprite Off 8
TIENDA=1
Gosub OBJYLUG
If LU>15 and LU<20 Then Goto FINCP
If MO=1 Then Gosub INFORME : Goto COMPRAVENTA
If LUG<0 and OBJ>0 Then Gosub COMPRA : Goto COMPRAVENTA
If LUG>-1 and OBJ>-1 Then Gosub VENTA : Goto COMPRAVENTA
FINCP:
TIENDA=0
Gosub RUTSP
Return 
'
ARTICULOS:
For T=0 To 11
AR=ARTI(ARM,T) : IOY=Int(T/4)*24 : IOX=(T and 3)*24
If AR>0 Then Paste Icon IOX+115,IOY+27,AR+126
Next 
Return 
'
OBJYLUG:
LUG=-1 : OBJ=-1 : INF=-1
If Fire(1)=True Then Return 
MO=Mouse Click : If MO=0 Then Goto OBJYLUG
MX=X Mouse : MY=Y Mouse
OBJYLUG2:
If MX>242 and MX<329 and MY>71 and MY<182 Then LU=((MX-242)/24)+((MY-71)/24)*4 : If LU>-1 and LU<12 and TIENDA=1 Then OBJ=ARTI(ARM,LU)
If MX>354 and MX<430 and MY>99 and MY<217 Then LUG=((MX-354)/20)+((MY-141)/20)*4 : OBJ=OB(LUG+20)
If MX>383 and MX<401 and MY>64 and MY<88 Then LUG=16 : OBJ=OB(LUG+20)
If MX>367 and MX<415 and MY>87 and MY<119 Then LUG=17 : OBJ=OB(LUG+20)
Return 
'
COMPRA:
If Point(X Mouse-128,Y Mouse-42)=8 Then M=26 : Gosub MENSAJES : Return 
M=25 : If OB(5)<POBJ(OBJ) Then M=24 : Gosub MENSAJES : Return 
If NOBJ(OBJ)>OBJMAX Then M=19 : Gosub MENSAJES : Return 
OB(5)=OB(5)-POBJ(OBJ)
Gosub GUARDAR
Return 
'
VENTA:
If OBJ=0 Then Return 
DINERO=POBJ(OBJ)
M=21 : Gosub MENSAJES : Locate 23,25 : Print Str$(DINERO/2);" monedas."
Gosub NOSI : If NOSI=False Then Return 
Gosub SACAR
If ESTA>0 Then OB(5)=OB(5)+DINERO/2 : M=20 : Gosub MENSAJES
Return 
'
MWAIT:
Clear Key 
MW2:
A$=Inkey$ : B=Mouse Click
If A$=Chr$(13) or B<>0 Then Return 
If Fire(1)=False and A=1 Then A=0 : Return 
If Fire(1)=True and A=0 Then A=1
Goto MW2
'
POSADA:
Sprite Off 8
If Fire(1)=True Then Return 
MO=Mouse Click : If MO=0 Then Goto POSADA
MX=X Mouse : MY=Y Mouse
If MX<243 or MX>328 or MY<72 or MY>181 Then Goto POSADA
MSEL=(MY-70)/24
If MSEL=0
   If OB(5)<7 : M=24 : Gosub MENSAJES : Goto POSADA : End If 
   OB(2)=0 : OB(3)=0 : OB(5)=OB(5)-7
   M=9 : Gosub MENSAJES : Goto POSADA
   End If 
If MSEL=1
   If OB(5)<6 : M=24 : Gosub MENSAJES : Goto POSADA : End If 
   For SU=1 To 7 : Timer=LH+1 : SUENO=1 : Gosub HORA : Next : SUENO=0
   OB(5)=OB(5)-6 : M=17 : Gosub MENSAJES : Goto POSADA
   End If 
If MSEL=2 Then P$="p" : Gosub SITUACION : P$="" : Goto POSADA
If MSEL=3 Then Goto POSADA
If MSEL>4 Then Goto POSADA
Gosub RUTSP
Return 
'
NOSI:
Paste Icon 78,112,81
Gosub MWAIT : NOSI=False
If Upper$(A$)="S" Then NOSI=True
MX=X Mouse : MY=Y Mouse
If MX>208 and MX<220 and MY>157 and MY<183 Then NOSI=True
Return 
'
VIAJES:
'cuidar que no coincidan coord. en niveles distintos 
If X=94 and Y=109
   If OB(5)<100 : M=24 : Gosub MENSAJES : Return : End If 
   M=13 : Gosub MENSAJES : Locate 20,25 : Print "Larissa por 100 m."
   Gosub NOSI : 
   If NOSI=True : X=112 : Y=34 : OB(5)=OB(5)-100
   Else Gosub NOVIAJE : Return : End If 
VH=6
End If 
If X=113 and Y=34
   If OB(5)<100 : M=24 : Gosub MENSAJES : Return : End If 
   M=13 : Gosub MENSAJES : Locate 20,25 : Print "Krusth por 100 m."
   Gosub NOSI : 
   If NOSI=True : X=95 : Y=109 : OB(5)=OB(5)-100
   Else Gosub NOVIAJE : Return : End If 
VH=6
End If 
If X=116 and Y=99
   If OB(5)<200 : M=24 : Gosub MENSAJES : Return : End If 
   M=13 : Gosub MENSAJES : Locate 20,25 : Print "Arsalak por 200 m."
   Gosub NOSI : 
   If NOSI=True : X=108 : Y=13 : OB(5)=OB(5)-200
   Else Gosub NOVIAJE : Return : End If 
VH=6
End If 
If X=37 and Y=11
   If OB(5)<200 : M=24 : Gosub MENSAJES : Return : End If 
   M=13 : Gosub MENSAJES : Locate 20,25 : Print "Brest por 200 m."
   Gosub NOSI : 
   If NOSI=True : X=116 : Y=99 : OB(5)=OB(5)-200
   Else Gosub NOVIAJE : Return : End If 
VH=6
End If 
Sprite Off 8
Load Iff "g/barca" : Gosub PALETA : Gosub LUZ
M=14 : Gosub MENSAJES
For Q=1 To VH : HORA=HORA+1 : If HORA>23 Then HORA=HORA-24
Gosub LUZ : Wait 25 : Next 
Gosub RUTSP
Return 
NOVIAJE:
If NOSI=False Then M=16 : Else M=24
Gosub MENSAJES
X=GX : Y=GY : IX=GIX : IY=GIY : Gosub PANTALLA
Return 
'
DINERO:
ME$(0)="dispones de"+Str$(OB(5))+" monedas"
M=0 : Gosub MENSAJES
Return 
'
RELOJ:
If HORA=1 Then ME$(0)="Es la una" : Else ME$(0)="Son las"+Str$(HORA)
ME$(0)=ME$(0)+" horas del dia "+Str$(DIA)
M0=0 : Gosub MENSAJES
Return 
'
COMBATE:
If SEG=1 Then Return 
Gosub FONDOLUCHA : If N$="" Then Gosub MOVER : Gosub RUTSP : Return 
Gosub PELIGROSIDAD
   NN$="g/enem0"+Chr$(48+EN)
Screen Hide : Sprite Off 8
Wait Vbl 
Cls 0,0,0 To 208,144
Load Iff NN$
      Get Bob 0,45,0,0 To 71,77
      Get Bob 0,46,73,0 To 144,77
Load Iff N$ : Gosub PALETA : Gosub LUZ
Screen Show 
Bob 9,80,67,45
   CORAZA=Rnd(10) : ESCUDO=Rnd(8) : ARMA=Rnd(9) : F#=FENE(EN) : H#=120/F#
M=0 : ME$(0)="te enfrentas a un "+ENE$(EN) : Gosub MENSAJES
Ink 28 : Bar 23,20 To 31,140-(FENE(EN)/42)
COMBATE2:
If FCOMB=1 Then FCOMB=0 : Gosub LUZ : Gosub RUTSP : Gosub MOVER : Return 
Gosub RATON : If MO=0 Then Gosub GOLPEE : Goto COMBATE2
      If MX>274 and MX<311 and MY>61 and MY<74 Then Goto HUIR
      If MX>354 and MX<430 and MY>99 and MY<217 Then Gosub TIRAR : Goto COMBATE2
If MX<144 or MX>431 or MY<202 or MY>218 Then Goto COMBATE2
MX=Int((MX-144)/16)
MSEL=MX : If MSEL=11 Then Gosub GOLPEPRO : Goto COMBATE2
          If MSEL=8 Then Gosub HECHIZOS
          If MSEL=9 Then Gosub LANZAHECHIZOS
Goto COMBATE2
FONDOLUCHA:
N$=""
If DESIERTO=1 Then N$="g/fluch1"
If CU=55 Then N$="g/fluch2"
If CUEVA=1 Then N$="g/fluch3"
If SELVA=1 Then N$="g/fluch4"
If CAMINO=1 Then N$="g/fluch0" : Gosub CASAS
If CU=28 Then N$="g/fluch0"
If CU>81 and CU<91 Then N$="g/fluch0"
Return 
CASAS:
   For T=-1 To 1 : For Q=-1 To 1
     If Z(JX+Q,JY+T)=33 Then N$="g/fluch5"
   Next : Next 
Return 
HUIR:
Bob Off 9
M=36 : Gosub MENSAJES
OB(0)=OB(0)-EN
For Q=20 To 35 : If Q=22 Then Inc Q
OBJ=OB(Q) : If OBJ>0 Then NOBJ(OBJ)=1 : If OBJ=50 Then Inc NOBJ(OBJ)
Gosub SACAR : Gosub MOVER : Gosub RUTSP
M=37 : Gosub MENSAJES
Next 
Return 
PELIGROSIDAD:
   TIPOE=Rnd(2)-1
   If MAP$="m/isla00" and X<100 and Y>100 Then PEL=0
   If MAP$="m/isla01" Then PEL=0
   If MAP$="m/isla02" Then PEL=2
   If MAP$="m/isla03" Then PEL=3
   If MAP$="m/isla03" and X>84 and Y<34 Then PEL=5
   EN=PEL+TIPOE+2
   If EN>7 Then EN=7
   If EN<2 Then EN=2
   If DESIERTO=1 Then EN=1
Return 
GOLPEPRO:
FUERZA=(1000-(OB(1)+OB(2)+OB(3)+OB(4))/4)/10
GOLPE=Rnd(FUERZA)+OB(0) : Rem experiencia
FG=FOBJ(OB(20)) : If FG<1 Then FG=0 : Else GOLPE=GOLPE+FG
FG=FOBJ(OB(21)) : If FG<1 Then FG=0 : Else GOLPE=GOLPE+FG
FG=FOBJ(OB(22)) : If FG<1 Then FG=0 : Else GOLPE=GOLPE+FG
GOLPE=GOLPE-(CORAZA+ESCUDO)
HERIEN=HERIEN+GOLPE
GOLP=HERIEN*H# : If GOLP<1 Then GOLP=1
If GOLP>120 Then GOLP=120
If HERIEN>FENE(EN) Then Gosub MUERTEE : Return 
Ink 28 : Bar 191,20 To 199,20+GOLP
OB(1)=OB(1)+5
Return 
GOLPEE:
If Timer<150 Then Return : Else Timer=0
Wait Vbl : Bob 9,80,67,46 : Wait 25
FUERZA=(FENE(EN)/10)+ARMA
GOLPE=Rnd(FUERZA)
FG=FOBJ(OB(20)) : If FG>0 Then FG=0 : Else GOLPE=GOLPE+FG
FG=FOBJ(OB(21)) : If FG>0 Then FG=0 : Else GOLPE=GOLPE+FG
FG=FOBJ(OB(22)) : GOLPE=GOLPE-FG
FG=FOBJ(OB(23)) : GOLPE=GOLPE-FG
If GOLPE<0 Then GOLPE=0
Wait Vbl : Bob 9,80,67,45
OB(4)=OB(4)+GOLPE : If OB(4)>1000 Then FCOMB=1 : Goto MORIR
Gosub VIDA
Return 
MUERTEE:
Bob Off 9
If EN=7 Then OB(0)=OB(0)+5
If EN=4 Then OB(0)=OB(0)+3
If EN<4 and EN>1 Then Inc OB(0)
Ink 28 : Bar 191,20 To 199,140
M=10 : FCOMB=1 : HERIEN=0 : Gosub MENSAJES
Gosub MOVER : Gosub RUTSP
If EN=1 Then Return 
Gosub BOTIN
Return 
'
BOTIN:
R=Rnd(100)+1
If R<55 and R>40 Then Inc OB(6) : M=23 : Gosub MENSAJES : Return 
If R<40 Then OBJ=35
If R<35 Then OBJ=30
If R<28 Then OBJ=24
If R<24 Then OBJ=21
If R<21 Then OBJ=R
If R>12 and R<17 Then R=55
If R>54 Then OB(5)=OB(5)+(R*EN) : M=5 : Gosub MENSAJES : Return 
R=OBJ : Gosub GUARDAR : If M=19 Then Return 
M=0 : Gosub MENSAJES
Locate 3,25 : Print "en el cuerpo encuentras:         "
Locate 3,26 : Print OBJ$(R)
Return 
HECHIZOS:
HECHIZO$=""
For T=0 To 9 : HE$(T)="|" : Next : CHE=0
M=28 : Gosub MENSAJES : Locate 26,25
HECHIZOS2:
MO=Mouse Click : If MO=0 Then Goto HECHIZOS2
If MO=1 Then Goto FINHECHIZO
MX=X Mouse : MY=Y Mouse
LUG=((MX-354)/20)+((MY-141)/20)*4 : OBJ=OB(LUG+20)
If OBJ<6 or OBJ>10 Then Goto HECHIZOS2
Gosub SACAR : If ESTA=0 Then Goto HECHIZOS2
If CHE>7 Then Goto FINHECHIZO
If ESTA=6 Then HE$(CHE)="L"
If ESTA=7 Then HE$(CHE)="T"
If ESTA=8 Then HE$(CHE)="P"
If ESTA=9 Then HE$(CHE)="C"
If ESTA=10 Then HE$(CHE)="A"
Print HE$(CHE);
CHE=CHE+1 : Goto HECHIZOS2
FINHECHIZO:
Sort HE$(0)
For T=0 To 9
If HE$(T)<>"|" Then HECHIZO$=HECHIZO$+HE$(T)
Next 
M=16 : Gosub MENSAJES
Return 
LANZAHECHIZOS:
If HECHIZO$="LLPP" Then INFRA=8 : Gosub LUZ : M=29
If HECHIZO$="AALP" Then VELOC=2 : Swap HSALTO,SALTO : M=29
If HECHIZO$="AACC" Then For T=0 To 4 : OB(T)=0 : Next : Gosub VIDA : M=29
If HECHIZO$="ALPT" Then HERIEN=HERIEN+2000 : Gosub GOLPEPRO : Return 
If HECHIZO$="AACT" Then LEVIT=2 : M=29
If HECHIZO$="CPPT" Then ABREP=1 : M=29
If HECHIZO$="PPPT" Then LLAVE=1 : M=29
If HECHIZO$="ACLPT" Then GUIA=24 : M=29
If M<>29 Then M=30
Gosub MENSAJES
Return 
HORAHECHIZOS:
If INFRA>0 Then Dec INFRA
If VELOC>0 Then Dec VELOC : If VELOC=0 and SALTO>HSALTO Then Swap SALTO,HSALTO
If LEVIT>0 Then Dec LEVIT : If LEVIT=0 Then Gosub FINLEVIT
If ABREP>0 Then Dec ABREP
If GUIA>0 Then Dec GUIA
Return 
FINLEVIT:
      FL=0 : POSIX=(X) and XMAX : POSIY=(Y) and YMAX
      POSI#=POSIY*(XMAX+1)+POSIX+Varptr(MAPA$)
      CU=Peek(POSI#) : CUU=Peek(POSI#+1)
      If CUU=62 or CUU=63 Then FL=-2
      If CTRL(CU)<900 Then Return 
      X=X+1+FL : Goto FINLEVIT
Return 
CASILLASOCULTAS:
If Z(XX,YY)=108
    If GUIA>0 : Z(XX,YY)=122 : Return : End If 
    Return 
End If 
If Z(XX,YY)=116 and LIBRO=0 Then Return 
If Z(XX,YY)=117 and VMAP=0 Then Return 
If Z(XX,YY)=118
   If MISION=0 and(MAP$="m/isla00") : Return : End If 
   If MISION=3 and(MAP$="m/isla01") : Return : End If 
 End If 
If Z(XX,YY)=119 and MISION=1 Then Return 
If Z(XX,YY)=120 and INFRA>0 Then Return 
If Z(XX,YY)=121 and FLOR=0 Then Return 
If Z(XX,YY)=122 and JX=XX and JY=YY Then Return 
If Z(XX,YY)=123
         If X=29 : N=ANILLO and 1 : If N=0 : Return : End If : End If 
         If X=24 : N=ANILLO and 2 : If N=0 : Return : End If : End If 
         If X=75 : N=ANILLO and 4 : If N=0 : Return : End If : End If 
         If X=10 : N=ANILLO and 8 : If N=0 and ANILLO>6 : Return : End If : End If 
      End If 
If Z(XX,YY)=124 and FLOR=2 Then Return 
If Z(XX,YY)=125 and YELMO=0 Then Return 
If Z(XX,YY)=126 and ESPADA=0 Then Return 
Z(XX,YY)=Peek(POSI#-1)
Return 
FINAL:
Sprite Off 8
Screen Close 0
Screen Open 0,320,256,16,Lowres : Flash Off 
Load Iff "g/tiraanillo"
Wait 250
Load Iff "g/tiraanillo2"
Wait Key 
End 
