the cutting room mirror

ko

걸프 만에서의 구조!

소스 코드 조각#

게임에 일부 코드가 남아있지만, 유럽계 스페인어로 많은 코멘트를 달아놨다. 이것은 게임의 .cdt 덤프의 A 면에 주소 FBA7에서 헥스 편집기로 볼 수 있다.

주석에는 캐릭터 그리기, 그 위치 변경, 오브젝트 존재 여부 확인, 캐릭터의 피해 확인, 그리고 헬리콥터로 삼촌의 이동까지도 설명한다!

원문

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) ;WE MAKE YOUR CHARACTER TO LOOSE ONE ENERGY POINT
    JP DIBUJAMORO
MRETRO
    DEC C
    DEC C
    LD (IX+1),C ;WE SAVE THE NEW X
    JR DIBUJAMORO ;WE DRAW THE TERRORIST
MNORETRO    LD (IX+8),1 ;WE CHANGE ITS POSITION
    JR DIBUJAMORO

MORODER 
    CALL CAJAPORDER ;WE CHECK WHETHER THERE IS ANY BOX ON THE LEFT OR NOT
    JR C,MNOAVAN ;IF THERE IS A CARRY YOU CAN’T MOVE ON

    LD L,1 ;WE ENTER THE POSITION FOR CHECKING
    PUSH BC ;WE SAVE THE COORDINATES
    CALL POSIBCHOQ ;WE CHECK IF IT COLLIDES WITH THE CHARACTER
    POP BC
    JR NC,MAVAN ;IF IT DOESN’T, WE MOVE ON
    LD A,(FASE)
    AND 11111110B
    CP  00000110B
    JP Z,DIBUJAMORO ;IF IT IS CROUCHED, IT DOESN’T LOOSE ENERGY
    LD HL,ENERGYOUT
    INC (HL) ; WE MAKE YOUR CHARACTER TO LOOSE ONE ENERGY POINT
    JR DIBUJAMORO
MAVAN
    INC C
    INC C
    LD (IX+1),C
    JR DIBUJAMORO
MNOAVAN LD (IX+8),0 ;WE CHANGE ITS POSITION
    JR DIBUJAMORO

MORODISPA   DEC (IX+10) ; WE REDUCE THE TIME INTERVAL IT IS SHOOTING
    JP NZ,DIBMORO
    LD (IX+5),0 ;IF THE SHOOT HAS ENDED, WE SET IT TO WALKING
    LD A,B
    SUB 8
    LD B,A ;WE FIX THE Y
    LD (IX+2),A ;WE SAVE IT
    JP NODISPMORO

MOROATRAS
    DEC (IX+9) ;WE REDUCE THE TIME INTERVAL IT IS GOING BACKWARDS
    LD A,(IX+11) ;WE TAKE THE POSITION FOR WHICH IT IS GOING BACKWARDS
    OR A
    JR Z,MATRASDER ;IF IT IS 0, IT IS ACTUALLY GOING TO THE LEFT
MATRASIZQ
    DEC C
    DEC C
    CALL CAJAPORIZQ ; WE CHECK WHETHER THERE IS ANY BOX ON THE LEFT OR NOT
    JR C,DIBMORO ;IF THERE IS A CARRY IT CANNOT RECOIL
    DEC C
    DEC C
    LD (IX+1),C ;WE SAVE THE NEW X
    JP DIBMORO
MATRASDER   
    INC C
    INC C
    CALL CAJAPORDER
    JR C,DIBMORO
    INC C
    INC C
    LD (IX+1),C ;WE SAVE THE NEW X
    JP DIBMORO
    
MOROPARPA   DEC (IX+7) ;WE REDUCE THE BLINKING TIME INTERVAL
    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 DIBMORO


;WE DRAW THE MORON
DIBUJAMORO
    LD DE,40*256+12 ;ALTO=40,ANCHO=12
    CALL PUNETAZO ;WE CHECK IF IT GETS PUNCHED
    JR NC,NOPEGAMOR ;IF THERE IS NO CARRY, IT DOESN’T GET PUNCHED
    CALL ALEA
    AND 11B
    ADD 5
    LD (IX+9),A ;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 IN THE ENEMY’S TABLE
NOPEGAMOR
    LD A,C ;WE TAKE THE X TO CHECK THAT IT DOESN’T MOVE OUT OF THE SCREEN
    CP 60 ;SI X<60 WE DISCONECT THE MORON
    JP C,DESCMORO
    CP 184 ;SI X>183 WE DISCONECT THE MORON
    JP NC,DESCMORO
    LD A,(IX+5) ;WE TAKE THE ANIMATION’S PHASE
    INC A ;WE INCREMENT IT
    CP 4 ;WE CHECK IF IT IS THE LAST ONE
    JR NZ,MNEXTFAS
    XOR A

MNEXTFAS    LD (IX+5),A ;IF IT IS ACTUALLY THE LAST ONE, WE SET IT TO 0
DIBMORO
    LD A,(IX+8) ;WE TAKE THE POSITION
    LD (INVERT+1),A 
    LD A,(IX+5) ;WE TAKE THE ANIMATION’S PHASE
    LD HL,TABMORO ;WE ADD IT TO THE MORON’S TABLE
    CALL DIBUSPRITE ;WE DRAW IT
    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.)