First commit 16/12/1996
This commit is contained in:
BIN
D.EXE
Normal file
BIN
D.EXE
Normal file
Binary file not shown.
BIN
DYNA2.EXE
Normal file
BIN
DYNA2.EXE
Normal file
Binary file not shown.
BIN
DYNA2.PRJ
Normal file
BIN
DYNA2.PRJ
Normal file
Binary file not shown.
BIN
DYNA2.TFA
Normal file
BIN
DYNA2.TFA
Normal file
Binary file not shown.
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 (image error) Size: 64 KiB |
BIN
IMAGES/PREW/02.BMP
Normal file
BIN
IMAGES/PREW/02.BMP
Normal file
Binary file not shown.
After (image error) 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.
5
README.md
Normal file
5
README.md
Normal file
@ -0,0 +1,5 @@
|
||||
#DYNA
|
||||
*16/12/1996*
|
||||
ToDo: wwtcf?
|
||||
|
||||

|
Reference in New Issue
Block a user