Estas mi primeras capturas.
Este es parte del codigo fuente, esta en Borland C 5.0
include "dos.h"
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
static int activebank;
unsigned char *SVGAMEM=(unsigned char *)0xA0000000L;
unsigned char paleta[768];
void screen(void)
{
asm {
mov ax, 0x4f02;
mov bx, 101h;
int 0x10;
};
}
void bank(int bnk)
{
if(activebank!=bnk)
{
asm{
mov ax, 4f05h
mov bx, 0h
mov dx, bnk
int 10h
mov ax, 4f05h
mov bx, 1h
mov dx, bnk
int 10h
mov ax, bnk
mov activebank, ax
};
};
};
void changepal(void)
{
int j=0,k=0;
for(j=0;j<256;j++)
{
if(paleta[k]>1) paleta[k]=(paleta[k]-2);
if(paleta[k+1]>1) paleta[k+1]=(paleta[k+1]-2);
if(paleta[k+2]>1) paleta[k+2]=(paleta[k+2]-2);
// setrgbpalette();
outp(0x3C6, 0xff);
outp(0x3C8, j);
outp(0x3C9, paleta[k]);
outp(0x3C9, paleta[k+1]);
outp(0x3C9, paleta[k+2]);
k=k+3;
};
};
char chr(int xy) { return xy;}
int ent(char xy) { return xy;}
int pgame(int xz) { if(xz<0){xz=(xz*(-1));xz=((128-xz)+128);};return xz; }
class pixf
{
public:
unsigned int transp;
void putspot(long pfx, long pfy, unsigned char pfcolor);
unsigned char getspot(long pfx, long pfy);
char spritefoto1[48][78];
char spritefoto2[48][78];
char spritefoto3[48][78];
char spritefoto4[48][78];
//unsigned char far spritefoto5[48][78];
unsigned char spritebase[48][78];
unsigned char scrlrest[4][10];
int sprisizx;
int sprisizy;
void capsprite(int csx1, int csy1, int csx2, int csy2, int face);
void ponsprite(int csx1, int csy1, int face, int mix);
void showimage(char *x, unsigned int shy);
void addsprite(int csx1, int csy1, int side);
unsigned int obtrans;
unsigned char cap2obj1[100][100];
unsigned char cap2obj2[2][2];
void capcap(int cax1, int cay1, int cax2, int cay2, int cobj);
void poncap(int cax1, int cay1, int cax2, int cay2, int cobj);
void scrollr(int canti);
};
void pixf::addsprite(int csx1,int csy1,int side)
{
int i=0,j=0;
//IZQUIERDA
if(side==1)
{
for(i=0;i<=sprisizy;i++)
{putspot((csx1+sprisizx),(csy1+i),spritebase[sprisizx][i]);};
for(j=sprisizx;j>0;j--)
{for(i=0;i<=sprisizy;i++){spritebase[j][i]=spritebase[j-1][i];};};
for(i=0;i<=sprisizy;i++){spritebase[0][i]=getspot((csx1-1),(csy1+i));};
};
//DERECHA
if(side==2)
{
for(i=0;i<=sprisizy;i++){putspot(csx1,(csy1+i),spritebase[0][i]);};
for(j=0;j {for(i=0;i<=sprisizy;i++){spritebase[j][i]=spritebase[j+1][i];};};
for(i=0;i<=sprisizy;i++)
{spritebase[sprisizx][i]=getspot((csx1+sprisizx+1),(csy1+i));};
};
//ARRIBA
if(side==3)
{
for(i=0;i<=sprisizx;i++)
{putspot((csx1+i),(csy1+sprisizy),spritebase[i][sprisizy]);};
for(i=sprisizy;i>0;i--)
{for(j=0;j<=sprisizx;j++){spritebase[j][i]=spritebase[j][i-1];};};
for(i=0;i<=sprisizx;i++)
{spritebase[i][0]=getspot((csx1+i),(csy1-1));};
};
//ABAJO
if(side==4)
{
for(i=0;i<=sprisizx;i++){putspot((csx1+i),csy1,spritebase[i][0]);};
for(j=0;j {for(i=0;i<=sprisizx;i++){spritebase[i][j]=spritebase[i][j+1];};};
for(i=0;i<=sprisizx;i++)
{spritebase[i][sprisizy]=getspot((csx1+i),(csy1+sprisizy+1));};
};
};
void pixf::putspot(long pfx, long pfy, unsigned char pfcolor)
{
unsigned long calc=((pfy<<8)+(pfy<<8)+(pfy<<7)+pfx);
if(calc<65536)
{
bank(0);SVGAMEM[calc]=pfcolor;
} else if(calc>65535 && calc<131072)
{
calc=calc-65536;bank(1);SVGAMEM[calc]=pfcolor;
} else if(calc>131071 && calc<196608)
{
calc=calc-131072;bank(2);SVGAMEM[calc]=pfcolor;
} else if(calc>196607 && calc<262144)
{
calc=calc-196608;bank(3);SVGAMEM[calc]=pfcolor;
} else if(calc>262143)
{
calc=calc-262144;bank(4);SVGAMEM[calc]=pfcolor;
};
}
unsigned char pixf::getspot(long pfx, long pfy)
{
unsigned long calc=((pfy<<8)+(pfy<<8)+(pfy<<7)+pfx);
if(calc<65536)
{
bank(0);
return SVGAMEM[calc];
}else if(calc>65535 && calc<131072)
{
calc=calc-65536;bank(1);
return SVGAMEM[calc];
} else if(calc>131071 && calc<196608)
{
calc=calc-131072;bank(2);
return SVGAMEM[calc];
} else if(calc>196607 && calc<262144)
{
calc=calc-196608;bank(3);
return SVGAMEM[calc];
} else if(calc>262143)
{
calc=calc-262144;bank(4);
return SVGAMEM[calc];
};
};
void pixf::capcap(int cax1, int cay1, int cax2, int cay2, int cobj)
{
int cscols,cslins,i=0,j=0;
pixf tpix;
cscols=(cax2-cax1);
cslins=(cay2-cay1);
if(cobj==1)
{
for(j=0;j<=cslins;j++)
{for(i=0;i<=cscols;i++){cap2obj1[i][j]=tpix.getspot((cax1+i),(cay1+j));};};
};
if(cobj==2)
{
for(j=0;j<=cslins;j++)
{for(i=0;i<=cscols;i++){cap2obj2[i][j]=tpix.getspot((cax1+i),(cay1+j));};};
};
};
void pixf::poncap(int cax1, int cay1, int cax2, int cay2, int cobj)
{
int cscols,cslins,i=0,j=0;
pixf tpix;
cscols=(cax2-cax1);
cslins=(cay2-cay1);
if(cobj==1)
{
for(j=0;j<=cslins;j++)
{
for(i=0;i<=cscols;i++)
{if(cap2obj1[i][j]!=obtrans) tpix.putspot((cax1+i),(cay1+j),cap2obj1[i][j]);};
};
};
if(cobj==2)
{
for(j=0;j<=cslins;j++)
{
for(i=0;i<=cscols;i++)
{if(cap2obj2[i][j]!=obtrans) tpix.putspot((cax1+i),(cay1+j),cap2obj1[i][j]);};
};
};
};
void pixf::showimage(char *x, unsigned int shy)
{
FILE *archivo1;
int ax=0,by=0,j=0,k=0;
unsigned int pix=0,ppix1=0,ppix2=0,ppix3=0;
if ((archivo1=fopen(x,"rb"))==NULL)
{ printf("El archivo es inválido \n");exit(1); };
for (j=0; j<54; j++) pix=fgetc(archivo1);
j=0;
k=0;
for(j=0;j<256;j++)
{
ppix3=fgetc(archivo1) >> 2;
ppix2=fgetc(archivo1) >> 2;
ppix1=fgetc(archivo1) >> 2;
//**************************************
outp(0x3C6, 0xff);
outp(0x3C8, j);
outp(0x3C9, ppix1);
outp(0x3C9, ppix2);
outp(0x3C9, ppix3);
//***************************************
paleta[k]=ppix1;
paleta[k+1]=ppix2;
paleta[k+2]=ppix3;
k=k+3;
pix=fgetc(archivo1);
};
ax=0;
by=479;
if(shy==0)
{
while(!feof(archivo1))
{
pix=fgetc(archivo1);
if(feof(archivo1) || by<0) break;
putspot(ax,by,ent(pix));
ax++;
if(ax>639) {ax=0;by--;};
};
};
if(shy!=0)
{
while(!feof(archivo1))
{
pix=fgetc(archivo1);
if(feof(archivo1) || by<0) break;
if((ent(pix))!=shy) putspot(ax,by,ent(pix));
ax++;
if(ax>639) {ax=0;by--;};
};
};
fclose(archivo1);
};
void pixf::capsprite(int csx1, int csy1, int csx2, int csy2, int face)
{
int cscols,cslins,i=0,j=0;
cscols=(csx2-csx1);
cslins=(csy2-csy1);
for(j=0;j<=cslins;j++)
{
if(face==0)
{for(i=0;i<=cscols;i++){spritebase[i][j]=getspot((csx1+i),(csy1+j));};};
if(face==1)
{for(i=0;i<=cscols;i++){spritefoto1[i][j]=getspot((csx1+i),(csy1+j));};};
if(face==2)
{for(i=0;i<=cscols;i++){spritefoto2[i][j]=getspot((csx1+i),(csy1+j));};};
if(face==3)
{for(i=0;i<=cscols;i++){spritefoto3[i][j]=getspot((csx1+i),(csy1+j));};};
if(face==4)
{for(i=0;i<=cscols;i++){spritefoto4[i][j]=getspot((csx1+i),(csy1+j));};};
};
};
//***********************************************************************
void pixf::ponsprite(int csx1, int csy1, int face, int mix)
{
int i=0,j=0;
if(face==0)
{
for(j=0;j<=sprisizy;j++)
{
for(i=0;i<=sprisizx;i++){putspot((csx1+i),(csy1+j),spritebase[i][j]);};
};
};
if(face==1)
{
for(j=0;j<=sprisizy;j++)
{
for(i=0;i<=sprisizx;i++)
{
if((csx1+i)<175 && (csy1+j)<415 && (csx1+i)>74 && (csy1+j)>314)
{
if(cap2obj1[(csx1+i)-75][(csy1+j)-316]==transp)
{
if(spritefoto1[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto1[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
} else {
if(spritefoto1[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto1[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
};
};
};
if(face==2)
{
for(j=0;j<=sprisizy;j++)
{
for(i=0;i<=sprisizx;i++)
{
if((csx1+i)<175 && (csy1+j)<415 && (csx1+i)>74 && (csy1+j)>314)
{
if(cap2obj1[(csx1+i)-75][(csy1+j)-316]==transp)
{
if(spritefoto2[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto2[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
} else {
if(spritefoto2[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto2[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
};
};
};
if(face==3)
{
for(j=0;j<=sprisizy;j++)
{
for(i=0;i<=sprisizx;i++)
{
if((csx1+i)<175 && (csy1+j)<415 && (csx1+i)>74 && (csy1+j)>314)
{
if(cap2obj1[(csx1+i)-75][(csy1+j)-316]==transp)
{
if(spritefoto3[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto3[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
} else {
if(spritefoto3[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto3[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
};
};
};
if(face==4)
{
for(j=0;j<=sprisizy;j++)
{
for(i=0;i<=sprisizx;i++)
{
if((csx1+i)<175 && (csy1+j)<415 && (csx1+i)>74 && (csy1+j)>314)
{
if(cap2obj1[(csx1+i)-75][(csy1+j)-316]==transp)
{
if(spritefoto4[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto4[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
} else {
if(spritefoto4[i][j]!=transp)
{
putspot((csx1+i),(csy1+j),spritefoto4[i][j]);
} else putspot((csx1+i),(csy1+j),spritebase[i][j]);
};
};
};
};
};
//******************************************************************
void pixf::scrollr(int canti)
{
unsigned char *SVGAMEM2=(unsigned char *)(0xA0000000L+canti);
unsigned int k;
bank(1);for(k=0;k<10;k++){scrlrest[0][k]=SVGAMEM[k];};
bank(2);for(k=0;k<10;k++){scrlrest[1][k]=SVGAMEM[k];};
bank(3);for(k=0;k<10;k++){scrlrest[2][k]=SVGAMEM[k];};
bank(4);for(k=0;k<10;k++){scrlrest[3][k]=SVGAMEM[k];};
canti=canti-1;
bank(0);memmove(SVGAMEM,SVGAMEM2,(65535-canti));
for(k=0;k<9;k++){SVGAMEM[65526+k]=scrlrest[0][k];};
bank(1);memmove(SVGAMEM,SVGAMEM2,(65535-canti));
for(k=0;k<9;k++){SVGAMEM[65526+k]=scrlrest[1][k];};
bank(2);memmove(SVGAMEM,SVGAMEM2,(65535-canti));
for(k=0;k<9;k++){SVGAMEM[65526+k]=scrlrest[2][k];};
bank(3);memmove(SVGAMEM,SVGAMEM2,(65535-canti));
for(k=0;k<9;k++){SVGAMEM[65526+k]=scrlrest[3][k];};
bank(4);memmove(SVGAMEM,SVGAMEM2,(45052-canti));
};
class anime {
public:
int pox;
int poy;
int ncara;
int dano;
void *foto;
void *figura1;
void *figura2;
void *figura3;
void quita(void);
void pone(void);
};
/*
void anime::pone(void)
{
getimage(pox,poy,(pox+30),(poy+43),foto);
if(ncara==1) putimage(pox,poy,figura1,0);
if(ncara==2) putimage(pox,poy,figura2,0);
if(ncara==3) putimage(pox,poy,figura3,0);
};
void anime::quita(void){putimage(pox,poy,foto,0);};
*/