# INCLUDE <MEMCOPY.BAS>
# INCLUDE <POINT.BAS>





REM FASE PAPA NOEL



REM ***** TRES REYES MAGOS *****

REM **** JBGV


REM **************************** DECLARACION VARIABLES Y MATRICES

DIM X,Y, FRAME, CAMBIAFRAME, SUELA, JOKER, GUDAR, ESCROL1, ESCROL2, VIDA, REY, MOVISTE, CHOQUEX, CHOQUEY, DIMENX, DIMENY, ALGOPASO, PULSANDO, PIANO, TEMPO, TESORO AS UBYTE

DIM AVANCE1, EVENTOS, RENOMALO, JORCAS, PUNTERO, DIROR, DIRTAM AS UINTEGER

DIM SUELO (24) AS UBYTE=> {1,1,2,1,2,2,4,3,3,4,1,1,2,4,3,5,5,6,5,6,5,7,8,7,8}

DIM OLEADA, PASOLEADA, PASOLEADO, PASOLEADAL, PASOLEADOL, NUMETEORITO, NUMARCIANITO, CUENTARITO, TOPE, TOPEL, MARCIANOMUERTO, VIDAPAPANOEL AS UBYTE
DIM METEORITO(4) AS UBYTE
DIM MARCIANITO(4) AS UBYTE
DIM MARCIACOLOR(4) AS UBYTE
DIM MX(4) AS UBYTE
DIM MY(4) AS UBYTE
DIM FM(4) AS UBYTE
DIM COMPORTAMIENTO(4) AS UBYTE
DIM COMPORTA1 (79) AS BYTE=>{-4,0,-4,0,-4,0,-4,0, -4,0,-4,0,-4,0,-4,0, -4,4,-4,4,-4,4,-4,4, -4,0,-4,0,-4,0,-4,0, 0,-4,0,-4,0,-4,0,-4, 0,-4,0,-4,0,-4,0,-4, 4,-4,4,-4,4,-4,4,-4, 4,0,4,0,4,0,4,0, 4,4,4,4,4,4,4,4, 4,0,4,0,4,0,4,0}
DIM COMPORTA2 (79) AS BYTE=>{-4,0,-4,0,-4,0,-4,0, 0,-4,0,-4,0,-4,0,-4, 0,-4,0,-4,0,-4,0,-4, -4,-4,-4,-4,-4,-4,-4,-4, -4,0,-4,0,-4,0,-4,0, -4,4,-4,4,-4,4,-4,4, 0,4,0,4,0,4,0,4, 4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, -4,0,-4,0,-4,0,-4,0}
DIM COMPORTA3 (79) AS BYTE=>{0,-4,0,-4,0,-4,0,-4, 0,-4,0,-4,0,-4,0,-4, 0,-4,0,-4,0,-4,0,-4, 0,-4,0,-4,0,-4,0,-4, 0,-4,0,-4,0,-4,0,-4, 0,4,0,4,0,4,0,4, 0,4,0,4,0,4,0,4, 0,4,0,4,0,4,0,4, 0,4,0,4,0,4,0,4, 0,4,0,4,0,4,0,4}
DIM COMPORTA4 (79) AS BYTE=>{0,-4,0,-4,0,-4,0,-4, -4,-4,-4,-4,-4,-4,-4,-4, -4,-4,-4,-4,-4,-4,-4,-4, -4,-4,-4,-4,-4,-4,-4,-4, -4,-4,-4,-4,-4,-4,-4,-4, -4,-4,-4,-4,-4,-4,-4,-4, 0,4,0,4,0,4,0,4, 4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4}
DIM PASOMARCIANO(4) AS UBYTE

DIM DISPARITO(4)  AS UBYTE
DIM DISPARITOX(4) AS UBYTE
DIM DISPARITOY(4) AS UBYTE

DIM FIRE, FIREX, FIREY AS UBYTE

DIM FUGAS (17) AS UBYTE=>{12,180,6, 87,176,4, 113,189,5, 132,186,2, 164,183,6, 235,176,7}
DIM DEFINEMETEORO (48) AS UBYTE=>{2,0,1,1,6,2,6, 1,2,3,2,9,1,8, 1,4,5,3,16,0,6, 1,8,9,3,16,0,6, 1,12,13,3,20,0,3, 2,18,19,3,20,0,3,  2,20,21,3,20,0,3}
DIM DEFINEMARCIANO (41) AS UBYTE=>{2,6,7,1,4,6,0,   1,10,11,1,4,5,1,   1,14,15,2,4,7,2,  1,16,17,2,4,7,3,   1,22,23,3,4,7,4,  1,24,25,3,4,7,0}


REM---FASE 2

DIM MAPEADO (12) AS UBYTE =>{0, 31,30,36,13, 20,36,35,33, 28,28,55,45}
DIM DIBPANT (65) AS UBYTE

DIM DIMENCOSA (12) AS UBYTE =>{0,34,34,34,34,34,34,50,52,68,34,34,34}
DIM BUFERCOSA (12) AS UBYTE =>{0,36,36,36,36,36,36,54,108,144,36,36,36}

DIM PANTALLO(3) AS UBYTE
DIM MAJESTAD (3) AS UINTEGER
DIM VIDAKING (3) AS UBYTE

DIM RESUCITA(47) as UBYTE=>{1,6,112,111, 1,9,48,167, 1,10,160,71, 2,4,120,71, 2,8,16,111, 2,7,64,159, 2,3,200,143, 2,2,72,151, 2,1,72,143, 3,12,168,135, 3,8,192,127, 3,7,176,159}

DIM J(15) AS UBYTE

DIM PUERTAS(87) AS UBYTE=>{8,1,0,23,15,1,4,2 ,6,2,0,11,13,2,8,2 ,7,3,0,2,6,3,2,4 ,7,4,0,27,9,4,2,2 ,2,5,0,7,10,1,4,2 ,10,6,0,7,15,1,4,2 ,1,7,0,21,5,1,4,2 ,11,8,0,18,9,4,2,2 ,11,9,0,16,3,3,2,4 ,11,10,0,24,9,1,4,2, 6,11,0,11,15,2,8,2}
DIM INTERRUPTOR(69) AS UBYTE=>{4,1,0,2,3 ,7,2,0,15,9 ,6,3,0,7,13 ,2,4,0,2,8 ,9,5,0,4,15 ,11,6,0,4,4 ,11,7,0,14,7 ,11,8,0,28,11 ,11,9,0,28,7 ,11,10,0,28,3 ,7,11,0,19,9, 11,21,0,18,1, 11,22,0,21,7, 11,23,0,23,3}

REM ---- MALOS FASE 2

DIM HAYGUARDIAN (12) AS UBYTE  =>{0, 8,24,24,16,  0,16,16,16, 8,24,0,8}   : REM 8 HAY UNO, 16 HAY 2, 24 HAY 3
DIM PLATAFORMA (23) AS UBYTE
DIM CONTADOR (2) AS UBYTE
DIM REBORI(2) AS UINTEGER
DIM FOTOGUARDIA (2) AS UBYTE
DIM GUARDIATRAZO(2) AS UINTEGER
DIM ALCANCE(2) AS UBYTE
DIM SENTIDO(2) AS BYTE
DIM QUEVARIA(2) AS UBYTE
DIM ALASTRE(1) AS UBYTE


REM ZONAS RESERVADAS

ASM
HUCHA:
DEFB 0,0
BITPOSX:
DEFB 0,0
BITPOSY:
DEFB 0,0
END ASM

OLE:
ASM
OLE2:
DEFB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,0
END ASM


NOLE:
ASM
DIMENSIONY:
DEFB 0
DIMENSIONX:
DEFB 0
END ASM


CULA:
ASM
CULO:
DEFB 0
CACA:
DEFB 0
END ASM









REM **************************** PRESENTACION
BORDER 0:PAPER 0:INK 7: CLS
PRINT AT  12,10; BOLD 1; PAPER 0; INK 5; BRIGHT 1;"FELIZ NAVIDAD"

JORCAS=@GUARDIAN+192
MALOTE (48,71,JORCAS,71)

JOKER=0
N=48
WHILE N<200
MALOTE (N,71,JORCAS+JOKER,0)
N=N+2
JOKER=JOKER+32
IF JOKER=96 THEN JOKER=0:END IF
MALOTE (N,71,JORCAS+JOKER,71)
ASM
HALT
HALT
END ASM
BEEP .001,20
END WHILE


ASM
LD B,80
TRTRTR:
HALT
DJNZ TRTRTR
END ASM

REM **************************** CREDITOS

CREDITOS:
BORDER 0:PAPER 0:INK 7: CLS

DIBnXn(0,21,3,3,@TITULO,0,0)
GUDAR=0
FOR Q= 0 TO 23
GUDAR=GUDAR+2:JOKER=0
FOR W=0 TO 23
IF POINT (W,Q)=1 THEN
PLOT PAPER 0; INK 0; 104+JOKER,128+GUDAR:PLOT PAPER 0; INK 0;  105+JOKER,128+GUDAR:PLOT PAPER 0; INK 0;  104+JOKER,129+GUDAR:PLOT PAPER 0; INK 0;  105+JOKER,129+GUDAR
END IF
JOKER=JOKER+2
NEXT W
NEXT Q
PAINT(13,4,6,4,69):PAINT(17,6,2,2,70):PAINT(13,2,6,2,66)

DIBnXn(2,3,4,4,@ABETO,1,0)
DIBnXn(28,16,3,4,@MUNECONIEVE,1,0)
DIBnXn(15,11,2,2,@QUI7,1,0)

PRINT AT  20,0; BOLD 1; PAPER 0; INK 5; BRIGHT 1;"JBGV 2012"
PRINT AT  16,12; BOLD 1; PAPER 0; INK 3; BRIGHT 1;"J JUGAR"


ASM
      PUSH IX
      LD HL, FELIZN        ;CARGAMOS FELIZ NAVIDAD
      CALL START
      POP IX

      DI
  NEXTNOTE:
      CALL  PLAYNOTE
      LD BC, $BFFE         ; Semifila "H" a "ENTER"
      IN A, (C)            ; Leemos el puerto
      BIT 3, A             ; Testeamos el bit 3 ->"J"
      JR NZ, NEXTNOTE        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
      EI

END ASM


RANDOMIZE 0
REM **************************** JUEGO


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                         F A S E   ---  1
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

FASE1:

BORDER 0:PAPER 0:INK 7: CLS
DIBnXn (14,5,4,2,@ESTRELLA,0,70)
PRINT AT  9,13; BOLD 1; PAPER 0; INK 2; BRIGHT 1;"FASE 1"
PRINT AT  12,11; BOLD 1; PAPER 0; INK 5; BRIGHT 1;"BATALLA EN"
PRINT AT  14,12; BOLD 1; PAPER 0; INK 4; BRIGHT 1;"EL CIELO"

ASM
      PUSH IX
      LD HL, PECESRIO        ;CARGAMOS PECES RIO
      CALL START
      POP IX

      DI
  NEXTNOTE2:
      CALL  PLAYNOTE
      XOR   A
      IN    A,($FE)
      AND   $1F
      CP    $1F
      JR    Z,NEXTNOTE2                    ; Play next note if no key pressed
      EI

END ASM



PAUSE 0


BORDER 0:PAPER 1:INK 7: CLS


REM VARIABLES INICIALES

X=32
Y=104
FRAME=0
CAMBIAFRAME=0
AVANCE1=0
EVENTOS=0
ESCROL1=0
ESCROL2=0
OLEADA=0
REM OLEADA=24
VIDA=3
VIDAPAPANOEL=10


FOR N=0 TO 4
METEORITO(N)=0
MARCIANITO(N)=0
MX(N)=0
MY(N)=0
FM(N)=0
COMPORTAMIENTO(N)=0
DISPARITO(N)=0
DISPARITOX(N)=0
DISPARITOY(N)=0
NEXT N


REM BORRAR
PRINT AT 2,0; INK 2;"AA"
PRINT AT 3,0; INK 3;"BB"



REM CARGAMOS HORIZONTE

ASM
XOR A
LD (_SUELA),A
CALL CARGAHORIZONTE
END ASM


REM **************************** BUCLE DEL JUEGO

PAINT (0,0,32,2,0)
DIBnXn (4,0,2,2,@LUNA,0,71)
DIBnXn (22,0,4,2,@ESTRELLA,0,70)
BORRnXn (0,2,32,1,@DEGRADA,8)

DIBnXn (0,3,16,2,@NUBES,0,8)     : REM PINTAMOS NUBES
DIBnXn (16,3,16,2,@NUBES,0,8)

FOR N=0 TO 31: DIBnXn (N,18,1,1,@TERRE,0,2):NEXT N   :REM PINTAMOS SUELO INICIAL
FOR N=0 TO 15 STEP 3: PLOT PAPER 0;BRIGHT 1; INK FUGAS (N+2);FUGAS(N),FUGAS(N+1):NEXT N: REM ESTRELLAS CIELO

RELLENA(0,19,2,1,32,1,@MARCO,0,69)   : REM MARCO
BORRnXn (0,20,32,4,@VACIO,0)

FOR N=0 TO 2
JORCAS=@VIDAGASPAR+(72*N)
DIBnXn(2+(N*4),21,3,3,JORCAS,0,69+N)
NEXT N

DIBnXn(14,21,3,3,@TITULO,1,0)

JOBAT (X,Y,@REYMAGO)            : REM PINTAMOS PARA QUE FUNCIONE RUTINA JOBAT


BUCLEPRINCIPAL:

REM +++++++++ BORRAMOS
JOBAT (X,Y,@REYMAGO+FRAME)

REM +++++++++ LECTURA TECLADO
ASM

   ; *** TECLA M ***
    LD BC, $7FFE           ; Semifila "SPACE" a "B"
    IN A, (C)              ; Leemos el puerto
    BIT 2, A               ; Testeamos el bit 2 ->"M"
    JR NZ, TECLAO          ; Si no esta a 0 (pulsado) salir
    LD A,(_FIRE)
    CP 2
    JR Z, TECLAO           ; SI LENTO ACTIVADO SALIR
    LD A,1
    LD (_FIRE),A          ; SI LENTO NO ACTIVADO ACTIVAR
    LD A,(_X)
    ADD A,16
    LD (_FIREX),A
    LD A,(_Y)
    SUB 4
    LD (_FIREY),A

   ; *** TECLA O ***
    TECLAO:
    LD BC, $DFFE         ; Semifila "Y" a "P"
    IN A, (C)            ; Leemos el puerto
    BIT 1, A             ; Testeamos el bit 1 ->"O"
    JR NZ, TECLAP        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,(_X)
    DEC A
    LD (_X),A            ; X=X-1

   ; *** TECLA P ***
    TECLAP:
    LD BC, $DFFE         ; Semifila "Y" a "P"
    IN A, (C)            ; Leemos el puerto
    BIT 0, A             ; Testeamos el bit 0 ->"P"
    JR NZ, TECLAQ        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,(_X)
    INC A
    LD (_X),A            ; X=X+1

    ; *** TECLA Q ***
    TECLAQ:
    LD BC, $FBFE         ; Semifila "Q" a "T"
    IN A, (C)            ; Leemos el puerto
    BIT 0, A             ; Testeamos el bit 0 ->"Q"
    JR NZ, TECLAA        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,(_Y)
    INC A
    LD (_Y),A            ; Y=Y+1

    ; *** TECLA A ***
    TECLAA:
    LD BC, $FDFE         ; Semifila "A" a "G"
    IN A, (C)            ; Leemos el puerto
    BIT 0, A             ; Testeamos el bit 0 ->"A"
    JR NZ, FIN_LECTURA   ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,(_Y)
    DEC A
    LD (_Y),A            ; Y=Y-1

FIN_LECTURA:
END ASM

IF X<4 THEN X=4:END IF
IF X>238 THEN X=238:END IF


REM +++++++++ SCROLL SUELO


IF ESCROL1=8 THEN

      REM SCROLL
ASM
CALL DESLIZASUELO
END ASM

      REM PINTAR SUELO

ASM

  LD BC,(_AVANCE1)
  LD HL,HORIZONTA
  ADD HL,BC
  LD D,H             ;PONGO EN "DE" LA DIRECCIN HORIZONTE+AVANCE
  LD E,L

  LD HL,20511        ;PONGO EN "HL" LA ULTIMA DIRECCION FILA 16

  LD A, (DE)         ; Tomamos el dato del sprite

  LD B,3             ; N caracteres hacia abajo
  SUCLE0X:
  PUSH BC

  LD B,8             ; Los 8 Scanlines del carcter
  SUCLE1X:
  PUSH BC

  LD (HL), A         ; Establecemos el valor en videomemoria

  INC H              ;PASAMOS A SCAN DE ABAJO
  INC DE
  LD A,(DE)          ;PONEMOS EN "A"SIGUIENTE VALOR DE SPRITE

  POP BC
  DJNZ SUCLE1X

  LD A, L         ;Paso "HL" al caracter de abajo
  ADD A, 32
  LD L, A
  JR C, CARACTER_ABAJO2X
  LD A, H
  SUB 8
  LD H, A
  CARACTER_ABAJO2X:

  LD A, (DE)         ; Tomamos el dato del sprite otra vez

  POP BC
  DJNZ SUCLE0X

  ;ATRIBUTOS

  LD HL,23071        ;DIRECCION ATRIBUTOS ULTIMA COLUMNA FILA 16 --->ASI A LO BRUTO ES LO MS RPIDO
  LD A,(DE)
  LD (HL),A
  INC DE
  LD HL,23103        ;DIRECCION ATRIBUTOS ULTIMA COLUMNA FILA 17
  LD A,(DE)
  LD (HL),A
  INC DE
  LD HL,23135        ;DIRECCION ATRIBUTOS ULTIMA COLUMNA FILA 18
  LD A,(DE)
  LD (HL),A
  INC DE

END ASM

REM ACTUALIZAMOS VARIABLES PARA SIGUIENTE PASADA


   AVANCE1=AVANCE1+27
   IF AVANCE1=864 THEN
   AVANCE1=0
   SUELA=SUELA+1         :REM SI VA A SER CCLICO AQUI LIMITARA EL VALOR DE SUELA. LOS EVENTOS DE AVANCE EN CONTADOR UNITEGER APARTE QUE SE INCREMENTARA AQUI TAMBIN
   IF OLEADA<21 AND SUELA=21 THEN SUELA=0:END IF
   IF OLEADA>20 AND SUELA<21 THEN SUELA=21:END IF
   IF OLEADA>20 AND SUELA=25 THEN SUELA=21:END IF
   EVENTOS=EVENTOS+1
   ASM
   CALL CARGAHORIZONTE
   END ASM
   END IF

END IF


ESCROL1=ESCROL1+1
IF ESCROL1=9 THEN ESCROL1=0: END IF


REM +++++++++ SCROLL FIRMAMENTO

IF ESCROL2=14 THEN
ASM
CALL DESLIZAFIRMAMENTO
END ASM
END IF
ESCROL2=ESCROL2+1
IF ESCROL2=15 THEN ESCROL2=0: END IF


REM +++++++++ PLOTEADO BUENO

IF CAMBIAFRAME=5 THEN
   FRAME=FRAME+16
   IF FRAME=48 THEN FRAME=0:END IF
END IF

CAMBIAFRAME=CAMBIAFRAME+1
IF CAMBIAFRAME=6 THEN CAMBIAFRAME=0: END IF

   REM LIMITANDO
   IF Y>151 THEN Y=151:END IF
   IF Y<71 THEN Y=71:END IF


JOBAT (X,Y,@REYMAGO+FRAME)

BEEP .001,20
rem ASM
rem  HALT
rem END ASM


REM +++++++++ DISPARO BUENO

IF FIRE=1 THEN  PANIUM(FIREX,FIREY): FIRE=2:END IF
IF FIRE=2 THEN
      PANIUM(FIREX,FIREY)
      FIREX=FIREX+3
      REM ACIERTO?
      IF FIREX>245 THEN FIRE=0:GOTO OOOIP:END IF
      PANIUM(FIREX,FIREY)
      
          ASM
              PUSH IX
              PUSH IY
              ld hl,600     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ;ld hl,100     ; This is the pitch for our note
              ;ld de,1       ; This will be the duration it will play
              ;call 949
              POP IY
              POP IX
          END ASM

END IF
OOOIP:


REM +++++++++  MALOS ++++++++++

REM DEFINICION DE OLEADAS METEORITOS

