INC (HL) ;HACEMOS QUE TE QUITE UNO DE ENERGIA
JP DIBUJAMORO
MRETRO
DEC C
DEC C
LD (IX+1),C ;GUARDAMOS LA NUEVA X
JR DIBUJAMORO ;DIBUJAMOS EL TERRORISTA
MNORETRO LD (IX+8),1 ;LE CAMBIAMOS LA POSICION
JR DIBUJAMORO
MORODER
CALL CAJAPORDER ;MIRAMOS SI HAY CAJA POR LA DERECHA
JR C,MNOAVAN ;SI HAY ACARREO NO PUEDE AVANZAR
LD L,1 ;PONEMOS LA POSICION PARA COMPROBACION
PUSH BC ;GUARDAMOS COORDENADAS
CALL POSIBCHOQ ;COMPROBAMOS SI SE CHOCA CON EL PERSONAJE
POP BC
JR NC,MAVAN ;SI NO SE CHOCA CONTINUAMOS
LD A,(FASE)
AND 11111110B
CP 00000110B
JP Z,DIBUJAMORO ;SI ESTA AGACHADO NO LE QUITAN ENERGIA
LD HL,ENERGYOUT
INC (HL) ;HACEMOS QUE TE QUITE UNO DE ENERGIA
JR DIBUJAMORO
MAVAN
INC C
INC C
LD (IX+1),C
JR DIBUJAMORO
MNOAVAN LD (IX+8),0 ;LE CAMBIAMOS LA POSICION
JR DIBUJAMORO
MORODISPA DEC (IX+10) ;DECREMENTAMOS EL TIEMPO QUE ESTA DISPARANDO
JP NZ,DIBMORO
LD (IX+5),0 ;SI HA TERMINADO EL DISPARO LE PONEMOS ANDANDO
LD A,B
SUB 8
LD B,A ;CORREGIMOS LA Y
LD (IX+2),A ;LA GUARDAMOS
JP NODISPMORO
MOROATRAS
DEC (IX+9) ;DECREMENTAMOS EL TIEMPO QUE VA HACIA ATRAS
LD A,(IX+11) ;COGEMOS LA POSICION PARA LA QUE VA HACIA ATRAS
OR A
JR Z,MATRASDER ;SI ES 0 VA PARA LA DERECHA
MATRASIZQ
DEC C
DEC C
CALL CAJAPORIZQ ;MIRAMOS SI HAY CAJA POR LA IZQUIERDA
JR C,DIBMORO ;SI HAY ACARREO NO PUEDE RETROCEDER
DEC C
DEC C
LD (IX+1),C ;GUARDAMOS LA NUEVA X
JP DIBMORO
MATRASDER
INC C
INC C
CALL CAJAPORDER
JR C,DIBMORO
INC C
INC C
LD (IX+1),C ;GUARDAMOS LA NUEVA X
JP DIBMORO
MOROPARPA DEC (IX+7) ;DECREMENTAMOS EL TIEMPO DE PARPADEO
JP Z,ENEMPUNTOS ;DAMOS PUNTOS Y DESCONECTAMOS
LD A,(IX+7)
BIT 0,A ;UNAS VECES SE DIBUJA Y OTRAS NO
JP Z,NEXTENEM
JP DIBMORO
;DIBUJAMOS EL MORO
DIBUJAMORO
LD DE,40*256+12 ;ALTO=40,ANCHO=12
CALL PUNETAZO ;COMPROBAMOS SI LE DAN PUNETAZO
JR NC,NOPEGAMOR ;SI NO HAY ACARREO ES QUE NO LE PEGA
CALL ALEA
AND 11B
ADD 5
LD (IX+9),A ;PONEMOS EL TIEMPO QUE SE TIRA HACIA ATRAS
DEC (IX+6) ;DECREMENTAMOS EL NUMERO DE GOLPES
LD A,(POSICION) ;COGEMOS LA DIRECCION DEL PERSONAJE
LD (IX+11),A ;LA PONEMOS EN LA TABLA DEL ENEMIGO
NOPEGAMOR
LD A,C ;COGEMOS LA X PARA COMPROBAR QUE NO SE SALE DE LA PANTALLA
CP 60 ;SI X<60 DESCONECTAMOS EL MORO
JP C,DESCMORO
CP 184 ;SI X>183 DESCONECTAMOS EL MORO
JP NC,DESCMORO
LD A,(IX+5) ;COGEMOS LA FASE DE ANIMACION
INC A ;LA INCREMENTAMOS
CP 4 ;MIRAMOS SI HA LLEGADO A LA ULTIMA
JR NZ,MNEXTFAS
XOR A
MNEXTFAS LD (IX+5),A ;SI HA LLEGADO A LA ULTIMA LA PONEMOS A 0
DIBMORO
LD A,(IX+8) ;COGEMOS LA POSICION
LD (INVERT+1),A
LD A,(IX+5) ;COGEMOS FASE DE ANIMACION
LD HL,TABMORO ;APUNTAMOS A LA TABLA DEL MORO
CALL DIBUSPRITE ;LO DIBUJAMOS
JP NEXTENEM
***********MOVEHELI SE ENCARGA DE MOVER AL TIO EN HELICOPTERO
MOVEHELI
EX AF,AF' ;PRESERVAMOS EL TIPO DE HELICOPTERO
LD C,(IX+1) ;C=X
LD B,(IX+2) ;B=Y
LD A,(IX+6) ;NUMERO DE GOLPES
OR (IX+7) ;TIEMPO DE MUERTE
JP Z,NEXTENEM ;SALIMOS SI ESTA DESCONECTADO
LD A,(IX+9) ;COGEMOS EL TIEMPO QUE VA HACIA ATRAS
OR A
JR NZ,HELIATRAS ;SI NO ES 0 ES QUE TIENE QUE IR HACIA ATRAS
LD A,(IX+6) ;COGEMOS NUMERO DE GOLPES
OR A
JP Z,HELIPARPA ;SI ES 0 ES QUE HAY QUE ELIMINAR AL TERRORISTA
LD A,(IX+6) ;NUMERO DE GOLPES
OR (IX+7) ;TIEMPO DE MUERTE
JP Z,NEXTENEM ;SALIMOS SI ESTA DESCONECTADO
LD A,(X) ;COGEMOS LA X DEL PERSONAJE
CP C
JR C,XPERSMEN ;SI HAY ACARREO ES QUE LA X PERSONAJE<X DEL HELI
XPERSMAY SUB 2
CP C
CALL C,PONGRANADA
JR VUELA
XPERSMEN ADD 2
CP C
CALL NC,PONGRANADA
VUELA
EX AF,AF' ;A=TIPO DE HELICOPTERO
CP 2
JR Z,HELITONTO ;SI ES 2 ES EL HELICOPTERO NORMAL
LD A,(X)
CP C
JR Z,HELIDERIZQ ;SI ES IGUAL NO CAMBIA DE POSICION
JR C,HELIIZQ
JR HELIDER
HELITONTO
LD A,(IX+8)
OR A ;MIRAMOS SI VA A LA DERECHA O A LA IZQUIERDA
JR Z,HELIDER
HELIIZQ
DEC C
DEC C ;DECREMENTAMOS LA X
LD (IX+1),C ;LA GUARDAMOS
LD (IX+8),1 ;PONEMOS LA POSICION
JR HELIDERIZQ ;EL RESTO ES COMUN
HELIDER
INC C
INC C ;INCREMENTAMOS LA X
LD (IX+8),0 ;PONEMOS LA POSICION
LD (IX+1),C ;Y LA GUARDAMOS
HELIDERIZQ
LD L,(IX+3)
LD H,(IX+4) ;COGEMOS LA DIR DE LOS INCREMENTOS DE Y
LD A,(IX+2) ;COGEMOS LA Y
ADD (HL) ;LE SUMAMOS EL INCREMENTO DE Y
LD (IX+2),A ;GUARDAMOS LA NUEVA Y
LD B,A ;B=Y
INC HL ;INC PUNTERO DE INCREMENTOS
LD A,(HL)
CP 255 ;MIRAMOS SI HA LLEGADO AL FINAL
JR NZ,NOFININCY
LD HL,INCYHELI ;SI HA LLEGADO AL FINAL INICIALIZAMOS LA TABLA
NOFININCY LD (IX+3),L ;GUARDAMOS LA NUEVA DIRECCION
LD (IX+4),H ;DE LOS INCREMENTOS
JP DIBUJAHELI
HELIATRAS
DEC (IX+9) ;DECREMENTAMOS EL TIEMPO QUE VA HACIA ATRAS
LD A,(IX+11) ;COGEMOS LA POSICION PARA LA QUE VA HACIA ATRAS
OR A
JR Z,HATRASDER ;SI ES 0 VA PARA LA DERECHA
HATRASIZQ
DEC C
DEC C
DEC C
DEC C
LD (IX+1),C ;GUARDAMOS LA NUEVA X
JP DIBHELI
HATRASDER
INC C
INC C
INC C
INC C
LD (IX+1),C ;GUARDAMOS LA NUEVA X
JP DIBHELI
HELIPARPA DEC (IX+7) ;DECREMENTAMOS EL TIEMPO DE PARPADEO
JP Z,ENEMPUNTOS ;DAMOS PUNTOS Y DESCONECTAMOS
LD A,(IX+7)
BIT 0,A ;UNAS VECES SE DIBUJA Y OTRAS NO
JP Z,NEXTENEM
JP DIBHELI
DIBUJAHELI
PUSH BC
LD HL,SONIHELI
CALL SONIDOPSG ;HACEMOS RUIDO DEL HELICOPTERO
POP BC
LD DE,40*256+12 ;ALTO=40,ANCHO=12
CALL PUNETAZO ;COMPROBAMOS SI LE DAN PUNETAZO
JR NC,NOPEGAHELI ;SI NO HAY ACARREO ES QUE NO LE PEGA
LD (IX+9),5 ;PONEMOS EL TIEMPO QUE SE TIRA HACIA ATRAS
DEC (IX+6) ;DECREMENTAMOS EL NUMERO DE GOLPES
LD A,(POSICION) ;COGEMOS LA DIRECCION DEL PERSONAJE
LD (IX+11),A ;LA PONEMOS EN LA TABL
|
INC (HL) ;ДЕЛАЕМ ТАК, ЧТОБЫ ВАШ ПЕРСОНАЖ ТЕРЯЛ ОДНУ ЕДИНИЦУ ЭНЕРГИИ
JP DIBUJAMORO
MRETRO
DEC C
DEC C
LD (IX+1),C ;СОХРАНЯЕМ НОВОЕ X
JR DIBUJAMORO ;РИСУЕМ ТЕРРОРИСТА
MNORETRO LD (IX+8),1 ;МЕНЯЕМ ЕГО ПОЗИЦИЮ
JR DIBUJAMORO
MORODER
CALL CAJAPORDER ;ПРОВЕРЯЕМ, ЕСТЬ ЛИ СЛЕВА КОРОБКА ИЛИ НЕТ
JR C,MNOAVAN ;ЕСЛИ ТАМ ПЕРЕВОЗКА, ВЫ НЕ МОЖЕТЕ ИДТИ ДАЛЬШЕ
LD L,1 ;ВХОДИМ В ПОЗИЦИЮ ДЛЯ ПРОВЕРКИ
PUSH BC ;СОХРАНЯЕМ КООРДИНАТЫ
CALL POSIBCHOQ ;ПРОВЕРЯЕМ, ЕСЛИ ОНО СТАЛКИВАЕТСЯ С ПЕРСОНАЖЕМ
POP BC
JR NC,MAVAN ;ЕСЛИ НЕТ, ТОГДА ИДЁМ ДАЛЬШЕ
LD A,(FASE)
AND 11111110B
CP 00000110B
JP Z,DIBUJAMORO ;ПРИСЕДАЯ, ЭНЕРГИЯ НЕ ТЕРЯЕТСЯ
LD HL,ENERGYOUT
INC (HL) ; ДЕЛАЕМ ТАК, ЧТОБЫ ВАШ ПЕРСОНАЖ ТЕРЯЛ ОДНУ ЕДИНИЦУ ЭНЕРГИИ
JR DIBUJAMORO
MAVAN
INC C
INC C
LD (IX+1),C
JR DIBUJAMORO
MNOAVAN LD (IX+8),0 ;МЕНЯЕМ ЕГО ПОЗИЦИЮ
JR DIBUJAMORO
MORODISPA DEC (IX+10) ; СНИЖАЕМ КОЛИЧЕСТВО ВРЕМЕНИ, ЗА КОТОРОЕ ПРОИЗВОДИТСЯ СТРЕЛЬБА
JP NZ,DIBMORO
LD (IX+5),0 ;КАК ТОЛЬКО СТРЕЛЬБА ЗАКАНЧИВАЕТСЯ, ПЕРЕХОДИМ В РЕЖИМ ХОЖДЕНИЯ
LD A,B
SUB 8
LD B,A ;ИСПРАВЛЯЕМ Y
LD (IX+2),A ;СОХРАНЯЕМ ЕГО
JP NODISPMORO
MOROATRAS
DEC (IX+9) ;СНИЖАЕМ КОЛИЧЕСТВО ВРЕМЕНИ, ЗА КОТОРОЕ ИДУТ ОБРАТНО
LD A,(IX+11) ;ЗАНИМАЕМ ПОЗИЦИЮ, В КОТОРОЕ ИДУТ ОБРАТНО
OR A
JR Z,MATRASDER ;ЕСЛИ ПОСТАВЛЕНО 0, ТОГДА НА САМОМ ДЕЛЕ ИДУТ ВЛЕВО
MATRASIZQ
DEC C
DEC C
CALL CAJAPORIZQ ; ПРОВЕРЯЕМ, ЕСТЬ ЛИ СЛЕВА КОРОБКА ИЛИ НЕТ
JR C,DIBMORO ;ЕСЛИ ТАМ ПЕРЕВОЗКА, ВЫ НЕ МОЖЕТЕ ОТСКАЧИТЬ
DEC C
DEC C
LD (IX+1),C ;СОХРАНЯЕМ НОВОЕ X
JP DIBMORO
MATRASDER
INC C
INC C
CALL CAJAPORDER
JR C,DIBMORO
INC C
INC C
LD (IX+1),C ;СОХРАНЯЕМ НОВОЕ X
JP DIBMORO
MOROPARPA DEC (IX+7) ;СНИЖАЕМ КОЛИЧЕСТВО ВРЕМЕНИ, ЗА КОТОРОЕ ПРОИЗВОДИТСЯ МЕРЦАНИЕ
JP Z,ENEMPUNTOS ;ДОБАВЛЯЕМ ОЧКИ И ОТКЛЮЧАЕМСЯ
LD A,(IX+7)
BIT 0,A ;ИНОГДА ОНО НАРИСОВАНО, А ИНОГДА НЕТ
JP Z,NEXTENEM
JP DIBMORO
;РИСУЕМ АРАБА
DIBUJAMORO
LD DE,40*256+12 ;ALTO=40,ANCHO=12
CALL PUNETAZO ;ПРОВЕРЯЕМ, ЕСЛИ ПО НЕМУ ПОПАДАЮТ
JR NC,NOPEGAMOR ;ЕСЛИ ПЕРЕВОЗКИ НЕТ, ТО НЕ ПОПАДАЮТ
CALL ALEA
AND 11B
ADD 5
LD (IX+9),A ;ЗАДАЁМ ВРЕМЯ, ЗА КОТОРОЕ БУДЕМ ТЯНУТЬ ОБРАТНО
DEC (IX+6) ;СНИЖАЕМ КОЛИЧЕСТВО УДАРОВ
LD A,(POSICION) ;БЕРЁМ НАПРАВЛЕНИЕ ПЕРСОНАЖА
LD (IX+11),A ;ДОБАВЛЯЕМ В ТАБЛИЦУ ВРАГА
NOPEGAMOR
LD A,C ;БЕРЁМ X ЧТОБЫ ПРОВЕРИТЬ, НЕ ВЫХОДЯТ ЛИ ЗА ЭКРАН
CP 60 ;SI X<60 ОТКЛЮЧАЕМ АРАБА
JP C,DESCMORO
CP 184 ;SI X>183 ОТКЛЮЧАЕМ АРАБА
JP NC,DESCMORO
LD A,(IX+5) ;ПРИНИМАЕМ ФАЗУ АНИМАЦИИ
INC A ;УВЕЛИЧИВАЕМ
CP 4 ;ПРОВЕРЯЕМ, ЕСЛИ ЭТО ПОСЛЕДНЕЕ
JR NZ,MNEXTFAS
XOR A
MNEXTFAS LD (IX+5),A ;ЕСЛИ ПОСЛЕДНЕЕ, СТАВИМ НА 0
DIBMORO
LD A,(IX+8) ;ЮЕРЁМ ПОЗИЦИЮ
LD (INVERT+1),A
LD A,(IX+5) ;ПРИНИМАЕМ ФАЗУ АНИМАЦИИ
LD HL,TABMORO ;ДОБАВЛЯЕМ В ТАБЛИЦУ АРАБА
CALL DIBUSPRITE ;РИСУЕМ
JP NEXTENEM
***********MOVEHELI IS USED TO MOVE THE GUY IN HELICOPTER
MOVEHELI
EX AF,AF' ;WE PRESERVE THE TYPE OF THE HELICOPTER
LD C,(IX+1) ;C=X
LD B,(IX+2) ;B=Y
LD A,(IX+6) ;NUMBER OF HITS
OR (IX+7) ;DEATH TIME
JP Z,NEXTENEM ;WE JUMP IF IT IS DISCONNECTED
LD A,(IX+9) ;WE TAKE THE TIME INTERVAL IT’S MOVING BACKWARDS
OR A
JR NZ,HELIATRAS ;IF IT ISN’T 0, IT MUST GO BACKWARDS
LD A,(IX+6) ;WE TAKE THE NUMBER OF HITS
OR A
JP Z,HELIPARPA ;IF IT IS 0 WE HAVE TO DELETE THE TERRORIST
LD A,(IX+6) ;NUMBER OF HITS
OR (IX+7) ;DEATH TIME
JP Z,NEXTENEM ;WE EXIT IF IT IS DISCONNECTED
LD A,(X) ;WE TAKE THE CHARACTER’S X
CP C
JR C,XPERSMEN ;IF THER IS A CARRY, THEN THE CHARACTER’S X < HELICOPTER’S X
XPERSMAY SUB 2
CP C
CALL C,PONGRANADA
JR VUELA
XPERSMEN ADD 2
CP C
CALL NC,PONGRANADA
VUELA
EX AF,AF' ;A=HELICOPTER TYPE
CP 2
JR Z,HELITONTO ;IF IT IS 2, IT IS THE NORMAL HELICOPTER
LD A,(X)
CP C
JR Z,HELIDERIZQ ;IF IT IS THE SAME, IT DOESN’T CHANGE THE POSITION
JR C,HELIIZQ
JR HELIDER
HELITONTO
LD A,(IX+8)
OR A ;WE CHECK IF IT GOES TO THE LEFT OR TO THE RIGHT
JR Z,HELIDER
HELIIZQ
DEC C
DEC C ;WE DCREMENT THE X
LD (IX+1),C ;WE SAVE IT
LD (IX+8),1 ;WE SET THE POSITION
JR HELIDERIZQ ;THE REST IS COMMON
HELIDER
INC C
INC C ;WE INCREMENT THE X
LD (IX+8),0 ;WE SET THE POSITION
LD (IX+1),C ;AND WE SAVE IT
HELIDERIZQ
LD L,(IX+3)
LD H,(IX+4) ;WE TAKE THE DIR OF THE “Y� DECREMENTS
LD A,(IX+2) ;WE TAKE THE Y
ADD (HL) ;WE ADD IT THE Y INCREMENT
LD (IX+2),A ;WE SAVE THE NEW Y
LD B,A ;B=Y
INC HL ;INC INCREMENT POINTER
LD A,(HL)
CP 255 ;WE CHECK IF WHETHER IT HAS GOT TO THE END
JR NZ,NOFININCY
LD HL,INCYHELI ;IF IT HAS GOT TO THE END, WE REINITIALIZE THE TABLE
NOFININCY LD (IX+3),L ;WE SAVE THE NEW DIRECTION
LD (IX+4),H ;OF THE INCREMENTS
JP DIBUJAHELI
HELIATRAS
DEC (IX+9) ;WE DECREMENT THE TIME IT’S GOING BACKWARDS
LD A,(IX+11) ;WE TAKE THE POSITION FOR WHICH IT GOES BACKWARDS
OR A
JR Z,HATRASDER ;IF IT IS 0 IT GOES TO THE RIGHT
HATRASIZQ
DEC C
DEC C
DEC C
DEC C
LD (IX+1),C ;WE SAVE THE NEW X
JP DIBHELI
HATRASDER
INC C
INC C
INC C
INC C
LD (IX+1),C ;WE SAVE THE NEW X
JP DIBHELI
HELIPARPA DEC (IX+7) ;WE DECREMENT THE BLINKING TIME
JP Z,ENEMPUNTOS ;WE ADD THE SCORES AND DISCONNECT
LD A,(IX+7)
BIT 0,A ;SOMETIMES IT IS DRAWN AND SOMETIMES IT IS NOT
JP Z,NEXTENEM
JP DIBHELI
DIBUJAHELI
PUSH BC
LD HL,SONIHELI
CALL SONIDOPSG ;WE PLAY THE HELICOPTER NOISE
POP BC
LD DE,40*256+12 ;ALTO=40,ANCHO=12
CALL PUNETAZO ;WE CHECK IF IT GETS PUNCHED
JR NC,NOPEGAHELI ;IF THERE IS NO CARRY, THEN IT DOESN’T GET PUNCHED
LD (IX+9),5 ;WE SET THE TIME INTERVAL IT’S PULLED BACK
DEC (IX+6) ;WE REDUCE THE NUMBER OF HITS
LD A,(POSICION) ;WE TAKE THE CHARACTER’S DIRECTION
LD (IX+11),A ;WE ADD IT TO THE TABLE
|