Videojuego de plataformas: Just Fantasy!

Started by Windgate, March 05, 2009, 08:16:39 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Hola amigos, llevo todo el día organizando, diseñando, recopilando sprites y programando este juego de plataformas 2D con Bennu.

Está preparado para Windows y es un pack que incluye todas las últimas DLL, de forma que se puede compilar y ejecutar directamente sin necesidad de tener nada instalado. La idea es que cualquiera pueda utilizarlo, modificarlo, etc. No sólo nosotros los frikis de Bennu!

Lo siento por los de Linux, sinceramente, aún no he probado a portar ninguno de mis juegos a Linux porque un día Ubuntu me destrozó el disco duro y desde entonces lo odio...

El juego está totalmente separado en módulos de código independientes (Es mi costumbre), he intentado ser lo más limpio y organizado que he podido después de mis casi 2 años de experiencia en esto, espero que lo analicen, discutan y critiquen:

[/b]

Es una beta, quisiera seguir con ella, díganme opiniones! Gracias a todos!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

blostec

Hola Windgate, acabo de probarlo. Esta muy bien para ser el primer día de desarrollo. Supongo que en nuevas versiones vas a limitar más el salto, cuando saltas se levanta demasiado y durante el salto, si vuelves a pulsar la tecla de saltar, puedes pasarte el rato flotando por el escenario.

Felicidades, sigue adelante con él, promete mucho. Karma++
Saludos!  :)

SplinterGU

muy bueno...
lo probe y compile en linux... tuve que tocar algunas cosas para que todo funcione...

sugerencias:

1) nombres de carpetas, archivos y extensiones en minusculas (tambien en codigo)
2) paths usando "/" en vez de "\", aunque esto no molesta realmente

veo que el salto es demasiado alto... y la velocidad del personaje (si este sera sonic) estaria bien un poco mas rapida... me refiero a los incrementos de x del mismo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

Holas :)
Recomendaciones:
1. No hagas las durezas en base al tamaño del gráfico actual del personaje,sino utiliza unas medidas predefinidas, como el gráfico más grande de todas las animaciones, por ejemplo.
2. Has de solucionar lo de subir y bajar las pendientes.
En vez de subirlo cada frame un poco, tendrías que subirlo de golpe, de un frame a otro.
Y lo ideal sería que también controlases las pendientes, para que las bajara, que no las salte. Sería más de lo mismo.

Y bueno, el resto lo voy bien bien :)
Suerte con el proyecto!
Pd: Veo que te gusta Sonic, te recomendaría ver un juego de plataformas que empecé hace tiempo xD
http://www.pixjuegos.com/?q=node/29

Prg

me encanta la calidad gráfica, lo único que noté es que algunas veces, al correr el monito desciende más de lo que el mapa debería permitir, para esto es bueno usar un from que eleve al monito no una cantidad fija por tiempo, sino los puntos que hay desde el color hasta los pies del monito, de esta forma este efecto no se presenta.
muy bueno :)
¡¡¡ felicidades !!!
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

El salto ahora mismo lo tengo arreglado para que no salte "varias veces", en cuanto a las durezas, están sólo como prueba, por eso al moverse lateralmente se mete un poco en ellas.

Anoto lo del FROM para evitar que se meta en las durezas, la verdad es que me asaltan varias dudas sobre cómo tratar las durezas, con paredes y suelos no tengo mayor problema, pero lo de las inclinaciones...

Gracias por los apuntes SplinterGU, son malas costumbres que tengo al programar!

En cuanto a los gráficos que uso, para los personajes son unos FPG que encontré por ahí ya recortados, ¿Saben dónde puedo conseguir más FPG? Odio recortar sprites...

Y los escenarios y decoración, necesito scrolls de estética similar, he buscado todas estas cosas en vgmaps.com, en spritedatabase.net y en Google Imágenes, pero necesito más!!!

Me alegro de que os haya gustado, gracias!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

Ahí va la nueva versión, he añadido un módulo encargado de generar fauna en el escenario, por ahora sólo libélulas que deambulan tontamente, me gusta como está quedando, si alguien quiere proponer alguna midi para la música de los escenarios se lo agradeceré, pero que sean suavecitas, tengo miles de midis pero suenan a chatarra!!!


Por cierto, el Pix Heroes me ha gustado mucho PiXeL! ¿Cómo has hecho esos efectos de transición para hacer que la pantalla se encoja o rote para pasar a fondo negro cuando te matan? ¿Se puede hacer con Bennu? Son muy lol

Por cierto, he corregido el tema de mayúsculas y de / y \ SplinterGU, a ver si ahora funciona sin complicaciones en Linux!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

