First commit 16/12/1996
This commit is contained in:
		
							
								
								
									
										991
									
								
								DYNA_JGD.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										991
									
								
								DYNA_JGD.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,991 @@
 | 
				
			|||||||
 | 
					#include <dos.h>
 | 
				
			||||||
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					#include <conio.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <alloc.h>
 | 
				
			||||||
 | 
					#include "Dyna_tbl.h"
 | 
				
			||||||
 | 
					#include "..\libs\int_key\int_key.h"
 | 
				
			||||||
 | 
					#include "..\modex\modex.h"
 | 
				
			||||||
 | 
					#include "..\modex\c_utils.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BORRAR    0
 | 
				
			||||||
 | 
					#define REescribe 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CTE_SALTO    80
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern char prt_tbl[13+1][21+1];
 | 
				
			||||||
 | 
					extern char prt_tbl2[13+1][21+1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C" void  SET_VECTORES(volatile char *);
 | 
				
			||||||
 | 
					extern "C" void  UNSET_VECTORES(void);
 | 
				
			||||||
 | 
					void limpia_teclado(void);
 | 
				
			||||||
 | 
					int RellanaConcursantes(void);
 | 
				
			||||||
 | 
					void ProcesaMovimientos(int Page);
 | 
				
			||||||
 | 
					void EscribeObjetos( int Accion, int Page );
 | 
				
			||||||
 | 
					void LiberaConcursantes(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Establece preferencias por defecto
 | 
				
			||||||
 | 
					PREFERENCIAS Pref = { POS_BOSQUE, 4,
 | 
				
			||||||
 | 
					                      {
 | 
				
			||||||
 | 
					                       { t_d,         t_g,       t_r,      t_f,   t_tab },
 | 
				
			||||||
 | 
					                       { t_4n,       t_6n,      t_8n,     t_2n,   t_0n  },
 | 
				
			||||||
 | 
					                       { t_d,         t_g,       t_r,      t_f     , t_tab },
 | 
				
			||||||
 | 
					                       { t_izquierda, t_derecha, t_arriba, t_abajo , t_0n  }
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					                       { t_d,         t_g,       t_r,      t_f     },
 | 
				
			||||||
 | 
					                       { t_d,         t_g,       t_r,      t_f     },
 | 
				
			||||||
 | 
					                       { t_d,         t_g,       t_r,      t_f     },
 | 
				
			||||||
 | 
					                       { t_d,         t_g,       t_r,      t_f     },
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					                      }
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volatile char mapa_teclado[512];
 | 
				
			||||||
 | 
					int RellanaConcursantes(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct byte
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int PuedeMatar : 1 ;           // Informa sobre si puede matar por contacto
 | 
				
			||||||
 | 
					  int PuedeMorir : 1 ;           // Informa sobre si puede morir por contacto
 | 
				
			||||||
 | 
					  int PuedeVolar : 1 ;           // Informa sobre si puede atravezar los cuadros
 | 
				
			||||||
 | 
					  int Dispara    : 1 ;           // Informa si el concursante puede disparar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int CaputDelTo : 1 ;           // Informa si el concursante puede disparar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int Vidas      : 4 ;           // Vidas del concursante <= 4
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Esta estructura contendra todo lo que hay que procesar:
 | 
				
			||||||
 | 
					// (todo lo que se mueva)               jugadores, enemigos, bombas, teleports
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// NOTA: Las primeras estructuras deben corresponder a los HUMANOS
 | 
				
			||||||
 | 
					//       tantas como participantes hubiesen...
 | 
				
			||||||
 | 
					typedef struct concursantes
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char Tipo_de_concursante;       // Quien Juega
 | 
				
			||||||
 | 
					 char InfoConcursante;
 | 
				
			||||||
 | 
					 int  PosX, PosY;                // Posicion del concursante
 | 
				
			||||||
 | 
					 int  old_PosX[2], old_PosY[2];  // Posiciones del concursante en cada pagina
 | 
				
			||||||
 | 
					 char Direccion;                 // Direccion que toma el concursante
 | 
				
			||||||
 | 
					 char Velocidad;                 // Como de rapido se mueve
 | 
				
			||||||
 | 
					 char delay_time;                // Tiempo de retraso por el que va
 | 
				
			||||||
 | 
					 int  secuencia_animada;         // Secuencia de animaci<63>n por la que va
 | 
				
			||||||
 | 
					 char Disparos;                  // # de disparos que puede poner al mismo tiempo
 | 
				
			||||||
 | 
					 long DisparosP;                 // # de disparos ya puestos
 | 
				
			||||||
 | 
					 char Longitud;                  // Longitud del disparo en cuadros;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 struct byte Varios;
 | 
				
			||||||
 | 
					 struct concursantes *poseed;   // Due<75>o f<>sico de este objeto...
 | 
				
			||||||
 | 
					 struct concursantes *sig;      // Puntero al siguientes concursante
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} CONCURSANTES;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONCURSANTES *Concursantes;
 | 
				
			||||||
 | 
					CONCURSANTES *NuevoConcursante(struct concursantes *Concur);
 | 
				
			||||||
 | 
					//struct concursante *NuevoConcursante(struct concursantes *Concur);
 | 
				
			||||||
 | 
					void GeneraFuego( CONCURSANTES *aux );
 | 
				
			||||||
 | 
					void GeneraXYaleatorio( int *X, int *Y );
 | 
				
			||||||
 | 
					void ColocaBomba( CONCURSANTES *concursante );
 | 
				
			||||||
 | 
					CONCURSANTES *EliminaConcursante(struct concursantes *Concur);
 | 
				
			||||||
 | 
					void CompruebaCoordenadas(char incX, char incY, CONCURSANTES *objeto, char *Objeto_Caput );
 | 
				
			||||||
 | 
					void MovimientoAutomatico( CONCURSANTES *aux, char *incY, char *incX, int Page );
 | 
				
			||||||
 | 
					void ColocaFuego( int PosX, int PosY, CONCURSANTES *aux );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int jklop = 0;
 | 
				
			||||||
 | 
					extern CallBIOSHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clock_t TiempoDeJuego, InicioDeJuego;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ComienzaJuego(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int Current_Page = 0, cifraTMP;
 | 
				
			||||||
 | 
					  long DTiempo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  limpia_teclado();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( RellanaConcursantes() == ERROR ) Error(0x30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  set_display_page( 1 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  CallBIOSHandler = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  InicioDeJuego = clock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while( mapa_teclado[t_esc] == 0 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					    // mostramos el reloj...
 | 
				
			||||||
 | 
					    TiempoDeJuego = clock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DTiempo = ( TiempoDeJuego - InicioDeJuego ) / CLK_TCK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // minutos
 | 
				
			||||||
 | 
					    cifraTMP = ( DTiempo / 60 );
 | 
				
			||||||
 | 
					    tdraw_bitmap ((char far *)( (Sprite[POS_NUMEROS].Sprite[0])+(long)16*18*( cifraTMP / 10 ) )
 | 
				
			||||||
 | 
					    , 28 + 16*0, 3, 16, 11);
 | 
				
			||||||
 | 
					    cifraTMP = ( cifraTMP - ( cifraTMP / 10 ) * 10 );
 | 
				
			||||||
 | 
					    tdraw_bitmap ((char far *)( (Sprite[POS_NUMEROS].Sprite[0])+(long)16*18*cifraTMP )
 | 
				
			||||||
 | 
					    , 28 + 16*1, 3, 16, 11);
 | 
				
			||||||
 | 
					    // minutos
 | 
				
			||||||
 | 
					    cifraTMP = ( DTiempo % 60 );
 | 
				
			||||||
 | 
					    tdraw_bitmap ((char far *)( (Sprite[POS_NUMEROS].Sprite[0])+(long)16*18*( cifraTMP / 10 ) )
 | 
				
			||||||
 | 
					    , 28 + 4 + 16*2, 3, 16, 11);
 | 
				
			||||||
 | 
					    cifraTMP = ( cifraTMP - ( cifraTMP / 10 ) * 10 );
 | 
				
			||||||
 | 
					    tdraw_bitmap ((char far *)( (Sprite[POS_NUMEROS].Sprite[0])+(long)16*18*( cifraTMP ) )
 | 
				
			||||||
 | 
					    , 28 + 4 + 16*3, 3, 16, 11);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( mapa_teclado[t_2] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        mapa_teclado[t_2] = 0;
 | 
				
			||||||
 | 
					        set_display_page (2);
 | 
				
			||||||
 | 
					        sleep(5);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( mapa_teclado[t_9] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					               Pref.Entorno+=9; mapa_teclado[t_9] = 0;
 | 
				
			||||||
 | 
					               if ( Pref.Entorno >= POS_BOSQUE + 3*9 )
 | 
				
			||||||
 | 
					                              Pref.Entorno = POS_BOSQUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( mapa_teclado[t_0] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					               InicializaJuego(); mapa_teclado[t_0] = 0;
 | 
				
			||||||
 | 
					               copy_page( 2, 1 );
 | 
				
			||||||
 | 
					               copy_page( 2, 0 );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    set_active_page (Current_Page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EscribeObjetos( BORRAR, Current_Page );
 | 
				
			||||||
 | 
					//    copy_page( 2, Current_Page );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ProcesaMovimientos( Current_Page );
 | 
				
			||||||
 | 
					    EscribeObjetos( REescribe, Current_Page );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    set_display_page (Current_Page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Current_Page = Current_Page ^ 0x01;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  LiberaConcursantes();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  EscribeObjetos                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Se encarga de escribir todos los objetos a la patalla:      *|
 | 
				
			||||||
 | 
					|*               a> se eliminan todos los objetos animados de la pantalla   *|
 | 
				
			||||||
 | 
					|*               b> se dibujan en las nuevas posiciones                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: BORRA ------> a                                               *|
 | 
				
			||||||
 | 
					|*            REescribe --> b                                               *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void EscribeObjetos( int Accion, int Page )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 CONCURSANTES  *aux;
 | 
				
			||||||
 | 
					 int Ancho, Alto;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Empiezo por el principio
 | 
				
			||||||
 | 
					 aux = Concursantes;
 | 
				
			||||||
 | 
					 // Y mientras quede algo que procesar
 | 
				
			||||||
 | 
					 while( aux != NULL )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Obtengo las dimensiones
 | 
				
			||||||
 | 
					  Ancho = InfoSprites[ aux -> InfoConcursante ].Ancho;
 | 
				
			||||||
 | 
					  Alto  = InfoSprites[ aux -> InfoConcursante ].Alto;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( Accion == BORRAR )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    copy_bitmap (2, aux -> old_PosX[Page] + 12+InfoSprites[aux -> InfoConcursante].CorrX, aux -> old_PosY[Page] + 20+InfoSprites[aux -> InfoConcursante].CorrY, aux -> old_PosX[Page]+12+Ancho+InfoSprites[aux -> InfoConcursante].CorrX, aux -> old_PosY[Page]+20+Alto+InfoSprites[aux -> InfoConcursante].CorrY,
 | 
				
			||||||
 | 
					                             Page, aux -> old_PosX[Page] + 12+InfoSprites[aux -> InfoConcursante].CorrX, aux -> old_PosY[Page] + 20+InfoSprites[aux -> InfoConcursante].CorrY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//    copy_bitmap (2, aux -> old_PosX[Page] + 12, aux -> old_PosY[Page] + 20, aux -> old_PosX[Page]+12+Ancho, aux -> old_PosY[Page]+20+Alto,
 | 
				
			||||||
 | 
					//                             Page, aux -> old_PosX[Page] + 12, aux -> old_PosY[Page] + 20);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    // Amplio la secuencia animada
 | 
				
			||||||
 | 
					    // 0 Izq,  1 Der, 2 Arr, 3 Abj, Muerte
 | 
				
			||||||
 | 
					    tdraw_bitmap ((char far *)( (Sprite[aux -> Tipo_de_concursante].Sprite[ aux -> InfoConcursante == SPR_BAQUERO ? 0 : aux->Direccion ])+(long)Ancho*Alto* (long)( aux->secuencia_animada ) ), aux -> PosX+12+InfoSprites[aux -> InfoConcursante].CorrX, aux -> PosY+20+InfoSprites[aux -> InfoConcursante].CorrY, Ancho, Alto);
 | 
				
			||||||
 | 
					//    tdraw_bitmap ((char far *)( (Sprite[aux -> Tipo_de_concursante].Sprite[aux->Direccion])+(long)Ancho*Alto* (long)( aux->secuencia_animada ) ), aux -> PosX+12, aux -> PosY+20, Ancho, Alto);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux = aux -> sig;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  ProcesaMovimientos                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Genera los movimientos del HUMANO y maquina, despues        *|
 | 
				
			||||||
 | 
					|*              llama a la funci<63>n que los corrige...                       *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: Pagina de los movimientos                                     *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void ProcesaMovimientos(int Page)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 CONCURSANTES  *aux;
 | 
				
			||||||
 | 
					 char old_dir, enc;
 | 
				
			||||||
 | 
					 char incX, incY, objeto_caput;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Empiezo por el principio
 | 
				
			||||||
 | 
					 aux = Concursantes;
 | 
				
			||||||
 | 
					 // Y mientras quede algo que procesar
 | 
				
			||||||
 | 
					 while( aux != NULL )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  incX = incY = enc = objeto_caput = 0;
 | 
				
			||||||
 | 
					  old_dir = aux -> Direccion;
 | 
				
			||||||
 | 
					// SOLO SE PROCESA SI ESTA VIVO
 | 
				
			||||||
 | 
					 if ( aux -> Direccion != 4 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  switch( aux -> Tipo_de_concursante )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   // Los jugadores procesan sus movimientos segun el usuario
 | 
				
			||||||
 | 
					   // izq, der, arr, abj
 | 
				
			||||||
 | 
					   case POS_JUGADORa:
 | 
				
			||||||
 | 
					   case POS_JUGADORb:
 | 
				
			||||||
 | 
					       // Izquierda
 | 
				
			||||||
 | 
					       if ( mapa_teclado[Pref.Teclas[(aux -> Tipo_de_concursante)-POS_JUGADORa][0]] )
 | 
				
			||||||
 | 
					       {
 | 
				
			||||||
 | 
					                                                         incX = - (aux -> Velocidad);
 | 
				
			||||||
 | 
					                                                         aux -> Direccion = 0;
 | 
				
			||||||
 | 
					                                                         enc = 1;
 | 
				
			||||||
 | 
					       } else
 | 
				
			||||||
 | 
					       // Derecha
 | 
				
			||||||
 | 
					       if ( mapa_teclado[Pref.Teclas[(aux -> Tipo_de_concursante)-POS_JUGADORa][1]] )
 | 
				
			||||||
 | 
					       {
 | 
				
			||||||
 | 
					                                                         incX = (aux -> Velocidad);
 | 
				
			||||||
 | 
					                                                         aux -> Direccion = 1;
 | 
				
			||||||
 | 
					                                                         enc = 1;
 | 
				
			||||||
 | 
					       } else
 | 
				
			||||||
 | 
					       // Arriba
 | 
				
			||||||
 | 
					       if ( mapa_teclado[Pref.Teclas[(aux -> Tipo_de_concursante)-POS_JUGADORa][2]] )
 | 
				
			||||||
 | 
					       {
 | 
				
			||||||
 | 
					                                                         incY = - (aux -> Velocidad);
 | 
				
			||||||
 | 
					                                                         aux -> Direccion = 2;
 | 
				
			||||||
 | 
					                                                         enc = 1;
 | 
				
			||||||
 | 
					       } else
 | 
				
			||||||
 | 
					       // Abajo
 | 
				
			||||||
 | 
					       if ( mapa_teclado[Pref.Teclas[(aux -> Tipo_de_concursante)-POS_JUGADORa][3]] )
 | 
				
			||||||
 | 
					       {
 | 
				
			||||||
 | 
					                                                         incY =  (aux -> Velocidad);
 | 
				
			||||||
 | 
					                                                         aux -> Direccion = 3;
 | 
				
			||||||
 | 
					                                                         enc = 1;
 | 
				
			||||||
 | 
					       } //else
 | 
				
			||||||
 | 
					       // Bomba
 | 
				
			||||||
 | 
					       if ( mapa_teclado[Pref.Teclas[(aux -> Tipo_de_concursante)-POS_JUGADORa][4]] )
 | 
				
			||||||
 | 
					       {
 | 
				
			||||||
 | 
					        // Si puede disparar y el n<> de disparos puestos es menor al que tiene
 | 
				
			||||||
 | 
					        if (  aux -> Varios.Dispara &&  aux -> DisparosP  < aux -> Disparos )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					                                                                  mapa_teclado[Pref.Teclas[(aux -> Tipo_de_concursante)-POS_JUGADORa][4]] = 0;
 | 
				
			||||||
 | 
					                                                                  ColocaBomba( aux );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					       }
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					   case POS_JUGADORd:
 | 
				
			||||||
 | 
					   case POS_JUGADORc:
 | 
				
			||||||
 | 
					       MovimientoAutomatico( aux, &incY, &incX, Page );
 | 
				
			||||||
 | 
					       enc = 1;
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					   // La bomba no se mueve ( A menos que se encuentre en una zona deslizante
 | 
				
			||||||
 | 
					   case POS_BOMBA:
 | 
				
			||||||
 | 
					        // Eliminamos la bomba
 | 
				
			||||||
 | 
					        if ( (clock() - (aux -> DisparosP))/CLK_TCK >= aux -> Varios.Vidas )
 | 
				
			||||||
 | 
					           objeto_caput = 1;
 | 
				
			||||||
 | 
					        enc = 1;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					   case POS_BAQUERO:
 | 
				
			||||||
 | 
					       MovimientoAutomatico( aux, &incY, &incX, Page );
 | 
				
			||||||
 | 
					       enc = 1;
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					   // El resto sigue un algoritmo de movimiento ( actualmente ninguno );
 | 
				
			||||||
 | 
					   default:
 | 
				
			||||||
 | 
					       MovimientoAutomatico( aux, &incY, &incX, Page );
 | 
				
			||||||
 | 
					       enc = 1;
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Procesa las coordenadas si no esta caput ( Direccion 4 )
 | 
				
			||||||
 | 
					  CompruebaCoordenadas( incX, incY, aux, &objeto_caput );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Cambia de secuencia animada si corresponde
 | 
				
			||||||
 | 
					 if ( enc )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Empieza el nuevo movimiento por por 0 si es distinto
 | 
				
			||||||
 | 
					  if ( aux -> Direccion != old_dir )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					            aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					            aux -> delay_time = 0;
 | 
				
			||||||
 | 
					  } else
 | 
				
			||||||
 | 
					  if ( (aux -> delay_time = aux -> delay_time + aux -> Velocidad) >= InfoSprites[ aux -> InfoConcursante ].PixelCambio )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    aux -> delay_time = 0;
 | 
				
			||||||
 | 
					    if ( (int)( aux -> secuencia_animada ) >= InfoSprites[ aux -> InfoConcursante ].Movimientos[ aux -> InfoConcursante == SPR_BAQUERO ? 0 : aux->Direccion] - 1 )
 | 
				
			||||||
 | 
					                                                                                        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        aux -> secuencia_animada = aux -> secuencia_animada + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 }else{
 | 
				
			||||||
 | 
					  if ( aux -> secuencia_animada >= (InfoSprites[ aux -> InfoConcursante ].Movimientos[4] - 1) )
 | 
				
			||||||
 | 
					             aux -> Varios.CaputDelTo = 1;
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  if ( (TiempoDeJuego/*clock()*/ - aux -> DisparosP)>>1 >= 1 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    aux -> DisparosP = TiempoDeJuego;//clock();
 | 
				
			||||||
 | 
					    aux -> secuencia_animada = aux -> secuencia_animada + 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Copia los movimientos a la pagina adecuada
 | 
				
			||||||
 | 
					  aux -> old_PosX[Page] = aux -> PosX;
 | 
				
			||||||
 | 
					  aux -> old_PosY[Page] = aux -> PosY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( objeto_caput )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   if ( aux -> Tipo_de_concursante == POS_BOMBA )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					         aux -> Varios.Vidas = 0;
 | 
				
			||||||
 | 
					         aux -> Varios.CaputDelTo = 1;
 | 
				
			||||||
 | 
					         GeneraFuego( aux );
 | 
				
			||||||
 | 
					   } else {
 | 
				
			||||||
 | 
					         aux -> Varios.Vidas = aux -> Varios.Vidas - 1;
 | 
				
			||||||
 | 
					         aux -> Direccion = 4; // Activamos la muerte
 | 
				
			||||||
 | 
					         aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					         aux -> DisparosP = TiempoDeJuego;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( aux -> Varios.CaputDelTo )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					      // Borramos al objeto de la pantalla
 | 
				
			||||||
 | 
					      incX = InfoSprites[ aux -> InfoConcursante ].Ancho;
 | 
				
			||||||
 | 
					      incY  = InfoSprites[ aux -> InfoConcursante ].Alto;
 | 
				
			||||||
 | 
					      if ( aux -> InfoConcursante == SPR_FUEGO )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         set_active_page (2);
 | 
				
			||||||
 | 
					         aux -> DisparosP = (Pref.Entorno+4);
 | 
				
			||||||
 | 
					         draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + /*incX * incY **/((aux -> DisparosP)<<8) ), aux -> PosX + 12 , aux -> PosY + 20, incX, incY );
 | 
				
			||||||
 | 
					         set_active_page (Page);
 | 
				
			||||||
 | 
					         draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + /*incX * incY **/((aux -> DisparosP)<<8) ), aux -> PosX + 12 , aux -> PosY + 20, incX, incY );
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      copy_bitmap (2, aux -> old_PosX[!Page] + 12+InfoSprites[aux -> InfoConcursante].CorrX, aux -> old_PosY[!Page] + 20+InfoSprites[aux -> InfoConcursante].CorrY, aux -> old_PosX[!Page]+12+incY+InfoSprites[aux -> InfoConcursante].CorrX, aux -> old_PosY[!Page]+20+incY+InfoSprites[aux -> InfoConcursante].CorrY,
 | 
				
			||||||
 | 
					                             !Page, aux -> old_PosX[!Page] + 12+InfoSprites[aux -> InfoConcursante].CorrX, aux -> old_PosY[!Page] + 20+InfoSprites[aux -> InfoConcursante].CorrY);
 | 
				
			||||||
 | 
					      prt_tbl[(aux -> PosY)/16][(aux -> PosX)/16] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if ( ( aux -> poseed ) != NULL )
 | 
				
			||||||
 | 
					            ( ( aux -> poseed ) -> DisparosP ) --;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    aux = EliminaConcursante( aux );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    aux = aux -> sig;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GeneraFuego( CONCURSANTES *concursante )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int x, y, inc;
 | 
				
			||||||
 | 
					  CONCURSANTES *aux;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  x = concursante -> PosX / 16;
 | 
				
			||||||
 | 
					  y = concursante -> PosY / 16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Scaneamos posibiliades hacia la izquierda
 | 
				
			||||||
 | 
					  for ( inc = 1; ( x - inc ) >= 0 && inc <= concursante -> Longitud; inc++ )
 | 
				
			||||||
 | 
					    if ( prt_tbl[y][x-inc] != 1 && prt_tbl[y][x-inc] !=  2 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                             ColocaFuego( (x-inc)*16, y*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y][x-inc] = 4;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					    // Si es una bomba <20><><EFBFBD> BOOM !!! ( la otra )
 | 
				
			||||||
 | 
					    if ( prt_tbl2[y][x-inc] == 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOh;
 | 
				
			||||||
 | 
					                             ColocaFuego( (x-inc)*16, y*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y][x-inc] = 4;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Scaneamos posibiliades hacia la Derecha
 | 
				
			||||||
 | 
					  for ( inc = 1; ( x + inc ) < 21 && inc <= concursante -> Longitud; inc++ )
 | 
				
			||||||
 | 
					    if ( prt_tbl[y][x+inc] != 1 && prt_tbl[y][x+inc] != 2 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOh;
 | 
				
			||||||
 | 
					                             ColocaFuego( (x+inc)*16, y*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y][x+inc] = 4;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					    // Si es una bomba <20><><EFBFBD> BOOM !!! ( la otra )
 | 
				
			||||||
 | 
					    if ( prt_tbl2[y][x+inc] == 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOh;
 | 
				
			||||||
 | 
					                             ColocaFuego( (x+inc)*16, y*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y][x+inc] = 4;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Scaneamos posibiliades hacia la arriba
 | 
				
			||||||
 | 
					  for ( inc = 1; ( y - inc ) >= 0 && inc <= concursante -> Longitud; inc++ )
 | 
				
			||||||
 | 
					    if ( prt_tbl[y-inc][x] != 1 && prt_tbl[y-inc][x] != 2 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOv;
 | 
				
			||||||
 | 
					                             ColocaFuego( x*16, (y-inc)*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y-inc][x] = 4;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					    // Si es una bomba <20><><EFBFBD> BOOM !!! ( la otra )
 | 
				
			||||||
 | 
					    if ( prt_tbl2[y-inc][x] == 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOv;
 | 
				
			||||||
 | 
					                             ColocaFuego( x*16, (y-inc)*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y-inc][x] = 4;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Scaneamos posibiliades hacia la abajo
 | 
				
			||||||
 | 
					  for ( inc = 1; ( y + inc ) < 13 && inc <= concursante -> Longitud; inc++ )
 | 
				
			||||||
 | 
					    if ( prt_tbl[y+inc][x] != 1 && prt_tbl[y+inc][x] != 2 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOv;
 | 
				
			||||||
 | 
					                             ColocaFuego( x*16, (y+inc)*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y+inc][x] = 4;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					    // Si es una bomba <20><><EFBFBD> BOOM !!! ( la otra )
 | 
				
			||||||
 | 
					    if ( prt_tbl2[y+inc][x] == 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					      aux -> Tipo_de_concursante = POS_FUEGOv;
 | 
				
			||||||
 | 
					                             ColocaFuego( x*16, (y+inc)*16, aux );
 | 
				
			||||||
 | 
					                             prt_tbl[y+inc][x] = 4;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ColocaFuego( int PosX, int PosY, CONCURSANTES *aux )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  aux -> InfoConcursante     = SPR_FUEGO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> PosX = PosX;       aux -> PosY = PosY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> old_PosX[0] = aux -> old_PosX[1] = PosX;
 | 
				
			||||||
 | 
					  aux -> old_PosY[0] = aux -> old_PosY[1] = PosY;
 | 
				
			||||||
 | 
					  aux -> Direccion  = 4;
 | 
				
			||||||
 | 
					                                 aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					  aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> poseed = NULL;
 | 
				
			||||||
 | 
					  aux -> DisparosP  = TiempoDeJuego;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MovimientoAutomatico( CONCURSANTES *aux, char *incY, char *incX, int Page )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Cambiamos de direccion
 | 
				
			||||||
 | 
					 if ( aux -> old_PosX[Page] == aux -> PosX && aux -> old_PosY[Page] == aux -> PosY )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  aux -> Direccion = (char)random_int( 4 );
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 switch( aux -> Direccion )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // izq, der, arr, abj
 | 
				
			||||||
 | 
					  case 0:
 | 
				
			||||||
 | 
					       *incX = -(aux -> Velocidad);
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					  case 1:
 | 
				
			||||||
 | 
					       *incX =  (aux -> Velocidad);
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					  case 2:
 | 
				
			||||||
 | 
					       *incY = -(aux -> Velocidad);
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					  case 3:
 | 
				
			||||||
 | 
					       *incY =  (aux -> Velocidad);
 | 
				
			||||||
 | 
					       break;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  CompruebaCoordenadas                                                    *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Comprueba que las coordenadas son correctas, en caso        *|
 | 
				
			||||||
 | 
					|*              contrario las corrige. Tambien procesa el caso de           *|
 | 
				
			||||||
 | 
					|*              encontrarse en una zona especial: teleport, flecha...       *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: Punteros a las Coordenadas X , Y                              *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void CompruebaCoordenadas( char incX, char incY, CONCURSANTES *objeto, char *Objeto_Caput )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int xV, yV, xS, yS, Tmp;
 | 
				
			||||||
 | 
					  // Este es el puntero donde estan los cuadros:
 | 
				
			||||||
 | 
					  //  prt_tbl[13][21];
 | 
				
			||||||
 | 
					  //
 | 
				
			||||||
 | 
					  //       1  ---> Cuadro indestructible / BOMBA
 | 
				
			||||||
 | 
					  //       2  ---> Cuadro destructible ( Se puede sobrevolar )
 | 
				
			||||||
 | 
					  //       3  ---> Objeto que puede matar al contacto
 | 
				
			||||||
 | 
					  //               ( Solo los jugadores pueden morir al contacto )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Compruebo que no este fuera de los bordes
 | 
				
			||||||
 | 
					  while ( (objeto->PosX) <     0   ) (objeto->PosX)++;
 | 
				
			||||||
 | 
					  while ( (objeto->PosX) > 16*20   ) (objeto->PosX)--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while ( (objeto->PosY) <     0   ) (objeto->PosY)++;
 | 
				
			||||||
 | 
					  while ( (objeto->PosY) > 16*12   ) (objeto->PosY)--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//   xV = (*x + incX)/16;            yV = (*y + incY)/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   // Es un movimiento en el eje X
 | 
				
			||||||
 | 
					   if ( incX != 0 )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					     xV  = ((objeto->PosX) + (incX < 0 ? 2 : 11 ) )/16;
 | 
				
			||||||
 | 
					                                     yV = ((objeto->PosY)+2)/16;
 | 
				
			||||||
 | 
					                                    Tmp = ((objeto->PosY)+11)/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     // Si no es un jugador ni una bomba ( Controlamos su c<>digo 3 )
 | 
				
			||||||
 | 
					      xS = xV; yS = yV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     if ( prt_tbl[yS][xS] == 4 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     if ( objeto -> Varios.PuedeMatar )
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					      prt_tbl[yV][xV] = 0;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     // Si estoy pisando un cuadro ocupado seguimos una estructura distinta
 | 
				
			||||||
 | 
					     if ( prt_tbl[yV][xV] == 1 ) //!= 0 )
 | 
				
			||||||
 | 
					       if ( incX < 0 ) xV --; else xV ++;
 | 
				
			||||||
 | 
					     else
 | 
				
			||||||
 | 
					       xV  = ((objeto->PosX) + (incX < 0 ? 2 : 11 ) + incX )/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     // Cuidadin que puede morir
 | 
				
			||||||
 | 
					//     if ( ( objeto -> InfoConcursante) == SPR_JUGADOR && ( objeto -> Varios.PuedeMorir ) && ( prt_tbl[yV][xV] == 3 || prt_tbl[Tmp][xV] == 3 ) )
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     if ( prt_tbl[yS][xS] == 4 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					     else
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					     if ( ( objeto -> InfoConcursante) == SPR_JUGADOR && ( objeto -> Varios.PuedeMorir ) && prt_tbl[yS][xS] == 3 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					     else
 | 
				
			||||||
 | 
					     if ( prt_tbl[yV][xV] == 0 && prt_tbl[Tmp][xV] == 0 || ( objeto -> Varios.PuedeVolar && prt_tbl[yV][xV] == 2 && prt_tbl[Tmp][xV] == 2 ) )
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					                                          (objeto->PosX) = (objeto->PosX) + incX;
 | 
				
			||||||
 | 
					                                          // Si no es un jugador ni una bomba ( Controlamos su c<>digo 3 )
 | 
				
			||||||
 | 
					                                          if ( objeto -> Varios.PuedeMatar )
 | 
				
			||||||
 | 
					                                           prt_tbl[yV][xV] = 3;
 | 
				
			||||||
 | 
					     } else {
 | 
				
			||||||
 | 
					                                          // Si no es un jugador ni una bomba ( Controlamos su c<>digo 3 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                          if ( objeto -> Varios.PuedeMatar )
 | 
				
			||||||
 | 
					                                           prt_tbl[yS][xS] = 3;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   }  else
 | 
				
			||||||
 | 
					   // Es un movimiento en el eje Y
 | 
				
			||||||
 | 
					   if ( incY != 0 )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					    yV  = ((objeto->PosY) + (incY < 0 ? 2 : 11 ) )/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    xV  = ((objeto->PosX)+2)/16;
 | 
				
			||||||
 | 
					    Tmp = ((objeto->PosX)+11)/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     // Si no es un jugador ni una bomba ( Controlamos su c<>digo 3 )
 | 
				
			||||||
 | 
					      xS = xV; yS = yV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     if ( prt_tbl[yS][xS] == 4 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     if ( objeto -> Varios.PuedeMatar )
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					      prt_tbl[yV][xV] = 0;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     // Si estoy pisando un cuadro ocupado seguimos una estructura distinta
 | 
				
			||||||
 | 
					     if ( prt_tbl[yV][xV] == 1 )//!= 0 )
 | 
				
			||||||
 | 
					       if ( incY < 0 ) yV --; else yV ++;
 | 
				
			||||||
 | 
					     else
 | 
				
			||||||
 | 
					       yV  = ((objeto->PosY) + (incY < 0 ? 2 : 11 ) + incY )/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     // Cuidadin que puede morir
 | 
				
			||||||
 | 
					//     if ( ( objeto -> InfoConcursante) == SPR_JUGADOR && ( objeto -> Varios.PuedeMorir ) && ( prt_tbl[yV][xV] == 3 || prt_tbl[yV][Tmp] == 3 ) )
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					     if ( prt_tbl[yS][xS] == 4 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					     else
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					     if ( ( objeto -> InfoConcursante) == SPR_JUGADOR && ( objeto -> Varios.PuedeMorir ) && prt_tbl[yS][xS] == 3 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    if ( prt_tbl[yV][xV] == 0 && prt_tbl[yV][Tmp] == 0 || ( objeto -> Varios.PuedeVolar && prt_tbl[yV][xV] == 2 && prt_tbl[yV][Tmp] == 2 )  )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					                                          (objeto->PosY) = (objeto->PosY) + incY;
 | 
				
			||||||
 | 
					                                          // Si no es un jugador ni una bomba ( Controlamos su c<>digo 3 )
 | 
				
			||||||
 | 
					                                          if ( objeto -> Varios.PuedeMatar )
 | 
				
			||||||
 | 
					                                           prt_tbl[yV][xV] = 3;
 | 
				
			||||||
 | 
					     } else {
 | 
				
			||||||
 | 
					                                          // Si no es un jugador ni una bomba ( Controlamos su c<>digo 3 )
 | 
				
			||||||
 | 
					                                          if ( objeto -> Varios.PuedeMatar )
 | 
				
			||||||
 | 
					                                           prt_tbl[yS][xS] = 3;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   } else {
 | 
				
			||||||
 | 
					   // No se mueve, pero puede estar tocandole algo que le mate
 | 
				
			||||||
 | 
					    xS = ((objeto->PosX)+2)/16;
 | 
				
			||||||
 | 
					    yS = ((objeto->PosY)+2)/16;
 | 
				
			||||||
 | 
					    if ( prt_tbl[yS][xS] == 4 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    if ( ( objeto -> InfoConcursante) == SPR_JUGADOR && ( objeto -> Varios.PuedeMorir ) && prt_tbl[yS][xS] == 3 )
 | 
				
			||||||
 | 
					        *Objeto_Caput = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   // Por que lado del que pisa esta ocupado         <20>
 | 
				
			||||||
 | 
					   //                            |                   <20>
 | 
				
			||||||
 | 
					   //  <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ           <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
 | 
				
			||||||
 | 
					   //  <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <<3C>        <20>   _   <20>
 | 
				
			||||||
 | 
					   //  <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ       <20><><EFBFBD>ij  |<7C>   <20>
 | 
				
			||||||
 | 
					   //  <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>           <20>       <20>
 | 
				
			||||||
 | 
					   //  <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ           <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					   //  <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
 | 
				
			||||||
 | 
					   //  <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ
 | 
				
			||||||
 | 
					   //  <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
 | 
				
			||||||
 | 
					   //  <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ
 | 
				
			||||||
 | 
					   //  <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
 | 
				
			||||||
 | 
					   //  <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ <20>Ŀ
 | 
				
			||||||
 | 
					   //  <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
 | 
				
			||||||
 | 
					   //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  limpia_teclado                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Limpia el buffer propio de teclado                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void limpia_teclado(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					        int n;
 | 
				
			||||||
 | 
					        for(n=0; n<256; n++)
 | 
				
			||||||
 | 
					                 mapa_teclado[n]=0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ColocaBomba( CONCURSANTES *concursante )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  CONCURSANTES *aux;
 | 
				
			||||||
 | 
					  int xV, yV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xV = (concursante -> PosX + 8)/16;
 | 
				
			||||||
 | 
					  yV = (concursante -> PosY + 8)/16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (aux = NuevoConcursante(concursante)) == NULL ) Error(-1);
 | 
				
			||||||
 | 
					  aux -> Varios.PuedeMatar = 1;  aux -> Varios.PuedeMorir = 1;
 | 
				
			||||||
 | 
					  aux -> Varios.PuedeVolar = 1;  aux -> Varios.Dispara    = 1;
 | 
				
			||||||
 | 
					  aux -> Varios.Vidas      = 5;  // Vida de la bomba == 5sg.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> Tipo_de_concursante = POS_BOMBA;
 | 
				
			||||||
 | 
					  aux -> InfoConcursante     = SPR_BOMBA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> PosX = xV*16;     aux -> PosY = yV*16;
 | 
				
			||||||
 | 
					  prt_tbl[yV][xV] = 1;     // Tipo 1 == indestructible
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> old_PosX[0] = aux -> old_PosX[1] = xV;
 | 
				
			||||||
 | 
					  aux -> old_PosY[0] = aux -> old_PosY[1] = yV;
 | 
				
			||||||
 | 
					  aux -> Direccion  = 0;
 | 
				
			||||||
 | 
					                                 aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					  aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> poseed = concursante;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> DisparosP  = clock();
 | 
				
			||||||
 | 
					                                 aux -> Longitud   = concursante -> Longitud;
 | 
				
			||||||
 | 
					  concursante -> DisparosP  = concursante -> DisparosP + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  RellenaConcursantes                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Se encarga de colocar y definir a los concursantes          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK       todo va bien                                         *|
 | 
				
			||||||
 | 
					|*            ERROR    algo va mal                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int RellanaConcursantes(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 CONCURSANTES *aux;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Jugador 1
 | 
				
			||||||
 | 
					  if ( (Concursantes = aux = NuevoConcursante(Concursantes)) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					  aux -> Varios.PuedeMatar = 0;  aux -> Varios.PuedeMorir = 1;
 | 
				
			||||||
 | 
					  aux -> Varios.PuedeVolar = 0;  aux -> Varios.Dispara    = 1;
 | 
				
			||||||
 | 
					  aux -> Varios.Vidas      = 1;
 | 
				
			||||||
 | 
					  aux -> Tipo_de_concursante = POS_JUGADORa;
 | 
				
			||||||
 | 
					  aux -> InfoConcursante     = SPR_JUGADOR ;
 | 
				
			||||||
 | 
					  aux -> PosX = 0;               aux -> PosY = 0;
 | 
				
			||||||
 | 
					  aux -> old_PosX[0] = aux -> old_PosX[1] = 0;
 | 
				
			||||||
 | 
					  aux -> old_PosY[0] = aux -> old_PosY[1] = 0;
 | 
				
			||||||
 | 
					  aux -> Direccion  = 2;         aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					  aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					  aux -> Disparos   =  5;         aux -> Longitud   = 3;
 | 
				
			||||||
 | 
					  aux -> DisparosP  = 0;
 | 
				
			||||||
 | 
					  aux -> poseed = NULL;
 | 
				
			||||||
 | 
					  aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Jugador 2
 | 
				
			||||||
 | 
					  if ( (aux = NuevoConcursante(Concursantes)) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					  aux -> Varios.PuedeMatar = 0;  aux -> Varios.PuedeMorir = 1;
 | 
				
			||||||
 | 
					  aux -> Varios.PuedeVolar = 0;  aux -> Varios.Dispara    = 1;
 | 
				
			||||||
 | 
					  aux -> Varios.Vidas      = 1;
 | 
				
			||||||
 | 
					  aux -> Tipo_de_concursante = POS_JUGADORb;
 | 
				
			||||||
 | 
					  aux -> InfoConcursante     = SPR_JUGADOR ;
 | 
				
			||||||
 | 
					  aux -> PosX = 320;               aux -> PosY = 192;
 | 
				
			||||||
 | 
					  aux -> old_PosX[0] = aux -> old_PosX[1] = 320;
 | 
				
			||||||
 | 
					  aux -> old_PosY[0] = aux -> old_PosY[1] = 192;
 | 
				
			||||||
 | 
					  aux -> Direccion  = 2;         aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					  aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					  aux -> Disparos   = 3;         aux -> Longitud   = 3;
 | 
				
			||||||
 | 
					  aux -> DisparosP  = 0;
 | 
				
			||||||
 | 
					  aux -> poseed = NULL;
 | 
				
			||||||
 | 
					  aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Jugador 3
 | 
				
			||||||
 | 
					  if ( Pref.Jugadores >= 3 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   if ( (aux = NuevoConcursante(Concursantes)) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					   aux -> Varios.PuedeMatar = 0;  aux -> Varios.PuedeMorir = 1;
 | 
				
			||||||
 | 
					   aux -> Varios.PuedeVolar = 0;  aux -> Varios.Dispara    = 1;
 | 
				
			||||||
 | 
					   aux -> Varios.Vidas      = 1;
 | 
				
			||||||
 | 
					   aux -> Tipo_de_concursante = POS_JUGADORc;
 | 
				
			||||||
 | 
					   aux -> InfoConcursante     = SPR_JUGADOR ;
 | 
				
			||||||
 | 
					   aux -> PosX = 320;               aux -> PosY = 0;
 | 
				
			||||||
 | 
					   aux -> old_PosX[0] = aux -> old_PosX[1] = 320;
 | 
				
			||||||
 | 
					   aux -> old_PosY[0] = aux -> old_PosY[1] =   0;
 | 
				
			||||||
 | 
					   aux -> Direccion  = 2;         aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					   aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					   aux -> Disparos   = 1;         aux -> Longitud   = 1;
 | 
				
			||||||
 | 
					   aux -> poseed = NULL;
 | 
				
			||||||
 | 
					   aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Jugador 4
 | 
				
			||||||
 | 
					  if ( Pref.Jugadores >= 4 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   if ( (aux = NuevoConcursante(Concursantes)) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					   aux -> Varios.PuedeMatar = 0;  aux -> Varios.PuedeMorir = 1;
 | 
				
			||||||
 | 
					   aux -> Varios.PuedeVolar = 0;  aux -> Varios.Dispara    = 1;
 | 
				
			||||||
 | 
					   aux -> Varios.Vidas      = 1;
 | 
				
			||||||
 | 
					   aux -> Tipo_de_concursante = POS_JUGADORd;
 | 
				
			||||||
 | 
					   aux -> InfoConcursante     = SPR_JUGADOR ;
 | 
				
			||||||
 | 
					   aux -> PosX =   0;             aux -> PosY = 192;
 | 
				
			||||||
 | 
					   aux -> old_PosX[0] = aux -> old_PosX[1] =   0;
 | 
				
			||||||
 | 
					   aux -> old_PosY[0] = aux -> old_PosY[1] = 192;
 | 
				
			||||||
 | 
					   aux -> Direccion  = 2;         aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					   aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					   aux -> Disparos   = 1;         aux -> Longitud   = 1;
 | 
				
			||||||
 | 
					   aux -> DisparosP  = 0;
 | 
				
			||||||
 | 
					   aux -> poseed = NULL;
 | 
				
			||||||
 | 
					   aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Vaquero
 | 
				
			||||||
 | 
					  if ( (aux = NuevoConcursante(Concursantes)) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					   aux -> Varios.PuedeMatar = 1;  aux -> Varios.PuedeMorir = 1;
 | 
				
			||||||
 | 
					   aux -> Varios.PuedeVolar = 0;  aux -> Varios.Dispara    = 0;
 | 
				
			||||||
 | 
					   aux -> Varios.Vidas      = 1;
 | 
				
			||||||
 | 
					   aux -> Tipo_de_concursante = POS_BAQUERO;
 | 
				
			||||||
 | 
					   aux -> InfoConcursante     = SPR_BAQUERO;
 | 
				
			||||||
 | 
					   GeneraXYaleatorio( &(aux -> PosX), &(aux -> PosY) );
 | 
				
			||||||
 | 
					   aux -> old_PosX[0] = aux -> old_PosX[1] =   0;
 | 
				
			||||||
 | 
					   aux -> old_PosY[0] = aux -> old_PosY[1] = 192;
 | 
				
			||||||
 | 
					   aux -> Direccion  = 2;         aux -> Velocidad  = 1;
 | 
				
			||||||
 | 
					   aux -> delay_time = 40;        aux -> secuencia_animada = 0;
 | 
				
			||||||
 | 
					   aux -> Disparos   = 1;         aux -> Longitud   = 1;
 | 
				
			||||||
 | 
					   aux -> DisparosP  = 0;
 | 
				
			||||||
 | 
					   aux -> poseed = NULL;
 | 
				
			||||||
 | 
					   aux -> Varios.CaputDelTo = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GeneraXYaleatorio( int *X, int *Y )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  do {
 | 
				
			||||||
 | 
					   *X = random_int( 17 ) + 2;
 | 
				
			||||||
 | 
					   *Y = random_int(  9 ) + 2;
 | 
				
			||||||
 | 
					  }while( prt_tbl[*Y][*X] == 1 );
 | 
				
			||||||
 | 
					  prt_tbl[*Y][*X]  =  0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  *X = *X * 16;     *Y = *Y * 16;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  LiberaConcursantes                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Elimina a todos los concursantes liberando la memoria       *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					 void LiberaConcursantes(void)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   CONCURSANTES *aux;
 | 
				
			||||||
 | 
					   aux = Concursantes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if ( Concursantes -> sig != NULL )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					                                   Concursantes = Concursantes -> sig;
 | 
				
			||||||
 | 
					                                   LiberaConcursantes();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   free( aux );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  EliminaConcursante                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Elimina al concursante que se le pasa como par<61>metro        *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: El puntero al elemento a eliminar                             *|
 | 
				
			||||||
 | 
					|*  Salidas:  Elemento siguiente en la lista                                *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					CONCURSANTES *EliminaConcursante(CONCURSANTES *Concur)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 CONCURSANTES *ant;
 | 
				
			||||||
 | 
					 CONCURSANTES *aux;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 ant = aux = Concursantes;
 | 
				
			||||||
 | 
					 // Quizas haya que eliminar al primer elemento
 | 
				
			||||||
 | 
					 if ( aux == Concur )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  Concursantes = aux -> sig;
 | 
				
			||||||
 | 
					  free ( Concur );
 | 
				
			||||||
 | 
					  return Concursantes;
 | 
				
			||||||
 | 
					 } else {
 | 
				
			||||||
 | 
					  while ( aux != Concur && aux != NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   ant = aux;
 | 
				
			||||||
 | 
					   aux = aux -> sig;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  if ( aux == NULL )
 | 
				
			||||||
 | 
					     return NULL;
 | 
				
			||||||
 | 
					  ant -> sig = Concur -> sig;
 | 
				
			||||||
 | 
					  free( Concur );
 | 
				
			||||||
 | 
					  return (ant -> sig);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  NuevoConcursante                                                        *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              A<>ade un nuevo concursante al final                         *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: El puntero base donde insertar (Busca solo el final)          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  direccion del concursante a<>adido                             *|
 | 
				
			||||||
 | 
					|*            NULL     algo va mal                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					CONCURSANTES *NuevoConcursante(CONCURSANTES *Concur)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 CONCURSANTES *aux, *Concursante;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( (aux = (CONCURSANTES *)malloc( sizeof(CONCURSANTES) ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                     return NULL;
 | 
				
			||||||
 | 
					 Concursante = Concur;
 | 
				
			||||||
 | 
					 aux -> sig = NULL;
 | 
				
			||||||
 | 
					 // Todavia no hay concursantes
 | 
				
			||||||
 | 
					 if ( Concursante == NULL )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   Concursante = aux;
 | 
				
			||||||
 | 
					 } else {
 | 
				
			||||||
 | 
					   while( Concursante -> sig != NULL )
 | 
				
			||||||
 | 
					                                        Concursante = Concursante -> sig;
 | 
				
			||||||
 | 
					   Concursante -> sig = aux;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 return aux;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										962
									
								
								DYNA_TBL.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										962
									
								
								DYNA_TBL.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,962 @@
 | 
				
			|||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  DYNA_TBL                                                                *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*                M<>dulo encargado de cargar los elementos del tablero y    *|
 | 
				
			||||||
 | 
					|*                enemigos del juegos. Tambi<62>n se encarga de generar el     *|
 | 
				
			||||||
 | 
					|*                tablero seg<65>n preferencias de usuario...                  *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                         Fecha:  17-07-96  00.08 / 01.34  *|
 | 
				
			||||||
 | 
					|*                                                 18-07-96  12.51 / 14.24  *|
 | 
				
			||||||
 | 
					|*                                                           15.10 /        *|
 | 
				
			||||||
 | 
					|*                                                 19-07-96                 *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					#include "..\libs\int_key\int_key.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <dos.h>
 | 
				
			||||||
 | 
					#include <alloc.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include "Dyna_tbl.h"
 | 
				
			||||||
 | 
					#include "..\modex\modex.h"
 | 
				
			||||||
 | 
					#include "..\modex\c_utils.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <conio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>
 | 
				
			||||||
 | 
					///<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>
 | 
				
			||||||
 | 
					//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>
 | 
				
			||||||
 | 
					#define KEYBOARDINTR    9
 | 
				
			||||||
 | 
					#define KEYBOARDPORT 0x60
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					    #define __CPPARGS ...
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    #define __CPPARGS
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					void interrupt (*BIOSKeyboardHandler)(__CPPARGS);
 | 
				
			||||||
 | 
					char      CallBIOSHandler = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//( int Flags, int CS, int IP, int AX, int BX, int CX, int DX, int SI, int DI, int DS, int ES, int BP );
 | 
				
			||||||
 | 
					void interrupt KeyboardHandler(__CPPARGS);
 | 
				
			||||||
 | 
					//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>
 | 
				
			||||||
 | 
					///<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>/<2F><>
 | 
				
			||||||
 | 
					//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>//<2F>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int NObjetos=0;                         //  # de objetos ya contenidos en Sprite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SPRITE *Sprite;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Esta informaci<63>n es constante y sirve para saber como tratar a los Sprite's
 | 
				
			||||||
 | 
					const DatosTipo InfoSprites[] = {
 | 
				
			||||||
 | 
					                                // 00 > Cuadros est<73>ticos 16x16 ( Power UPs )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x12, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10, 0x00, 0x00, 0x02,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 01 > Cuadros est<73>ticos 16x16 ( Unidades )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x01, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10, 0x00, 0x00, 0x02,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 02 > Cuadros est<73>ticos 16x16 ( Mapas )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x2D, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10, 0x00, 0x00, 0x02,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 03 > Cuadros est<73>ticos 16x18 ( Numeros )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x0A, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12, 0x00, 0x00, 0x02,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 04 > Anim. como Bomba, TelePort...   16x18
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x03, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12, 0x00, 0x00, 0x05,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 05 > Monstruos como Globo y Fantasma 16x18
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x03 },
 | 
				
			||||||
 | 
					                                { 0x03, 0x00, 0x00, 0x00, 0x06 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12, 0x00,   -4, 0x04,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 06 > Monstruos 4dir. Estrella...     16x18
 | 
				
			||||||
 | 
					                                0x05,
 | 
				
			||||||
 | 
					                                { 0x00, 0x03, 0x06, 0x09, 0x0C },
 | 
				
			||||||
 | 
					                                { 0x03, 0x03, 0x03, 0x03, 0x06 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12, 0x00, 0x00, 0x02,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 07 > Perfil de los Jugadores 23x23
 | 
				
			||||||
 | 
					                                0x05,
 | 
				
			||||||
 | 
					                                { 0x00, 0x03, 0x06, 0x09, 0x0C },
 | 
				
			||||||
 | 
					                                { 0x03, 0x03, 0x03, 0x03, 0x08 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x17, 0x17,  -3, -5,   0x03,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 08 > animaciones fuego vertical
 | 
				
			||||||
 | 
					                                0x05,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x06 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10,   0,  0,   0x03
 | 
				
			||||||
 | 
					                              };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char prt_tbl[13+1][21+1] =
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 00 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00 },
 | 
				
			||||||
 | 
					         { 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 00 },
 | 
				
			||||||
 | 
					         };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char prt_tbl2[13+1][21+1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char far *TmpBuffer;
 | 
				
			||||||
 | 
					void GetBitmap( char far *BitMapSRC, char far *TRG, int X, int Y, int Xw1, int Yw1, int Xw2 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int TECLAr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 printf( "\n> Inicializando ModoX" );
 | 
				
			||||||
 | 
					 printf( "\n> Jos<6F> David Guillen" );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 init_random ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( ( TmpBuffer = (char far *)farmalloc( sizeof( char ) * 320 * 200 ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                    return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Pido memoria para los elementos b<>sicos
 | 
				
			||||||
 | 
					 if ( InicializaElementosBasicos() != OK ) return ERROR;
 | 
				
			||||||
 | 
					 printf( "\nPreparado para comenzar...");
 | 
				
			||||||
 | 
					 getch();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if (set_vga_modex( Mode_360x240, 360, 240, 3) == 0) Error(0x00);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( MuestraMensajeCargando() != OK ) Error(0x10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  InicializaJuego();
 | 
				
			||||||
 | 
					  set_display_page( 0 );
 | 
				
			||||||
 | 
					  if ( CargaPaleta("images\\dyna_tbl.pcx") !=OK )             Error(0x11);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  copy_page( 2, 1 );
 | 
				
			||||||
 | 
					  copy_page( 2, 0 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 BIOSKeyboardHandler = getvect(KEYBOARDINTR);
 | 
				
			||||||
 | 
					 setvect(KEYBOARDINTR, KeyboardHandler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ComienzaJuego();
 | 
				
			||||||
 | 
					 setvect(KEYBOARDINTR, BIOSKeyboardHandler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 farfree( TmpBuffer );
 | 
				
			||||||
 | 
					 set_video_mode (3);
 | 
				
			||||||
 | 
					 LiberaMemoriaObjetos();
 | 
				
			||||||
 | 
					 printf( "\n>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" );
 | 
				
			||||||
 | 
					 printf( "\n>   Gracias a todos los que han echo posible este juego.  " );
 | 
				
			||||||
 | 
					 printf( "\n>         En especial a mi hermano Antonio.               " );
 | 
				
			||||||
 | 
					 printf( "\n> Jos<6F> David Guillen || _-<2D> FuTuRe ViSiOn <20>-_ || InfoMundo" );
 | 
				
			||||||
 | 
					 printf( "\n>_                                                        " );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 fflush( stdin );
 | 
				
			||||||
 | 
					 return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  CargaObjetosBasicos                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Carga los objetos Basicos del fichero Dyna_tbl.PCX          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int CargaObjetosBasicos( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 FILE *fp;
 | 
				
			||||||
 | 
					 int ancho, alto;
 | 
				
			||||||
 | 
					 int contador;
 | 
				
			||||||
 | 
					 unsigned char byte;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Abrimos el fichero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (fp = fopen("images\\dyna_tbl.pcx","rb")) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Saltamos la cabecera
 | 
				
			||||||
 | 
					  fseek( fp, 128, SEEK_SET );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for(alto=0; alto<200; alto++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for(ancho=0; ancho<320; )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      byte=getc(fp);
 | 
				
			||||||
 | 
					      if(byte<=0xC0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        byte = byte == 254 ? 0 : byte;
 | 
				
			||||||
 | 
					        ProcesaPuntoBasico( ancho, alto, byte );
 | 
				
			||||||
 | 
						ancho++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						contador=byte&0x3F; byte=getc(fp);
 | 
				
			||||||
 | 
					        byte = byte == 254 ? 0 : byte;
 | 
				
			||||||
 | 
						for(; contador>0; contador--)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					          ProcesaPuntoBasico( ancho, alto, byte );
 | 
				
			||||||
 | 
					          ancho++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fclose( fp );
 | 
				
			||||||
 | 
					  // Abrimos el fichero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (fp = fopen("images\\dyna_jgd.pcx","rb")) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Saltamos la cabecera
 | 
				
			||||||
 | 
					  fseek( fp, 128, SEEK_SET );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for(alto=0; alto<200; alto++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for(ancho=0; ancho<320; )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      byte=getc(fp);
 | 
				
			||||||
 | 
					      if(byte<=0xC0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        byte = byte == 254 ? 0 : byte;
 | 
				
			||||||
 | 
					        TmpBuffer[ancho + 320*alto] = byte;
 | 
				
			||||||
 | 
					//        ProcesaPuntoJugador( ancho, alto, byte );
 | 
				
			||||||
 | 
						ancho++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						contador=byte&0x3F; byte=getc(fp);
 | 
				
			||||||
 | 
					        byte = byte == 254 ? 0 : byte;
 | 
				
			||||||
 | 
						for(; contador>0; contador--)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					          TmpBuffer[ancho + 320*alto] = byte;
 | 
				
			||||||
 | 
					//          ProcesaPuntoJugador( ancho, alto, byte );
 | 
				
			||||||
 | 
					          ancho++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fclose(fp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ProcesaPuntoJugador( ancho, alto, byte );
 | 
				
			||||||
 | 
					  return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  ProcesaPuntoBasico                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              inserta la imagen en su lugar correspondiente               *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: x,y   coordenadas actuales del punto                          *|
 | 
				
			||||||
 | 
					|*            byte  color                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void ProcesaPuntoBasico( int x, int y, char color )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i, j, Xw, Yw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Globo 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_GLOBO ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_GLOBO ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 0 && y < 18 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_GLOBO].Sprite[0][( ( x - (Xw+1)*i ) + (Xw*y) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 0 && y < 18 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_GLOBO].Sprite[4][( ( x - (Xw+1)*i ) + (Xw*y) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Baquero 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_BAQUERO ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_BAQUERO ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 0 && y < 18 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_BAQUERO].Sprite[0][( ( x - (Xw+1)*(i+9) ) + (Xw*y) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 0  && y < 18 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_BAQUERO].Sprite[4][( ( x - (Xw+1)*(i+9) ) + (Xw*y) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Fantasma 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_GOSTH ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_GOSTH ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_GOSTH].Sprite[0][( ( x - (Xw+1)*i ) + (Xw*(y-19)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_GOSTH].Sprite[4][( ( x - (Xw+1)*i ) + (Xw*(y-19)) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Platano 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_PLATANO ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_PLATANO ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_PLATANO].Sprite[0][( ( x - (Xw+1)*(i+9) ) + (Xw*(y-19)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_PLATANO].Sprite[4][( ( x - (Xw+1)*(i+9) ) + (Xw*(y-19)) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda la Bomba 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_BOMBA ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_BOMBA ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 38 && y < 56 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_BOMBA].Sprite[0][( ( x - (Xw+1)*i) + (Xw*(y-38)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda el TelePort 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_TELEPORT ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_TELEPORT ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+3)) && x < (Xw + (Xw+1)*(i+3)) && y >= 38 && y < 56 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_TELEPORT].Sprite[0][( ( x - (Xw+1)*(i+3)) + (Xw*(y-38)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda los Numeros 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_NUMEROS ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_NUMEROS ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<10; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 76+19 && y < 94+19 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_NUMEROS].Sprite[0][( ( x - (Xw+1)*i) + (Xw*(y-(76+19))) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					//        set_point( x, y, color );
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda los PowerUps
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_POWERUP ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_POWERUP ].Alto;
 | 
				
			||||||
 | 
					    for ( j=0; j<2; j++ )
 | 
				
			||||||
 | 
					     for ( i=0; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 114+17*j && y < 130+17*j )
 | 
				
			||||||
 | 
					      {                                                           // -\/---< 16
 | 
				
			||||||
 | 
					        Sprite[POS_POWERUP].Sprite[0][( ( x - (Xw+1)*i) + (Xw*(y-(114+17*j))) ) + (Xw*Yw*(i+j*9))] = color;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda los Mapas
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_ELEM_MAPA ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_ELEM_MAPA ].Alto;
 | 
				
			||||||
 | 
					   for ( j=0; j<5; j++ )
 | 
				
			||||||
 | 
					     for ( i=0; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 114+17*j && y < 130+17*j )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        Sprite[POS_ELEM_MAPA].Sprite[0][( ( x - (Xw+1)*(i+9)) + (Xw*(y-(114+17*j))) ) + (Xw*Yw*(i+9*j))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda el fuego ( vertical y horizontal)
 | 
				
			||||||
 | 
					        if ( i == 5 && j >= 2 )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					                Sprite[POS_FUEGOv].Sprite[4][( ( x - (Xw+1)*(i+9)) + (Xw*(y-(114+17*j))) ) + (Xw*Yw*(j-2))] = color;
 | 
				
			||||||
 | 
					                Sprite[POS_FUEGOv].Sprite[4][( ( x - (Xw+1)*(i+9)) + (Xw*(y-(114+17*j))) ) + (Xw*Yw*( 5- (j-2) ))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Sprite[POS_FUEGOh].Sprite[4][( Xw*( x - (Xw+1)*(i+9)) + (/*Xw**/(y-(114+17*j))) ) + (Xw*Yw*(j-2))] = color;
 | 
				
			||||||
 | 
					                Sprite[POS_FUEGOh].Sprite[4][( Xw*( x - (Xw+1)*(i+9)) + (/*Xw**/(y-(114+17*j))) ) + (Xw*Yw*( 5- (j-2) ))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  ProcesaPuntoJugador                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              inserta la imagen en su lugar correspondiente               *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: x,y   coordenadas actuales del punto                          *|
 | 
				
			||||||
 | 
					|*            byte  color                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void ProcesaPuntoJugador( int x, int y, char color )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i, j, Xw, Yw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_JUGADOR ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_JUGADOR ].Alto;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 for ( j = 0; j < 4; j++ )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   for ( i = 0; i < 3; i++ )
 | 
				
			||||||
 | 
					     GetBitmap( TmpBuffer, (Sprite[POS_JUGADORa+j].Sprite[3] + Xw*Yw*i    ), (Xw+1)*i, (Yw+1)*2*j, Xw, Yw, 320 );
 | 
				
			||||||
 | 
					   for ( i = 3; i < 6; i++ )
 | 
				
			||||||
 | 
					     GetBitmap( TmpBuffer, (Sprite[POS_JUGADORa+j].Sprite[1] + Xw*Yw*(i-3)), (Xw+1)*i, (Yw+1)*2*j, Xw, Yw, 320 );
 | 
				
			||||||
 | 
					   for ( i = 6; i < 9; i++ )
 | 
				
			||||||
 | 
					     GetBitmap( TmpBuffer, (Sprite[POS_JUGADORa+j].Sprite[0] + Xw*Yw*(i-6)), (Xw+1)*i, (Yw+1)*2*j, Xw, Yw, 320 );
 | 
				
			||||||
 | 
					   i = 9;
 | 
				
			||||||
 | 
					     GetBitmap( TmpBuffer, (Sprite[POS_JUGADORa+j].Sprite[2] + Xw*Yw*(i-i)), (Xw+1)*i, (Yw+1)*2*j, Xw, Yw, 320 );
 | 
				
			||||||
 | 
					   for ( i = 0; i < 2;  i++ )
 | 
				
			||||||
 | 
					     GetBitmap( TmpBuffer, (Sprite[POS_JUGADORa+j].Sprite[2] + Xw*Yw*(i+1)), (Xw+1)*i, (Yw+1)*(j*2+1), Xw, Yw, 320 );
 | 
				
			||||||
 | 
					   for ( i = 2; i < 10; i++ )
 | 
				
			||||||
 | 
					     GetBitmap( TmpBuffer, (Sprite[POS_JUGADORa+j].Sprite[4] + Xw*Yw*(i-2)), (Xw+1)*i, (Yw+1)*(j*2+1), Xw, Yw, 320 );
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GetBitmap( char far *BitMapSRC, char far *TRG, int X, int Y, int Xw1, int Yw1, int Xw2 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int x, y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   for ( x = 0; x < Xw1; x++ )
 | 
				
			||||||
 | 
					    for ( y = 0; y < Yw1; y++ )
 | 
				
			||||||
 | 
					     *( TRG + x + y*Xw1 ) = *( BitMapSRC + X+x + (Y+y)*Xw2 );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  InicializaElementosBasicos                                              *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Pide memoria para los 9 elementos b<>sicos...                *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int InicializaElementosBasicos( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // Pedimos memoria base para 16 objetos
 | 
				
			||||||
 | 
					  if ( InsertaObjetosBase( 16 ) != OK ) return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Pide espacio para el BitMap del objeto, incluida animaci<63>n:
 | 
				
			||||||
 | 
					  if (
 | 
				
			||||||
 | 
					          // Jugador A
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_JUGADORa,   SPR_JUGADOR   ) != OK ||
 | 
				
			||||||
 | 
					          // Jugador B
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_JUGADORb,   SPR_JUGADOR   ) != OK ||
 | 
				
			||||||
 | 
					          // Jugador C
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_JUGADORc,   SPR_JUGADOR   ) != OK ||
 | 
				
			||||||
 | 
					          // Jugador D
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_JUGADORd,   SPR_JUGADOR   ) != OK ||
 | 
				
			||||||
 | 
					          // Numeros
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_NUMEROS,   SPR_NUMEROS   ) != OK ||
 | 
				
			||||||
 | 
					          // Elementos del Mapa
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_ELEM_MAPA, SPR_ELEM_MAPA ) != OK ||
 | 
				
			||||||
 | 
					          // Power Ups ( peque<75>os )
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_POWERUP,   SPR_POWERUP   ) != OK ||
 | 
				
			||||||
 | 
					          // Bomba
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_BOMBA,     SPR_BOMBA     ) != OK ||
 | 
				
			||||||
 | 
					          // TelePort
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_TELEPORT,  SPR_TELEPORT  ) != OK ||
 | 
				
			||||||
 | 
					          // Globo
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_GLOBO,     SPR_GLOBO     ) != OK ||
 | 
				
			||||||
 | 
					          // Fantasma
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_GOSTH,     SPR_GOSTH     ) != OK ||
 | 
				
			||||||
 | 
					          // Estrella
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_ESTRELLA,  SPR_ESTRELLA  ) != OK ||
 | 
				
			||||||
 | 
					          // Baquero
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_BAQUERO,   SPR_BAQUERO   ) != OK ||
 | 
				
			||||||
 | 
					          // Platano
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_PLATANO,   SPR_PLATANO   ) != OK ||
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Fuego Vertical
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_FUEGOv,    SPR_FUEGO     ) != OK ||
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Fuego Horizontal
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_FUEGOh,    SPR_FUEGO     ) != OK
 | 
				
			||||||
 | 
					     )    return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  InsertaObjetosBase                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Pide memoria para las estructuras de soporte de SPRITE      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: Estructuras de SPRITE a insertar                              *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int InsertaObjetosBase( int Objetos )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // Si no hay ningun elemento, solo pido los reclamados
 | 
				
			||||||
 | 
					  if ( Sprite == NULL )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if ( (Sprite = (SPRITE *)calloc( Objetos, sizeof(SPRITE) )) == NULL )
 | 
				
			||||||
 | 
					                                                                        return ERROR;
 | 
				
			||||||
 | 
					    NObjetos = Objetos;
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NObjetos += Objetos;
 | 
				
			||||||
 | 
					    if ( (Sprite = (SPRITE *)realloc( Sprite, sizeof(SPRITE)*NObjetos ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                                return NULL;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  MemoriaBitmap                                                           *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Libera la memoria asignada para los objetos                 *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int MemoriaBitmap( int Pos, int TipoSprite )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Rango no valido
 | 
				
			||||||
 | 
					 if ( Pos >= NObjetos )
 | 
				
			||||||
 | 
					                        return ERROR;
 | 
				
			||||||
 | 
					 printf("\n%2d %2d >>", Pos, TipoSprite);
 | 
				
			||||||
 | 
					 // El sprite que ocupa esa posici<63>n esta ocupado
 | 
				
			||||||
 | 
					 if ( Sprite[Pos].Sprite[0] == NULL )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Por cada direccion, miro cuantos sprites le corresponden.
 | 
				
			||||||
 | 
					   for ( i = 0; i < InfoSprites[TipoSprite].NDirecciones - 1 && i < 4; i++)
 | 
				
			||||||
 | 
					   if ( InfoSprites[TipoSprite].Movimientos[i] != 0 )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					    printf( "%ld  --" , (long)(sizeof(char)*InfoSprites[TipoSprite].Movimientos[i]*InfoSprites[TipoSprite].Ancho*InfoSprites[TipoSprite].Alto));
 | 
				
			||||||
 | 
					             if ( ( Sprite[Pos].Sprite[i] = (char far *)farmalloc( sizeof(char)*InfoSprites[TipoSprite].Movimientos[i]*InfoSprites[TipoSprite].Ancho*InfoSprites[TipoSprite].Alto ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                                                                                                                                    return ERROR;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   // La muerte siempre esta en el punto 5
 | 
				
			||||||
 | 
					   if ( InfoSprites[TipoSprite].Movimientos[4] != 0 )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      printf( " * %ld *" , (long)(sizeof(char)*InfoSprites[TipoSprite].Movimientos[4]*InfoSprites[TipoSprite].Ancho*InfoSprites[TipoSprite].Alto));
 | 
				
			||||||
 | 
					      if ( ( Sprite[Pos].Sprite[4] = (char  far*)farmalloc( sizeof(char)*InfoSprites[TipoSprite].Movimientos[4]*InfoSprites[TipoSprite].Ancho*InfoSprites[TipoSprite].Alto ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                                                                                                                         return ERROR;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 } else return ERROR;
 | 
				
			||||||
 | 
					 return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  LiberaMemoriaObjetos                                                    *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Libera la memoria asignada para los objetos                 *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void LiberaMemoriaObjetos(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int Objeto, DirObjeto;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Este proceso empieza desde los mas enraizados punteros hacia afuera
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Recorre cada objeto de la estructura para eliminar su doble puntero
 | 
				
			||||||
 | 
					 for ( Objeto=0; Objeto < NObjetos; Objeto++ )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   // Recorro cada direcci<63>n del objeto
 | 
				
			||||||
 | 
					   for ( DirObjeto=0; DirObjeto <  InfoSprites[Sprite[Objeto].Tipo].NDirecciones; DirObjeto++ )
 | 
				
			||||||
 | 
					        farfree( Sprite[Objeto].Sprite[DirObjeto] );
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Ya podemos eliminar la estructura.
 | 
				
			||||||
 | 
					 free ( Sprite );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  CargaPaleta                                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Carga la paleta con los colores por defecto                 *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: achivo PCX de donde cargar la paleta                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int CargaPaleta(char *file )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int index;
 | 
				
			||||||
 | 
					 FILE *fp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( (fp=fopen( file, "rb" ) ) == NULL )
 | 
				
			||||||
 | 
					                                                  return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( fseek( fp, -768L, SEEK_END ) == 0 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					    for (index=0; index<256; index++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    // get the red component
 | 
				
			||||||
 | 
					    // get the green component
 | 
				
			||||||
 | 
					    // get the blue component
 | 
				
			||||||
 | 
					    // set components
 | 
				
			||||||
 | 
					    set_dac_register ( index, (getc(fp) >> 2), (getc(fp) >> 2), (getc(fp) >> 2) );
 | 
				
			||||||
 | 
					    } // end for index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 fclose( fp );
 | 
				
			||||||
 | 
					 return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  InicializaJuego                                                         *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Inicializa el tablero de juego segun se especifique en      *|
 | 
				
			||||||
 | 
					|*              puntero de tablero.                                         *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void InicializaJuego(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int j, i;
 | 
				
			||||||
 | 
					 int Xw, Yw;
 | 
				
			||||||
 | 
					 int Elecc = 0;
 | 
				
			||||||
 | 
					 static char vex = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 set_active_page(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Copiamos el tablero ( solo los cuadros indestructibles )
 | 
				
			||||||
 | 
					for ( j = 0; j<13; j++)
 | 
				
			||||||
 | 
					 for ( i = 0; i<21; i++)
 | 
				
			||||||
 | 
					  prt_tbl2[j][i] = prt_tbl[j][i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 1<> Relleno el suelo
 | 
				
			||||||
 | 
					 Xw = InfoSprites[SPR_ELEM_MAPA].Ancho;
 | 
				
			||||||
 | 
					 Yw = InfoSprites[SPR_ELEM_MAPA].Alto;
 | 
				
			||||||
 | 
					 for( j = 0; j < 350; j+=16 )
 | 
				
			||||||
 | 
					  for ( i = 0; i < 230; i+=16 )
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), j, i, Xw, Yw );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 2<> Pongo el marco al tablero
 | 
				
			||||||
 | 
					 MuestraImagen( "images\\dyna_fnd.pcx", 2, 255 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 3<> Coloco los cuadros indestructibles
 | 
				
			||||||
 | 
					 for ( i = 0; i < 21; i++ )
 | 
				
			||||||
 | 
					  for ( j = 0; j < 13; j++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   if ( prt_tbl[j][i] == 1 )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      tdraw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+Elecc) ), 12+i*16, 20+j*16, Xw, Yw );
 | 
				
			||||||
 | 
					      Elecc = random_int(2);
 | 
				
			||||||
 | 
					   } else
 | 
				
			||||||
 | 
					      prt_tbl[j][i] = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 4<> Coloco los cuadros destructibles
 | 
				
			||||||
 | 
					 //  Uno los dos intentos, para reforzar el n<> de arboles que aparecen
 | 
				
			||||||
 | 
					 //     >>>>>>>> 1<> intento del algoritmo que soporta 4
 | 
				
			||||||
 | 
					if ( vex != 0 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 for ( i = 0; i<21*13; i++)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					      Elecc = random_int(2);
 | 
				
			||||||
 | 
					      j = random_int(21*13);
 | 
				
			||||||
 | 
					      if ( prt_tbl[j/21][j%21] == 0 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					            tdraw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+2+Elecc) ), 12+(j%21)*16, 20+(j/21)*16, Xw, Yw );
 | 
				
			||||||
 | 
					            prt_tbl[j/21][j%21] = 2;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 //     >>>>>>>> 2<> intento del algoritmo que soporta 4
 | 
				
			||||||
 | 
					 for ( i = 0; i < 21; i++ )
 | 
				
			||||||
 | 
					  for ( j = 0; j < 13; j++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					      Elecc = random_int(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if ( prt_tbl[j][i] == 0 && random_int(5)%2 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					            tdraw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+2+Elecc) ), 12+i*16, 20+j*16, Xw, Yw );
 | 
				
			||||||
 | 
					            prt_tbl[j][i] = 2;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  vex++; if ( vex == 5 ) vex = 0;
 | 
				
			||||||
 | 
					} else vex++;
 | 
				
			||||||
 | 
					  // Dejo respirar a los jugadores
 | 
				
			||||||
 | 
					  prt_tbl[ 0][ 0] = 0;   prt_tbl[ 0][ 1] = 0;  prt_tbl[ 1][ 0] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16*  1, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  1, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					  prt_tbl[ 0][12] = 0;   prt_tbl[ 1][12] = 0;  prt_tbl[ 0][11] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  1, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16* 11, Xw, Yw );
 | 
				
			||||||
 | 
					  prt_tbl[0][20] = 0;   prt_tbl[0][19] = 0;  prt_tbl[1][20] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 19, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16*  1, Xw, Yw );
 | 
				
			||||||
 | 
					  prt_tbl[12][20] = 0;   prt_tbl[11][20] = 0;  prt_tbl[12][19] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16* 11, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 19, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 1 cuadro indestructible
 | 
				
			||||||
 | 
					 // 2 cuadro destructible
 | 
				
			||||||
 | 
					 // A jugador A 1
 | 
				
			||||||
 | 
					 // B jugador B 2
 | 
				
			||||||
 | 
					 // C jugador C 3
 | 
				
			||||||
 | 
					 // D jugador D 4
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					for ( j = 0; j<13; j++)
 | 
				
			||||||
 | 
					 for ( i = 0; i<21; i++)
 | 
				
			||||||
 | 
					  prt_tbl[j][i] = prt_tbl2[j][i];
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  MuestraImagen                                                           *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Descomprime y copia a la pagina indicada un PCX             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: nombre de la imagen                                           *|
 | 
				
			||||||
 | 
					|*            pagina                                                        *|
 | 
				
			||||||
 | 
					|*            color_invisible ( -1 si ninguno )                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int MuestraImagen( char *file, int page, int col_Inv )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int curr_page;
 | 
				
			||||||
 | 
					  FILE *fp;
 | 
				
			||||||
 | 
					  int alto, ancho, contador;
 | 
				
			||||||
 | 
					  unsigned char byte;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (fp = fopen( file,"rb")) != NULL )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  curr_page = get_active_page();
 | 
				
			||||||
 | 
					  set_active_page(page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Saltamos la cabecera
 | 
				
			||||||
 | 
					  fseek( fp, 128, SEEK_SET );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for(alto=0; alto<240; alto++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for(ancho=0; ancho<360; )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      byte=getc(fp);
 | 
				
			||||||
 | 
					      if(byte<=0xC0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        if ( col_Inv < 0 || byte != col_Inv ) set_point (ancho, alto, byte);
 | 
				
			||||||
 | 
						ancho++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						contador=byte&0x3F; byte=getc(fp);
 | 
				
			||||||
 | 
						for(; contador>0; contador--)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					          if ( col_Inv < 0 || byte != col_Inv ) set_point (ancho, alto, byte);
 | 
				
			||||||
 | 
					          ancho++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  fclose(fp);
 | 
				
			||||||
 | 
					  } else return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  set_active_page(curr_page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  MuestraMensajeCargando                                                  *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Muestra el mensaje de cargando y lo que esta, cargando      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int MuestraMensajeCargando(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 if ( MuestraImagen( "images\\dyna_car.pcx", 1, -1 ) == ERROR ) Error(0x12);
 | 
				
			||||||
 | 
					 copy_page(1, 2);
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 85, 108, 112, 1, 81, 175 );
 | 
				
			||||||
 | 
					 if ( CargaPaleta( "images\\dyna_car.pcx" ) !=OK )             Error(0x11);
 | 
				
			||||||
 | 
					 copy_page(1, 0);
 | 
				
			||||||
 | 
					// if ( InicializaSonidos() != OK )      Error(0x20);
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 175, 108, 202, 0, 81, 85 );
 | 
				
			||||||
 | 
					 if ( CargaObjetosBasicos() != OK )    Error(0x12);
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 175, 108, 202, 0, 81, 128 );
 | 
				
			||||||
 | 
					// Inicializa mapa
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 175, 108, 202, 0, 81, 175 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return OK;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Error                                                                   *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Aborta anormalmente el programa, mostrando un mensaje de    *|
 | 
				
			||||||
 | 
					|*              de error.                                                   *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: Codigo del mensaje de error a mostrar                         *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void Error(int code)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 set_video_mode (3);
 | 
				
			||||||
 | 
					 LiberaMemoriaObjetos();
 | 
				
			||||||
 | 
					// UNSET_VECTORES();
 | 
				
			||||||
 | 
					 setvect(KEYBOARDINTR, BIOSKeyboardHandler);
 | 
				
			||||||
 | 
					 exit(code);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//( int Flags, int CS, int IP, int AX, int BX, int CX, int DX, int SI, int DI, int DS, int ES, int BP )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void interrupt KeyboardHandler(__CPPARGS)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 static char ekey = 0;
 | 
				
			||||||
 | 
					 unsigned char key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 key = inportb(KEYBOARDPORT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // { PROCESS THE KEYSTROKE HERE }
 | 
				
			||||||
 | 
					  if ( key != 224 ) // No teclas extendidas
 | 
				
			||||||
 | 
					    mapa_teclado[ (key & 0x7F) ] = !(key & 0x80);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//  TECLAr = key;
 | 
				
			||||||
 | 
					  // 7 bit == 1    tecla OFF      E    F
 | 
				
			||||||
 | 
					  // 7 bit == 0    tecla ON      0111 1111
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( CallBIOSHandler )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    // { Call the BIOS keyboard handler if the calling program wants us to }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // asm pushf end;
 | 
				
			||||||
 | 
					      BIOSKeyboardHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // { Otherwise just acknowledge the interrupt }
 | 
				
			||||||
 | 
					  } else outportb( 0x20, 0x20 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								DYNA_TBL.EXE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								DYNA_TBL.EXE
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										107
									
								
								DYNA_TBL.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								DYNA_TBL.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,107 @@
 | 
				
			|||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  DYNA_TBL                                                                *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:  (fichero de apoyo)                                        *|
 | 
				
			||||||
 | 
					|*                M<>dulo encargado de cargar los elementos del tablero y    *|
 | 
				
			||||||
 | 
					|*                enemigos del juegos. Tambi<62>n se encarga de generar el     *|
 | 
				
			||||||
 | 
					|*                tablero seg<65>n preferencias de usuario...                  *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ERROR   0
 | 
				
			||||||
 | 
					#define OK      1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Defino las posiciones dentro de Sprite que ocupan los distintos elementos
 | 
				
			||||||
 | 
					// y el tipo de Sprite del que se trata
 | 
				
			||||||
 | 
					#define POS_NUMEROS      0
 | 
				
			||||||
 | 
					#define POS_ELEM_MAPA    1
 | 
				
			||||||
 | 
					#define POS_POWERUP      2
 | 
				
			||||||
 | 
					#define POS_BOMBA        3
 | 
				
			||||||
 | 
					#define POS_TELEPORT     4
 | 
				
			||||||
 | 
					#define POS_GLOBO        5
 | 
				
			||||||
 | 
					#define POS_GOSTH        6
 | 
				
			||||||
 | 
					#define POS_ESTRELLA     7
 | 
				
			||||||
 | 
					#define POS_BAQUERO      8
 | 
				
			||||||
 | 
					#define POS_PLATANO      9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define POS_JUGADORa    10
 | 
				
			||||||
 | 
					#define POS_JUGADORb    11
 | 
				
			||||||
 | 
					#define POS_JUGADORc    12
 | 
				
			||||||
 | 
					#define POS_JUGADORd    13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define POS_FUEGOv      14
 | 
				
			||||||
 | 
					#define POS_FUEGOh      15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define POS_BOSQUE      18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SPR_NUMEROS      3
 | 
				
			||||||
 | 
					#define SPR_ELEM_MAPA    2
 | 
				
			||||||
 | 
					#define SPR_POWERUP      0
 | 
				
			||||||
 | 
					#define SPR_BOMBA        4
 | 
				
			||||||
 | 
					#define SPR_TELEPORT     4
 | 
				
			||||||
 | 
					#define SPR_GLOBO        5
 | 
				
			||||||
 | 
					#define SPR_GOSTH        5
 | 
				
			||||||
 | 
					#define SPR_ESTRELLA     6
 | 
				
			||||||
 | 
					#define SPR_BAQUERO      5
 | 
				
			||||||
 | 
					#define SPR_PLATANO      5
 | 
				
			||||||
 | 
					#define SPR_JUGADOR      7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SPR_FUEGO        8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Error(int code);
 | 
				
			||||||
 | 
					void ComienzaJuego(void);
 | 
				
			||||||
 | 
					void InicializaJuego(void);
 | 
				
			||||||
 | 
					int  CargaPaleta(char *file);
 | 
				
			||||||
 | 
					void LiberaMemoriaObjetos(void);
 | 
				
			||||||
 | 
					int  CargaObjetosBasicos( void );
 | 
				
			||||||
 | 
					int  MuestraMensajeCargando(void);
 | 
				
			||||||
 | 
					int  InsertaObjetosBase( int Objetos );
 | 
				
			||||||
 | 
					int  InicializaElementosBasicos( void );
 | 
				
			||||||
 | 
					int  MemoriaBitmap( int Pos, int TipoSprite );
 | 
				
			||||||
 | 
					void ProcesaPuntoBasico( int x, int y, char color );
 | 
				
			||||||
 | 
					void ProcesaPuntoJugador( int x, int y, char color );
 | 
				
			||||||
 | 
					int  MuestraImagen( char *file, int page, int col_Inv );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Estructura donde se guardaran las preferencias del usuario
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char Entorno;                          // Bosque / Hielo / ....
 | 
				
			||||||
 | 
					 char Jugadores;                        // M<>x. 4
 | 
				
			||||||
 | 
					 char Teclas[5][6];                     // Teclas de los Jugadores
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} PREFERENCIAS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Informe sobre los bitmap's
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char NDirecciones;                     // # de direcciones
 | 
				
			||||||
 | 
					                                        // Inicio del Despl a...
 | 
				
			||||||
 | 
					 char Inicios[5];                       // Izq, Der, Arr, Abj, Muerte
 | 
				
			||||||
 | 
					 char Movimientos[5];                   // Movimientos por cada direcci<63>n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 unsigned char Ancho, Alto;             // Dimensiones del objeto
 | 
				
			||||||
 | 
					 char CorrX, CorrY;
 | 
				
			||||||
 | 
					 char PixelCambio;
 | 
				
			||||||
 | 
					} DatosTipo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Estructura para guardar los Bitmap
 | 
				
			||||||
 | 
					typedef struct EnemigO
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char Tipo;                             // Cada tipo de enemigo tiene un codigo
 | 
				
			||||||
 | 
					                                        // de ajuste...
 | 
				
			||||||
 | 
					 char  far *Sprite[5];                  // 5 puteros por direccion + muerte
 | 
				
			||||||
 | 
					} SPRITE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern SPRITE *Sprite;
 | 
				
			||||||
 | 
					extern PREFERENCIAS Pref;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern const DatosTipo InfoSprites[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern char prt_tbl[13+1][21+1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C" void  SET_VECTORES(volatile char *);
 | 
				
			||||||
 | 
					extern "C" void  UNSET_VECTORES(void);
 | 
				
			||||||
 | 
					extern volatile char mapa_teclado[512];
 | 
				
			||||||
							
								
								
									
										757
									
								
								DYNA_TBL.JD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										757
									
								
								DYNA_TBL.JD
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,757 @@
 | 
				
			|||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  DYNA_TBL                                                                *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*                M<>dulo encargado de cargar los elementos del tablero y    *|
 | 
				
			||||||
 | 
					|*                enemigos del juegos. Tambi<62>n se encarga de generar el     *|
 | 
				
			||||||
 | 
					|*                tablero seg<65>n preferencias de usuario...                  *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                         Fecha:  17-07-96  00.08 / 01.34  *|
 | 
				
			||||||
 | 
					|*                                                 18-07-96  12.51 / 14.24  *|
 | 
				
			||||||
 | 
					|*                                                           15.10 /        *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <alloc.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include "..\modex\modex.h"
 | 
				
			||||||
 | 
					#include "..\modex\c_utils.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <conio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ERROR   0
 | 
				
			||||||
 | 
					#define OK      1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Defino las posiciones dentro de Sprite que ocupan los distintos elementos
 | 
				
			||||||
 | 
					// y el tipo de Sprite del que se trata
 | 
				
			||||||
 | 
					#define POS_NUMEROS      0
 | 
				
			||||||
 | 
					#define POS_ELEM_MAPA    1
 | 
				
			||||||
 | 
					#define POS_POWERUP      2
 | 
				
			||||||
 | 
					#define POS_BOMBA        3
 | 
				
			||||||
 | 
					#define POS_TELEPORT     4
 | 
				
			||||||
 | 
					#define POS_GLOBO        5
 | 
				
			||||||
 | 
					#define POS_GOSTH        6
 | 
				
			||||||
 | 
					#define POS_ESTRELLA     7
 | 
				
			||||||
 | 
					#define POS_BAQUERO      8
 | 
				
			||||||
 | 
					#define POS_PLATANO      9
 | 
				
			||||||
 | 
					#define POS_BOSQUE      18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SPR_NUMEROS      3
 | 
				
			||||||
 | 
					#define SPR_ELEM_MAPA    2
 | 
				
			||||||
 | 
					#define SPR_POWERUP      0
 | 
				
			||||||
 | 
					#define SPR_BOMBA        4
 | 
				
			||||||
 | 
					#define SPR_TELEPORT     4
 | 
				
			||||||
 | 
					#define SPR_GLOBO        5
 | 
				
			||||||
 | 
					#define SPR_GOSTH        5
 | 
				
			||||||
 | 
					#define SPR_ESTRELLA     6
 | 
				
			||||||
 | 
					#define SPR_BAQUERO      5
 | 
				
			||||||
 | 
					#define SPR_PLATANO      5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int  CargaPaleta(char *file);
 | 
				
			||||||
 | 
					void ProcesaPuntoBasico( int x, int y, char color );
 | 
				
			||||||
 | 
					int  MuestraImagen( char *file, int page, int col_Inv );
 | 
				
			||||||
 | 
					int  CargaObjetosBasicos( void );
 | 
				
			||||||
 | 
					int  InsertaObjetosBase( int Objetos );
 | 
				
			||||||
 | 
					int  InicializaElementosBasicos( void );
 | 
				
			||||||
 | 
					int  MemoriaBitmap( int Pos, int TipoSprite );
 | 
				
			||||||
 | 
					void LiberaMemoriaObjetos(void);
 | 
				
			||||||
 | 
					void InicializaJuego(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char Entorno;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} PREFERENCIAS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char NDirecciones;                     // # de direcciones
 | 
				
			||||||
 | 
					                                        // Inicio del Despl a...
 | 
				
			||||||
 | 
					 char Inicios[5];                       // Izq, Der, Arr, Abj, Muerte
 | 
				
			||||||
 | 
					 char Movimientos[5];                   // Movimientos por cada direcci<63>n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 unsigned char Ancho, Alto;             // Dimensiones del objeto
 | 
				
			||||||
 | 
					} DatosTipo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct EnemigO
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 char Tipo;                             // Cada tipo de enemigo tiene un codigo
 | 
				
			||||||
 | 
					                                        // de ajuste...
 | 
				
			||||||
 | 
					 char *Sprite[5];                       // 5 puteros por direccion + muerte
 | 
				
			||||||
 | 
					} SPRITE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SPRITE *Sprite;
 | 
				
			||||||
 | 
					int NObjetos=0;                         //  # de objetos ya contenidos en Sprite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Establece preferencias
 | 
				
			||||||
 | 
					PREFERENCIAS Pref = { POS_BOSQUE };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Esta informaci<63>n es constante y sirve para saber como tratar a los Sprite's
 | 
				
			||||||
 | 
					const DatosTipo InfoSprites[] = {
 | 
				
			||||||
 | 
					                                // 00 > Cuadros est<73>ticos 16x16 ( Power UPs )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x12, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 01 > Cuadros est<73>ticos 16x16 ( Unidades )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x01, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 02 > Cuadros est<73>ticos 16x16 ( Mapas )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x2D, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x10,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 03 > Cuadros est<73>ticos 16x18 ( Numeros )
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x0A, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 04 > Anim. como Bomba, TelePort...   16x18
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x00 },
 | 
				
			||||||
 | 
					                                { 0x03, 0x03, 0x03, 0x03, 0x03 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 05 > Monstruos como Globo y Fantasma 16x18
 | 
				
			||||||
 | 
					                                0x02,
 | 
				
			||||||
 | 
					                                { 0x00, 0x00, 0x00, 0x00, 0x03 },
 | 
				
			||||||
 | 
					                                { 0x03, 0x03, 0x03, 0x03, 0x06 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                // 06 > Monstruos 4dir. Estrella...     16x18
 | 
				
			||||||
 | 
					                                0x05,
 | 
				
			||||||
 | 
					                                { 0x00, 0x03, 0x06, 0x09, 0x0C },
 | 
				
			||||||
 | 
					                                { 0x03, 0x03, 0x03, 0x03, 0x06 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                0x10, 0x12,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char prt_tbl[13][21] =
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 | 
				
			||||||
 | 
					          { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
 | 
				
			||||||
 | 
					          { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
 | 
				
			||||||
 | 
					         };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Error(int code)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 set_video_mode (3);
 | 
				
			||||||
 | 
					 LiberaMemoriaObjetos();
 | 
				
			||||||
 | 
					 exit(code);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int MuestraMenu(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					return ERROR;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ComienzaJuego(void)
 | 
				
			||||||
 | 
					{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int MuestraMensajeCargando(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 if ( MuestraImagen( "images\\dyna_car.pcx", 1, -1 ) == ERROR ) Error(0x12);
 | 
				
			||||||
 | 
					 copy_page(1, 2);
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 85, 108, 112, 1, 81, 175 );
 | 
				
			||||||
 | 
					 if ( CargaPaleta( "images\\dyna_car.pcx" ) !=OK )             Error(0x11);
 | 
				
			||||||
 | 
					 copy_page(1, 0);
 | 
				
			||||||
 | 
					// if ( InicializaSonidos() != OK )      Error(0x20);
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 175, 108, 202, 0, 81, 85 );
 | 
				
			||||||
 | 
					 if ( CargaObjetosBasicos() != OK )    Error(0x12);
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 175, 108, 202, 0, 81, 128 );
 | 
				
			||||||
 | 
					// Inicializa mapa
 | 
				
			||||||
 | 
					 copy_bitmap ( 2, 81, 175, 108, 202, 0, 81, 175 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return OK;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 printf( "\n> Inicializando ModoX" );
 | 
				
			||||||
 | 
					 printf( "\n> Jos<6F> David Guillen" );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 init_random ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if (set_vga_modex( Mode_360x240, 360, 240, 3) == 0) Error(0x00);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( MuestraMensajeCargando() != OK ) Error(0x10);
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 while ( MuestraMenu() == OK )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					  InicializaJuego();
 | 
				
			||||||
 | 
					  set_display_page( 2 );
 | 
				
			||||||
 | 
					  if ( CargaPaleta("images\\dyna_tbl.pcx") !=OK )             Error(0x11);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while( getch()!=27 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   InicializaJuego();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  copy_page( 2, 1 );
 | 
				
			||||||
 | 
					  copy_page( 2, 0 );
 | 
				
			||||||
 | 
					  ComienzaJuego();
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 set_video_mode (3);
 | 
				
			||||||
 | 
					 LiberaMemoriaObjetos();
 | 
				
			||||||
 | 
					 printf( "\n>   Gracias a todos los que han echo posible este juego.  " );
 | 
				
			||||||
 | 
					 printf( "\n>         En especial a mi hermano Antonio.               " );
 | 
				
			||||||
 | 
					 printf( "\n> Jos<6F> David Guillen || _-<2D> FuTuRe ViSiOn <20>-_ || InfoMundo" );
 | 
				
			||||||
 | 
					 printf( "\n>_                                                        " );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 fflush( stdin );
 | 
				
			||||||
 | 
					 return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  CargaObjetosBasicos                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Carga los objetos Basicos del fichero Dyna_tbl.PCX          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int CargaObjetosBasicos( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 FILE *fp;
 | 
				
			||||||
 | 
					 int ancho, alto;
 | 
				
			||||||
 | 
					 int contador;
 | 
				
			||||||
 | 
					 unsigned char byte;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   // Pido memoria para los elementos b<>sicos
 | 
				
			||||||
 | 
					   if ( InicializaElementosBasicos() != OK ) return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Abrimos el fichero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (fp = fopen("images\\dyna_tbl.pcx","rb")) == NULL ) return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Saltamos la cabecera
 | 
				
			||||||
 | 
					  fseek( fp, 128, SEEK_SET );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for(alto=0; alto<200; alto++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for(ancho=0; ancho<320; )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      byte=getc(fp);
 | 
				
			||||||
 | 
					      if(byte<=0xC0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        byte = byte == 254 ? 0 : byte;
 | 
				
			||||||
 | 
					        ProcesaPuntoBasico( ancho, alto, byte );
 | 
				
			||||||
 | 
						ancho++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						contador=byte&0x3F; byte=getc(fp);
 | 
				
			||||||
 | 
					        byte = byte == 254 ? 0 : byte;
 | 
				
			||||||
 | 
						for(; contador>0; contador--)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					          ProcesaPuntoBasico( ancho, alto, byte );
 | 
				
			||||||
 | 
					          ancho++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  ProcesaPuntoBasico                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              inserta la imagen en su lugar correspondiente               *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: x,y   coordenadas actuales del punto                          *|
 | 
				
			||||||
 | 
					|*            byte  color                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void ProcesaPuntoBasico( int x, int y, char color )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i, j, Xw, Yw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Globo 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_GLOBO ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_GLOBO ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 0 && y < 18 )
 | 
				
			||||||
 | 
					        Sprite[POS_GLOBO].Sprite[0][( ( x - (Xw+1)*i ) + (Xw*y) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 0 && y < 18 )
 | 
				
			||||||
 | 
					        Sprite[POS_GLOBO].Sprite[4][( ( x - (Xw+1)*i ) + (Xw*y) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Fantasma 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_GOSTH ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_GOSTH ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					        Sprite[POS_GOSTH].Sprite[0][( ( x - (Xw+1)*i ) + (Xw*(y-19)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					        Sprite[POS_GOSTH].Sprite[4][( ( x - (Xw+1)*i ) + (Xw*(y-19)) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Baquero 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_BAQUERO ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_BAQUERO ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 0 && y < 18 )
 | 
				
			||||||
 | 
					        Sprite[POS_BAQUERO].Sprite[0][( ( x - (Xw+1)*(i+9) ) + (Xw*y) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 0  && y < 18 )
 | 
				
			||||||
 | 
					        Sprite[POS_BAQUERO].Sprite[4][( ( x - (Xw+1)*(i+9) ) + (Xw*y) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda al Platano 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_PLATANO ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_PLATANO ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					        Sprite[POS_PLATANO].Sprite[0][( ( x - (Xw+1)*(i+9) ) + (Xw*(y-19)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for ( i=3; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 19 && y < 37 )
 | 
				
			||||||
 | 
					        Sprite[POS_PLATANO].Sprite[4][( ( x - (Xw+1)*(i+9) ) + (Xw*(y-19)) ) + (Xw*Yw*(i-3))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda la Bomba 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_BOMBA ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_BOMBA ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 38 && y < 56 )
 | 
				
			||||||
 | 
					        Sprite[POS_BOMBA].Sprite[0][( ( x - (Xw+1)*i) + (Xw*(y-38)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda el TelePort 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_TELEPORT ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_TELEPORT ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<3; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+3)) && x < (Xw + (Xw+1)*(i+3)) && y >= 38 && y < 56 )
 | 
				
			||||||
 | 
					        Sprite[POS_TELEPORT].Sprite[0][( ( x - (Xw+1)*(i+3)) + (Xw*(y-38)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda los Numeros 16x18
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_NUMEROS ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_NUMEROS ].Alto;
 | 
				
			||||||
 | 
					    for ( i=0; i<10; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 76 && y < 94 )
 | 
				
			||||||
 | 
					        Sprite[POS_NUMEROS].Sprite[0][( ( x - (Xw+1)*i) + (Xw*(y-76)) ) + (Xw*Yw*i)] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda los PowerUps
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_POWERUP ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_POWERUP ].Alto;
 | 
				
			||||||
 | 
					    for ( j=0; j<2; j++ )
 | 
				
			||||||
 | 
					     for ( i=0; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*i) && x < (Xw + (Xw+1)*i) && y >= 114+17*j && y < 130+17*j )
 | 
				
			||||||
 | 
					        Sprite[POS_POWERUP].Sprite[0][( ( x - (Xw+1)*i) + (Xw*(y-(114+16*j))) ) + (Xw*Yw*(i+j*9))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  // Guarda los Mapas
 | 
				
			||||||
 | 
					    Xw = InfoSprites[ SPR_ELEM_MAPA ].Ancho;
 | 
				
			||||||
 | 
					    Yw = InfoSprites[ SPR_ELEM_MAPA ].Alto;
 | 
				
			||||||
 | 
					    for ( j=0; j<5; j++ )
 | 
				
			||||||
 | 
					     for ( i=0; i<9; i++ )
 | 
				
			||||||
 | 
					      if ( x >= (0 + (Xw+1)*(i+9)) && x < (Xw + (Xw+1)*(i+9)) && y >= 114+17*j && y < 130+17*j )
 | 
				
			||||||
 | 
					        Sprite[POS_ELEM_MAPA].Sprite[0][( ( x - (Xw+1)*(i+9)) + (Xw*(y-(114+17*j))) ) + (Xw*Yw*(i+9*j))] = color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  InicializaElementosBasicos                                              *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Pide memoria para los 9 elementos b<>sicos...                *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int InicializaElementosBasicos( void )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // Pedimos memoria base para
 | 
				
			||||||
 | 
					  if ( InsertaObjetosBase( 10) != OK ) return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Pide espacio para el BitMap del objeto, incluida animaci<63>n:
 | 
				
			||||||
 | 
					  if (
 | 
				
			||||||
 | 
					          // Numeros
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_NUMEROS,   SPR_NUMEROS   ) != OK ||
 | 
				
			||||||
 | 
					          // Elementos del Mapa
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_ELEM_MAPA, SPR_ELEM_MAPA ) != OK ||
 | 
				
			||||||
 | 
					          // Power Ups ( peque<75>os )
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_POWERUP,   SPR_POWERUP   ) != OK ||
 | 
				
			||||||
 | 
					          // Bomba
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_BOMBA,     SPR_BOMBA     ) != OK ||
 | 
				
			||||||
 | 
					          // TelePort
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_TELEPORT,  SPR_TELEPORT  ) != OK ||
 | 
				
			||||||
 | 
					          // Globo
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_GLOBO,     SPR_GLOBO     ) != OK ||
 | 
				
			||||||
 | 
					          // Fantasma
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_GOSTH,     SPR_GOSTH     ) != OK ||
 | 
				
			||||||
 | 
					          // Estrella
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_ESTRELLA,  SPR_ESTRELLA  ) != OK ||
 | 
				
			||||||
 | 
					          // Baquero
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_BAQUERO,   SPR_BAQUERO   ) != OK ||
 | 
				
			||||||
 | 
					          // Platano
 | 
				
			||||||
 | 
					          MemoriaBitmap( POS_PLATANO,   SPR_PLATANO   ) != OK
 | 
				
			||||||
 | 
					     )    return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  InsertaObjetosBase                                                      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Pide memoria para las estructuras de soporte de SPRITE      *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: Estructuras de SPRITE a insertar                              *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int InsertaObjetosBase( int Objetos )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // Si no hay ningun elemento, solo pido los reclamados
 | 
				
			||||||
 | 
					  if ( Sprite == NULL )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if ( (Sprite = (SPRITE *)calloc( Objetos, sizeof(SPRITE) )) == NULL )
 | 
				
			||||||
 | 
					                                                                        return ERROR;
 | 
				
			||||||
 | 
					    NObjetos = Objetos;
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NObjetos += Objetos;
 | 
				
			||||||
 | 
					    if ( (Sprite = (SPRITE *)realloc( Sprite, sizeof(SPRITE)*NObjetos ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                                return NULL;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  MemoriaBitmap                                                           *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Libera la memoria asignada para los objetos                 *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int MemoriaBitmap( int Pos, int TipoSprite )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Rango no valido
 | 
				
			||||||
 | 
					 if ( Pos >= NObjetos )
 | 
				
			||||||
 | 
					                        return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // El sprite que ocupa esa posici<63>n esta ocupado
 | 
				
			||||||
 | 
					 if ( Sprite[Pos].Sprite[0] == NULL )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Por cada direccion, miro cuantos sprites le corresponden.
 | 
				
			||||||
 | 
					   for ( i = 0; i < InfoSprites[TipoSprite].NDirecciones - 1 && i < 4; i++)
 | 
				
			||||||
 | 
					   if ( InfoSprites[TipoSprite].Movimientos[i] != 0 )
 | 
				
			||||||
 | 
					           if ( ( Sprite[Pos].Sprite[i] = (char *)malloc( sizeof(char)*InfoSprites[TipoSprite].Movimientos[i]*InfoSprites[TipoSprite].Ancho*InfoSprites[TipoSprite].Alto ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                                                                                                                                  return ERROR;
 | 
				
			||||||
 | 
					   // La muerte siempre esta en el punto 5
 | 
				
			||||||
 | 
					   if ( InfoSprites[TipoSprite].Movimientos[4] != 0 )
 | 
				
			||||||
 | 
					      if ( ( Sprite[Pos].Sprite[4] = (char *)malloc( sizeof(char)*InfoSprites[TipoSprite].Movimientos[4]*InfoSprites[TipoSprite].Ancho*InfoSprites[TipoSprite].Alto ) ) == NULL )
 | 
				
			||||||
 | 
					                                                                                                                                                                         return ERROR;
 | 
				
			||||||
 | 
					 } else return ERROR;
 | 
				
			||||||
 | 
					 return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  LiberaMemoriaObjetos                                                    *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Libera la memoria asignada para los objetos                 *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*  Salidas:  ( ninguna )                                                   *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void LiberaMemoriaObjetos(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int Objeto, DirObjeto;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Este proceso empieza desde los mas enraizados punteros hacia afuera
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Recorre cada objeto de la estructura para eliminar su doble puntero
 | 
				
			||||||
 | 
					 for ( Objeto=0; Objeto < NObjetos; Objeto++ )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   // Recorro cada direcci<63>n del objeto
 | 
				
			||||||
 | 
					   for ( DirObjeto=0; DirObjeto <  InfoSprites[Sprite[Objeto].Tipo].NDirecciones; DirObjeto++ )
 | 
				
			||||||
 | 
					        free( Sprite[Objeto].Sprite[DirObjeto] );
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Ya podemos eliminar la estructura.
 | 
				
			||||||
 | 
					 free ( Sprite );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  CargaPaleta                                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Carga la paleta con los colores por defecto                 *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: achivo PCX de donde cargar la paleta                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int CargaPaleta(char *file )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int index;
 | 
				
			||||||
 | 
					 FILE *fp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( (fp=fopen( file, "rb" ) ) == NULL )
 | 
				
			||||||
 | 
					                                                  return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( fseek( fp, -768L, SEEK_END ) == 0 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					    for (index=0; index<256; index++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    // get the red component
 | 
				
			||||||
 | 
					    // get the green component
 | 
				
			||||||
 | 
					    // get the blue component
 | 
				
			||||||
 | 
					    // set components
 | 
				
			||||||
 | 
					    set_dac_register ( index, (getc(fp) >> 2), (getc(fp) >> 2), (getc(fp) >> 2) );
 | 
				
			||||||
 | 
					    } // end for index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 fclose( fp );
 | 
				
			||||||
 | 
					 return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  InicializaJuego                                                         *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Inicializa el tablero de juego segun se especifique en      *|
 | 
				
			||||||
 | 
					|*              puntero de tablero.                                         *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: (ninguna)                                                     *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					void InicializaJuego(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int j, i;
 | 
				
			||||||
 | 
					 int Xw, Yw;
 | 
				
			||||||
 | 
					 int Elecc = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 set_active_page(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 1<> Relleno el suelo
 | 
				
			||||||
 | 
					 Xw = InfoSprites[SPR_ELEM_MAPA].Ancho;
 | 
				
			||||||
 | 
					 Yw = InfoSprites[SPR_ELEM_MAPA].Alto;
 | 
				
			||||||
 | 
					 for( j = 0; j < 350; j+=16 )
 | 
				
			||||||
 | 
					  for ( i = 0; i < 230; i+=16 )
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), j, i, Xw, Yw );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 2<> Pongo el marco al tablero
 | 
				
			||||||
 | 
					 MuestraImagen( "images\\dyna_fnd.pcx", 2, 255 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 3<> Coloco los cuadros indestructibles
 | 
				
			||||||
 | 
					 for ( i = 0; i < 21; i++ )
 | 
				
			||||||
 | 
					  for ( j = 0; j < 13; j++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   if ( prt_tbl[j][i] == 1 )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      tdraw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+Elecc) ), 12+i*16, 20+j*16, Xw, Yw );
 | 
				
			||||||
 | 
					      Elecc = random_int(2);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					char prt_tbl2[13][21];
 | 
				
			||||||
 | 
					for ( j = 0; j<13; j++)
 | 
				
			||||||
 | 
					 for ( i = 0; i<21; i++)
 | 
				
			||||||
 | 
					  prt_tbl2[j][i] = prt_tbl[j][i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 4<> Coloco los cuadros destructibles
 | 
				
			||||||
 | 
					 //  Uno los dos intentos, para reforzar el n<> de arboles que aparecen
 | 
				
			||||||
 | 
					 //     >>>>>>>> 1<> intento del algoritmo que soporta 4
 | 
				
			||||||
 | 
					 for ( i = 0; i<21*13; i++)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					      Elecc = random_int(2);
 | 
				
			||||||
 | 
					      j = random_int(21*13);
 | 
				
			||||||
 | 
					      if ( prt_tbl[j/21][j%21] == 0 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					            tdraw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+2+Elecc) ), 12+(j%21)*16, 20+(j/21)*16, Xw, Yw );
 | 
				
			||||||
 | 
					            prt_tbl[j/21][j%21] = 2;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 //     >>>>>>>> 2<> intento del algoritmo que soporta 4
 | 
				
			||||||
 | 
					 for ( i = 0; i < 21; i++ )
 | 
				
			||||||
 | 
					  for ( j = 0; j < 13; j++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					      Elecc = random_int(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if ( prt_tbl[j][i] == 0 && random_int(5)%2 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					            tdraw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+2+Elecc) ), 12+i*16, 20+j*16, Xw, Yw );
 | 
				
			||||||
 | 
					            prt_tbl[j][i] = 2;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Dejo respirar a los jugadores
 | 
				
			||||||
 | 
					  prt_tbl[ 0][ 0] = 0;   prt_tbl[ 0][ 1] = 0;  prt_tbl[ 1][ 0] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16*  1, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  1, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					  prt_tbl[ 0][12] = 0;   prt_tbl[ 1][12] = 0;  prt_tbl[ 0][11] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  1, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16*  0, 20+16* 11, Xw, Yw );
 | 
				
			||||||
 | 
					  prt_tbl[20][ 0] = 0;   prt_tbl[19][ 0] = 0;  prt_tbl[20][ 1] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 19, 20+16*  0, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16*  1, Xw, Yw );
 | 
				
			||||||
 | 
					  prt_tbl[20][12] = 0;   prt_tbl[20][11] = 0;  prt_tbl[19][12] = 0;
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 20, 20+16* 11, Xw, Yw );
 | 
				
			||||||
 | 
					    draw_bitmap ((char far*)( Sprite[POS_ELEM_MAPA].Sprite[0] + Xw * Yw * (Pref.Entorno+4) ), 12+16* 19, 20+16* 12, Xw, Yw );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // 1 cuadro indestructible
 | 
				
			||||||
 | 
					 // 2 cuadro destructible
 | 
				
			||||||
 | 
					 // A jugador A 1
 | 
				
			||||||
 | 
					 // B jugador B 2
 | 
				
			||||||
 | 
					 // C jugador C 3
 | 
				
			||||||
 | 
					 // D jugador D 4
 | 
				
			||||||
 | 
					for ( j = 0; j<13; j++)
 | 
				
			||||||
 | 
					 for ( i = 0; i<21; i++)
 | 
				
			||||||
 | 
					  prt_tbl[j][i] = prt_tbl2[j][i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  MuestraImagen                                                           *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Descripci<63>n:                                                            *|
 | 
				
			||||||
 | 
					|*              Descomprime y copia a la pagina indicada un PCX             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Entradas: nombre de la imagen                                           *|
 | 
				
			||||||
 | 
					|*            pagina                                                        *|
 | 
				
			||||||
 | 
					|*            color_invisible ( -1 si ninguno )                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
				
			||||||
 | 
					|*            ERROR Algo va mal                                             *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					int MuestraImagen( char *file, int page, int col_Inv )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int curr_page;
 | 
				
			||||||
 | 
					  FILE *fp;
 | 
				
			||||||
 | 
					  int alto, ancho, contador;
 | 
				
			||||||
 | 
					  unsigned char byte;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( (fp = fopen( file,"rb")) != NULL )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  curr_page = get_active_page();
 | 
				
			||||||
 | 
					  set_active_page(page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Saltamos la cabecera
 | 
				
			||||||
 | 
					  fseek( fp, 128, SEEK_SET );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for(alto=0; alto<240; alto++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for(ancho=0; ancho<360; )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      byte=getc(fp);
 | 
				
			||||||
 | 
					      if(byte<=0xC0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        if ( col_Inv < 0 || byte != col_Inv ) set_point (ancho, alto, byte);
 | 
				
			||||||
 | 
						ancho++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
						contador=byte&0x3F; byte=getc(fp);
 | 
				
			||||||
 | 
						for(; contador>0; contador--)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
					          if ( col_Inv < 0 || byte != col_Inv ) set_point (ancho, alto, byte);
 | 
				
			||||||
 | 
					          ancho++;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  fclose(fp);
 | 
				
			||||||
 | 
					  } else return ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  set_active_page(curr_page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return OK;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								IMAGES/DYNA_CAR.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/DYNA_CAR.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/DYNA_FND.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/DYNA_FND.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/DYNA_JGD.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/DYNA_JGD.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/DYNA_TBL.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/DYNA_TBL.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/01.BMP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/01.BMP
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 64 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/02.BMP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/02.BMP
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 64 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_CAR.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_CAR.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_FND.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_FND.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_JGD.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_JGD.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_TBL.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/DYNA_TBL.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/LET.PAL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/LET.PAL
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/MDYNA.PAL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/MDYNA.PAL
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/NEW-1.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/NEW-1.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								IMAGES/PREW/YO.PAL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								IMAGES/PREW/YO.PAL
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user