FOR M= 0 TO 42 STEP 7
    IF OLEADA=DEFINEMETEORO(M+1) AND EVENTOS=DEFINEMETEORO(M) THEN
    OLEADA=DEFINEMETEORO(M+2)
    NUMETEORITO=DEFINEMETEORO(M+3)   : REM N DE METEORITOS EN CADA PASADA-1
    TOPEL=DEFINEMETEORO(M+4)         : REM N DE METEORITOS TOTALES (PASADAXNUMETEORITO)
    PASOLEADAL=DEFINEMETEORO(M+5)    : REM VELOCIDAD DE AVANCE
    PASOLEADOL=DEFINEMETEORO(M+6)    : REM ESPACIO ENTRE METEORITO Y OTRO DE UNA MISMA PASADA
    GOSUB INCICIAMETEORO
    GOTO SALIDARAPIDA
    END IF
NEXT M

SALIDARAPIDA:



IF OLEADA=1 OR OLEADA=3 OR OLEADA=5 OR OLEADA=9 OR OLEADA=13 OR OLEADA=19 OR OLEADA=21 THEN
          IF PASOLEADA=PASOLEADAL THEN
                   REM VEMOS SI HAY ACTIVACIN
                   IF PASOLEADO=PASOLEADOL THEN
                   IF METEORITO(CUENTARITO)=0 AND TOPE<TOPEL THEN
                          MX(CUENTARITO)=240
                          MY(CUENTARITO)=(INT(RND*10)*8)+71
                          FM(CUENTARITO)=0
                          ZUMZUM (MX(CUENTARITO),MY(CUENTARITO),@PERSEIDA,13)
                          METEORITO(CUENTARITO)=1
                          CUENTARITO=CUENTARITO+1
                          TOPE=TOPE+1
                          IF CUENTARITO>NUMETEORITO THEN CUENTARITO=0:END IF
                    END IF
                    END IF
                    PASOLEADO=PASOLEADO+1
                    IF PASOLEADO=PASOLEADOL+1 THEN PASOLEADO=0: END IF
                    REM DIBUJO DE LOS METEORITOS
                    FOR Q=0 TO NUMETEORITO
                          IF METEORITO(Q)=1 THEN
                              ZUMZUM (MX(Q),MY(Q),@PERSEIDA+FM(Q),15)
                              MX(Q)=MX(Q)-4
                              FM(Q)=FM(Q)+16
                              IF FM(Q)=32 THEN FM(Q)=0:END IF
                              IF MX(Q)=4 THEN METEORITO(Q)=0:GOTO MIJARES:END IF
                              REM ACIERTO?
                              IF MY(Q)<Y+5 AND MY(Q)>Y-8 THEN
                              IF MX(Q)<X+16 AND MX(Q)>X-1 THEN
                                 METEORITO(Q)=0
                                 EXPLOTEA (MX(Q),MY(Q))
                                 GOSUB MUERTE
                                 IF VIDA=0 THEN GOTO MUERTETOTAL: END IF
                                 REM MX(Q)=MX(Q)-16
                                 REM IF MX(Q)<4 THEN MX(Q)=4: END IF
                                 REM METEORITO(Q)=0
                                 GOTO MIJARES
                              END IF
                              END IF
                              ZUMZUM (MX(Q),MY(Q),@PERSEIDA+FM(Q),13)
                          
                           ASM
              PUSH IX
              PUSH IY
              ld hl,200     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ;ld hl,150     ; This is the pitch for our note
              ;ld de,1       ; This will be the duration it will play
              ;call 949
              ;ld hl,100     ; This is the pitch for our note
              ;ld de,1       ; This will be the duration it will play
              ;call 949
              POP IY
              POP IX
              END ASM

                          END IF
                    MIJARES:
 

                    NEXT Q
                    
                    
                     IF TOPE=TOPEL THEN
                    MARCIANOMUERTO=0
                    FOR U=0 TO NUMETEORITO
                    MARCIANOMUERTO=MARCIANOMUERTO+METEORITO(U)
                    NEXT U
                    IF MARCIANOMUERTO=0 THEN OLEADA=OLEADA+1:EVENTOS=0:END IF
                    END IF


          END IF
          PASOLEADA=PASOLEADA+1
          IF PASOLEADA=PASOLEADAL+1 THEN PASOLEADA=0: END IF
END IF


REM DEFINICION DE OLEADAS MARCIANITOS


FOR M=0 TO 35 STEP 7
    IF OLEADA=DEFINEMARCIANO(M+1) AND EVENTOS=DEFINEMARCIANO(M) THEN
    OLEADA=DEFINEMARCIANO(M+2)
    NUMARCIANITO=DEFINEMARCIANO(M+3)    : REM N DE MARCIANITOS -1
    PASOLEADAL=DEFINEMARCIANO(M+4)      : REM VELOCIDAD DE AVANCE
    PASOLEADOL=DEFINEMARCIANO(M+5)      : REM ESPACIO ENTRE MARCIANITO Y OTRO DE UNA MISMA PASADA
    RENOMALO=@RENO+(32*DEFINEMARCIANO(M+6))
    GOSUB INICIAMARCIANO
    GOTO SALIDARAPIDA2
    END IF
NEXT M

SALIDARAPIDA2:

REM  OLEADAS DE MARCIANITOS


IF OLEADA=7 OR OLEADA=11 OR OLEADA=15 OR OLEADA=17 OR OLEADA=23 OR OLEADA=25 THEN


          IF PASOLEADA=PASOLEADAL THEN
                   REM VEMOS SI HAY ACTIVACIN
                   IF PASOLEADO=PASOLEADOL THEN
                      IF CUENTARITO>NUMARCIANITO THEN GOTO YANOACTIVOMAS: END IF
                      IF MARCIANITO(CUENTARITO)=0 THEN
                          MX(CUENTARITO)=240
                          MY(CUENTARITO)=(INT(RND*10)*8)+71
                          FM(CUENTARITO)=0
                          MARCIACOLOR(CUENTARITO)=INT(RND*6)+10
                          ZUMZUM (MX(CUENTARITO),MY(CUENTARITO),RENOMALO,MARCIACOLOR(CUENTARITO))
                          MARCIANITO(CUENTARITO)=1
                          CUENTARITO=CUENTARITO+1
                      END IF
                    END IF
                    YANOACTIVOMAS:
                    PASOLEADO=PASOLEADO+1
                    IF PASOLEADO=PASOLEADOL+1 THEN PASOLEADO=0: END IF
                    REM DIBUJO DE LOS MARCIANITOS
                    JOKER=0
                    FOR Q=0 TO NUMARCIANITO
                          IF MARCIANITO(Q)=1 THEN
                              REM BORRAR
                              ZUMZUM (MX(Q),MY(Q),RENOMALO+FM(Q),15)
                              REM ACTUALIZAR
                              IF COMPORTAMIENTO(Q)=0 THEN
                                 NOMOLABA:
                                 GUDAR=INT(RND*5)
                                 IF GUDAR=0 THEN GOTO NOMOLABA:END IF
                                 COMPORTAMIENTO(Q)=GUDAR
                              END IF
                              IF COMPORTAMIENTO(Q)=1 THEN
                                 MX(Q)=MX(Q)+COMPORTA1(PASOMARCIANO(Q))
                                 MY(Q)=MY(Q)+COMPORTA1(PASOMARCIANO(Q)+1)
                              END IF
                              IF COMPORTAMIENTO(Q)=2 THEN
                                 MX(Q)=MX(Q)+COMPORTA2(PASOMARCIANO(Q))
                                 MY(Q)=MY(Q)+COMPORTA2(PASOMARCIANO(Q)+1)
                              END IF
                              IF COMPORTAMIENTO(Q)=3 THEN
                                 MX(Q)=MX(Q)+COMPORTA3(PASOMARCIANO(Q))
                                 MY(Q)=MY(Q)+COMPORTA3(PASOMARCIANO(Q)+1)
                              END IF
                              IF COMPORTAMIENTO(Q)=4 THEN
                                 MX(Q)=MX(Q)+COMPORTA4(PASOMARCIANO(Q))
                                 MY(Q)=MY(Q)+COMPORTA4(PASOMARCIANO(Q)+1)
                              END IF

                              IF MX(Q)>240 THEN MX(Q)=240:END IF
                              IF MY(Q)<71 THEN MY(Q)=71:END IF
                              IF MY(Q)>151 THEN MY(Q)=151:END IF



                              FM(Q)=FM(Q)+16
                              IF FM(Q)=32 THEN FM(Q)=0:END IF

                              PASOMARCIANO(Q)=PASOMARCIANO(Q)+2
                              IF PASOMARCIANO(Q)>78 THEN PASOMARCIANO(Q)=0:COMPORTAMIENTO(Q)=0:END IF
                              REM PINTAR
                              ZUMZUM (MX(Q),MY(Q),RENOMALO+FM(Q),MARCIACOLOR(Q))
              ASM
              PUSH IX
              PUSH IY
              ld hl,200     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ;ld hl,100     ; This is the pitch for our note
              ;ld de,1       ; This will be the duration it will play
              ;call 949
              POP IY
              POP IX
              END ASM


                 IF DISPARITO(Q)=0 AND INT(RND*11)>8 THEN
                 DISPARITO(Q)=1
                 DISPARITOX(Q)=MX(Q)-8
                 DISPARITOY(Q)=MY(Q)-4
                 PANIUM(DISPARITOX(Q),DISPARITOY(Q))
                 END IF



                          END IF    :REM EL END IF DE MARCIANITO(Q)=1


                    NEXT Q
          END IF
          PASOLEADA=PASOLEADA+1
          IF PASOLEADA=PASOLEADAL+1 THEN PASOLEADA=0: END IF

REM DISPAROS DENTRO DEL BUCLE Q QUE SOLO SUCEDE PASOLEADAS... QUIZS DEBERA SACARLOD E AQUI PARA IR MAS RPIDO, SI, LO HAR ASI
REM ENTONCE S ADEMS DE  "DISPARITO(Q)=0 AND INT(RND*11)>7 THEN" HABR QUE PONER AND MARCIANITO(Q)=1

REM DISPAROS

          FOR Q=0 TO NUMARCIANITO
         REM ACIERTO DEL GUENO
         IF MARCIANITO(Q)=1
         IF FIRE=2 THEN
            IF FIREX>MX(Q) AND FIREX<MX(Q)+16 THEN
            IF FIREY>MY(Q)-8 AND FIREY<MY(Q)THEN
               EXPLOTEA (FIREX,FIREY)
               GOSUB EXPLOSIMAR
               ZUMZUM (MX(Q),MY(Q),RENOMALO+FM(Q),15)
               PANIUM(FIREX,FIREY)
               IF DISPARITO(Q)=1 THEN
               PANIUM(DISPARITOX(Q),DISPARITOY(Q))
               DISPARITO(Q)=0
               END IF
               FIRE=0
               MARCIANITO(Q)=8
                  MARCIANOMUERTO=0
                  FOR U=0 TO NUMARCIANITO
                  MARCIANOMUERTO=MARCIANOMUERTO+MARCIANITO(U)
                  NEXT U
                  IF MARCIANOMUERTO=(NUMARCIANITO+1)*8 THEN OLEADA=OLEADA+1: EVENTOS=0: END IF
               GOTO GHJK
            END IF
            END IF
         END IF
         END IF
         REM QUE PASA CON DISPAROS
           IF DISPARITO (Q)=1 THEN
                 PANIUM(DISPARITOX(Q),DISPARITOY(Q))
                 DISPARITOX(Q)=DISPARITOX(Q)-2
                 REM ACIERTO?
                 IF DISPARITOY(Q)<Y AND DISPARITOY(Q)>Y-8 THEN
                    IF DISPARITOX(Q)<X+16 AND DISPARITOX(Q)>X THEN
                        DISPARITO(Q)=0
                        GOSUB MUERTE
                        IF VIDA=0 THEN GOTO MUERTETOTAL: END IF
                        EXPLOTEA (X+8,Y)
                        GOTO GHJK
                    END IF
                 END IF
                 IF DISPARITOX(Q)=2 THEN DISPARITO(Q)=0: GOTO GHJK:END IF
                 PANIUM(DISPARITOX(Q),DISPARITOY(Q))

             END IF

           GHJK:
          NEXT Q

END IF


REM +++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++ MALO FINAL QUE ES MUY MALO ++++++++


IF OLEADA=26 AND EVENTOS=2 THEN
    OLEADA=27
    PASOLEADAL=4      : REM VELOCIDAD DE AVANCE
    GOSUB INICIAMARCIANO
    MX(0)=240
    MY(0)=(INT(RND*9)*8)+79
    FM(0)=0
    MALOTE (MX(0),MY(0),@PAPANOEL+FM(0),10)
    MALOTE (144,28,@PAPANOEL+32,66)
    BORRnXn (21,21,10,1,@CARDIO,66)
END IF



IF OLEADA=27 THEN

   IF PASOLEADA=PASOLEADAL THEN

          REM DIBUJO DE PAPANOEL

          REM BORRAR
          MALOTE (MX(0),MY(0),@PAPANOEL+FM(0),15)

          REM ACTUALIZAR
          NOMOLABA2:
          IF COMPORTAMIENTO(0)=0 THEN
          GUDAR=INT(RND*5)
          END IF
          IF GUDAR=0 THEN GOTO NOMOLABA2:END IF
          COMPORTAMIENTO(0)=GUDAR
          IF COMPORTAMIENTO(0)=1 THEN
          MX(0)=MX(0)+COMPORTA1(PASOMARCIANO(0))
          MY(0)=MY(0)+COMPORTA1(PASOMARCIANO(0)+1)
          END IF
          IF COMPORTAMIENTO(0)=2 THEN
          MX(0)=MX(0)+COMPORTA2(PASOMARCIANO(0))
          MY(0)=MY(0)+COMPORTA2(PASOMARCIANO(0)+1)
          END IF
          IF COMPORTAMIENTO(0)=3 THEN
          MX(0)=MX(0)+COMPORTA3(PASOMARCIANO(0))
          MY(0)=MY(0)+COMPORTA3(PASOMARCIANO(0)+1)
          END IF
          IF COMPORTAMIENTO(0)=4 THEN
          MX(0)=MX(0)+COMPORTA4(PASOMARCIANO(0))
          MY(0)=MY(0)+COMPORTA4(PASOMARCIANO(0)+1)
          END IF

          IF MX(0)>240 THEN MX(0)=240:END IF
          IF MY(0)<79 THEN MY(0)=79:END IF
          IF MY(0)>151 THEN MY(0)=151:END IF

          IF FM(1)=3 THEN
             FM(0)=FM(0)+32
             IF FM(0)=64 THEN FM(0)=0:END IF
          END IF
          FM(1)=FM(1)+1
          IF FM(1)>3 THEN FM(1)=0:END IF

          PASOMARCIANO(0)=PASOMARCIANO(0)+2
          IF PASOMARCIANO(0)>78 THEN PASOMARCIANO(0)=0:COMPORTAMIENTO(0)=0:END IF
         
          REM PINTAR
          MALOTE (MX(0),MY(0),@PAPANOEL+FM(0),10)

              ASM
              PUSH IX
              PUSH IY
              ld hl,200     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ;ld hl,100     ; This is the pitch for our note
              ;ld de,1       ; This will be the duration it will play
              ;call 949
              POP IY
              POP IX
              END ASM


            IF DISPARITO(0)=0 AND INT(RND*11)>8 THEN
                 DISPARITO(0)=1
                 DISPARITOX(0)=MX(0)-8
                 DISPARITOY(0)=MY(0)-8
                 PANIUM(DISPARITOX(0),DISPARITOY(0))
            END IF
 
    END IF
          PASOLEADA=PASOLEADA+1
          IF PASOLEADA=PASOLEADAL+1 THEN PASOLEADA=0: END IF

REM DISPAROS DENTRO DEL BUCLE Q QUE SOLO SUCEDE PASOLEADAS... QUIZS DEBERA SACARLOD E AQUI PARA IR MAS RPIDO, SI, LO HAR ASI
REM ENTONCE S ADEMS DE  "DISPARITO(Q)=0 AND INT(RND*11)>7 THEN" HABR QUE PONER AND MARCIANITO(Q)=1

REM DISPAROS

         REM ACIERTO DEL GUENO

         IF FIRE=2 THEN
            IF FIREX>MX(0) AND FIREX<MX(0)+16 THEN
            IF FIREY>MY(0)-16 AND FIREY<MY(0)THEN
               EXPLOTEA (FIREX,FIREY)
               GOSUB OSTIANOEL
               REM MALOTE (MX(0),MY(0),@PAPANOEL+FM(0),15)
               PANIUM(FIREX,FIREY)
               IF DISPARITO(0)=1 THEN
               PANIUM(DISPARITOX(0),DISPARITOY(0))
               DISPARITO(0)=0
               END IF
               FIRE=0
            END IF
            END IF
         END IF

         REM QUE PASA CON DISPAROS
           IF DISPARITO (0)=1 THEN
                 PANIUM(DISPARITOX(0),DISPARITOY(0))
                 DISPARITOX(0)=DISPARITOX(0)-2
                 REM ACIERTO?
                 IF DISPARITOY(0)<Y AND DISPARITOY(0)>Y-8 THEN
                    IF DISPARITOX(0)<X+16 AND DISPARITOX(0)>X THEN
                        DISPARITO(0)=0
                        GOSUB MUERTE
                        IF VIDA=0 THEN GOTO MUERTETOTAL: END IF
                        EXPLOTEA (DISPARITOX(0),DISPARITOY(0))
                        GOTO GHJK2
                    END IF
                 END IF
                 IF DISPARITOX(0)=2 THEN DISPARITO(0)=0: GOTO GHJK2:END IF
                 PANIUM(DISPARITOX(0),DISPARITOY(0))
             END IF

           GHJK2:

          
END IF




ASM
  HALT
END ASM








GOTO BUCLEPRINCIPAL


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                         F A S E   ---  2
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

FASE2:

BORDER 0:PAPER 0:INK 7: CLS
DIBnXn (14,5,4,2,@ESTRELLA,0,70)
PRINT AT  9,13; BOLD 1; PAPER 0; INK 2; BRIGHT 1;"FASE 2"
PRINT AT  12,10; BOLD 1; PAPER 0; INK 5; BRIGHT 1;"ORO,INCIENSO"
PRINT AT  14,13; BOLD 1; PAPER 0; INK 4; BRIGHT 1;"Y MIRRA"

ASM
      PUSH IX
      LD HL, PECESRIO        ;CARGAMOS FELIZ NAVIDAD
      CALL START
      POP IX

      DI
  NEXTNOTE3:
      CALL  PLAYNOTE
      XOR   A
      IN    A,($FE)
      AND   $1F
      CP    $1F
      JR    Z,NEXTNOTE3                    ; Play next note if no key pressed
      EI

END ASM





PAUSE 0



REM VARIABLES:
PANTALLA=5
MAJESTAD(1)=@GASPAR
MAJESTAD(2)=@MELCHOR
MAJESTAD(3)=@BALTASAR
RENOMALO=@GASPAR
REY=1
MX(1)=112
MY(1)=103
MX(2)=128
MY(2)=119
MX(3)=88
MY(3)=119
FOR N= 1 TO 3
VIDAKING(N)=3
NEXT N

PANTALLO(1)=5
PANTALLO(2)=4
PANTALLO(3)=12

FOR N= 2 TO 67 STEP 5
INTERRUPTOR(N)=0
NEXT N

REM PANTALLA:
BORDER 0: PAPER 0:INK 0:BRIGHT 0: CLS
RELLENA(0,19,2,1,32,1,@MARCO,0,69)   : REM MARCO
RELLENA(0,0,2,1,32,1,@MARCO,0,69)   : REM MARCO
FOR N=0 TO 2
JORCAS=@VIDAGASPAR+(72*N)
DIBnXn(2+(N*4),21,3,3,JORCAS,0,69+N)
NEXT N
DIBnXn(14,21,3,3,@TITULO,1,0)

REM CARGAPANTALLA:

CARGAPANTALLA:

BORRnXn (0,1,32,18,@VACIO,0)

REM ===========
REM =========== CARGAMOS MATRIZ DE DIBUJADO:

   PUNTERO=0
   FOR N=0 TO 65: DIBPANT(N)=0:NEXT N
   FOR N=0 TO (PANTALLA-1): PUNTERO=PUNTERO+MAPEADO(N):NEXT N
   DIROR=@MAPA2+PUNTERO
   DIRTAM=MAPEADO(PANTALLA)
   memcopy (DIROR, @DIBPANT(0), DIRTAM)

REM ===========
REM =========== EJECUCIN MATRIZ DE DIBUJADO:

N=0
WHILE N<MAPEADO(PANTALLA)

    REM ***************************
    REM LINEAS HORIZONTALES PANTALLA COMPLETA (MUROS)
    IF DIBPANT(N)<3 THEN
    JORCAS=@MURO+(36*DIBPANT(N))
    RELLENA (0,DIBPANT(N+1),2,2,32,2,JORCAS,1,0)
    N=N+2
    END IF

    REM ***************************
    REM LINEAS VERTICALES PANTALLA COMPLETA (MUROS)
    IF DIBPANT(N)>2 AND DIBPANT(N)<6 THEN
    JORCAS=@MURO+(36*(DIBPANT(N)-3))
    RELLENA (DIBPANT(N+1),1,2,2,2,18,JORCAS,1,0)
    N=N+2
    END IF
                                                                           REM  11,16,1,2,14

    REM ***************************
    REM RELLENO GRFICOS 2X2 (MUROS)
    IF DIBPANT(N)>9 AND DIBPANT(N)<13 THEN
    JORCAS=@MURO+(36*(DIBPANT(N)-9))
    RELLENA (DIBPANT(N+1),DIBPANT(N+2),2,2,DIBPANT(N+3),DIBPANT(N+4),JORCAS,1,0)
    N=N+5
    END IF



    REM ***************************
    REM SPRITES solos xXx, OJO AJUSTA AL N EXACTO
     IF DIBPANT (N)>49 AND DIBPANT (N)<71 THEN
     JOKER=DIBPANT (N)
     JORCAS=0
     FOR Q=50 TO JOKER
     JORCAS=JORCAS+BUFERCOSA(Q-50)
     NEXT Q
     SACADIM (DIMENCOSA(DIBPANT (N)-49))
     DIBnXn(DIBPANT(N+2),DIBPANT(N+1),DIMENX,DIMENY,@VERJA2X2+JORCAS,1,0)
     N=N+3
     END IF



END WHILE


REM DIBUJAMOS PUERTAS
FOR N=0 TO 80 STEP 8
IF PANTALLA=PUERTAS(N) THEN
   
   IF PUERTAS(N+5)=4 THEN JORCAS=@VERJA2X2
   ELSEIF PUERTAS(N+5)<4 THEN JORCAS=@MURO+108
   END IF
   IF PUERTAS(N+2)=1 THEN JORCAS=@VACIO2X2: END IF
   RELLENA (PUERTAS(N+3),PUERTAS(N+4),2,2,PUERTAS(N+6),PUERTAS(N+7),JORCAS,1,0)
END IF
NEXT N

REM DIBUJAMOS INTERRUPTORES
FOR N=0 TO 50 STEP 5
IF PANTALLA=INTERRUPTOR(N) THEN
   GOSUB PINTOINTERRUPTOR
END IF
NEXT N

REM BORRAMOS TESOROS SI ESO...
FOR N= 57 TO 67 STEP 5
IF INTERRUPTOR (N)=1 THEN BORRnXn (INTERRUPTOR(N+1),INTERRUPTOR(N+2),2,2,@VACIO,0): END IF
NEXT N

REM MALOS...
FOR N=0 TO 23                                     : REM DAMOS VALOR 255 A TODA LA MATRIZ
PLATAFORMA(N)=255
NEXT N

IF HAYGUARDIAN(PANTALLA)=0 THEN GOTO UYUYUY: END IF
JORCAS=0
FOR N=0 TO (PANTALLA-1)
JORCAS=JORCAS+HAYGUARDIAN(N)
NEXT N
DIROR=@GUARDIANO+JORCAS
DIRTAM=HAYGUARDIAN(PANTALLA)
memcopy (DIROR, @PLATAFORMA(0), DIRTAM)

UYUYUY:

FOR N=0 TO 2                                      :REM INICIAMOS CONTADORES Y MARCAS
CONTADOR(N)=0
ALCANCE(N)=0
NEXT N

REM-----
JOKER=0
FOR N=0 TO 16 STEP 8
IF PLATAFORMA(N+2)=1 THEN
   QUEVARIA(JOKER+0)=PLATAFORMA(N+0)
   IF PLATAFORMA(N+3)=1 THEN SENTIDO(JOKER+0)=2
   ELSE SENTIDO(JOKER+0)=-2
   END IF
END IF                                            :REM ASIGNAMOS VALORES A "QUEVARIA" Y "SENTIDO"
IF PLATAFORMA(N+2)=2 THEN
   QUEVARIA(JOKER+0)=PLATAFORMA(N+1)
   IF PLATAFORMA(N+3)=1 THEN SENTIDO(JOKER+0)=2
   ELSE SENTIDO(JOKER+0)=-2
   END IF
END IF
                                                  :REM ASIGNAMOS VALORES A SPRITES
JORCAS=PLATAFORMA(N+6)
REBORI(JOKER)=@GUARDIAN+(96*JORCAS)
GUARDIATRAZO(JOKER)=REBORI(JOKER)
JOKER=JOKER+1
NEXT N

REM-----


                                                  :REM SACAMOS INVERSAS GUARDIANES
ASM
LD HL,(_REBORI+3)                                 ; OJO REBORI ES UINTEGER Y OCUPA CADA DATO 2 BYTES (3-4, 5-6, 7-8, ETC)
LD DE,REFLEJO1
CALL INVERSA
LD HL,(_REBORI+5)
LD DE,REFLEJO2
CALL INVERSA
LD HL,(_REBORI+7)
LD DE,REFLEJO3
CALL INVERSA
END ASM



REM ===========
REM =========== EN SU CASO, PINTAMOS GUARDIANES EN POSICION INICIAL PARA QUE FUNCIONE RUTINA CON XOR...

JOKER=0
FOR N=0 TO 16 STEP 8
    IF PLATAFORMA(N)<>255 THEN
    MALOTE (PLATAFORMA(N), PLATAFORMA(N+1),REBORI(JOKER),PLATAFORMA(N+7))
    END IF
JOKER=JOKER+1
NEXT N


REM ===========
REM =========== TEMPO
PIANO=0
JOKER=HAYGUARDIAN(PANTALLA)
REM TEMPO=40-JOKER
IF JOKER=0 THEN TEMPO=104
ELSEIF JOKER=8 THEN TEMPO=  94
ELSEIF JOKER=16 THEN TEMPO= 80
ELSEIF JOKER=24 THEN TEMPO= 77
END IF

REM =========
REM ========= MARCAMOS REY ACTIVO
BORRnXn (2,20,11,1,@VACIO,0)
DIBnXn(2+((REY-1)*4),20,3,1,@MARCAREY,0,66)

REM DIBUJAMOS PARA QUE FUNCIONE RUTINA DE IMPRESION REYES...
FOR N=1 TO 3
FM(N)=0
IF PANTALLO(N)=PANTALLA THEN
MALOTE (MX(N),MY(N),RENOMALO,68+N)      :REM  MAJESTAD(N)+FM(N)
END IF
NEXT N





REM ===========
REM =========== BUCLE JUEGO FASE 2


BUCLEFASE2:

IF PIANO<>TEMPO THEN GOTO FIN2:END IF

PULSANDO=0    :REM SI NO APRIETAS "M" PULSADO VALDR 0 PATATERO
MOVISTE=0     :REM SI NO PULSAS MOVIMIENTO TESTAS QUIETO

REM +++++++++ LECTURA TECLADO
ASM

   ; *** TECLA N ***
    LD BC, $7FFE           ; Semifila "SPACE" a "B"
    IN A, (C)              ; Leemos el puerto
    BIT 3, A               ; Testeamos el bit 3 ->"N"
    JP NZ, TECLAM          ; Si no esta a 0 (pulsado) salir
    LD A,(_REY)            ; SI PULSAS INCREMENTAS "REY"
    INC A
    CP 4                   ;SI "REY"=4 ENTONCES VALE 1
    JR NZ, SIGUEENE
    LD A,1
    SIGUEENE:
    LD (_REY),A
    END ASM
      REM IF PANTALLA=PANTALLO(REY)THEN RENOMALO=MAJESTAD(REY):GOTO SIGUEENE2:END IF
      PANTALLA=PANTALLO(REY)
      RENOMALO=MAJESTAD(REY)
      GOSUB EFECTO1
      GOTO CARGAPANTALLA
    SIGUEENE2:
    ASM

   ; *** TECLA M ***
    TECLAM:
    LD BC, $7FFE           ; Semifila "SPACE" a "B"
    IN A, (C)              ; Leemos el puerto
    BIT 2, A               ; Testeamos el bit 2 ->"M"
    JR NZ, TECLAO2         ; Si no esta a 0 (pulsado) salir
    LD A,1
    LD (_PULSANDO),A

   ; *** TECLA O ***
    TECLAO2:
    LD BC, $DFFE         ; Semifila "Y" a "P"
    IN A, (C)            ; Leemos el puerto
    BIT 1, A             ; Testeamos el bit 1 ->"O"
    JR NZ, TECLAP2        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,4
    LD (_MOVISTE),A      ;MOVISTE=4

   ; *** TECLA P ***
    TECLAP2:
    LD BC, $DFFE         ; Semifila "Y" a "P"
    IN A, (C)            ; Leemos el puerto
    BIT 0, A             ; Testeamos el bit 0 ->"P"
    JR NZ, TECLAQ2        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,3
    LD (_MOVISTE),A      ;MOVISTE=3

    ; *** TECLA Q ***
    TECLAQ2:
    LD BC, $FBFE         ; Semifila "Q" a "T"
    IN A, (C)            ; Leemos el puerto
    BIT 0, A             ; Testeamos el bit 0 ->"Q"
    JR NZ, TECLAA2        ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,1
    LD (_MOVISTE),A      ;MOVISTE=1

    ; *** TECLA A ***
    TECLAA2:
    LD BC, $FDFE         ; Semifila "A" a "G"
    IN A, (C)            ; Leemos el puerto
    BIT 0, A             ; Testeamos el bit 0 ->"A"
    JR NZ, FIN_LECTURA2  ; Si no esta a 0 (pulsado) salir a siguiente tecla.
    LD A,2
    LD (_MOVISTE),A      ;MOVISTE=2

FIN_LECTURA2:
END ASM

REM CAMBIO PANTALLA
   IF MOVISTE=1 AND MY(REY)= 183 THEN MY(REY)= 55: PANTALLO(REY)=PANTALLO(REY)+1: PANTALLA=PANTALLA+1:GOTO CARGAPANTALLA
   ELSEIF MOVISTE=2 AND MY(REY)= 55 THEN MY(REY)= 183: PANTALLO(REY)=PANTALLO(REY)-1: PANTALLA=PANTALLA-1:GOTO CARGAPANTALLA
   ELSEIF MOVISTE=3 AND MX(REY)= 240 THEN MX(REY)= 0: PANTALLO(REY)=PANTALLO(REY)+4: PANTALLA=PANTALLA+4:GOTO CARGAPANTALLA
   ELSEIF MOVISTE=4 AND MX(REY)= 0 THEN MX(REY)=240: PANTALLO(REY)=PANTALLO(REY)-4: PANTALLA=PANTALLA-4:GOTO CARGAPANTALLA
   END IF



REM PLOTEADO MAJESTADES
IF MOVISTE<>0 THEN
   
    CHOQUEX=MX(REY)
    CHOQUEY=MY(REY)

    ASM
    LD A,(_CHOQUEX)
    LD D,A
    AND 7                    ;APROVECHANDO VEMOS LOS TRES BITS BAJOS DE X QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
    LD (_CHOQUEX),A           ;Y LOS GUARDAMOS EN "CHOQUEX"

    LD A,(_CHOQUEY)
    LD E,A
    AND 7                    ;APROVECHANDO VEMOS LOS TRES BITS BAJOS DE Y QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
    LD (_CHOQUEY),A           ;Y LOS GUARDAMOS EN "CHOQUEY"
    END ASM



   SACAAT (MX(REY),MY(REY))                         :REM VAMOS A VER SI NO CHOCAMOS  OJO CON CHOQUE MALOS....AJUSTE ADICIONAL

   

   REM PAINT (10,19,11,4,0)
 REM    PRINT AT 19,10; INK 3;J(0);AT 19,13;J(1);AT 19,16;J(2);AT 19,19;J(3)
    REM       PRINT AT 20,10; INK 3;J(4);AT 20,13;J(5);AT 20,16;J(6);AT 20,19;J(7)
       REM  PRINT AT 21,10; INK 3;J(8);AT 21,13;J(9);AT 21,16;J(10);AT 21,19;J(11)
       REM    PRINT AT 22,10; INK 3;J(12);AT 22,13;J(13);AT 22,16;J(14);AT 22,19;J(15)



   IF MOVISTE=1 AND CHOQUEY=7 THEN
    IF MX(REY)=0 AND (J(0)<>0 OR J(1)<>0) THEN GOTO NOPLOTEAS: END IF
    IF MX(REY)=0 THEN GOTO OTILO:END IF
    IF CHOQUEX=0 AND (J(1)<>0 OR J(2)<>0) THEN GOTO NOPLOTEAS: END IF
    OTILO:
    IF CHOQUEX<>0 AND (J(1)<>0 OR J(2)<>0 OR J(3)<>0) THEN GOTO NOPLOTEAS: END IF
   END IF

   IF MOVISTE=2 AND CHOQUEY=7 THEN
    IF MX(REY)=0 AND (J(12)<>0 OR J(13)<>0) THEN GOTO NOPLOTEAS: END IF
    IF MX(REY)=0 THEN GOTO OTILO2:END IF
    IF CHOQUEX=0 AND (J(13)<>0 OR J(14)<>0) THEN GOTO NOPLOTEAS: END IF
    OTILO2:
    IF CHOQUEX<>0 AND (J(13)<>0 OR J(14)<>0 OR J(15)<>0) THEN GOTO NOPLOTEAS: END IF
   END IF
   
   IF MOVISTE=3 AND CHOQUEX=0 THEN
    IF CHOQUEY=7 AND (J(7)<>0 OR J(11)<>0) THEN GOTO NOPLOTEAS: END IF
    IF CHOQUEY<>7 AND (J(7)<>0 OR J(11)<>0 OR J(15)<>0) THEN GOTO NOPLOTEAS: END IF
   END IF
   
   IF MOVISTE=4 AND CHOQUEX=0 THEN
    IF CHOQUEY=7 AND (J(4)<>0 OR J(8)<>0) THEN GOTO NOPLOTEAS: END IF
    IF CHOQUEY<>7 AND (J(4)<>0 OR J(8)<>0 OR J(12)<>0) THEN GOTO NOPLOTEAS: END IF
   END IF



   MALOTE (MX(REY),MY(REY),RENOMALO+FM(REY),0)      :REM BORRAS
   IF MOVISTE=1 THEN MY(REY)=MY(REY)+2:RENOMALO=MAJESTAD(REY)+128
   ELSEIF MOVISTE=2 THEN MY(REY)=MY(REY)-2:RENOMALO=MAJESTAD(REY)+192
   ELSEIF MOVISTE=3 THEN MX(REY)=MX(REY)+2:RENOMALO=MAJESTAD(REY)
   ELSEIF MOVISTE=4 THEN MX(REY)=MX(REY)-2:RENOMALO=MAJESTAD(REY)+64
   END IF

   FM(REY)=FM(REY)+32
   IF FM(REY)=64 THEN FM(REY)=0:END IF

   IF FM(REY)=0 THEN
              ASM
              PUSH IX
              PUSH IY
              ld hl,700     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,600     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              POP IY
              POP IX
              END ASM
 GOTO PASOSORDO
 END IF
              ASM
              PUSH IX
              PUSH IY
              ld hl,100     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,50     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              POP IY
              POP IX
              END ASM
PASOSORDO:

   MALOTE (MX(REY),MY(REY),RENOMALO+FM(REY),68+REY)      :REM PINTAS
END IF
NOPLOTEAS:



FIN2:

PIANO=PIANO+1
IF PIANO=TEMPO+1 THEN PIANO=0:END IF





REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM EVENTOS

IF PIANO<>TEMPO THEN GOTO FINEVENTOS:END IF      :REM SOLO CALCULAMOS SI TOCA

FOR N=0 TO 65 STEP 5


IF PANTALLA=INTERRUPTOR(N) THEN

    CHOQUEX=MX(REY)
    CHOQUEY=MY(REY)

    ASM
    LD A,(_CHOQUEX)            ;TRANSFORMAMOS COORDENADAS REY A BR
    LD D,A
    LD A,(_CHOQUEY)
    LD E,A
    CALL HRaBR
    LD A,E
    LD (_CHOQUEY),A
    LD A,D
    LD (_CHOQUEX),A
    END ASM

     ALGOPASO=0
    REM ****DETECTAMOS SI ESTAMOS EN POSICIN****
     JOKER=INTERRUPTOR(N+4)-2: REM LA Y QUE ACTIVA
     GUDAR=INTERRUPTOR(N+3)-2: REM LA X QUE ACTIVA
     FOR Q=0 TO 5
     FOR W=0 TO 4
       IF CHOQUEY=JOKER+Q AND CHOQUEX=GUDAR+W THEN ALGOPASO=1: END IF
     NEXT W
     NEXT Q



    REM ***** SI ALGOPASO EST ACTIVADO PUEDE HABER EVENTO
    IF ALGOPASO=1 AND PULSANDO=1 THEN

             REM TESOROS ANTES QUE PUERTAS...
             IF INTERRUPTOR(N+1)>20 AND INTERRUPTOR (N+2)=0 THEN
                   IF REY=INTERRUPTOR(N+1)-20 THEN
                   TESORO=TESORO+1
                   BORRnXn (INTERRUPTOR(N+3),INTERRUPTOR(N+4),2,2,@VACIO,0)
                   GOSUB EFECTO2
                   INTERRUPTOR(N+2)=1
                   END IF
              IF TESORO=3 THEN GOTO VICTORIATOTAL:END IF
             END IF

             IF INTERRUPTOR(N+1)>20 THEN GOTO FINEVENTOS: END IF

             REM VALOR Y DIBUJAR INTERRUPTOR
             IF INTERRUPTOR(N+2)=0 THEN INTERRUPTOR(N+2)=1
             ELSE INTERRUPTOR(N+2)=0
             END IF
             GOSUB EFECTO2
             GOSUB PINTOINTERRUPTOR
             REM CAMBIAR VALOR PUERTA
             JOKER=((INTERRUPTOR(N+1)-1)*8)+2
             IF PUERTAS(JOKER)=0 THEN PUERTAS (JOKER)=1
             ELSE PUERTAS (JOKER)=0
             END IF
             REM SI ESTA EN PANTALLA DIBUJARLA
             IF PANTALLA=11 AND PUERTAS(JOKER-1)>7 THEN
                IF PUERTAS(JOKER+3)=4 THEN JORCAS=@VERJA2X2
                ELSEIF PUERTAS(JOKER+3)<4 THEN JORCAS=@MURO+108
                END IF
                IF PUERTAS(JOKER)=1 THEN JORCAS=@VACIO2X2: END IF
                RELLENA (PUERTAS(JOKER+1),PUERTAS(JOKER+2),2,2,PUERTAS(JOKER+4),PUERTAS(JOKER+5),JORCAS,1,0)
             END IF


    END IF




END IF
NEXT N


FINEVENTOS:







REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM GUARDIANES



REM ==GUARDIAN 1 ==
IF PLATAFORMA(0)<>255 AND CONTADOR(0)=PLATAFORMA(5) THEN

   MALOTE  (PLATAFORMA(0), PLATAFORMA(1),GUARDIATRAZO(0),0)
   ALCANCE(0)=ALCANCE(0)+1
   IF ALCANCE(0)=PLATAFORMA(4) THEN
   ALCANCE(0)=0
   SENTIDO(0)=SENTIDO(0)*(-1)
   END IF
   QUEVARIA(0)=QUEVARIA(0)+SENTIDO(0)
   IF PLATAFORMA(2)=1 THEN PLATAFORMA(0)=QUEVARIA(0)
   ELSE PLATAFORMA(1)=QUEVARIA(0)
   END IF
REM   BEEP .001,0
   IF SENTIDO(0)>0 THEN GUARDIATRAZO(0)=REBORI(0)+FOTOGUARDIA(0)
   ELSE
   GUARDIATRAZO(0)=@ESPEJO1+FOTOGUARDIA(0)
   END IF
   MALOTE  (PLATAFORMA(0), PLATAFORMA(1),GUARDIATRAZO(0),PLATAFORMA(7))
   FOTOGUARDIA(0)=FOTOGUARDIA(0)+32
   IF FOTOGUARDIA(0)=96 THEN FOTOGUARDIA(0)=0:END IF
   CONTADOR(0)=0
   COLISION (PLATAFORMA(0),PLATAFORMA(1))

END IF
CONTADOR(0)=CONTADOR(0)+1