panreyes

Hala... no sabía que le faltaba el código fuente! :S
El truco está en get_screen();
Conste que lo del "tiempo_bala" está pensado para resoluciones bajas (320x240), ya que hace get_screen cada 0,1 segundos...

Aquí tienes, las transiciones:
Process transicion();
Private
tipo;
inercia;
Begin
graph=get_screen();
x=160;
y=120;
z=-512;
tipo=rand(0,2);
frame;
if(tipo==0)
from size_y=100 to 10 step -5; tiempo_bala(); alpha-=2; frame; end
from size_x=100 to 0 step -5; tiempo_bala(); alpha-=2; frame; end
end
if(tipo==1)
from size_x=100 to 10 step -5; tiempo_bala(); alpha-=2; frame; end
from size_y=100 to 0 step -5; tiempo_bala(); alpha-=2; frame; end
end
if(tipo==2)
x=320;
y=240;
set_center(0,graph,320,240);
from angle=0 to 90000 step 500; inercia+=200; angle+=inercia; alpha-=2; frame; end
end
ready=1;
unload_map(0,graph);
End

Process tiempo_bala();
Begin
if(timer[7]<10) return; end
timer[7]=0;
graph=get_screen();
z=-1;
x=160;
y=120;
from alpha=128 to 0 step -16; frame; end
unload_map(0,graph);
End

Prg

mira, yo tomo la gravedad de un juego del div, es una función que he adaptado y funciona a la prefección, sólo que yo tenía un medio piso que era uno que al presionar down te permitía bajar. :)

la parte del from es la siguiente

from vgravedad=-16 to 7 step 2;
         if (map_get_pixel(0,wiz_mpa_de_durezas,(father.x mod wiz_ancho_fondo)/2,(father.y/2)+vgravedad+13)==color_piso)
            father.en_suelo=true;
            break;  // sal si se encuentra con el suelo
         end

      end

//en este momento ya se conoce la distancia del piso a los pies, y entonces ya sólo falta colocar los pies exactamente en el piso.
if (vgravedad<8)// si se encuentra con el suelo, y el piso no está en su cabeza
         father.y+=vgravedad;                                    // lo acomoda
         father.velocidad_gravedad=0;      // y se pone la wiz_gravedad a 0 (puedes poner que si wiz gravedad==0 entonces si pueda birncar, esto es, cuando está en el piso)
      end


function wiz_gravedad();
private
   color_piso=3;
   color_techo=4;
   color_mediopiso=2;
   
   vgravedad;// variable para guardar temporalmente la wiz_gravedad
   
begin
   father.en_suelo=false;
   // coge la coordenada y a partir de la wiz_gravedad del wiz_protagonista (padre)
   vgravedad=(father.velocidad_gravedad+=2);   // pero incrementada en 2
   if (vgravedad>16)   // si es mayor de 16
      father.velocidad_gravedad=16;   // haz que sea 16 la wiz_gravedad del wiz_protagonista
      vgravedad=16;   // y tambi,n la variable temporal
   end
   
   if (vgravedad<0)// si la wiz_gravedad es negativa
      while (vgravedad++!=0)  // mientras no sea cero, la incrementa
         // si no se da con el techo
         if (map_get_pixel(0,wiz_mpa_de_durezas,(father.x mod wiz_ancho_fondo)/2,(father.y/2)-13)<>color_techo)
            father.y--; // haz que el wiz_protagonista suba
         else// si no pon la wiz_gravedad a cero
            father.velocidad_gravedad=0;
            break;
         end
      end
   else// si la wiz_gravedad es cero o positiva
      father.y+=vgravedad;// se suma a la coordenada del wiz_protagonista
      // comprueba el rango vertical del movimiento del wiz_protagonista
      
      from vgravedad=-16 to 7 step 2; // acaba el proceso si se toca el suelo
         if (map_get_pixel(0,wiz_mpa_de_durezas,(father.x mod wiz_ancho_fondo)/2,(father.y/2)+vgravedad+13)==color_piso)
            father.en_suelo=true;
            break;  // sal si se encuentra con el suelo
         end
         if (map_get_pixel(0,wiz_mpa_de_durezas,(father.x mod wiz_ancho_fondo)/2,((father.y/2)+vgravedad)+13)==color_mediopiso & father.efecto<>1)
            father.en_suelo=true;
            break;
         end
      end
      
      if (vgravedad<8)// si se encuentra con el suelo
         father.y+=vgravedad;// se actualiza con el m ximo que se pueda mover
         father.velocidad_gravedad=0;// y se pone la wiz_gravedad a 0
      end
   end
   
