Bueno , pues no quiere, ahora cae hasta el limite del "suelo" de la pantalla y ... estoy hasta los ********** ****** ...
Mirad el codigo a ver si alguien encuentra algo
//----------------------------------------------------------------------*/
// BBVSGG 20-8-09
// Jean La Montarde La cueva de las mandragoras
//----------------------------------------------------------------------*/
#include "sgl.h"
#include "sprites.h"
#define SystemWork 0x060ffc00 /* System Variable Address */
#define SystemSize (0x06100000-0x060ffc00) /* System Variable Size */
///Introduccion de los graficos en la memoria///
static void set_sprite(PICTURE *pcptr, Uint32 NbPicture, TEXTURE *texptr)
{
TEXTURE *txptr;
for(; NbPicture-- > 0; pcptr++){
txptr = texptr + pcptr->texno;
slDMACopy((void *)pcptr->pcsrc,
(void *)(SpriteVRAM + ((txptr->CGadr) << 3)),
(Uint32)((txptr->Hsize * txptr->Vsize * 4) >> (pcptr->cmode)));
}
}
///Introduccion de los graficos en la memoria///
static cabecera(void)
{
slPrint("BBVSGG Jean La Montarde", slLocate(1,1));
slPrint("------------------------------------------",slLocate(0,2));
slPrint("La cueva de las mandragoras 20-8-09",slLocate(1,26));
}
void ss_main(void)
{
static FIXED pos[XYZ];
static FIXED limpos[XY];
static FIXED limneg[XY];;
slInitSystem(TV_320x224,tex_sprites,1);
set_sprite(pic_sprites,14,tex_sprites);
FIXED posbg[XYZS]={toFIXED(0),toFIXED(0),toFIXED(169),toFIXED(1)};
FIXED posplat[XYZS]={toFIXED(0),toFIXED(50),toFIXED(169),toFIXED(1)};
pos[X]=toFIXED(0.0);
pos[Y]=toFIXED(0.0);
limpos[X]=toFIXED(145);
limpos[Y]=toFIXED(90);
limneg[X]=toFIXED(-145);
limneg[Y]=toFIXED(-90);
ANGLE ang=DEGtoANG(0.0);
cabecera();
Uint32 spriteID=1;
Uint32 corriendo=2;
Uint32 corriendo_flip=6;
Uint8 index=0;
while(TRUE)
{
slDispSprite(posplat, attr_sprites + 0, ang);
slDispSprite(posbg, attr_sprites + spriteID, ang);
posbg[X]=pos[X];
posbg[Y]=pos[Y];
if(pos[X]<limneg[X])pos[X]=limneg[X],spriteID=5;
if(pos[X]>limpos[X])pos[X]=limpos[X],spriteID=1;
if(pos[Y]>limneg[Y])pos[Y]=limneg[Y];
if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];
if( (Smpc_Peripheral[index].data & PER_DGT_KR) == 0)
{
corriendo++;
if(corriendo>=5)corriendo=2;
spriteID=corriendo;
pos[X]=pos[X]+toFIXED(4.0);
}
if( (Smpc_Peripheral[index].data & PER_DGT_TA) == 0)
{
pos[X]=toFIXED(0.0);
pos[Y]=toFIXED(0.0);
}
if( (Smpc_Peripheral[index].pull & PER_DGT_KR) == 0)
{
spriteID=1;
}
if( (Smpc_Peripheral[index].data & PER_DGT_KL) == 0)
{
corriendo_flip++;
if(corriendo_flip>=9)corriendo_flip=6;
spriteID=corriendo_flip;
pos[X]=pos[X]-toFIXED(4.0);
}
if( (Smpc_Peripheral[index].pull & PER_DGT_KL) == 0)
{
spriteID=5;
}
slSynch();
}
}
////CABECERA DE COMPILACION///
extern Uint32 _bstart, _bend;
int main(void)
{
Uint8 *dst;
Uint16 i;
for(dst = (Uint8 *)&_bstart; dst < (Uint8 *)&_bend; dst++)
{
*dst = 0;
}
for(dst = (Uint8 *)SystemWork, i = 0; i < SystemSize; i++)
{
*dst = 0;
}
ss_main();
}
////CABECERA DE COMPILACION///
// BBVSGG 20-8-09
// Jean La Montarde La cueva de las mandragoras
//----------------------------------------------------------------------*/
#include "sgl.h"
#include "sprites.h"
#define SystemWork 0x060ffc00 /* System Variable Address */
#define SystemSize (0x06100000-0x060ffc00) /* System Variable Size */
///Introduccion de los graficos en la memoria///
static void set_sprite(PICTURE *pcptr, Uint32 NbPicture, TEXTURE *texptr)
{
TEXTURE *txptr;
for(; NbPicture-- > 0; pcptr++){
txptr = texptr + pcptr->texno;
slDMACopy((void *)pcptr->pcsrc,
(void *)(SpriteVRAM + ((txptr->CGadr) << 3)),
(Uint32)((txptr->Hsize * txptr->Vsize * 4) >> (pcptr->cmode)));
}
}
///Introduccion de los graficos en la memoria///
static cabecera(void)
{
slPrint("BBVSGG Jean La Montarde", slLocate(1,1));
slPrint("------------------------------------------",slLocate(0,2));
slPrint("La cueva de las mandragoras 20-8-09",slLocate(1,26));
}
void ss_main(void)
{
static FIXED pos[XYZ];
static FIXED limpos[XY];
static FIXED limneg[XY];;
slInitSystem(TV_320x224,tex_sprites,1);
set_sprite(pic_sprites,14,tex_sprites);
FIXED posbg[XYZS]={toFIXED(0),toFIXED(0),toFIXED(169),toFIXED(1)};
FIXED posplat[XYZS]={toFIXED(0),toFIXED(50),toFIXED(169),toFIXED(1)};
pos[X]=toFIXED(0.0);
pos[Y]=toFIXED(0.0);
limpos[X]=toFIXED(145);
limpos[Y]=toFIXED(90);
limneg[X]=toFIXED(-145);
limneg[Y]=toFIXED(-90);
ANGLE ang=DEGtoANG(0.0);
cabecera();
Uint32 spriteID=1;
Uint32 corriendo=2;
Uint32 corriendo_flip=6;
Uint8 index=0;
while(TRUE)
{
slDispSprite(posplat, attr_sprites + 0, ang);
slDispSprite(posbg, attr_sprites + spriteID, ang);
posbg[X]=pos[X];
posbg[Y]=pos[Y];
if(pos[X]<limneg[X])pos[X]=limneg[X],spriteID=5;
if(pos[X]>limpos[X])pos[X]=limpos[X],spriteID=1;
if(pos[Y]>limneg[Y])pos[Y]=limneg[Y];
if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];
if( (Smpc_Peripheral[index].data & PER_DGT_KR) == 0)
{
corriendo++;
if(corriendo>=5)corriendo=2;
spriteID=corriendo;
pos[X]=pos[X]+toFIXED(4.0);
}
if( (Smpc_Peripheral[index].data & PER_DGT_TA) == 0)
{
pos[X]=toFIXED(0.0);
pos[Y]=toFIXED(0.0);
}
if( (Smpc_Peripheral[index].pull & PER_DGT_KR) == 0)
{
spriteID=1;
}
if( (Smpc_Peripheral[index].data & PER_DGT_KL) == 0)
{
corriendo_flip++;
if(corriendo_flip>=9)corriendo_flip=6;
spriteID=corriendo_flip;
pos[X]=pos[X]-toFIXED(4.0);
}
if( (Smpc_Peripheral[index].pull & PER_DGT_KL) == 0)
{
spriteID=5;
}
slSynch();
}
}
////CABECERA DE COMPILACION///
extern Uint32 _bstart, _bend;
int main(void)
{
Uint8 *dst;
Uint16 i;
for(dst = (Uint8 *)&_bstart; dst < (Uint8 *)&_bend; dst++)
{
*dst = 0;
}
for(dst = (Uint8 *)SystemWork, i = 0; i < SystemSize; i++)
{
*dst = 0;
}
ss_main();
}
////CABECERA DE COMPILACION///
Aqui la ISO para que alguien lo pruebe en emulador , a ver si el problema es de mi emulador...
PD: Por curiosidad , si a vosotros el personaje se cae tambien como me ocurre a mi , por favor , probad a pulsar A , si todo marcha bien el personaje deberia de volver al centro de la pantalla . Hacedme el favor de decidme que ocurre al soltarlo , deberia caer hacia el suelo de nuevo , pero aqui en mi ordenador en vez de caer , casi se teletransporta...
AINS, tengo que dejar el homebrew es malo para mis nervios