REM ==GUARDIAN 2 ==
IF PLATAFORMA(8)<>255 AND CONTADOR(1)=PLATAFORMA(13) THEN

   MALOTE  (PLATAFORMA(8), PLATAFORMA(9),GUARDIATRAZO(1),0)
   ALCANCE(1)=ALCANCE(1)+1
   IF ALCANCE(1)=PLATAFORMA(12) THEN
   ALCANCE(1)=0
   SENTIDO(1)=SENTIDO(1)*(-1)
   END IF
   QUEVARIA(1)=QUEVARIA(1)+SENTIDO(1)
   IF PLATAFORMA(10)=1 THEN PLATAFORMA(8)=QUEVARIA(1)
   ELSE PLATAFORMA(9)=QUEVARIA(1)
   END IF
REM   BEEP .001,15
   IF SENTIDO(1)>0 THEN GUARDIATRAZO(1)=REBORI(1)+FOTOGUARDIA(1)
   ELSE
   GUARDIATRAZO(1)=@ESPEJO2+FOTOGUARDIA(1)
   END IF
   MALOTE  (PLATAFORMA(8), PLATAFORMA(9),GUARDIATRAZO(1),PLATAFORMA(15))
   FOTOGUARDIA(1)=FOTOGUARDIA(1)+32
   IF FOTOGUARDIA(1)=96 THEN FOTOGUARDIA(1)=0:END IF
   CONTADOR(1)=0
   COLISION (PLATAFORMA(8),PLATAFORMA(9))

END IF
CONTADOR(1)=CONTADOR(1)+1

REM ==GUARDIAN 3==
IF PLATAFORMA(16)<>255 AND CONTADOR(2)=PLATAFORMA(21) THEN

   MALOTE  (PLATAFORMA(16), PLATAFORMA(17),GUARDIATRAZO(2),0)
   ALCANCE(2)=ALCANCE(2)+1
   IF ALCANCE(2)=PLATAFORMA(20) THEN
   ALCANCE(2)=0
   SENTIDO(2)=SENTIDO(2)*(-1)
   END IF
   QUEVARIA(2)=QUEVARIA(2)+SENTIDO(2)
   IF PLATAFORMA(18)=1 THEN PLATAFORMA(16)=QUEVARIA(2)
   ELSE PLATAFORMA(17)=QUEVARIA(2)
   END IF
REM   BEEP .001,25
   IF SENTIDO(2)>0 THEN GUARDIATRAZO(2)=REBORI(2)+FOTOGUARDIA(2)
   ELSE
   GUARDIATRAZO(2)=@ESPEJO3+FOTOGUARDIA(2)
   END IF
   MALOTE  (PLATAFORMA(16), PLATAFORMA(17),GUARDIATRAZO(2),PLATAFORMA(23))
   FOTOGUARDIA(2)=FOTOGUARDIA(2)+32
   IF FOTOGUARDIA(2)=96 THEN FOTOGUARDIA(2)=0:END IF
   CONTADOR(2)=0
   COLISION (PLATAFORMA(16),PLATAFORMA(17))

END IF
CONTADOR(2)=CONTADOR(2)+1

REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
















GOTO BUCLEFASE2:








555 GOTO 555





REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                         RUTINAS VARIAS
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 REM 1 CARGAHORIZONTE
 REM 2 SCROLL DE HORIZONTE
 REM 3 SCROLL DE FIRMAMENTO
 REM 4 MUERTE EN FASE 1
 REM 5 EXPLOSION DE LOS MARCIANOS
 REM 6 METERORITOS INICIAR
 REM 7 MARCIANITOS INICIAR
 REM 8 EXPLOSION
 REM 9 LECHE A NOEL
 REM 10 SACAR ATRIBUTOS ALREDEDOR DE GRAFICO DE 2X2
 REM 11 TRANSFORMAR COORDENADAS ALTA RESOLUCION EN BAJA RESOLUCIN
 REM 12 SACAR DIMENSIONES OBJETO DE UN SOLO NUMERO
 REM 13 PINTOINTERRUPTOR
 REM 14 EFECTOS
 REM 15 SACAR SPRITES INVERSOS GUARDIANES
 REM 16 COLISION MALO-BUENO
 REM 17 MUERTE TOTAL
 REM 18 VICTORIA TOTAL


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 1 - CARGA HORIZONTE        CARGA EN DIRECCIN "HORIZONTE" LOS BLOQUES QUE COMPONEN EL TIPO DE HORIZONTE SECUENCIADO EN "SUELO"

ASM
CARGAHORIZONTE:
END ASM

     JOKER=SUELO(SUELA)

ASM
     LD A,(_JOKER)

     CP 1
     JP Z, VAMOSALCP1
     CP 2
     JP Z, VAMOSALCP2
     CP 3
     JP Z, VAMOSALCP3
     CP 4
     JP Z, VAMOSALCP4
     CP 5
     JP Z, VAMOSALCP5
     CP 6
     JP Z, VAMOSALCP6
     CP 7
     JP Z, VAMOSALCP7
     CP 8
     JP Z, VAMOSALCP8


VAMOSALCP1:
    LD HL,CACHO1
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO2
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO1
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO1
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET

VAMOSALCP2:
    LD HL,CACHO2
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO3
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO3
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO1
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET

VAMOSALCP3:
    LD HL,CACHO5
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO4
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO5
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO1
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET

VAMOSALCP4:
    LD HL,CACHO2
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO2
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO3
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO5
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET

VAMOSALCP5:
    LD HL,CACHO6
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO6
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO6
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO6
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET

VAMOSALCP6:
    LD HL,CACHO6
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO6
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO7
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO6
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET

VAMOSALCP7:
    LD HL,CACHO8
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO8
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO8
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO8
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET
    
VAMOSALCP8:
    LD HL,CACHO8
    LD DE,HORIZONTA
    LD BC,216
   LDIR
    LD HL,CACHO9
    LD DE,HORIZONTA+216
    LD BC,216
   LDIR
    LD HL,CACHO8
    LD DE,HORIZONTA+432
    LD BC,216
   LDIR
    LD HL,CACHO8
    LD DE,HORIZONTA+648
    LD BC,216
   LDIR
    RET




END ASM




REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 2 - SCROLL DE HORIZONTE

ASM
DESLIZASUELO:

    LD HL,20481           ;SEGUNDA DIRECCIN DE FILA 16
    LD DE,20480           ;PRIMERA DIRECCIN DE FILA 16
    CALL CACOTA
    LD HL,23041           ;SEGUNDA DIRECCIN DE FILA 16 ATRIBUTOS
    LD DE,23040           ;PRIMERA DIRECCIN DE FILA 16 ATRIBUTOS
    CALL CACOTO

    LD HL,20513           ;SEGUNDA DIRECCIN DE FILA 17
    LD DE,20512           ;PRIMERA DIRECCIN DE FILA 17
    CALL CACOTA
    LD HL,23073           ;SEGUNDA DIRECCIN DE FILA 16 ATRIBUTOS
    LD DE,23072           ;PRIMERA DIRECCIN DE FILA 16 ATRIBUTOS
    CALL CACOTO

    LD HL,20545           ;SEGUNDA DIRECCIN DE FILA 18
    LD DE,20544           ;PRIMERA DIRECCIN DE FILA 18
    CALL CACOTA
    LD HL,23105           ;SEGUNDA DIRECCIN DE FILA 16 ATRIBUTOS
    LD DE,23104           ;PRIMERA DIRECCIN DE FILA 16 ATRIBUTOS
    CALL CACOTO
    RET

    CACOTA:
    LD BC,31               ;TAMAO A COPIAR
    LD A,8
    BUCLECILLO:
    LDIR                   ;DESPLAZAS
    LD BC,-31
    ADD HL,BC
    INC H
    LD D,H
    LD E,L
    DEC DE
    LD BC,31
    DEC A
    CP 0
    JP NZ, BUCLECILLO
    RET
    
    CACOTO:
    LD BC,31               ;TAMAO A COPIAR
    LDIR                   ;DESPLAZAS
    RET

END ASM


REM ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 3 - SCROLL DE FIRMAMENTO   NO HAY QUE CARGARLO, ES LA REPETICIN DE LAS MISMAS NUBES (EN UN PRINCIPIO) Y SIN ATRIBUTOS

ASM
DESLIZAFIRMAMENTO:

   LD HL,16480          ;COPIAMOS EL PRIMER CARCTER DE LA FILA 3 EN "FIRMAAUX"
   LD DE,FIRMAAUX
   CALL COPIOTA

   LD HL,16512          ;COPIAMOS EL PRIMER CARCTER DE LA FILA 4 EN "FIRMAAUX"
   LD DE,FIRMAAUX+8
   CALL COPIOTA

   LD HL,16481          ;SEGUNDA DIRECCIN DE FILA 3
   LD DE,16480          ;PRIMERA DIRECCIN DE FILA 3
   CALL CACOTA

   LD HL,16513          ;SEGUNDA DIRECCIN DE FILA 4
   LD DE,16512          ;PRIMERA DIRECCIN DE FILA 4
   CALL CACOTA

   LD HL,16511          ;COPIAMOS EL PRIMER "FIRMAUX" AL LTIMO CARCTER DE FILA 3
   LD DE,FIRMAAUX
   CALL DESCOPIOTA

   LD HL,16543          ;COPIAMOS EL SEGUNDO "FIRMAUX" AL LTIMO CARCTER DE FILA 4
   LD DE,FIRMAAUX+8
   CALL DESCOPIOTA
RET

   COPIOTA:
   LD B,8
   ABRACADABRA:
   LD A,(HL)
   LD (DE),A
   INC H
   INC DE
   DJNZ ABRACADABRA
   RET

   DESCOPIOTA:
   LD B,8
   ABRACADABRA2:
   LD A,(DE)
   LD (HL),A
   INC H
   INC DE
   DJNZ ABRACADABRA2
   RET

END ASM



REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 4 - MUERTE EN FASE 1

MUERTE:
    VIDA=VIDA-1
    DIBnXn(2+(4*VIDA),21,3,3,@REYMUERTO,0,7)

    PRINT AT 23,22;INK 7;PAPER 0;BRIGHT 1;BOLD 1;"CUIDADO!!"
    GOSUB EFECTO3
    PRINT AT 23,22;INK 0;PAPER 0;"         "

RETURN


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 5 - EXPLOSION DE LOS MARCIANOS

EXPLOSIMAR:
REM PRINT AT 22,15;INK 4;BRIGHT 1;VIDA
RETURN


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 6 - METERORITOS INICIAR

INCICIAMETEORO:
FOR QU=0 TO 4
METEORITO(QU)=0
NEXT QU
CUENTARITO=0
TOPE=0
PASOLEADA=0
PASOLEADO=0
RETURN

REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 7 - MARCIANITOS INICIAR

INICIAMARCIANO:
CUENTARITO=0
PASOLEADA=0
PASOLEADO=0
FOR QU=0 TO 4
PASOMARCIANO(QU)=0
DISPARITO(QU)=0
MARCIANITO(QU)=0
NEXT QU
RETURN



REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 8 - EXPLOSION

SUB EXPLOTEA(XX AS UBYTE, YY AS UBYTE)
FOR Z=0 TO 80 STEP 16
FOR P=0 TO 1
IF YY<71 THEN YY=71:END IF
ZUMZUM (XX,YY,@EXPLOSION+Z,(INT(RND*7)+9))
              ASM
              PUSH IX
              PUSH IY
              ld hl,400     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,350     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,300     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,200     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,100     ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              ld hl,50      ; This is the pitch for our note
              ld de,1       ; This will be the duration it will play
              call 949
              POP IY
              POP IX
              END ASM
ZUMZUM (XX,YY,@EXPLOSION+Z,15)
NEXT P
NEXT Z
END SUB




REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 9 - LECHE A NOEL

OSTIANOEL:
BORRnXn (20+VIDAPAPANOEL,21,1,1,@VACIO,0)
VIDAPAPANOEL=VIDAPAPANOEL-1
IF VIDAPAPANOEL=0 THEN GOTO FASE2:END IF
RETURN

REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 10 - SACAR ATRIBUTOS ALREDEDOR DE GRAFICO DE 2X2



REM                                   0  1  2  3
REM                                   4  5  6  7
REM                                   8  9  10 11
REM                                   12 13 14 15

REM  LOS DATOS SE GUARDAN EN MATRIZ J(15)

REM  (ix+5), XB
REM  (ix+7), YB

SUB SACAAT (XB AS UBYTE, YB AS UBYTE)

ASM

    LD A,(IX+5)
    LD D,A
    LD A,(IX+7)
    LD E,A
    CALL HRaBR
    LD A,E
    LD (IX+7),E

    LD A,D                    ;ESTO ERA UN GRAVE ERROR, SI X EN BAJA=0 Y RESTABA 1 DABA ERROR .... CON ESTO LO EVITO
    LD (IX+5),A
    CP 0
    JR NZ, JUJUA
    JR JUJU



    JUJUA:
    DEC (IX+5)                 ;XB-1
    JUJU:
    DEC (IX+7)                 ;YB-1
    CALL COLOCABJTRIBUTO       ;OBTENEMOS DIRECCIN DEL 1 ATRIBUTO EN "HL"

    LD DE,OLE2                 ;APUNTAMOS "DE" A OLE2 DONDE VOY A GUARDAR LOS DATOS

                  ;REM SACAMOS LOS ATRIBUTOS

LD B,4                         ; LAS 4 FILAS...
GGG1:
PUSH BC

    LD A,(HL)
    LD (DE),A
    INC HL
    INC DE
    LD A,(HL)
    LD (DE),A
    INC HL
    INC DE
    LD A,(HL)
    LD (DE),A
    INC HL
    INC DE
    LD A,(HL)
    LD (DE),A
    INC DE
    DEC HL
    DEC HL
    DEC HL
    LD BC,32
    ADD HL,BC

POP BC
DJNZ GGG1

END ASM

FOR N=0 TO 15: J(N)= PEEK (@OLE+N):NEXT N

END SUB

REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 11 - TRANSFORMAR COORDENADAS ALTA RESOLUCION EN BAJA RESOLUCIN


ASM

    ; ENTRADA "D" Y "E" (XY EN HR) SALIDA "D" Y "E" (XY EN BR)

HRaBR:
    LD A,D
    SRA A                            ; TRANSFORMAMOS HR EN BAJA RESOLUCION PARA COORDENADA X
    SRA A
    SRA A
    AND 31
    LD D,A

    LD A,E
    LD B,A                           ; TRANSFORMAMOS HR EN BAJA RESOLUCION PARA COORDENADA Y
    LD A,192
    SUB B
    SRA A
    SRA A
    SRA A
    AND 31
    LD E,A
    RET
END ASM


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 12 - SACAR DIMENSIONES OBJETO DE UN SOLO NUMERO


REM IX+5  DATO COMPRIMIDO

SUB SACADIM (ENE AS UBYTE)


ASM
    LD A,(IX+5)    ;SACO EL Y QUE ESTA EN 4 BYTS BAJOS
    AND 15
    LD (DIMENSIONY),A

    LD A,(IX+5)    ;SACO EL X QUE ESTA EN 4 BYTS ALTOS
    AND 240
    RRCA
    RRCA
    RRCA
    RRCA
    LD (DIMENSIONX),A

END ASM

DIMENY=PEEK @NOLE
DIMENX=PEEK (@NOLE+1)

END SUB


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 13 - PINTOINTERRUPTOR

PINTOINTERRUPTOR:
   IF INTERRUPTOR(N+2)=1 THEN JORCAS=@DALALUZ
   ELSE JORCAS=@DALALUZ+36
   END IF
   DIBnXn(INTERRUPTOR(N+3),INTERRUPTOR(N+4),2,2,JORCAS,1,0)
RETURN


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 14 - EFECTOS

    EFECTO1:
    FOR W=0 TO 1:FOR Q=0 TO 7:BORDER Q: BEEP .002,Q: NEXT Q:NEXT W:BORDER 0
    RETURN

    EFECTO2:
    FOR W=20 TO 40: BEEP .001,W:NEXT W
    RETURN
    
    EFECTO3:
    FOR W=0 TO 2: BORDER 2-W:FOR Q=0 TO 7: BEEP .04,40-(10*5):NEXT Q:NEXT W
    RETURN

REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 15- SACAR SPRITES INVERSOS GUARDIANES


REM ENTRADA "HL" DIRECCION GUARDIAN A ROTAR
REM ENTRADA "DE" DIRECCION A GUARDAR (REFLEJO1, REFLEJO2 O REFLEJO3)

ASM
INVERSA:


   INC DE            ;INCREMENTAMOS LA DIRECCION DE INVERSO AL FINAL DEL LARGO

   LD B,48           ;16 SCANLINE POR CADA SPRITE, SON TRES FRAMES
   BUCLEBAR:
   PUSH BC

   LD B,2
   BUCLELAR:
   PUSH BC

   LD C, (HL)       ;CARGO HL CON DATO BYTE ORIGEN Y LO PONGO EN "C"

   XOR A            ; PONGO A CERO QUE ES DONDE VOY A GUARDAR EL BYTE ROTADO

   LD B,8
   VOLTEANDO:
   RL   C           ;Rotacin a la IZQUIERDA de BYTE ORIGEN EL 7 BIT PASA TOO A ACARREO
   RRA              ;Rotacin a la DERECHA de "A" ALIMENTNDOLO CON EL ACARREO Y YA EST
   DJNZ VOLTEANDO

   LD (DE),A

   INC HL
   DEC DE

   POP BC
   DJNZ BUCLELAR

   INC DE
   INC DE
   INC DE
   INC DE      ;INCREMENTAMOS LA DIRECCION DE INVERSO AL FINAL DEL LARGO

   POP BC
   DJNZ BUCLEBAR
   RET

END ASM



REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 16 - COLISION MALO-BUENO

SUB COLISION   (XX AS UBYTE, YY AS UBYTE)
  
  IF MY(REY)<YY+16 AND MY(REY)>YY-16 THEN
     IF MX(REY)>XX-16 AND MX(REY)<XX+16 THEN
        GOTO MUERTEFASE2
     END IF
  END IF
  
  IF MX(REY)<XX+16 AND MX(REY)>XX-16 THEN
     IF MY(REY)=YY-16 AND MOVISTE=1 THEN GOTO MUERTEFASE2: END IF
     IF MY(REY)=YY+16 AND MOVISTE=2 THEN GOTO MUERTEFASE2: END IF
  END IF

  IF MY(REY)<YY+16 AND MY(REY)>YY-16 THEN
     IF MX(REY)=XX+16 AND MOVISTE=4 THEN GOTO MUERTEFASE2: END IF
     IF MX(REY)=XX-16 AND MOVISTE=3 THEN GOTO MUERTEFASE2: END IF
  END IF
END SUB



MUERTEFASE2:

    VIDAKING(REY)=VIDAKING(REY)-1
    DIBnXn(2+((REY-1)*4),21+VIDAKING(REY),3,1,@REYMUERTO+VIDAKING(REY)*24,0,7)

    PRINT AT 22,18;INK 7;PAPER 0;BRIGHT 1;BOLD 1;"CUIDADO!!"
    GOSUB EFECTO3
    PRINT AT 22,18;INK 0;PAPER 0;"         "

    IF VIDAKING(REY)=0 THEN GOTO MUERTETOTAL:END IF
    
    FOR V=0 TO 44 STEP 4
    IF REY=RESUCITA(V) AND PANTALLA=RESUCITA(V+1) THEN
    MX(REY)=RESUCITA(V+2)
    MY(REY)=RESUCITA(V+3)
    END IF
    NEXT V

    GOTO CARGAPANTALLA


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 17 - MUERTE TOTAL

MUERTETOTAL:
BORDER 0:PAPER 0:CLS
DIBnXn (14,5,4,4,@NOELGANA,1,0)
PRINT AT 11,11; BOLD 1; INK 2; BRIGHT 1;PAPER 0;"GAME  OVER"
PRINT AT 13,15; BOLD 1; INK 7; BRIGHT 0;PAPER 0;"NO"
PRINT AT 15,12; BOLD 1; INK 5; BRIGHT 0;PAPER 0;"SALVASTE"
PRINT AT 17,11; BOLD 1; INK 6; BRIGHT 0;PAPER 0;"LA NAVIDAD"
ASM
      PUSH IX
      LD HL, PECESRIO        ;CARGAMOS PECES RIO
      CALL START
      POP IX

      DI
  NEXTNOTE4:
      CALL  PLAYNOTE
      XOR   A
      IN    A,($FE)
      AND   $1F
      CP    $1F
      JR    Z,NEXTNOTE4                    ; Play next note if no key pressed
      EI
END ASM
PAUSE 0
GOTO CREDITOS


REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM 18 - VICTORIA TOTAL

