the cutting room mirror

Rescate en el Golfo (Amstrad CPC)

It's a Rescue in the Gulf!

Source Code Fragment#

Some code was left in the game, but with loads of comments in European Spanish. This can be seen with a hex editor at address FBA7 in Side A of the .cdt dump of the game.

The comments describe drawing characters, changing their position, checking if objects are present or not present, checking if characters are wounded, and even moving an uncle by helicopter!

Original

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

Translation

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.)