the cutting room mirror

ru

Спасение у залива!

Фрагмент исходного кода#

Немного кода и комментариев на европейском испанском спрятали в игре. Всё это можно увидеть с помощью шестнадцатеричного редактора по адресу FBA7 на стороне А внутри образа .cdt.

Комментарии описывают процесс рисования персонажей, изменения их позиций, проверяния на присутствие объектов, проверяния на урон нанесённый персонажам, и даже перенесения деда вертолётом!

Оригинал

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

(Source: Translated by Gogoat.)