[Homebrew] Por Favor Miren El Codigo O Me Suicido... »  Mostrar los mensajes de    a     

SEGASaturno - Saturn, SEGA y Videojuegos


Desarrollo - [Homebrew] Por Favor Miren El Codigo O Me Suicido...



Jean La Montarde [ 27 Agosto 2009, 08:24 PM ]
Título del mensaje[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

Código: [Ocultar] [Seleccionar]
//----------------------------------------------------------------------*/
// 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


Indiket [ 27 Agosto 2009, 09:47 PM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Mmm es raro, cosillas:

static FIXED limneg[XY];; //sobra un ;

if(pos[X]<limneg[X])pos[X]=limneg[X],spriteID=5;
if(pos[X]>limpos[X])pos[X]=limpos[X],spriteID=1;

Después de limneg y limpos, en vez de coma debería de ser un ; (son dos instrucciones supongo). Si es así, esas dos instrucciones necesitarian unos corchetes.

Pregunta: posbg es el muñeco? Si es así, pk no dibujar pos en vez de posbg? (con lo cual posbg ya no tendría sentido).


Jean La Montarde [ 27 Agosto 2009, 11:04 PM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Raro de cojones... prueba la iso y fliparas XD

respecto a lo primero pos si , se me habrá colado un ; pero dudo que sea eso...XD

en cuanto a lo segundo si , se supone que cada IF tiene dos instrucciones si se da la situación y vamos en teoría funciona bien...

La pregunta , pues porque por alguna razón desconocida , la saturn no puede sumar valores a coordenadas empleadas para el dibujo directamente , es decir si uso posbg para determinar la posición inicial de un sprite, no puedo utilizar ese vector/función(no se cual seria la definición apropiada) para sumar coordenadas , así que por cada elemento que se use hay que usar otro vector/función para "moverlo" o localizarlo espacialmente(mi idea para la gravedad , determinar con coordenadas donde estaba la plataforma, pero no he encontrado la manera...XD)

Por favor probar lo del boton A , si baja "suavemente" o sin animar


Indiket [ 27 Agosto 2009, 11:18 PM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Quizá sea porqué declaras como static las variables (pos). Si no me acuerdo mal, static era como que sólo puedes disponer de una instancia de esa variable en memoria. Si no es necesario, probaria de quitar el tag static.


Ryo Suzuki [ 28 Agosto 2009, 01:37 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Me encantan estos post, aunque todavia no entiendo casi nada

E indiket metiendo baza... colega! te veo programando pa Saturn en un futuro


dmc [ 28 Agosto 2009, 01:46 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Yo es que aún estoy en pascal.


Jean La Montarde [ 28 Agosto 2009, 01:48 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Ryo (y quien sea) si tienes un rato , prueba la ISO y responded a estas preguntas

-¿Se queda el personaje en el centro?
-¿Baja suavemente o instantanemente?

Gracias por vuestro tiempo...

Indiket , mañana probare si me da tiempo que tengo parranda , sino ya hasta mediados de septiembre nada , tengo que perder el tiempo un rato con los examenes de septiembre XDD


Indiket [ 28 Agosto 2009, 02:26 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
- Sí, está en el centro mientras aprietas A.
- Baja de golpe al dejar la A.

Facundo sabrá más que yo qué es lo que falla

Ryo, los caminos del homebrew son inexcrutables! Y dmc, Pascal no lo aprendí pero no es nada despreciable!!!


dmc [ 28 Agosto 2009, 03:12 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Indiket escribió: [Ver mensaje]
- Sí, está en el centro mientras aprietas A.
- Baja de golpe al dejar la A.

Facundo sabrá más que yo qué es lo que falla

Ryo, los caminos del homebrew son inexcrutables! Y dmc, Pascal no lo aprendí pero no es nada despreciable!!!


Si el gesto era porque no podía ayudar. Pues no mola hacer un ajedrez y esas cosas.


FacundoARG [ 28 Agosto 2009, 05:14 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Hola, Jean. Priemo felicitaciones, esta muy bueno el proyecto 8).
Ultimamente estoy enquilombado (liado para uds), con trabajo, tesis, estudio, etc. Ya tengo casi listos los tutos que faltan, pero como simepre me queda algun detalle por cerrar.

No desesperes, yo estuve 1 Mes y medio para aprender el Sistema de coalisiones (es lo que vos tratas de hacer) y ademas tenía en ese entonces 3 años de Desarrollo en C/C++, Pascal, Basic, Java, Assambler y PHP. Pero todo esto no es necesario . También va para dmc, todos los lenguajes son en un 50% iguales, lo que ustedes deben aprender es a Programar, no con un solo lenguaje sino entender los metodos de la programación. Es simple y pero nada que lleve poco tiempo, luego de que logren este objetivo va a apreder a usar cualquier lenguaje en muy poco tiempo. Espero comprendan la idea.

Volviendo a lo tuyo y darte una posible solución. El error yo lo veo aca

if(pos[Y]>limneg[Y])pos[Y]=limneg[Y];
if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];


Estas lineas controlan supuestamente la posicion en Y de tu muñeco. El problema es el siguente, más justamente en la segunda linea.

Más arriba (en el código) declaraste, que limpos[Y]=90. Bien. Luego si apretas "A", se pone en 0. Pero......
Cuando vuelve el bucle al inicio. Pregunta el siguente if que escribiste

if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];

Si lo reemplazas por los valores en ese instante sería lo siguiente:

si (0<90) entonces pos[Y]=90;

Comprendes, lo que estoy poniendo. Osea, luego de esta linea (arriba), pos[Y] vale 90, y es por eso que justamente cuando suletas la A, se vuelve al fondo de la pantalla. Lo que lograras con esto si comentas la linea ( // ) sera poner el muñeco en la posicion 0 en Y. Pero lo que vos queres es gravedad, entonces debes incrementar en cada ciclo, la variable Y. De esta forma
pos[Y]=pos[Y] + FIXED(1.0);

Esto irá incrementando en un pixel, la posicion en Y, lo que te va a dar la sensacion de que se esta cayendo .
Luego faltaría (te lo dejo a vos) que controles, que no se te escape de la pantalla, en un pozo infinito.

Lo que tenes que hacer, para la próxima es:

1 - Siempre los calculos se hacen antes de pintar, por ende; tenes que poner las linas de slPutDisp justo antes del slSynch()

2 - Estas aplicaciones son chicas, entonces tenes que subir el proyecto zipeado, debe pesar 200kb, o enviarmelo por MP.

3 - Tenes que escribir comentario (usando // ) , como suelo hacer yo en los tutoriales; asi comprendemos mejor el código.


PD - Yo tampoco nací sabiendo, se aprende de muchisimos errores; y hasta a veces es bueno comenzar desde cero . Y también faltan muchas cosas por aprender, por ejemplo el control de los frames en Saturn.


Fandu [ 28 Agosto 2009, 07:57 PM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Dios, como os lo currais, pareceis el maestro y el pupilo, habría que pagarte clases particulares FacundoArg, te enteras que da gusto en esto, ánimo a todos y saludos.


Jean La Montarde [ 28 Agosto 2009, 10:26 PM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Os pido perdon, el programa iba mal porque en el control de la coordenada Y , los signos de comparacion estaban al reves , por lo que el problema era mio... ju...

Gracias a todos por los comentarios y la ayuda


FacundoARG [ 29 Agosto 2009, 05:42 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Fandu escribió: [Ver mensaje]
Dios, como os lo currais, pareceis el maestro y el pupilo, habría que pagarte clases particulares FacundoArg, te enteras que da gusto en esto, ánimo a todos y saludos.


Pagar, no no. Esto lo hago porque uno nace para determinadas cosas, pero si estuviese cerca de ustedes, sin ningun problema les daria clases de Algoritmos para video juegos .

Jean La Montarde escribió: [Ver mensaje]
Os pido perdon, el programa iba mal porque en el control de la coordenada Y , los signos de comparacion estaban al reves , por lo que el problema era mio... ju...

Gracias a todos por los comentarios y la ayuda



No hay problema, ni nada de que preocuparse. Estas cosas siempre pasan.
Por eso se saben caer los muñecos de la pantalla, o las malas coalisiones . Es solo un simple if, pero el problema esta en saber cual es .

El mundo de los video juegos es más complicado de lo que la mayoría piensa (va para todos los críticos sin sentido) y hasta a veces desvaloran su precio de mercado. Cuesta muchisimo producir el software, pero la mayoria de la gente no comprende el porque un CD/DVD vale más que algo tangible . Es solo cuestión de tiempo, para que la sociedad comprenda el verdadero trabajo que cuesta el software


Jean La Montarde [ 29 Agosto 2009, 11:01 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Gracias facun por los animos, tienes un MP XD


Jean La Montarde [ 29 Agosto 2009, 01:18 PM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...

YouTube Link


Estado del proyecto, queda mucho pero poco a poco , se avanza xD


FacundoARG [ 30 Agosto 2009, 01:01 AM ]
Título del mensajeRe: Por Favor Miren El Codigo O Me Suicido...
Felicitaciones te quedo muy bueno :D.
Ahora creo que tendrias que ver como controlar que detecte ese bloque de color celeste, para que coalisione ahi. Y si te pasas, se cae. Con eso quedaría perfect




Powered by Icy Phoenix