If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Rescate en el Golfo (Amstrad CPC)

From The Cutting Room Floor
Jump to navigation Jump to search
This page contains changes which are not marked for translation.
Other languages:
English • ‎español • ‎русский • ‎한국어

Title Screen

Rescate en el Golfo

Developer: TRUE SOFT
Publisher: Opera Soft
Platform: Amstrad CPC
Released in ES: 1990


SourceIcon.png This game has uncompiled source code.


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