Caerse de una plataforma en un beatemup

Started by DCelso, October 20, 2009, 02:30:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Sí que se puede, esa es la gran ventaja de Bennu en 32 bits.
Todos los colores con transparencia igual a 0 son transparentes para la vista pero devuelven colisión, son como cristales :D, no se ven pero están :D.
El único transparente cien por cien que no devuelve colisión es el 0 absoluto, este se consigue en gimp, poniendo el color negro rgb 0 0 0 y añadiéndolo al canal alfa. En bennu se puede conseguir con RGBA(0,0,0,0) o directamente insertando un 0.
En otros programas (como inkspace) es una técnica parecida a gimp, añades negro osucro y pones su componente alfa a 0.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Lo que pasa es que lo de las sombras lo veo un poco chapuza porque llevas 5 o 9 procesos por jugador y enemigo incrementando bastante el nivel de procesamiento necesario de collision que ya de por sí no es muy rápido debido a implementar colisión exacta por pixel.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk

¿5 o 9 procesos?yo pretendo un clon del personaje trasparente que haga el movimiento antes que el personaje real y si choca no le deje,aun asi como has dicho es en 32bit pero si alguien lo quiere en 16 bit no le valdria....en fins...

DjSonyk

DCelso en el programa que te acabo de pasar cambialo a esto.
X+=avance_X;
Y+=avance_Y;
IF (Collision(TYPE pared))
X=guarda_X;
Y=guarda_Y;
ELSE
guarda_X=X;
guarda_Y=Y;         
END
y dime que te parece como queda ahora..xD

DCelso

Ya probé, si que mejora, pero pasa algo extraño con las diagonales cuando chocas no se mueve en la dirección en la que puede.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk

Hombre el queque esta en cruz por algo,"testeo",y las diagonales que dices si las hiciera atravesaria el brazo,las piernas o la cabeza la pared,si el grafico es un cuadrado vez que efectivamente lo hace correctamente...

DCelso

#51
DjSonyk a ver que te parece esta adaptación basada en tu código y tus últimas modificaciones

PROGRAM Garlec;
// Carga de Librerias
import "mod_text";
import "mod_grproc";
import "mod_video";
import "mod_map";
import "mod_screen";
import "mod_rand";
import "mod_say";
import "mod_mem";
import "mod_scroll";
import "mod_math";
import "mod_proc";
import "mod_key";
import "mod_draw";
import "mod_timers";
import "mod_sound";
import "mod_joy";
import "mod_time";
GLOBAL

INT ficheros[2];
INT contadorfilas;
INT contadorcomulnas;
INT contador;
STRUCT nivel[14]
INT paredfila[19];
// INT paredcolumna[14];
END=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,6,0,0,6,0,0,6,0,0,0,6,0,0,0,0,0,1,
1,0,0,6,0,0,3,0,0,6,0,0,0,3,0,0,0,2,0,1,
1,0,0,3,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,1,
1,0,0,0,0,9,10,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,11,12,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,0,1,0,1,0,0,1,1,0,1,1,0,1,1,0,1,1,
1,1,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,1,
1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1,
1,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;

BEGIN




ficheros[0]=Load_Fpg("suelos.fpg");
ficheros[1]=Load_Fpg("paredes.fpg");
ficheros[2]=Load_Fpg("pjs.fpg");
// Inicialización
Set_Mode(640,480,16);
Set_Fps(48,0);
put(ficheros[0],1,320,240);
FROM contadorcomulnas=14 TO 0;
// Variable que nos va sumando a la Z para que tenga mayor profundidad,+ 20 por columna
contador+=20;
FROM contadorfilas=0 TO 19;
// Variable que nos va sumando a la Z para que tenga mayor profundidad,+ 5 por fila
contador-=5;
pared((contadorfilas*32)+16,(contadorcomulnas*32)+16,nivel[contadorcomulnas].paredfila[contadorfilas]);
// FRAME(1000);
END
END
elfo();
LOOP
IF (Key(_ESC))
Exit(0);
END
FRAME;
END
END





// Procesos paredes
PROCESS pared(X,Y,Graph);

Begin
File=ficheros[1];

