[DS] Comenzaré un proyecto de RPG, ¿Será posible o es un sueño imposible?

Comenzaré a programar un un juego de rpg para DS, por ahora solo mas adelante incluiré 1 o dos personas mas,no me importa que dure 3 o 4 años, al fin y al cabo la consola durará unos 4 o 5 años mas de vida, talvez mas. Por el argumento no me preocupo ya tenemos un libro hecho por nosotros con mas de 200 hojas de una historia de fantasia. [jaja] [jaja]

No sé, talvez hasta se pueda exportar a la consola virtual del WII.

Y no, no estoy soñando ni fumando nada. [fumeta] [fumeta] [fumeta] . Con mucho esfuerzo y dedicación lo lograremos. [plas] [plas]
zes, recuerda que este es un foro técnico, así que te invito a que profundices en los aspectos técnicos del desarrollo de tu proyecto.
ZES comparto tu animo y ganas de programar [Ooooo] , pero x lo menos yo estoy bastante verde en el tema de la programacion en NDS:

donde as adkirido los conocimientos necesarios,
conoces alguna web de tutoriales en español??

Asias y salu2 X-D
Yo sólo te recomiendo, que si no tienes mucha experiencia en lo que es juegos, olvídate de un RPG. Demasiado contenido.
se puede? si...

hay que tocar de pies a tierra... mira siempre que te vayas a poner a trabajar en una nueva plataforma se recomienda hacer 3-4 juegos tipo tetris, arcanoid o alguna poyada de esas... y eras si te hacen comerte la cabeza ( aunq seas el mejor programador del mundo ) luego ya dices a pues esto se puede hacer y esto no... y eso

me gustaría que compartieras con nosotros tus conocimientos para poder indicarte mejor en tu camino. Aunque personalmente no se mucho de ds... ( algo he tocado ) si que se de desarroyo de proyectos informaticos ( o eso dice mi nota de ingenieria de software ) weno el caso es que si nos dices lo que tienes con mas detalle te diremos si es viable o yo o alguno de los programadores del foro.
Ya puedes empezar a crear codigo reutilizable o es una perdida de tiempo.
La resolucion de un gran problema se lleva a cabo mediante la resolucion de multiples pequeños problemas.
Juego RPG (enorme problema)
Graficos(grandes problemas)
Entorno
Modelado
Animacion
Texturas
....
Osea tienes que parametrizar el juego lo maximo posible. Crear un modelo viable pues tienes limitaciones grandes en cuanto a ram y como empieces a manejar volumenes grandes de caracteres la vas a gozar.

Demasiado curro para una sola persona. Solo el analisis ya es enorme. Y despues aun quedan las fases de codificacion y depuracion, analogas y muy dependientes del analisis.
Cuando la cagas en el analisis, todo el proyecto se viene abajo en la codificacion y ahi no hya vuelta atras, porque si empiezas a poner parches no acabaras nunca. Y esto es mas que probable en un proyecto tan grande.

Si eres consciente de esto y aun asi quieres seguir adelante, tomatelo con mucha paciencia y hazlo bien. Y vigila los recursos que la DS no es un pc. Suerte!
Mañana pongo unas capturas de las primeras imagenes de un juego de rpg que comencé previamente haces unos 5 años.

Se comenzó a programar en Borland C++ 5.0, era para PC, ahora intentaré trasladarlo a DS. Creo que se puede, pero se debe invertir muchísimas ahorasssssssss. [jaja] [jaja] [jaja]
Zes echale un vistazo a mi post, te va a gustar y kizas puedas ayudarme/responderme :

http://www.elotrolado.net/showthread.php?s=&threadid=625216

Salu2 [chiu]
Nunca biene mal que pongáis los codigos de fuente xD ;)
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);};
*/

Adjuntos

Este engine en el que estoy trabajando puede que te interese.

http://www.talfi.net/xoops/modules/news/article.php?storyid=244

Faltaria añadir las batallas pero algo es algo
10 respuestas