VICTORIATOTAL:
BORDER 0:PAPER 0:CLS
DIBnXn (12,1,2,2,@LUNA,0,71)
DIBnXn (14,5,4,4,@VICTORIA,1,0)
PRINT AT 11,10; BOLD 1; INK 5; BRIGHT 1;PAPER 0;"ENHORABUENA!"
PRINT AT 14,12; BOLD 1; INK 7; BRIGHT 0;PAPER 0;"SALVASTE"
PRINT AT 16,11; BOLD 1; INK 4; BRIGHT 0;PAPER 0;"LA NAVIDAD"
ASM
      PUSH IX
      LD HL, PECESRIO        ;CARGAMOS PECES RIO
      CALL START
      POP IX

      DI
  NEXTNOTE5:
      CALL  PLAYNOTE
      XOR   A
      IN    A,($FE)
      AND   $1F
      CP    $1F
      JR    Z,NEXTNOTE5                    ; Play next note if no key pressed
      EI

END ASM
PAUSE 0
GOTO CREDITOS



REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                         BEEPOLA
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ASM
; *****************************************************************************
; * The Music Box Player Engine
; *
; * Based on code written by Mark Alexander for the utility, The Music Box.
; * Modified by Chris Cowley
; *
; * Produced by Beepola v1.06.01
; ******************************************************************************

START:
                          ;LD    HL,MUSICDATA         ;  <- Pointer to Music Data. Change
                                                     ;     this to play a different song
                          LD   A,(HL)                         ; Get the loop start pointer
                          LD   (PATTERN_LOOP_BEGIN),A
                          INC  HL
                          LD   A,(HL)                         ; Get the song end pointer
                          LD   (PATTERN_LOOP_END),A
                          INC  HL
                          LD   (PATTERNDATA1),HL
                          LD   (PATTERNDATA2),HL
                          LD   A,254
                          LD   (PATTERN_PTR),A                ; Set the pattern pointer to zero
                          DI
                          CALL  NEXT_PATTERN
                          EI
                          RET                                 ; Return from playing tune


;NEXTNOTE:
;                          CALL  PLAYNOTE
;                          XOR   A
;                          IN    A,($FE)
;                          AND   $1F
;                          CP    $1F
;                          JR    Z,NEXTNOTE                    ; Play next note if no key pressed

;                          EI
;                          RET                                 ; Return from playing tune

PATTERN_PTR:              DEFB 0
NOTE_PTR:                 DEFB 0