LOOP
FRAME;
END
END
PROCESS elfo();
PRIVATE
avance_X;
avance_Y;
direccion;
BEGIN
File=ficheros[2];
Graph=1;
X=80;
Y=80;
avance_X=1;
avance_Y=1;
LOOP

// Para la coordenada X
direccion=0;
IF (Key(_left))
direccion=-1;
END
IF (Key(_Right))
direccion=1;
END
   X += direccion * avance_X;

   While (Collision(TYPE pared))
     X -= direccion * avance_X;
   END

// Para la coordenada Y
direccion=0;
IF (Key(_up))
direccion=-1;
END
IF (Key(_down))
direccion=1;
END
   Y+=direccion*avance_Y;

   while (Collision(TYPE pared))
     Y-=direccion*avance_Y;
   END

FRAME;
END
END

Ahora no se bloquea al ir en diagonal (por ejemplo abajo y derecha a la vez) sigue en la dirección que puede hasta que no pueda en las dos, antes si no podia en una aunque por la otra pudiera no se movía.
He eliminado los guarda X e Y que no servían de mucha utilidad y he añadido dirección y amplitud de avance para poder configurarlo más facilmente, también puse un while en vez de un if (para curarme en salud, el resultado es el mismo o muy parecido, la diferencia es que con el while si derrepente el player aparece en mitad de un muro se movería hasta no colisionar con él) también he hecho que en vez de avanzar de dos en dos avance de uno en uno y para que vaya bien de velocidad he ajustado el FPS. Asi se consigue máxima precisión de pixel.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk

Jajaja ,yo pense que querias algo simple para como dices tu ,que uno que este empezando tenga donde partir,le voy ha hechar un vistacillo  ;)

DjSonyk

Si esta muy bien logrado ^^,mejor que lo que tenia pensado ...Todo la referencia y la variable contador deveria desaparecer pues esque copie parte del codigo de otro programa que tenia por aqui para hacer laberintos 3D y el contador guardaba la Z.

DCelso

Hombre, una cosa es un juego simple y otra es algo a medias.
Yo me refiero a un juego "jugable" con un propósito, mover a un tio por la pantalla sin ningún fin es soso, no llama la atención de los noobs.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk

#55
No hombre si me referia a la forma de hacerlo,si ya te digo que tenia pensado como arreglar lo que dices,por cierto con tu ejemplo ¿has visto que pasa si pillas justo una esquina? ^^

Jajaja es porque el zapato tiene un pico por eso pasa xD

DCelso

No pasa nada no controlado ¿No? osea si te pilla la esquina de un muro entre el brazo y el pie pues se queda bloqueado ya que choca por ambos lados.
Por otra parte, si queremos un gaunlet y meterlo en el apagame, habría que ponerle unos generadores de monstruos un arma arrojadiza, unas pócimas unas llaves, unas barreras y un exit y ya tendriamos un buen motor gaunlet. Te encargas tu cuando tengas tiempo ¿no?, (sin prisa pero sin pausa :D)
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Espera, te adapto el código al sistema apagame y sigues tu. ¿Ok? (o eso espero  ::))
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DjSonyk

Si pasa,pon la esquina del zapato justo en la esquina xD,se queda pillado,si abres el grafico en el GIMP por ejemplo veras que hay un pixel moleston xD,tambien si te fijas en el fpg de pjs,veras una pocima,una llave ,un generador y una especie de fantasma,por cierto el error no es del codigo,sino que si pilla ese pixel,no anda ni si quiera normal XD,si me encargo ya te dije que me encargaba,toy mirando el motor que teneis de los tiles haber si le pudo introducir ,para que los niveles sean mas largos,y a ver si tambien hago un editor,que meter los codigos a mano es una leche,ademas si utilizo 2 o 3 distintos pos ya me contaras XD..

DCelso

¿tenemos motor de tiles?, ostras pues yo ni lo sabía,no conozco el código de los demás, solo he tocado cosas para adaptarlo pero aún no me puse a entenderlo :D.
Por cierto ya adapté el código al proyecto, parte ya tu de este e intenta seguir el estilo que puse en la medida de lo posible.(mayusculas, minusculas nombrado de variables, etc) En realidad solo hay dos cosas importantes para la integración en apagame, que inicialices el sistema con una función llamada initialize_game. y que uses is_key_pressed en vez de key.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/