end
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

Prg, ese proceso gravedad lo tengo tal cual en mi módulo gravedad.PRG (En la carpeta TAD) y de hecho es la gravedad que siempre uso para mis juegos, probablemente hace tiempo la debí encontrar en alguno de tus juegos y la aproveché  8)

La uso tal cual, aunque le añadí unos cuantos cambios:

father.velocidad_gravedad=16;   // haz que sea 16 la wiz_gravedad del wiz_protagonista

Esto anterior ya no se permite en Bennu, así que la variable velocidad_gravedad se pasa como parámetro a través de un puntero.

Además el mapa de durezas y los RGB de suelo y techo también los pongo como parámetros, y la comprobación de "los pies" la hago con la siguiente modificación en la variable Y:

(father.y+vgravedad+graphic_info(father.file,father.graph,G_HEIGHT)*father.size/200)

Así es válida a la perfección sea cual sea el gráfico y tamaño (graph y size) actual del proceso. Puedes modificar graph y size todo lo que quieras que los pies se mantienen a ras de suelo, funciona de lujo!

Je je je, ya ves, con la gravedad está bien trabajado, el problema que tiene el juego es que todavía no me he puesto a controlar paredes, por eso el muñeco al moverse lateralmente "se mete" en ellas un poco.

A la versión actual le he añadido lluvia y relámpagos, con la función fade(), incluyendo efectos de sonido, está quedando muy bien pero hasta que no ponga lo de las paredes no subo la nueva versión (Probablemente esta noche o mañana, no pienso dormir, estoy viciadísimo programando...).

PiXeL, le echaré un vistazo a las transiciones de scroll en cuanto tenga tiempo, por ahora no es lo prioritario, pero es todo un detallazo!

Gracias a todos nuevamente!!!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

Aquí dejo una recién comenzada versión 0.5 con bastantes mejoras puntuales, aún NO he puesto las paredes, pero pueden cambiar a la siguiente fase pulsando la tecla S de Scenario!


Adjunto un par de capturas (Espero haber puesto bien los link...), a ver si nos acostumbramos a ponerlas que incitan más a descargar los proyectos xD



Vuelvo a recalcar que todo el videojuego está separado en módulos, todos los archivos PRG secundarios están en la carpeta TAD así que si alguien quiere meter mano, colaborar o criticar cualquiera de ellos será música para mis oídos lo que tenga que decir o hacer...

Tengo alumnos de programación y usamos Bennu en extraescolares, voy a proponerles cooperar en este proyecto, ¿Alguna sugerencia para alojarlo? ¿FTP, sourceforge? Es la primera vez que pienso semejante cosa...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Prg

#13
se ve increible en las capturas, ¡wow!

Quotefather.velocidad_gravedad=16;   // haz que sea 16 la wiz_gravedad del wiz_protagonista

Esto anterior ya no se permite en Bennu, así que la variable velocidad_gravedad se pasa como parámetro a través de un puntero.

si funciona, yo lo uso siempre y en las actuales versiones, a menos que las que tengo no sean tan actuales...
velocidad_gravedad debe ser una local
global
....
local
velocidad_gravedad
...


de esa forma no debe darte problemas.

...

??? seguro que no funciona, a mí si...

en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

Oh, Prg, cierto que funciona si pongo velocidad_gravedad como LOCAL, pero hay un problema, si quieres que la gravedad pueda ser un proceso compartido por enemigos, protagonistas, etc. Me daba problema de que no se puede repetir el nombre de variables LOCAL en procesos distintos, por eso hice que ese valor fuese un puntero, me parece más limpio, ¿Qué te parece?

Ahora mismo estoy atascado y no sé por donde continuar este proyecto, había pensado en hacer uso (Por primerísima vez) de las blendop de Bennu para que las libélulas puedan tomar diferentes colores dando tinte a sus gráficos.

¿Alguien tiene algún código sencillo para teñir gráficos? Nunca jamás he usado las blendop, pero me gusta probar cosas nuevas.

Por cierto, he intentado jugar con las Z del scroll y de las libélulas para que se vean por detrás del scroll principal, pero no ha habido forma... También había pensado en superponer otro scroll con las "partes" que deberían tapar al protagonista (Troncos y cosas así) pero visto lo ocurrido con la Z estoy un poco preocupado...

¿Es posible tener un scroll detrás de los procesos (Es decir, normal) y otro scroll tapando a los procesos? Tenía asumido que sí, pero he hecho unas cuantas pruebas sin éxito  :o

Gracias!!!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es