; ********************************************************************************************************
; * NEXT_PATTERN
; *
; * Select the next pattern in sequence (and handle looping if we've reached PATTERN_LOOP_END
; * Execution falls through to PLAYNOTE to play the first note from our next pattern
; ********************************************************************************************************
NEXT_PATTERN:
                          LD   A,(PATTERN_PTR)
                          INC  A
                          INC  A
                          DEFB $FE                           ; CP n
PATTERN_LOOP_END:         DEFB 0
                          JR   NZ,NO_PATTERN_LOOP
                          DEFB $3E                           ; LD A,n
PATTERN_LOOP_BEGIN:       DEFB 0
NO_PATTERN_LOOP:          LD   (PATTERN_PTR),A
			                    DEFB $21                            ; LD HL,nn
PATTERNDATA1:             DEFW $0000
                          LD   E,A                            ; (this is the first byte of the pattern)
                          LD   D,0                            ; and store it at TEMPO
                          ADD  HL,DE
                          LD   E,(HL)
                          INC  HL
                          LD   D,(HL)
                          LD   A,(DE)                         ; Pattern Tempo -> A
	                	      LD   (TEMPO),A                      ; Store it at TEMPO

                          LD   A,1
                          LD   (NOTE_PTR),A

PLAYNOTE: 
			                    DEFB $21                            ; LD HL,nn
PATTERNDATA2:             DEFW $0000
                          LD   A,(PATTERN_PTR)
                          LD   E,A
                          LD   D,0
                          ADD  HL,DE
                          LD   E,(HL)
                          INC  HL
                          LD   D,(HL)                         ; Now DE = Start of Pattern data
                          LD   A,(NOTE_PTR)
                          LD   L,A
                          LD   H,0
                          ADD  HL,DE                          ; Now HL = address of note data
                          LD   D,(HL)
                          LD   E,1

; IF D = $0 then we are at the end of the pattern so increment PATTERN_PTR by 2 and set NOTE_PTR=0
                          LD   A,D
                          AND  A                              ; Optimised CP 0
                          JR   Z,NEXT_PATTERN

                          PUSH DE
                          INC  HL
                          LD   D,(HL)
                          LD   E,1

                          LD   A,(NOTE_PTR)
                          INC  A
                          INC  A
                          LD   (NOTE_PTR),A                   ; Increment the note pointer by 2 (one note per chan)

                          POP  HL                             ; Now CH1 freq is in HL, and CH2 freq is in DE

                          LD   A,H
                          DEC  A
                          JR   NZ,OUTPUT_NOTE

                          LD   A,D                            ; executed only if Channel 2 contains a rest
                          DEC  A                              ; if DE (CH1 note) is also a rest then..
                          JR   Z,PLAY_SILENCE                 ; Play silence

OUTPUT_NOTE:              LD   A,(TEMPO)
                          LD   C,A
                          LD   B,0
                          LD   A,BORDER_COL
                          EX   AF,AF'
                          LD   A,BORDER_COL                   ; So now BC = TEMPO, A and A' = BORDER_COL
                          LD   IXH,D
                          LD   D,$10
EAE5:                     NOP
                          NOP
EAE7:                     EX   AF,AF'
                          DEC  E
                          OUT  ($FE),A
                          JR   NZ,EB04

                          LD   E,IXH
                          XOR  D
                          EX   AF,AF'
                          DEC  L
                          JP   NZ,EB0B

EAF5:                     OUT  ($FE),A
                          LD   L,H
                          XOR  D
                          DJNZ EAE5

                          INC  C
                          JP   NZ,EAE7

                          RET

EB04:
                          JR   Z,EB04
                          EX   AF,AF'
                          DEC  L
                          JP   Z,EAF5
EB0B:
                          OUT  ($FE),A
                          NOP
                          NOP
                          DJNZ EAE5
                          INC  C
                          JP   NZ,EAE7
                          RET

PLAY_SILENCE:
                          LD   A,(TEMPO)
                          CPL
                          LD   C,A
                          PUSH BC
                          PUSH AF
                          LD   B,0
SILENCE_LOOP:             PUSH HL
                          LD   HL,0000
                          SRA  (HL)
                          SRA  (HL)
                          SRA  (HL)
                          NOP
                          POP  HL
                          DJNZ SILENCE_LOOP
                          DEC  C
                          JP   NZ,SILENCE_LOOP
                          POP  AF
                          POP  BC
                          RET


; *** DATA ***
BORDER_COL                EQU $0
TEMPO:                    DEFB 236

FELIZN:
                    DEFB 0   ; Loop start point * 2
                    DEFB 8   ; Song Length * 2
PATTERNDATA:        DEFW      PAT0
                    DEFW      PAT1
                    DEFW      PAT2
                    DEFW      PAT3

; *** Pattern data consists of pairs of frequency values CH1,CH2 with a single $0 to
; *** Mark the end of the pattern, and $01 for a rest
PAT0:
         DEFB 236  ; Pattern tempo
             DEFB 61,1
             DEFB 45,1
             DEFB 48,1
             DEFB 45,1
             DEFB 54,1
             DEFB 61,1
             DEFB 40,1
             DEFB 45,1
             DEFB 54,1
             DEFB 61,1
             DEFB 61,1
             DEFB 61,1
             DEFB 45,1
             DEFB 48,1
             DEFB 45,1
             DEFB 54,1
             DEFB 68,1
             DEFB 54,1
             DEFB 45,1
             DEFB 48,1
             DEFB 48,1
             DEFB 48,1
             DEFB 45,1
             DEFB 40,1
             DEFB 48,1
             DEFB 45,1
             DEFB 45,1
         DEFB $0
PAT1:
         DEFB 236  ; Pattern tempo
             DEFB 36,1
             DEFB 36,1
             DEFB 36,1
             DEFB 36,1
             DEFB 40,1
             DEFB 45,1
             DEFB 45,1
             DEFB 54,1
             DEFB 54,1
             DEFB 45,1
             DEFB 40,1
             DEFB 40,1
             DEFB 40,1
             DEFB 40,1
             DEFB 45,1
             DEFB 54,1
             DEFB 54,1
             DEFB 61,1
             DEFB 68,1
             DEFB 61,1
             DEFB 36,1
             DEFB 36,1
             DEFB 36,1
             DEFB 36,1
             DEFB 40,1
             DEFB 45,1
             DEFB 45,1
             DEFB 54,1
             DEFB 54,1
             DEFB 54,1
             DEFB 45,1
             DEFB 45,1
             DEFB 48,1
             DEFB 45,1
             DEFB 40,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 1,1
             DEFB 1,1
             DEFB 1,1
         DEFB $0
PAT2:
         DEFB 236  ; Pattern tempo
             DEFB 61,1
             DEFB 45,1
             DEFB 48,1
             DEFB 45,1
             DEFB 54,1
             DEFB 1,1
             DEFB 61,1
             DEFB 40,1
             DEFB 45,1
             DEFB 54,1
             DEFB 61,1
             DEFB 1,1
             DEFB 61,121
             DEFB 45,91
             DEFB 48,96
             DEFB 45,91
             DEFB 54,108
             DEFB 68,136
             DEFB 54,108
             DEFB 45,91
             DEFB 48,96
             DEFB 48,96
             DEFB 48,96
             DEFB 45,91
             DEFB 40,81
             DEFB 48,96
             DEFB 45,91
             DEFB 45,1
         DEFB $0
PAT3:
         DEFB 236  ; Pattern tempo
             DEFB 36,72
             DEFB 36,72
             DEFB 36,72
             DEFB 36,72
             DEFB 40,81
             DEFB 45,91
             DEFB 45,91
             DEFB 54,108
             DEFB 54,108
             DEFB 45,91
             DEFB 40,81
             DEFB 40,81
             DEFB 40,81
             DEFB 40,81
             DEFB 45,91
             DEFB 54,108
             DEFB 54,108
             DEFB 61,121
             DEFB 68,136
             DEFB 61,121
             DEFB 36,72
             DEFB 36,72
             DEFB 36,72
             DEFB 36,72
             DEFB 40,81
             DEFB 45,91
             DEFB 45,91
             DEFB 54,108
             DEFB 54,108
             DEFB 54,108
             DEFB 45,91
             DEFB 45,91
             DEFB 48,96
             DEFB 45,91
             DEFB 40,81
             DEFB 45,91
             DEFB 45,91
             DEFB 45,91
             DEFB 1,1
             DEFB 1,1
             DEFB 1,1
         DEFB $0




PECESRIO:
                    DEFB 0   ; Loop start point * 2
                    DEFB 8   ; Song Length * 2
PATTERNDATAB:       DEFW      PAT0B
                    DEFW      PAT1B
                    DEFW      PAT3B
                    DEFW      PAT6B

; *** Pattern data consists of pairs of frequency values CH1,CH2 with a single $0 to
; *** Mark the end of the pattern, and $01 for a rest
PAT0B:
         DEFB 232  ; Pattern tempo
             DEFB 54,1
             DEFB 48,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 40,1
             DEFB 45,1
             DEFB 40,1
             DEFB 45,1
             DEFB 48,1
             DEFB 48,1
         DEFB $0
PAT1B:
         DEFB 232  ; Pattern tempo
             DEFB 48,1
             DEFB 45,1
             DEFB 40,1
             DEFB 45,1
             DEFB 40,1
             DEFB 45,1
             DEFB 48,1
             DEFB 48,1
             DEFB 54,1
             DEFB 57,1
             DEFB 54,1
             DEFB 48,1
             DEFB 45,1
             DEFB 54,1
         DEFB $0
PAT3B:
         DEFB 234  ; Pattern tempo
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 48,1
             DEFB 54,1
             DEFB 48,1
             DEFB 57,1
             DEFB 72,1
             DEFB 40,1
             DEFB 40,1
             DEFB 40,1
             DEFB 40,1
             DEFB 40,1
             DEFB 40,1
             DEFB 45,1
             DEFB 48,1
             DEFB 45,1
             DEFB 48,1
             DEFB 45,1
             DEFB 48,1
             DEFB 54,1
         DEFB $0
PAT6B:
         DEFB 234  ; Pattern tempo
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,1
             DEFB 45,91
             DEFB 40,81
             DEFB 45,91
             DEFB 40,81
             DEFB 45,91
             DEFB 48,96
             DEFB 48,96
             DEFB 48,96
             DEFB 45,91
             DEFB 40,81
             DEFB 45,91
             DEFB 40,81
             DEFB 45,91
             DEFB 48,96
             DEFB 48,96
             DEFB 54,108
             DEFB 57,114
             DEFB 54,108
             DEFB 48,96
             DEFB 45,91
             DEFB 54,108
         DEFB $0

END ASM














REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                         RUTINAS DE IMPRESION
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


REM *******************************************************************************************************************************
REM *******************************************************************************************************************************
REM **********************  RELLENAR ZONAS DE PANTALLA CON REPETICIONES DE SPRITES  DE MAS DE  1 CARACTER  ************************
REM *******************************************************************************************************************************
REM ****************************************************  RELLENA () **************************************************************



REM RELLENA (Y,X ESQUINA ARRIBA IZQ, TAMAOX, TAMAOY, CARACTERES DERECHA, CARACTERES ABAJO, DIRECCIN DEL GRFICO, OPCION,COLOR)
REM LOS CRACTERES LA SUMA DE ELLOS, EVITAMOS UNA MULTIPLICACIN

SUB RELLENA(X AS UBYTE, Y AS UBYTE, TAMX AS UBYTE, TAMY AS UBYTE,REPEX AS UBYTE, REPEY AS UBYTE, DIRGRAFICO AS UINTEGER, OPCION AS UBYTE, COLOR AS UBYTE)

    FOR MM= 0 TO (REPEX-TAMX) STEP TAMX
    FOR QQ=0 TO (REPEY-TAMY) STEP TAMY
    DIBnXn (X+MM,Y+QQ,TAMX,TAMY,DIRGRAFICO,OPCION,COLOR)
    NEXT QQ
    NEXT MM

END SUB



REM ********************************************************************************************************************************
REM ********************************************************************************************************************************
REM ********************************  RUTINA MALOTE IMPRIME EN HR UN SPRITE DE 2X2 Y LO COLOREA  ***********************************
REM ********************************************************************************************************************************
REM ********************************************************************************************************************************


REM                    (X EN HR, Y EN HR, DIRECC SPRITE, COLOR)

REM HAY QUE TENER EN CUENTA QUE USO "XOR", POR LO QUE PARA PINTAR PRIMERO HAY QUE "SOBREESCRIBIR" EL ANTERIOR

SUB MALOTE (XX AS UBYTE, YY AS UBYTE, ESPRITE AS UINTEGER, COLOR AS UBYTE)

REM IX+5 XX
REM IX+7 YY
REM IX+8 ESPRITE L
REM IX+9 ESPRITE H
REM IX+11 CO


ASM


   CALL COLOCAR               ;LLAMO A COLOCAR Y EL RESULTADO LO PONGO EN "HUCHA"
   LD (HUCHA),HL

   LD L,(IX+8)                ;CARGO DIRECCIN SPRITE 16X16
   LD H,(IX+9)

   LD C,16                    ;ES LA ALTURA DEL SPRITE
   JIARIS2:                    ;PUNTO DE BUCLE "C"
   PUSH BC

   LD D,(HL)                  ;CARGAMOS "D" CON EL VALOR DEL SPRITE
   INC HL                     ;INCREMENTO PARA CARACTER DE AL LADO
   LD E,(HL)                  ;CARGAMOS "E" CON EL VALOR DEL SPRITE DERECHO
   INC HL                     ;DEJO PUNTERO EN PRXIMO SCAN
   PUSH HL                    ;NOS GUARDAMOS ESTA DIRECCIN

                              ;AHORA EL CDIGO DE DESPLAZAMIENTO:

   LD A,(IX+5)                ;VEMOS LOS TRES BITS BAJOS DE X QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
   AND 7                      ;Y LOS GUARDAMOS EN "BITPOSX"
   LD (BITPOSX),A

   CP 0                       ;SI BITPOSX ES 0 NO HAY QUE DESPLAZAR NADA DE NADA
   JR Z, SINDESPLAZAMIENTO2

   INC A                      ;INCREMENTO UNO NO SE MUY BIEN POR QU, PERO SI NO LO HAGO ME SALE UN DESCUADRE DE 1 PIXEL
   LD B,A                     ;CONTADOR BUCLE DE DESPLAZAMIENTO

   XOR A                      ;LIMPIAMOS A Y PONEMOS CARRY A CERO

   ERDESPLAZAMIENTOR2:         ;BUCLE DE DESPLAZAMIENTO

   RR D                       ;ROTO 1 CARACTER
   RR E                       ;ROTO 2 CARACTER
   RRA                        ;ROTO 3 CARACTER

   DJNZ ERDESPLAZAMIENTOR2     ;FIN BUCLE DESPLAZAMIENTO

   SINDESPLAZAMIENTO2:

   LD C,A                      ; AHORA SCAN SPRITE EST EN D-E-C

  LD HL,(HUCHA)              ;SACO LA DIRECCIN DONDE PINTAR

  LD A,(HL)		      ; PINTO D
  XOR D
  LD (HL),A
; LD (HL),D

   INC HL                     ; PINTO E
  LD A,(HL)
  XOR E
  LD (HL),A
; LD (HL),E

   INC HL                     ; PINTO C
  LD A,(HL)
  XOR C
  LD (HL),A
; LD (HL),E


   DEC HL
   DEC HL
   INC H                      ;BAJO UN SCAN

   LD A,H		      ;CON ESTA EMPANADA COMPRUEBO SI HAY SALTO DE CARACTER O TERCIO Y EN ESE CASO
   AND 7		      ;AJUSTO LA DIRECCIN DE PANTALLA
   JR NZ,ALAYASTA2
   LD A,L
   ADD A,32
   LD L,A
   JR C,ALAYASTA2
   LD A,H
   SUB 8
   LD H,A

   ALAYASTA2:
   LD (HUCHA),HL	      ;VUELVO A PONER EN "HUCHA" LA DIRECCIN A PINTAR

   POP HL                     ;PONEMOS EN HL LA DIRECCIN DEL SIGUIENTE SCAN DEL SPRITE
   POP BC
   DEC C                      ;DECREMENTO C, C GUARDABA LA ALTURA EL SPRITE, TRANSFORMAR DE 1X1 A 1X2 1X3 ETC ES MUY FACIL
   JP NZ,JIARIS2               ;SI NO ES CERO ES QUE HAY QUE SEGUIR PINTANDO



   ;******************************* ATRIBUTOS

   CALL COLOCARTRIBUTO        ;SACO ADRESS ATRIBUTOS EN "HL"
   LD (HUCHA),HL              ;LO GUARDO EN "HUCHA" PA LUEGO


   LD A,(IX+7)                ;VEMOS LOS TRES BITS BAJOS DE Y QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
   AND 7                      ;Y COMPARAMOS (ES EL BITPOSY)
   CP 7
   JR Z, BRINCO32
   LD B,3
   JR BRINCO42
   BRINCO32:
   LD B,2
   BRINCO42:

   LD A,(IX+11)               ;CARGAMOS A CON TINTA
   LD (HL),A
   INC HL
   LD (HL),A

   LD A,(BITPOSX)             ;SACAMOS POSICION X
   CP 0
   JR Z, BRINCO2

   INC HL
   LD A,(IX+11)               ;CARGAMOS A CON TINTA
   LD (HL),A
   DEC HL

   BRINCO2:

   DEC HL
   LD DE,32
   ADD HL,DE

   DJNZ BRINCO42

END ASM

END SUB








REM *******************************************************************************************************************************
REM *******************************************************************************************************************************
REM *********************************  RUTINA IMPRESION REA CON REPETICIN DE GRFICO 1X1 ****************************************
REM ************************************************ EN BAJA RESOLUCION  **********************************************************
REM *****************************************************  BORRnXn () *******(*) VERSION NUEVA MEJOR QUE EN RII *******************



REM IX+5  X
REM IX+7  Y
REM IX+9  LAR
REM IX+11 BAR
REM IX+13 DIRGRAFICO
REM IX+12
REM IX+15 CO


REM ENTRADA: X Y ->COORDENADAS \\ LAR ->LARGO DEL SPRITE(X) -MNIMO 1- \\ BAJ ->BAJO DEL SPRITE(Y) -MNIMO 1- \\DIRGRAFICO -> DIRECCION DE SPRITE GUARDADO POR SCANLINES (8X8 BYTES) \\ CO -> ATRIBUTO



SUB BORRnXn (XX AS UBYTE, YY AS UBYTE, LAR AS UBYTE, BAJ AS UBYTE, DIRGRAFICO AS UINTEGER,CO AS UBYTE)




ASM

   ;REM DIBUJAMOS EL SPRITE**************************

   CALL COLOCABJ            ;SACAMOS DIRECCIN 1 SCANLINE EN HL
   LD (HUCHA),HL             ;PA LUEGO

   LD D, (IX+13)
   LD E, (IX+12)
   LD A, (DE)         ; Tomamos el dato del sprite

   LD B,(IX+11)       ; N caracteres hacia abajo
   SUCLE0:
   PUSH BC

   LD B,8             ; Los 8 Scanlines del carcter
   SUCLE1:
   PUSH BC

   LD B,(IX+9)        ; Dibujar Scanline a lo largo
   SUCLE2:

        LD (HL), A    ; Establecemos el valor en videomemoria
        INC HL

   DJNZ SUCLE2

        LD HL,(HUCHA)
        INC H
        LD (HUCHA),HL
        INC DE
        LD A,(DE)

   POP BC
   DJNZ SUCLE1


        LD A, L         ;Paso "HL" al caracter de abajo
        ADD A, 32
        LD L, A
        JR C, CARACTER_ABAJO2
        LD A, H
        SUB 8
        LD H, A
        CARACTER_ABAJO2:

        LD (HUCHA),HL      ;guardo la nueva direccin en "HUCHA"

        LD D, (IX+13)
        LD E, (IX+12)
        LD A, (DE)         ; Tomamos el dato del sprite otra vez


   POP BC
   DJNZ SUCLE0

   ;REM COLOREAMOS EL SPRITE**************************

   CALL COLOCABJTRIBUTO      ;SACAMOS DIRECCIN 1 SCANLINE EN HL
   LD (HUCHA),HL             ;PA LUEGO
   LD A,(IX+15)

   LD B,(IX+11)              ;N caracteres hacia abajo
   SUCLE3:
   PUSH BC

   LD B,(IX+9)               ; Dibujar caracteres a lo largo
   SUCLE4:
        LD (HL), A           ; Establecemos el valor en videomemoria
        INC HL
   DJNZ SUCLE4

         LD HL,(HUCHA)
         LD DE,32
         ADD HL,DE
         LD (HUCHA),HL

   POP BC
   DJNZ SUCLE3


END ASM


END SUB



REM ********************************************************************************************************************************
REM ********************************************************************************************************************************
REM ***************************************  RUTINA PANIUM, PINTA DISPARO Y NO LO COLOREA  *****************************************
REM ********************************************************************************************************************************
REM ********************************************************************************************************************************


REM                    (X EN HR, Y EN HR)

REM HAY QUE TENER EN CUENTA QUE USO "XOR", POR LO QUE PARA PINTAR PRIMERO HAY QUE "SOBREESCRIBIR" EL ANTERIOR

SUB PANIUM (XX AS UBYTE, YY AS UBYTE)

REM IX+5 XX
REM IX+7 YY

ASM

   CALL COLOCAR               ;LLAMO A COLOCAR Y EL RESULTADO LO PONGO EN "HUCHA"
   ;LD (HUCHA),HL


   LD D,128                   ;CARGAMOS "D" CON EL VALOR DEL SPRITE

                              ;AHORA EL CDIGO DE DESPLAZAMIENTO:

   LD A,(IX+5)                ;VEMOS LOS TRES BITS BAJOS DE X QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
   AND 7                      ;Y LOS GUARDAMOS EN "BITPOSX"
   ;LD (BITPOSX),A

   CP 0                       ;SI BITPOSX ES 0 NO HAY QUE DESPLAZAR NADA DE NADA
   JR Z, SINDESPLAZAMIENTO

   INC A                      ;INCREMENTO UNO NO SE MUY BIEN POR QU, PERO SI NO LO HAGO ME SALE UN DESCUADRE DE 1 PIXEL
   LD B,A                     ;CONTADOR BUCLE DE DESPLAZAMIENTO

   XOR A                      ;LIMPIAMOS A Y PONEMOS CARRY A CERO

   ERDESPLAZAMIENTOR:         ;BUCLE DE DESPLAZAMIENTO

   RR D                       ;ROTO 1 CARACTER

   DJNZ ERDESPLAZAMIENTOR     ;FIN BUCLE DESPLAZAMIENTO

   SINDESPLAZAMIENTO:

;   LD HL,(HUCHA)              ;SACO LA DIRECCIN DONDE PINTAR

  LD A,(HL)		      ; PINTO D
  XOR D
  LD (HL),A
; LD (HL),D


  ;******************************* ATRIBUTOS

END ASM

END SUB






REM *******************************************************************************************************************************
REM *******************************************************************************************************************************
REM ********************* RUTINA PARA COLOREAR "PAINT" SACADA DE http://www.boriel.com/wiki/en/index.php/ZX_BASIC:Putchars.bas   ' Copyleft Britlion  thanks ****************
REM *******************************************************************************************************************************
REM *******************************************************************************************************************************



SUB PAINT (x AS UBYTE,y AS UBYTE, width AS UBYTE, height AS UBYTE, attribute AS UBYTE)
    ' Copyleft Britlion.

    ASM
    ld      a,(IX+7)   ;ypos
    rrca
    rrca
    rrca               ; Multiply by 32
    ld      l,a        ; Pass TO L
    AND     3          ; Mask with 00000011
    add     a,88       ; 88 * 256 = 22528 - start of attributes.
    ld      h,a        ; Put it in the High BYTE
    ld      a,l        ; We get y value *32
    AND     224        ; Mask with 11100000
    ld      l,a        ; Put it in L
    ld      a,(IX+5)   ; xpos
    add     a,l        ; Add it TO the Low BYTE
    ld      l,a        ; Put it back in L, AND we're done. HL=Address.

    push HL            ; SAVE address
    LD A, (IX+13)      ; attribute
    LD DE,32
    LD c,(IX+11)       ; height

    BLPaintHeightLoop:
    LD b,(IX+9)        ; width

    BLPaintWidthLoop:
    LD (HL),a          ; paint a character
    INC L              ; Move TO the right (Note that we only would have TO inc H IF we are crossing from the right edge TO the left, AND we shouldn't be needing to do that)
    DJNZ BLPaintWidthLoop

    BLPaintWidthExitLoop:
    POP HL             ; recover our left edge
    DEC C
    JR Z, BLPaintHeightExitLoop

    ADD HL,DE          ; move 32 down
    PUSH HL            ; SAVE it again
    JP BLPaintHeightLoop

    BLPaintHeightExitLoop:

    END ASM
END SUB



REM *******************************************************************************************************************************
REM *******************************************************************************************************************************
REM *********************************  RUTINA IMPRESION SPRITES CON OPCION COLOR **************************************************
REM ************************************************ EN BAJA RESOLUCION  **********************************************************
REM *****************************************************  DIBnXn () *******(*) VERSION NUEVA MEJOR QUE EN RII ********************


REM IX+5  Y
REM IX+7  X
REM IX+9  LAR
REM IX+11 BAR
REM IX+13 DIRGRAFICO
REM IX+12
REM IX+15 INCO
REM IX+17 CO

REM ENTRADA: Y X ->COORDENADAS \\ LAR ->LARGO DEL SPRITE(X) \\ BAJ ->BAJO DEL SPRITE(Y) \\DIRGRAFICO -> DIRECCION DE SPRITE GUARDADO POR SCANLINES \\ INCO->INDICADOR DE COLOR=CO(0) O COLOR EN DEFB (1) \\ CO -> ATRIBUTO




SUB DIBnXn (X AS UBYTE, Y AS UBYTE, LAR AS UBYTE, BAJ AS UBYTE, DIRGRAFICO AS UINTEGER, INCO AS UBYTE, CO AS UBYTE)




ASM

   ;REM DIBUJAMOS EL SPRITE**************************

   CALL COLOCABJ            ;SACAMOS DIRECCIN 1 SCANLINE EN HL
   LD (HUCHA),HL             ;PA LUEGO

   LD D, (IX+13)
   LD E, (IX+12)
   LD A, (DE)         ; Tomamos el dato del sprite

   LD B,(IX+11)       ; N caracteres hacia abajo
   WUCLE0:
   PUSH BC

   LD B,8             ; Los 8 Scanlines del carcter
   WUCLE1:
   PUSH BC

   LD B,(IX+9)        ; Dibujar Scanline a lo largo
   WUCLE2:

        LD (HL), A    ; Establecemos el valor en videomemoria
        INC HL
        INC DE
        LD A, (DE)
   DJNZ WUCLE2

        LD HL,(HUCHA)
        INC H
        LD (HUCHA),HL


   POP BC
   DJNZ WUCLE1


        LD A, L         ;Paso "HL" al caracter de abajo
        ADD A, 32
        LD L, A
        JR C, CARACTER_ABAJO3
        LD A, H
        SUB 8
        LD H, A
        CARACTER_ABAJO3:

        LD (HUCHA),HL      ;guardo la nueva direccin en "HUCHA"


        LD A, (DE)         ; Tomamos el dato del sprite otra vez


   POP BC
   DJNZ WUCLE0


   ;REM COLOREAMOS EL SPRITE**************************


   CALL COLOCABJTRIBUTO      ;SACAMOS DIRECCIN 1 SCANLINE EN HL
   LD (HUCHA),HL             ;PA LUEGO

   LD A,(IX+15)              ;Comprobamos indicador del color a usar
   CP 0
   JR Z,ELCOLORQUEDICES

   LD A,(DE)                 ; Si indicador "(IX+15)" vale 1 el color es el indicado en los DEBFS

   LD B,(IX+11)              ;N caracteres hacia abajo
   WUCLE5:
   PUSH BC

   LD B,(IX+9)               ; Dibujar caracteres a lo largo
   WUCLE6:
        LD (HL), A           ; Establecemos el valor en videomemoria
        INC HL
        INC DE
        LD A,(DE)
   DJNZ WUCLE6

         LD HL,(HUCHA)
         LD BC,32
         ADD HL,BC
         LD (HUCHA),HL
         LD A, (DE)         ; Tomamos el dato del sprite otra vez

   POP BC
   DJNZ WUCLE5
   JR SACABOELCOLOR


   ELCOLORQUEDICES:          ; Si indicador "(IX+15)" vale 0 todo del color de "IX+17"
   LD A,(IX+17)

   LD B,(IX+11)              ;N caracteres hacia abajo
   WUCLE3:
   PUSH BC

   LD B,(IX+9)               ; Dibujar caracteres a lo largo
   WUCLE4:
        LD (HL), A           ; Establecemos el valor en videomemoria
        INC HL
   DJNZ WUCLE4

         LD HL,(HUCHA)
         LD DE,32
         ADD HL,DE
         LD (HUCHA),HL

   POP BC
   DJNZ WUCLE3

   SACABOELCOLOR:


END ASM
END SUB


REM ********************************************************************************************************************************
REM ********************************************************************************************************************************
REM ********************************  RUTINA JOBAT IMPRIME EN HR UN SPRITE DE 2X1 Y NO LO COLOREA  *********************************
REM ********************************************************************************************************************************
REM ********************************************************************************************************************************


REM                    (X EN HR, Y EN HR, DIRECC SPRITE)

REM HAY QUE TENER EN CUENTA QUE USO "XOR", POR LO QUE PARA PINTAR PRIMERO HAY QUE "SOBREESCRIBIR" EL ANTERIOR

SUB JOBAT (XX AS UBYTE, YY AS UBYTE, ESPRITE AS UINTEGER)

REM IX+5 XX
REM IX+7 YY
REM IX+8 ESPRITE L
REM IX+9 ESPRITE H



ASM


   CALL COLOCAR               ;LLAMO A COLOCAR Y EL RESULTADO LO PONGO EN "HUCHA"
   LD (HUCHA),HL

   LD L,(IX+8)                ;CARGO DIRECCIN SPRITE 16X16
   LD H,(IX+9)

   LD C,8                    ;ES LA ALTURA DEL SPRITE
 JIARIS33:                   ;PUNTO DE BUCLE "C"
   PUSH BC

   LD D,(HL)                  ;CARGAMOS "D" CON EL VALOR DEL SPRITE
   INC HL                     ;INCREMENTO PARA CARACTER DE AL LADO
   LD E,(HL)                  ;CARGAMOS "E" CON EL VALOR DEL SPRITE DERECHO
   INC HL                     ;DEJO PUNTERO EN PRXIMO SCAN
   PUSH HL                    ;NOS GUARDAMOS ESTA DIRECCIN

                              ;AHORA EL CDIGO DE DESPLAZAMIENTO:

   LD A,(IX+5)                ;VEMOS LOS TRES BITS BAJOS DE X QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
   AND 7                      ;Y LOS GUARDAMOS EN "BITPOSX"
   LD (BITPOSX),A

   CP 0                       ;SI BITPOSX ES 0 NO HAY QUE DESPLAZAR NADA DE NADA
   JR Z, SINDESPLAZAMIENTO33

   INC A                      ;INCREMENTO UNO NO SE MUY BIEN POR QU, PERO SI NO LO HAGO ME SALE UN DESCUADRE DE 1 PIXEL
   LD B,A                     ;CONTADOR BUCLE DE DESPLAZAMIENTO

   XOR A                      ;LIMPIAMOS A Y PONEMOS CARRY A CERO

 ERDESPLAZAMIENTOR33:         ;BUCLE DE DESPLAZAMIENTO

   RR D                       ;ROTO 1 CARACTER
   RR E                       ;ROTO 2 CARACTER
   RRA                        ;ROTO 3 CARACTER

   DJNZ ERDESPLAZAMIENTOR33     ;FIN BUCLE DESPLAZAMIENTO

 SINDESPLAZAMIENTO33:

   LD C,A                     ; AHORA SCAN SPRITE EST EN D-E-C

  LD HL,(HUCHA)               ;SACO LA DIRECCIN DONDE PINTAR

  LD A,(HL)		      ; PINTO D
  XOR D
  LD (HL),A
; LD (HL),D

   INC HL                     ; PINTO E
  LD A,(HL)
  XOR E
  LD (HL),A
; LD (HL),E

   INC HL                     ; PINTO C
  LD A,(HL)
  XOR C
  LD (HL),A
; LD (HL),E


   DEC HL
   DEC HL
   INC H                      ;BAJO UN SCAN

   LD A,H		      ;CON ESTA EMPANADA COMPRUEBO SI HAY SALTO DE CARACTER O TERCIO Y EN ESE CASO
   AND 7		      ;AJUSTO LA DIRECCIN DE PANTALLA
   JR NZ,ALAYASTA33
   LD A,L
   ADD A,32
   LD L,A
   JR C,ALAYASTA33
   LD A,H
   SUB 8
   LD H,A

   ALAYASTA33:
   LD (HUCHA),HL	      ;VUELVO A PONER EN "HUCHA" LA DIRECCIN A PINTAR

   POP HL                     ;PONEMOS EN HL LA DIRECCIN DEL SIGUIENTE SCAN DEL SPRITE
   POP BC
   DEC C                      ;DECREMENTO C, C GUARDABA LA ALTURA EL SPRITE, TRANSFORMAR DE 1X1 A 1X2 1X3 ETC ES MUY FACIL
   JP NZ,JIARIS33             ;SI NO ES CERO ES QUE HAY QUE SEGUIR PINTANDO

   ;******************************* ATRIBUTOS

END ASM
END SUB

REM ********************************************************************************************************************************
REM ********************************************************************************************************************************
REM ********************************  RUTINA ZUMZUM IMPRIME EN HR UN SPRITE DE 2X1 Y SI LO COLOREA  *********************************
REM ********************************************************************************************************************************
REM ********************************************************************************************************************************


REM                    (X EN HR, Y EN HR, DIRECC SPRITE, COLOR)

REM HAY QUE TENER EN CUENTA QUE USO "XOR", POR LO QUE PARA PINTAR PRIMERO HAY QUE "SOBREESCRIBIR" EL ANTERIOR

SUB ZUMZUM (XX AS UBYTE, YY AS UBYTE, ESPRITE AS UINTEGER, COLOR AS UBYTE)

REM IX+5 XX
REM IX+7 YY
REM IX+8 ESPRITE L
REM IX+9 ESPRITE H
REM IX+11 CO


ASM


   CALL COLOCAR               ;LLAMO A COLOCAR Y EL RESULTADO LO PONGO EN "HUCHA"
   LD (HUCHA),HL

   LD L,(IX+8)                ;CARGO DIRECCIN SPRITE 16X16
   LD H,(IX+9)

   LD C,8                    ;ES LA ALTURA DEL SPRITE
   JIARIS3:                  ;PUNTO DE BUCLE "C"
   PUSH BC

   LD D,(HL)                  ;CARGAMOS "D" CON EL VALOR DEL SPRITE
   INC HL                     ;INCREMENTO PARA CARACTER DE AL LADO
   LD E,(HL)                  ;CARGAMOS "E" CON EL VALOR DEL SPRITE DERECHO
   INC HL                     ;DEJO PUNTERO EN PRXIMO SCAN
   PUSH HL                    ;NOS GUARDAMOS ESTA DIRECCIN

                              ;AHORA EL CDIGO DE DESPLAZAMIENTO:

   LD A,(IX+5)                ;VEMOS LOS TRES BITS BAJOS DE X QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
   AND 7                      ;Y LOS GUARDAMOS EN "BITPOSX"
   LD (BITPOSX),A

   CP 0                       ;SI BITPOSX ES 0 NO HAY QUE DESPLAZAR NADA DE NADA
   JR Z, SINDESPLAZAMIENTO3

   INC A                      ;INCREMENTO UNO NO SE MUY BIEN POR QU, PERO SI NO LO HAGO ME SALE UN DESCUADRE DE 1 PIXEL
   LD B,A                     ;CONTADOR BUCLE DE DESPLAZAMIENTO

   XOR A                      ;LIMPIAMOS A Y PONEMOS CARRY A CERO

   ERDESPLAZAMIENTOR3:         ;BUCLE DE DESPLAZAMIENTO

   RR D                       ;ROTO 1 CARACTER
   RR E                       ;ROTO 2 CARACTER
   RRA                        ;ROTO 3 CARACTER

   DJNZ ERDESPLAZAMIENTOR3     ;FIN BUCLE DESPLAZAMIENTO

   SINDESPLAZAMIENTO3:

   LD C,A                      ; AHORA SCAN SPRITE EST EN D-E-C

  LD HL,(HUCHA)              ;SACO LA DIRECCIN DONDE PINTAR

  LD A,(HL)		      ; PINTO D
  XOR D
  LD (HL),A
; LD (HL),D

   INC HL                     ; PINTO E
  LD A,(HL)
  XOR E
  LD (HL),A
; LD (HL),E

   INC HL                     ; PINTO C
  LD A,(HL)
  XOR C
  LD (HL),A
; LD (HL),E


   DEC HL
   DEC HL
   INC H                      ;BAJO UN SCAN

   LD A,H		      ;CON ESTA EMPANADA COMPRUEBO SI HAY SALTO DE CARACTER O TERCIO Y EN ESE CASO
   AND 7		      ;AJUSTO LA DIRECCIN DE PANTALLA
   JR NZ,ALAYASTA3
   LD A,L
   ADD A,32
   LD L,A
   JR C,ALAYASTA3
   LD A,H
   SUB 8
   LD H,A

   ALAYASTA3:
   LD (HUCHA),HL	      ;VUELVO A PONER EN "HUCHA" LA DIRECCIN A PINTAR

   POP HL                     ;PONEMOS EN HL LA DIRECCIN DEL SIGUIENTE SCAN DEL SPRITE
   POP BC
   DEC C                      ;DECREMENTO C, C GUARDABA LA ALTURA EL SPRITE, TRANSFORMAR DE 1X1 A 1X2 1X3 ETC ES MUY FACIL
   JP NZ,JIARIS3               ;SI NO ES CERO ES QUE HAY QUE SEGUIR PINTANDO



   ;******************************* ATRIBUTOS

   CALL COLOCARTRIBUTO        ;SACO ADRESS ATRIBUTOS EN "HL"
   LD (HUCHA),HL              ;LO GUARDO EN "HUCHA" PA LUEGO

   LD A,(IX+7)                ;VEMOS LOS TRES BITS BAJOS DE Y QUE INDICAN EL DESPLAZAMIENTO (0 A 7)
   AND 7                      ;Y COMPARAMOS (ES EL BITPOSY)
   CP 7
   JR Z, BRINCO33
   LD B,2
   JR BRINCO43
   BRINCO33:
   LD B,1
   BRINCO43:

   LD A,(IX+11)               ;CARGAMOS A CON TINTA
   LD (HL),A
   INC HL
   LD (HL),A

   LD A,(BITPOSX)             ;SACAMOS POSICION X
   CP 0
   JR Z, BRINCO3

   INC HL
   LD A,(IX+11)               ;CARGAMOS A CON TINTA
   LD (HL),A
   DEC HL

   BRINCO3:

   DEC HL
   LD DE,32
   ADD HL,DE

   DJNZ BRINCO43

END ASM

END SUB











REM *******************************************************************************************************************************
REM **********************************  COLOCAR, OBTENER DIRECCIN A PARTIR X,Y EN ALTA RESOLUCCION *******************************
REM *************************  COLOCARTRIBUTO, OBTENER DIRECCIN ATRIBUTOS A PARTIR X,Y EN ALTA RESOLUCCION ***********************
REM *******************************************************************************************************************************

REM                    VARIABLES X E Y  EN ALTA RESOLUCION
REM                    EL RESULTADO SALE EN HL
REM                    USAMOS TABLAS PARA OBTENER DIRECCION DE PANTALLA, NO DE ATRIBUTOS

ASM

COLOCAR:

        LD A,(IX+7)           ;CARGAMOS EL VALOR DE "Y"
        LD B,A
        LD A,191
        SUB B                 ; CON ESTO TENEMOS EN "A" EL VALOR DE 191-Y, QUE ES EL VALOR DE ORDEN EN LAS TABLAS
        LD E,A                ; LO GUARDAMOS EN "E" PARA LUEGO

        LD HL,DIRALTO         ;CALCULO EL VALOR ALTO DE LA DIRECCIN, PONIENDO EN HL EL
        LD B,0                ;VALOR INICIAL DE LA TABLA Y SUMNDOLE EL VALOR DE ORDEN
        LD C,A                ;EL RESULTADO LO GUARDO EN B
        ADD HL,BC
        LD B,(HL)

        LD HL,DIRBAJO         ;CALCULO EL VALOR BAJO DE LA DIRECCIN, PONIENDO EN HL EL
        LD D,0                ;VALOR INICIAL DE LA TABLA Y SUMNDOLE EL VALOR DE ORDEN
        ADD HL,DE             ;EL RESULTADO LO GUARDO EN C, AHORA BC TIENE LA DIRECCIN "CERO"
        LD C,(HL)             ;DE LA FILA DONDE SE DIBUJARA EL SPRITE.

        LD H,B
        LD L,C

        LD A,(IX+5)             ;CARGAMOS EL VALOR DE "X"
        SRA A
        SRA A
        SRA A
        AND 31

        ADD A,L
        LD L,A
        RET

COLOCARTRIBUTO:

        LD A,(IX+5)
        SRA A             ; TRANSFORMAMOS HR EN BAJA RESOLUCION PARA COORDENADA X
        SRA A
        SRA A
        AND 31
        LD D,A            ; LO GUARDAMOS EN "D" PARA LUEGO

        LD A,(IX+7)       ; NECESITAMOS LLEGAR A "H" 010110FF "L" FFFCCCCC DESDE 000FFFFF y 000CCCCC
        SRA A             ; TRANSFORMAMOS HR EN BAJA RESOLUCION PARA COORDENADA Y
        SRA A
        SRA A
        AND 31

        LD B,A
        LD A,23
        SUB B              ; CON ESTO TENEMOS EN "A" EL VALOR DE 23-(Y/8)
        LD E,A             ; LO GUARDAMOS EN "E" PARA LUEGO

        RRCA
        RRCA
        RRCA
        AND 3             ; TENEMOS "A" COMO 000000FF
        ADD A,88          ; YA TENEMOS "A" COMO  010110FF
        LD H,A            ; LO PASO A "H"

        LD A,E            ; VUELVO A CARGAR 000FFFFF
        AND 7             ; ME QUEDO CON LAS TRES F QUE FALTAN
        RRCA
        RRCA
        RRCA              ; LAS ROTO A SU POSICIN

        ADD A,D           ; SUMO COLUMNA "X"
        LD L,A            ; YA EST HL EN 1 ATRIBUTO
        RET


TABLADIRECCIONESPANTALLA:


   DIRALTO:
   DEFB      64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 64,65,66,67,68,69,70,71, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79, 72,73,74,75,76,77,78,79,  80,81,82,83,84,85,86,87, 80,81,82,83,84,85,86,87,80,81,82,83,84,85,86,87,80,81,82,83,84,85,86,87,80,81,82,83,84,85,86,87,80,81,82,83,84,85,86,87,80,81,82,83,84,85,86,87,80,81,82,83,84,85,86,87
   DIRBAJO:
   DEFB      0,0,0,0,0,0,0,0, 32,32,32,32,32,32,32,32, 64,64,64,64,64,64,64,64, 96,96,96,96,96,96,96,96, 128,128,128,128,128,128,128,128, 160,160,160,160,160,160,160,160, 192,192,192,192,192,192,192,192, 224,224,224,224,224,224,224,224, 0,0,0,0,0,0,0,0, 32,32,32,32,32,32,32,32, 64,64,64,64,64,64,64,64, 96,96,96,96,96,96,96,96, 128,128,128,128,128,128,128,128, 160,160,160,160,160,160,160,160, 192,192,192,192,192,192,192,192, 224,224,224,224,224,224,224,224, 0,0,0,0,0,0,0,0, 32,32,32,32,32,32,32,32, 64,64,64,64,64,64,64,64, 96,96,96,96,96,96,96,96, 128,128,128,128,128,128,128,128, 160,160,160,160,160,160,160,160, 192,192,192,192,192,192,192,192, 224,224,224,224,224,224,224,224
END ASM








REM *******************************************************************************************************************************
REM **********************************  COLOCABJ, OBTENER DIRECCIN A PARTIR X,Y EN BAJA RESOLUCCION *******************************
REM *************************  COLOCABJTRIBUTO, OBTENER DIRECCIN ATRIBUTOS A PARTIR X,Y EN BAJA RESOLUCCION ***********************
REM *******************************************************************************************************************************

REM                    VARIABLES X E Y  EN BAJA RESOLUCION
REM                    EL RESULTADO SALE EN HL
REM                    SON LAS RUTINAS DE SIEMPRE SACADAS DEL CURSO DE COMPILER

ASM
    COLOCABJ:
    LD A,(IX+7)
    AND $18
    ADD A,$40
    LD H,A

    LD A,(IX+7)
    AND 7
    RRCA
    RRCA
    RRCA
    LD L,A

    LD A,(IX+5)
    ADD A,L
    LD L,A
    RET


    COLOCABJTRIBUTO:
    LD A,(IX+7)
    RRCA
    RRCA
    RRCA
    AND 3
    ADD A,88
    LD H,A

    LD A,(IX+7)
    AND 7
    RRCA
    RRCA
    RRCA

    ADD A,(IX+5)
    LD L,A
    RET

END ASM






REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                          GRFICOS  HORIZONTE  - FIRMAMENTO
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ASM
FIRMAAUX:
   DEFB  0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0
END ASM

NUBES:
ASM
	DEFB	  0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,1,163,192,0,0,0,0,0,0,0,0,20,0,1,64,0,3,255,246,0,0,0,23,128,0,0,0,170,128,10,168,0,15,255,255,34,128,0,11,96,4,0
	DEFB	  1,85,85,85,84,0,7,255,255,149,0,5,5,232,98,128,10,168,170,168,170,128,1,95,255,10,128,2,171,219,217,80,21,83,64,22,85,64,2,143,254,1,65,85,30,189,252,128,2,143,167,47,138,0,5,63,253,191,0,168,111,59,250,0
	DEFB	  0,55,218,223,96,0,2,159,127,255,192,3,119,255,253,0,11,127,255,255,246,128,0,42,174,189,128,55,191,255,239,208,54,255,255,255,251,96,0,249,28,74,0,255,255,119,215,248,127,234,251,250,191,240,7,192,16,0,1,58,113,153,98,116
	DEFB	  28,129,134,204,9,192,1,0,0,20,0,4,2,0,64,0,7,8,0,0,7,0,2,170,128,168,0,10,0,0,21,80,0,80,21,64,80,0,0,21,85,64,0,5,84,85,74,168,0,10,170,170,128,0,0,0,42,0,0,0,10,170,128,0

END ASM

HORIZONTE:
ASM
   HORIZONTA:
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
   DEFB  0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0        ;864 OCUPA HORIZONTE SUELO

END ASM


REM BLOQUES

ASM
   CACHO2:
   DEFB   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,255,255,255,255,255,255,255,255, 8,10,2
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,255,255,255,255,255,255,255,255, 8, 10, 2
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255, 8, 10, 2
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 84, 8, 8,247,255,175,223,255,255,255,255, 8, 12, 2
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255,255,255,255,255,255,255, 8, 8, 10
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,255,255,255,255,255,255,255, 8, 10, 10
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,127,255,255,255,255,255,255,255,255, 8, 10, 10
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255, 8, 10, 10

   CACHO1:
   DEFB   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,10,10,16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 10, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 18
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 0, 0, 0, 32, 0, 0, 0, 0, 10, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 2, 0, 0, 10, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 32, 0, 0, 0, 0, 0, 10, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 16, 0, 0, 0, 10, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 18

   CACHO3:
   DEFB	  0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,21,0,0,0,8,0,0,0,0,10,12,16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0,112,252,244,189,243, 99, 32, 32, 0, 80, 0, 40, 0, 2, 0, 0, 10, 12, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 60, 60,110,118,188,200,201,139,139, 0, 0, 16, 0, 0, 0, 0, 0, 12, 12, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 61, 45, 61,136,136,136, 0, 4, 0, 64, 0, 0, 0, 0, 10, 12, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0,240,208,119,229, 71, 65, 65, 0, 0, 1, 0, 0, 32, 0, 0, 10, 12, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 54,186,158,136, 8, 8,128, 0, 0, 72, 0, 0, 0, 0, 10, 12, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254,124, 0, 0, 0, 0, 0, 0, 10, 15, 21
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 40, 16, 64, 0, 0, 0, 64, 0, 0, 10, 14, 16


   CACHO4:
   DEFB	  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,16,0,0,8,10,16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 64, 0, 8, 0, 0, 0, 8, 11, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0,120,204,222,206,222,252, 72,252,254, 0, 0, 0, 0, 0, 32, 0, 0, 11, 11, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 56, 40, 56,108, 68, 68, 0, 0, 0, 32, 0, 0, 0, 0, 14, 14, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 1,122,196,234,113, 62, 40,124,254, 0, 0, 0, 0, 2, 0, 0, 0, 11, 11, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 16, 0, 0, 0, 0, 8, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,255, 1, 0, 0, 0, 8, 0, 0, 0, 8, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 32, 0, 0, 0, 0, 0, 8, 10, 16

   CACHO5:
   DEFB   0,0,0,0,0,0,0,0,0,0,0,0,8,44,24,8,0,0,0,0,0,16,0,0,8,12,16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 64, 0, 8, 0, 0, 0, 8, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 30,127,255,255, 0, 0, 0, 0, 0, 32, 0, 0, 8, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 16, 24, 24, 62,127,127,255,223,255,255, 0, 0, 0, 32, 0, 0, 0, 0, 15, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 15,159,183,255,255,255, 0, 0, 0, 0, 2, 0, 0, 0, 15, 10, 16
   DEFB	  0, 0, 32, 96, 96,240,240,248,252,254,238,255,239,254,255,255, 0, 0, 0, 16, 0, 0, 0, 0, 15, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,255, 1, 0, 0, 0, 8, 0, 0, 0, 8, 10, 16
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 26, 12, 8, 0, 0, 32, 0, 0, 0, 0, 0, 8, 12, 16
   
   CACHO6:
   DEFB	  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,0,0,0,0,0,0,0,15,15,47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 15, 15, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 8, 15, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,186, 0, 0, 0, 0, 0, 0, 0, 15, 15, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 15, 15, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, 0, 0, 0, 0, 0, 15, 15, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 8, 15, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 8, 15, 47

   CACHO7:
   DEFB	  0,0,0,0,0,0,16,24,31,11,1,127,63,31,15,7,89,0,0,0,0,0,0,0,10,10,47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 14,255,228, 4,255,255,255,255,255, 40, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 1, 1, 15, 13,255,255,255,255,255, 88, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47
   DEFB	  1, 1, 17, 9, 15, 15, 15,255,255,255,255,255,255,255,255,255,186, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47
   DEFB	  0, 0, 16, 32,224,160,224,160,224,248,232,255,255,255,255,255, 90, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,113, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47
   DEFB	  0, 0, 0, 0, 0, 0,128,192,255, 95, 8,255,255,255,255,255, 38, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47
   DEFB	  0, 0, 0, 0, 0, 0, 0,112,248, 32, 32,254,252,248,240,224, 36, 0, 0, 0, 0, 0, 0, 0, 10, 10, 47

   CACHO8:
   DEFB	  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,8,0,0,0,0,10,15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 80, 0, 8, 0, 2, 0, 0, 15, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 9, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 4, 0, 64, 0, 64, 0, 0, 10, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 64, 0, 0, 10, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,128, 0, 0, 72, 0, 0, 0, 0, 10, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 32, 0, 0, 0, 10, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 16, 64, 0, 0, 0, 64, 0, 0, 10, 15,125


   CACHO9:
   DEFB	  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,8,0,0,0,0,10,15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 80, 0, 8, 0, 2, 0, 0, 15, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 9, 15,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 22, 27, 54, 59, 0, 4, 0, 64, 0, 64, 0, 0, 10, 13,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,216,108,223,109, 0, 0, 1, 0, 0, 64, 0, 0, 10, 13,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128, 0, 0, 72, 0, 0, 0, 0, 10, 8,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 4, 0, 32, 0, 0, 0, 10, 10,125
   DEFB	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 16, 64, 0, 0, 0, 64, 0, 0, 10, 15,125


END ASM




REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM        DATOS MAPA       FASE2
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

MAPA2:
ASM
      DEFB 4,28, 0,17, 3,0, 11,16,1,2,14, 11,18,5,10,2, 57,13,2, 53,15,4, 52,13,14, 56,15,25, 51,3,26              ;PANTALLA 1 -  31 BYTES
      DEFB 3,0, 5,16, 5,28, 10,28,15,4,2, 10,28,17,2,2, 11,2,10,14,2, 54,8,14, 52,4,18, 55,9,26                    ;PANTALLA 2 -  30 BYTES
      DEFB 1,3, 3,0, 11,16,11,16,2, 11,16,13,2,6, 11,28,15,4,2, 11,28,17,2,2, 57,5,2, 55,7,4, 52,9,22, 56,13,18    ;PANTALLA 3 -  24 BYTES
      DEFB 3,0, 0,1, 58,13,4, 58,3,13, 58,10,22                                                                    ;PANTALLA 4 -  13 BYTES

      DEFB 0,17, 58,4,1, 58,11,4, 58,3,9, 58,10,19, 58,3,25, 57,11,27                                              ;PANTALLA 5 -  20 BYTES
      DEFB 1,15, 10,9,13,12,2, 12,11,13,8,2, 55,4,5, 54,4,7, 56,6,7, 57,9,9, 57,9,19, 51,11,21, 52,13,21, 53,13,23 ;PANTALLA 6 -  36 BYTES
      DEFB 2,15, 2,11, 10,0,3,4,2, 10,2,1,2,2, 11,2,5,2,6, 11,17,1,2,10, 11,27,1,2,10, 53,3,15, 52,5,15            ;PANTALLA 7 -  35 BYTES
      DEFB 5,17, 0,1, 10,2,3,2,6, 10,2,13,2,6, 11,18,15,14,2, 11,27,17,2,2, 57,5,4, 57,13,4, 57,3,19               ;PANTALLA 8 -  33 BYTES

      DEFB 4,2, 3,30, 0,17, 11,13,1,2,6, 11,13,9,2,8, 53,5,11, 57,13,10, 55,9,15, 56,15,27                                                 ;PANTALLA 9 -  28 BYTES
      DEFB 3,30, 5,13, 10,0,15,4,2, 10,2,17,2,2, 11,4,15,10,2, 56,13,4, 55,13,11, 51,16,28                                                 ;PANTALLA 10 - 28 BYTES
      DEFB 3,30, 11,0,15,22,2, 11,0,11,18,2, 11,6,1,2,8, 11,16,1,2,10, 11,20,9,10,2, 11,20,11,2,4, 11,13,17,2,2, 54,9,2, 55,3,8, 52,9,14, 59,1,18, 60,7,21, 61,3,23    ;PANTALLA 11 - 55 BYTES
      DEFB 1,15, 0,1, 3,30, 11,0,15,2,2, 11,6,17,2,2, 11,16,17,2,2, 10,2,3,2,4, 10,2,11,2,4, 58,11,4, 58,7,15, 57,10,25, 10,18,17,2,2     ;PANTALLA 12 - 45 BYTES
END ASM



REM GUARDIANES
GUARDIANO:
ASM                                                                                     ;4 DATO 1 ABAJO 0 ARRIBA
                                                                                        ;4 DATO 1 IZ 0 DER
DEFB    52,71,1,1,62,110,1,70                                                           ;PANTALLA 1 8
DEFB    32,95,1,1,32,150,2,66,     200,143,1,0,28,130,0,70,   152,95,1,1,28,120,1,69    ;PANTALLA 2 24
DEFB    24,103,1,1,44,120,1,70,    104,71,1,0,44,120,0,67,    128,143,2,0,12,212,3,68   ;PANTALLA 3 24
DEFB    20,151,1,1,30,120,0,69,    86,135,1,0,30,120,0,66                               ;PANTALLA 4 16

DEFB    24,159,2,0,34,180,3,71,    88,135,1,1,34,130,1,67                               ;PANTALLA 6 16
DEFB    32,167,2,0,24,195,4,69,    200,167,2,0,24,215,4,68                              ;PANTALLA 7,16
DEFB    56,79,2,1,28,180,4,70,     160,87,1,1,34,150,2,71                               ;PANTALLA 8 16

DEFB    40,135,1,1,56,120,0,68                                                          ;PANTALLA 9 8
DEFB    128,167,1,1,48,140,0,66,   216,135,1,0,48,170,1,69,   128,103,1,1,48,140,2,70   ;PANTALLA 10 24
DEFB    32,159,2,0,20,180,4,69                                                          ;PANTALLA 12 8


END ASM



REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM                                          GRFICOS
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




REM GRAFICOS 1X1

VACIO:
ASM
   DEFB 0,0,0,0,0,0,0,0
END ASM

DEGRADA:
ASM
   DEFB 255,255,255,170,85,34,4,16
END ASM

REM VACIO 2X2
VACIO2X2:
ASM
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0
   ;DEFB 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0
END ASM

REM MUROS 2X2
MURO:
ASM
   DEFB 146,73,36,146,73,36,146,73,36,146,73,36,146,73,36,146,73,36,146,73,36,146,73,36,146,73,36,146,73,36,146,73,  6,6,6,6                        ; MURO SAIMAZOON 0
   DEFB 0,0,56,254,93,253,93,251,117,245,125,171,124,254,0,0,63,62,127,175,127,191,125,187,106,181,85,171,127,183,63,62, 65,65,65,65                ; MURO PARED EXTERIOR 36
   DEFB 170,170,85,85,191,254,96,5,170,86,100,37,170,86,96,5,160,6,106,85,164,38,106,85,160,6,127,253,170,170,85,85,  68,69,71,6                    ; MURO PARED INTERIOR 72
   DEFB	102,102,102,102,102,102,255,255,182,109,255,255,102,102,102,102,102,102,102,102,255,255,182,109,255,255,102,102,102,102,102,102,  67,3,67,3 ;VERJA PUERTAS  108
END ASM







REYMAGO:
ASM
      DEFB 0,0,0,16,0,99,0,244,129,248,8,248,0,134,33,0   ; DERECHA1 - 0
      DEFB 0,16,0,0,0,51,0,122,16,254,8,124,64,66,0,66    ; DERECHA1 - 16
      DEFB 0,64,0,0,0,99,0,244,129,248,0,248,32,132,0,72  ; DERECHA1 - 32
END ASM

PERSEIDA:
ASM
      DEFB 0,0,0,0,57,0,124,40,109,65,116,32,56,10,0,0
      DEFB 0,0,0,0,56,0,125,65,108,40,117,2,56,0,0,0
END ASM

RENO:
ASM
      DEFB 160,0,64,0,32,2,97,194,62,62,60,62,102,129,0,126
      DEFB 0,0,160,0,64,2,32,2,97,254,62,62,60,129,102,126
END ASM

GORRO:
ASM
      DEFB 31,224,32,16,32,200,67,56,66,6,126,6,129,0,255,0
      DEFB 31,224,32,16,32,200,67,40,66,40,126,16,129,12,255,12
END ASM

CAMPANAS:
ASM
      DEFB 33,132,83,202,170,85,66,66,6,96,4,32,7,224,3,0
      DEFB 1,128,3,192,2,64,2,64,70,98,172,53,87,234,32,196
END ASM

BOLITAS:
ASM
      DEFB 1,128,71,226,8,176,16,88,16,40,144,88,8,178,7,224
      DEFB 129,136,7,224,13,16,26,8,20,9,26,8,13,16,39,224
END ASM

BASTON:
ASM
      DEFB 0,0,56,64,120,4,224,16,192,0,192,0,245,85,117,85
      DEFB 117,85,245,85,192,0,194,0,224,32,120,0,56,4,0,0
END ASM


PAPANOEL:
ASM
      DEFB  174,87,234,117,174,87,0,0,0,28,0,50,0,112,0,0,0,80,0,51,0,119,149,214,192,182,127,252,16,17,127,254   ;0
      DEFB  0,0,0,0,0,0,0,0,0,24,0,52,0,114,0,0,0,80,0,51,20,119,129,214,192,182,127,252,16,17,127,254            ;32
END ASM

CARDIO:
ASM
    DEFB 0,255,255,85,170,255,255,0
END ASM

EXPLOSION:
ASM
      DEFB  0,0,0,0,0,0,0,0,1,128,1,128,0,0,0,0,0,0       ;0
      DEFB  0,0,2,32,0,0,19,208,3,192,0,0,2,64,0,0        ;16
      DEFB  0,0,2,32,16,8,7,224,39,224,0,4,10,80,0,0      ;32
      DEFB  0,132,42,32,0,10,82,160,7,200,32,4,10,80,0,0  ;48
      DEFB  132,149,32,0,0,2,66,161,1,64,32,4,0,1,66,4    ;64
      DEFB  132,17,0,0,0,0,64,32,1,0,0,0,0,1,66,4         ;80
END ASM

LUNA:
ASM
     DEFB 3,192,15,240,0,248,0,0,7,254,127,254,255,255,255,255,255,255,3,255,0,62,0,0,7,252,31,248,15,240,3,192
END ASM

ESTRELLA:
ASM
     DEFB  1,0,0,0,1,0,255,128,34,139,0,112,18,150,248,12,2,143,135,195,4,117,112,56,57,63,252,6,195,135,99,193,57,61,128,56,4,79,254,6,2,128,3,193,18,144,0,120,34,136,0,12,1,0,0,3,1,0,0,0,0,0,0,0
END ASM

TERRE:
ASM
   DEFB    255,255,239,255,255,251,255,255
END ASM

MARCO:
ASM
   DEFB  33,132,83,202,170,85,82,74,38,100,20,40,199,227,97,142
END ASM

REM GRAFICOS FASE 2....

MELCHOR:
ASM
DEFB  2,160,3,224,2,128,7,32,3,144,7,64,3,168,7,208,15,192,59,216,67,88,195,192,1,128,6,0,7,96,0,112      ;DERECHA    0
DEFB  2,160,3,224,2,128,7,32,3,144,7,64,3,168,7,208,15,204,11,204,26,192,19,192,17,128,48,96,6,112,7,0    ;DERECHA    32
DEFB  5,64,7,192,1,64,4,224,9,192,2,224,21,192,9,224,51,240,51,208,3,88,3,200,1,136,6,12,14,96,0,224      ;IZQUIERDA  64
DEFB  5,64,7,192,1,64,4,224,9,192,2,224,21,192,9,224,3,240,27,220,26,194,3,195,1,128,0,96,6,224,14,0      ;IZQUIERDA  96
DEFB  2,160,3,224,2,160,5,80,2,160,7,240,3,224,3,166,7,182,54,240,53,208,7,248,15,152,2,0,6,32,0,48       ;ARRIBA     128
DEFB  2,160,3,224,2,160,5,80,2,160,7,240,3,224,50,224,55,240,7,246,5,182,15,208,12,248,0,32,2,48,6,0      ;ARRIBA     160
DEFB  2,160,3,224,2,32,5,80,1,64,4,144,2,32,5,86,2,166,51,224,51,224,2,240,7,128,2,0,6,32,0,48            ;ABAJO      192
DEFB  2,160,3,224,2,32,5,80,1,64,4,144,2,32,53,80,50,160,3,230,3,230,7,160,1,240,0,32,2,48,6,0            ;ABAJO      224
END ASM

GASPAR:
ASM
DEFB  2,160,3,224,2,128,5,32,2,16,7,128,3,128,5,128,15,192,59,216,67,88,195,192,1,128,6,0,7,96,0,112     ;DERECHA    0
DEFB  2,160,3,224,2,128,5,32,2,16,7,128,3,128,5,152,15,216,11,192,26,192,19,192,17,128,48,96,6,112,7,0   ;DERECHA    32
DEFB  5,64,7,192,1,64,4,160,8,64,1,224,1,192,25,160,27,240,3,208,3,88,3,200,1,136,6,12,14,96,0,224       ;IZQUIERDA  64
DEFB  5,64,7,192,1,64,4,160,8,64,1,224,1,192,1,160,3,240,27,220,26,194,3,195,1,128,0,96,6,224,14,0       ;IZQUIERDA  96
DEFB  2,160,3,224,2,160,5,80,2,160,7,240,3,224,3,166,7,182,54,240,53,208,7,248,15,152,2,0,6,32,0,48      ;ARRIBA     128
DEFB  2,160,3,224,2,160,5,80,2,160,7,240,3,224,50,224,55,240,7,246,5,182,15,208,12,248,0,32,2,48,6,0     ;ARRIBA     160
DEFB  2,160,3,224,2,32,5,80,1,64,4,144,2,32,3,166,6,182,51,96,55,240,5,240,7,144,2,0,6,32,0,48           ;ABAJO      192
DEFB  2,160,3,224,2,32,5,80,1,64,4,144,2,32,51,160,54,176,3,102,7,246,7,208,4,240,0,32,2,48,6,0          ;ABAJO      224
END ASM

BALTASAR:
ASM

DEFB  3,96,3,224,2,128,5,32,2,16,3,0,3,128,5,128,15,192,59,216,66,152,195,192,1,128,6,0,7,96,0,112   ;DERECHA    0
DEFB  3,96,3,224,2,128,5,32,2,16,3,0,3,128,5,152,15,216,11,192,26,128,19,192,49,128,0,96,6,112,7,0   ;DERECHA    32
DEFB  6,192,7,192,1,64,4,160,8,64,0,192,1,192,1,160,3,240,27,220,25,66,3,195,1,128,0,96,6,224,14,0   ;IZQUIERDA  64
DEFB  6,192,7,192,1,64,4,160,8,64,0,192,1,192,25,160,27,240,3,208,1,88,3,200,1,140,6,0,14,96,0,224   ;IZQUIERDA  96
DEFB  3,96,3,224,2,160,5,80,2,160,7,240,3,224,3,166,7,182,54,240,53,208,7,248,15,152,2,0,6,32,0,48   ;ARRIBA     128
DEFB  3,96,3,224,2,160,5,80,2,160,7,240,3,224,50,224,55,240,7,246,5,182,15,208,12,248,0,32,2,48,6,0  ;ARRIBA     160
DEFB  3,96,3,224,4,16,1,64,4,144,0,0,6,176,7,246,2,166,51,96,51,224,3,240,7,128,2,0,6,32,0,48        ;ABAJO      192
DEFB  3,96,3,224,4,16,1,64,4,144,0,0,6,176,55,240,50,160,3,102,3,230,7,224,1,240,0,32,2,48,6,0       ;ABAJO      224
END ASM

VIDAGASPAR:
ASM
   DEFB 2,73,0,3,123,0,0,190,0,1,94,0,0,0,0,1,125,0,0,129,0,2,129,128                             ; "0"
   DEFB 5,41,64,4,130,64,2,131,128,7,70,224,14,189,240,15,123,240,15,181,240,31,219,248
   DEFB 25,215,248,27,247,184,29,255,184,27,236,216,29,251,216,27,234,216,13,248,216,7,239,224
END ASM

VIDAMELCHOR:
ASM
   DEFB  2,84,128,3,125,128,1,239,0,1,255,0,0,0,0,1,125,128,2,129,64,1,169,128                    ;"72"
   DEFB  2,41,64,0,146,0,0,130,0,7,85,224,14,170,240,15,85,240,15,171,240,31,215,248
   DEFB  25,255,248,27,255,184,29,255,184,27,239,216,29,255,216,27,239,216,13,255,216,7,239,224
END ASM

VIDABALTASAR:
ASM
   DEFB 1,153,128,2,91,64,5,126,160,2,153,64,1,255,128,1,125,0,0,129,0,0,109,0                    ;"144"
   DEFB 4,1,32,6,130,96,6,154,96,7,98,224,12,189,48,15,90,240,15,165,240,31,219,248
   DEFB 29,255,248,61,255,184,59,255,188,59,232,220,59,122,220,58,233,220,27,122,220,27,232,216
END ASM

REYMUERTO:
ASM
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0,254,0,0,197,0,0,228,0                                   ;"216"
   DEFB 0,187,0,0,191,0,0,21,0,0,64,0,0,106,0,0,62,0,0,0,0,0,255,128
   DEFB 1,8,64,2,127,32,2,8,32,2,62,32,5,8,80,2,28,32,2,0,32,2,46,32
END ASM

MARCAREY:
ASM
   DEFB 0,0,0,1,1,0,124,124,124,41,41,40,58,186,184,17,17,16,16,16,16,16,16,16
END ASM

TITULO:
ASM
        DEFB	 56,  0,  0, 88,  0,  0, 19,218
	DEFB	182, 49, 82,164, 25,153, 54, 25
	DEFB	 81, 34,155, 89, 54,112,  0,  0
	DEFB	  1,254,  6,  2,  0,116,  4, 14
	DEFB	 84,133,234, 86, 69, 40, 82,109
	DEFB	 40, 82, 85, 40, 86, 85,107,112
	DEFB	 69,169,  0, 69, 46, 32, 69, 32
	DEFB	 40, 69,  0, 32, 69,  0,124,196
	DEFB	  0, 32,  2,  0,160,  0,  0, 32
	DEFB	 68, 68, 68, 69, 69, 69, 69, 69
	DEFB	 70
END ASM

QUI7:
ASM
    DEFB   7,192,15,224,27,176,25,48,15,224,7,192,3,128,31,240,63,248,62,248,42,168,42,168,42,168,42,168,42,168,0,0,  67,67,67,3      ;REM COLOREADO
END ASM

REM MUERTE Y VICTORIA
VICTORIA:
ASM
	DEFB	  0,  0,  0,  0,  0,  0,  0,  0
	DEFB	 16,  0,  0,  0,  0,  0,  4,144
	DEFB	  0,  4,  2,160,  0,  0,  0,128
	DEFB	  0,  0,  7,240,  0,  0,  0,128
	DEFB	  0,  0,  2,160,  0, 64,  4,144
	DEFB	  0,  0,  0,128,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0,  4,  0,  0
	DEFB	  0, 12,192,  0,  0, 10,128,  0
	DEFB	  0, 55,128,  0,  0, 31,  0,  0
	DEFB	  0, 17,  0,  0,  0, 17,  0,  0
	DEFB	  0,255,195,255,255,255,255,255
	DEFB	255,255,255,255,127,255,255,255
	DEFB	 95,159,255,231,232,124,153,241
	DEFB	  1,111, 58, 45,160, 64,  4,129
	DEFB	 66, 68, 70, 70, 71, 69, 70, 70
	DEFB	 71, 71, 71, 71, 65, 65, 65, 65
END ASM

NOELGANA:
ASM
       	DEFB	  0,  0,  0,  0,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0,127,128,  0
	DEFB	  1,255,192,  0,  3,255,240,  0
	DEFB	  7,223,216,  0,  5,255,236,  0
	DEFB	 15,231,254,  0, 15,223,255,  0
	DEFB	 31,190,255,128, 21,127,246,128
	DEFB	 31,127,253,192, 28, 55,126,192
	DEFB	 12,127,253,192,  8,127,254,192
	DEFB	 28,127,255,192, 62,255,254,224
	DEFB	 62,255,215, 96, 62,245,235, 96
	DEFB	 28,106,255,192,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0, 40, 20,  0
	DEFB	  0,108, 54,  0,  0,108, 54,  0
	DEFB	  0, 40, 20,  0,  0,  0,  0,  0
	DEFB	  0,  0,  0,  0,  0,  0,  0,  0
	DEFB	 66, 66,  2, 71, 66, 66, 66,  2
	DEFB	 71, 71, 71, 71, 71,  4,  4, 71
END ASM


REM
GUARDIAN:
ASM

   DEFB   7,200,14,120,6,120,3,200,39,192,23,224,63,240,23,240,39,240,7,224,3,128,3,128,3,128,3,128,3,128,7,192      ;JSW - 0
   DEFB   7,200,14,120,6,120,35,200,23,192,23,224,63,240,23,128,23,240,39,224,3,128,3,128,6,192,6,192,28,112,6,192   ;JSW - 32
   DEFB   7,200,14,120,6,120,3,200,39,192,23,224,63,240,23,240,39,240,7,224,3,128,7,192,46,232,28,112,8,32,4,64      ;JSW - 64

   DEFB   3,192,6,160,7,224,1,136,3,212,10,112,7,92,11,192,3,192,1,128,127,254,42,170,144,17,187,185,144,18,42,168   ;RJB - 0
   DEFB   3,192,6,160,7,224,1,134,11,200,11,120,6,78,11,192,11,192,1,128,127,254,85,84,168,41,147,145,168,42,85,84   ;RJB - 32
   DEFB   3,192,6,160,7,224,1,128,3,198,2,253,14,71,3,192,3,192,1,128,127,254,42,170,144,17,187,185,144,18,42,168    ;RJB - 64

   DEFB   1,240,3,228,14,76,30,156,30,212,58,127,33,88,193,96,195,56,3,130,3,243,1,115,0,160,11,144,8,20,4,12        ;GORRACO - 0
   DEFB   1,240,7,228,14,76,30,156,58,212,34,127,193,88,193,96,3,56,3,128,3,244,1,118,0,166,0,160,0,180,0,252        ;GORRACO - 32
   DEFB   13,240,31,228,30,76,58,156,34,212,194,127,193,88,1,98,3,59,3,131,3,240,1,112,0,160,1,180,2,12,1,0          ;GORRACO - 64

   DEFB   16,4,1,142,34,68,68,32,36,34,8,48,8,80,8,176,17,88,18,168,37,84,63,252,32,4,31,248,1,128,1,128             ;CAMPANA - 0
   DEFB   8,4,1,146,34,68,116,32,36,32,8,50,72,80,8,176,17,88,18,168,37,84,63,252,32,4,31,248,0,48,0,48              ;CAMPANA - 32
   DEFB   0,8,9,145,66,72,4,32,4,32,72,52,168,80,72,176,17,88,18,168,37,84,63,252,32,4,31,248,12,0,12,0              ;CAMPANA - 64

   DEFB   0,64,4,0,6,8,36,20,0,8,8,64,0,0,0,0,31,248,17,136,14,112,14,112,10,80,126,126,250,95,126,126               ;PAPATOS - 0
   DEFB   0,0,4,0,0,2,95,16,17,4,14,34,14,0,10,0,126,248,250,136,126,112,0,112,0,80,0,126,42,95,84,126               ;PAPATOS - 32
   DEFB   0,0,68,32,160,2,64,249,8,136,0,112,0,112,0,80,31,126,17,95,14,126,14,0,10,0,126,0,250,42,126,84            ;PAPATOS - 64

END ASM


ESPEJO1:
ASM
REFLEJO1:
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;0    --- 0
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;32
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;64
END ASM

ESPEJO2:
ASM
REFLEJO2:
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;0    --- 96
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;32
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;64
END ASM

ESPEJO3:
ASM
REFLEJO3:
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;0    --- 192
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;32
   DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   ;64
END ASM






DALALUZ:
ASM
   DEFB  192,0,192,0,48,0,24,0,12,0,6,0,3,0,1,128,14,112,31,248,47,236,63,212,95,234,127,214,191,171,255,215,  70,70,70,6 ;ON 0
   DEFB  0,3,0,3,0,12,0,24,0,48,0,96,0,192,1,128,14,112,31,248,47,236,63,212,95,234,127,214,191,171,255,215,  70,70,70,6  ;OFF 36
END ASM

REM GRAFICOS EN LISTA OBJETOS

VERJA2X2:
ASM
   DEFB   34,68,102,102,102,102,255,255,255,255,102,102,102,96,102,111,255,249,255,251,102,111,102,96,102,102,255,255,255,255,102,102, 67,3,67,3
END ASM

BALL:
ASM
   DEFB  3,192,15,240,31,248,63,252,127,246,127,250,255,249,255,245,255,233,255,245,127,238,127,214,63,164,31,72,12,48,3,192,  66,66,66,2
END ASM

CUBOS:
ASM
   DEFB  255,0,129,0,189,0,165,0,189,0,165,0,129,0,255,0,255,255,129,129,189,185,161,165,161,165,189,185,129,129,255,255, 68,0,69,66
END ASM

MUNECA:
ASM
   DEFB  7,192,12,96,10,160,8,32,7,66,26,178,53,76,39,224,47,208,47,224,15,208,15,224,0,0,4,64,4,64,12,96, 68,68,68,68
END ASM

OSITO:
ASM
   DEFB  24,24,36,36,43,212,23,232,13,176,14,112,7,224,2,192,4,32,23,232,55,172,55,108,35,192,6,96,14,112,14,112, 68,68,68,68
END ASM

TREN:
ASM
   DEFB  0,0,15,0,0,15,6,9,0,9,6,8,0,8,7,8,23,232,23,239,23,239,0,0,63,255,57,153,230,102,6,102, 69,69,69,69
END ASM

TANQUE:
ASM
   DEFB  0,15,252,192,31,254,223,191,254,202,170,170,192,21,84,0,0,0,0,0,223,15,255,207,120,97,231,2,15,255,255,255,255,0,0,0,158,251,234,76,113,196,48,0,24,15,255,224,  71,71,71,7,7,7
END ASM

MUNECONIEVE:
ASM
   DEFB  0,0,0,1,240,0,1,144,0,1,240,168,1,240,168,1,176,168,1,208,112,15,254,32,2,8,32,2,168,64,2,8,64,1,240,64,2,8,128,4,68,128,12,6,128,20,69,0,10,11,0,1,240,128,6,12,128,8,2,128,8,66,0,16,5,0,16,11,0,16,69,0,16,11,0,8,86,0,8,42,0,4,84,24,3,248,60,0,0,0,0,0,0,0,0,0, 65,65,6,71,71,6,71,5,6,71,5,2
END ASM

ABETO:
ASM
        DEFB	  0,  3,192,  0,  0,  6, 96, 32
	DEFB	  0, 15, 80, 32,  2, 27,200,  0
	DEFB	  2, 39,124, 96,  2, 95,186, 32
	DEFB	  7,207,107, 64,  2, 42, 92, 96
	DEFB	  0, 62,248,  0,  0,159,206,  0
	DEFB	  3,126,121,  0,  2,126,255,128
	DEFB	  6,197, 90,224, 31,255,245, 88
	DEFB	 56,125,234,172, 31,204,255,  0
	DEFB	  1,191,127,192,  3,255,103, 96
	DEFB	  7, 63,251,176, 31,187,159,208
	DEFB	 62,251,253, 88,122,238,250,172
	DEFB	 62, 66,213, 86,223,255, 74,170
	DEFB	  8,  7,224,  8, 28,  7,228, 28
	DEFB	 58, 13,184, 58, 54, 15,192, 54
	DEFB	 58, 15,160, 46, 28,  7,192, 28
	DEFB	  0,  3,160,  0,  0,  7,224,  0
	DEFB	 67, 68, 68, 70, 68, 68,  4,  4
	DEFB	 68, 68,  4,  4, 69, 66,  2,  7
END ASM

ORO:
ASM
   DEFB  7,224,24,24,32,4,65,194,66,2,132,1,132,3,159,193,132,3,159,197,132,11,68,6,66,10,33,196,24,24,7,224, 70,70,70,6
END ASM

INCIENSO:
ASM
   DEFB 3,128,3,197,3,136,1,1,3,132,28,112,32,8,63,248,72,4,84,12,72,20,64,44,64,84,32,168,17,80,31,240, 69,69,68,3
END ASM

MIRRA:
ASM
   DEFB  31,248,32,20,34,204,37,4,71,198,64,10,69,70,71,202,64,6,69,74,71,214,32,12,34,148,37,76,39,212,31,248, 66,2,66,2
END ASM