https://www.segasaturno.com/portal/viewtopic.php?f=33&t=4036&p=27555#p27555
-----------------------------------
Jean La Montarde
27 Agosto 2009, 08:24 PM

[Homebrew] Por Favor Miren El Codigo O Me Suicido...
-----------------------------------
Llevo cerca de 72 horas ininterrumpidas intentando crear una gravedad de plataforma 2D y bueno , no lo he conseguido, entre una cosa y otra el personaje caia hasta la coordenada Y de la plataforma pero al salirse en la coordenada X, donde estaba el fin de la plataforma, este no caia. Bueno es un pequeño paso para el homebrew pero un gran paso para mi ignorancia supina y automutilacion mental que me produce el C. Tras este fracaso decido suprimir cualquier rastro de esta "gravedad" defectuosa por lo que SE SUPONE el personaje deberia flotar indefinidamente y poder variar su coordenada X hacia derecha o izquierda con el pad...

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 

[code linenumbers=false]
//----------------------------------------------------------------------*/
//	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///

[/code] 

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


