Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 

Mensaje [DESARROLLO] Plataformas Ochobitero Para Megadrive

#1  realbrucest 28 Octobre 2011, 05:37 PM

Buenas a todos. Hace un par de meses empecé a conversionar el juego Dynamite Dan a Megadrive usando para ello las librerías SGDK. El compi jordigahan en la logística y ripeando como un cosaco y yo dándole forma un código, un tanto deleznable pero hasta donde llegué relativamente funcional. Mes y pico con tiempo y ganas, luego mes y pico de mucho menos tiempo para ponerme con ello y de ganas así así, además de que por querer actualizarme a la última versión del SGDK me dejó de compilar.

Si jordigahan no se me echa al cuello, mi intención es abrir el desarrollo, porque estando a la espera de que me coincida otra racha de tiempo y ganas... a ver si no llegamos para el Retroencounter próximo XD

Describo el proceso del bicho:

Librerías y entorno de desarrollo

SGDK y Code:blocks.
Tuto en la web de sgdk para configuarlo.

Básicamente no es más que descargar las librerías y guardarlas en una ruta corta sin espacios (la mía es D:\Bru\sgdk).
Creas dos variables de entorno que hagan referencia a la ruta de las librerías tal como indica el tuto
Y en el Code:blocks configurar un nuevo compilador que será el que usemos con nuestros proyectos para megadrive. En el tuto detallado.

Para saber si todo está bien configurado, o tiramos del clásico Hello World:
#include <genesis.h>

int main()
{
        VDP_drawText("Hello World!", 10, 13);
        return (0);
}


O compilamos alguno de los ejemplos incluidos.

Los gráficos

Imagenesis y algo de PaintshopPRO para corregir paletas.

Jordigahan ha conseguido extraer todos los fondos y sprites del juego original de spectrum.

Empiezo con los fondos.
Se toma el imagenesis, se carga el bitmap correspondiente al fondo y tras indicar un parámetro relativo a cómo queremos generar el mapa de tiles y el tileset, "click and play". El imagenesis no exporta correctamente los gráficos de los tiles si se le requiere que lo haga en formato C, para ello me creé un programita que tomándolo en formato BASIC lo convertía como se requiere.

Los sprites son un poco más coñazo porque ahí sí que no me aclaraba con el imagenesis y me estuve dedicando a recolocar tile a tile el gráfico para que cuando se lo pasase me saliera como me interesaba. En todo caso están la mayoría ya integrados en el código. Aunque lo suyo sería encontrar la manera cómoda y buena de hacerlo pensando en que esto sirva para sacar adelante un remake o plataformas con gráficos más curradetes.

De sonido

nanai del la China por el momento. Los sonidos en wav sí que están ripeados a la espera de poder meterle mano.

Estado del juego / POR HACER

- Terminar de implementar las plataformas móviles
- Implementar los ítems que ofrecen ventajas como inmunidad o te permite caer al agua sin perder todas las vidas.
- Implementar la animación final cuando se escapa con el objetivo cumplido
- Menús de opciones
- Sonido
- Testear a saco y corregir, tanto interacción con ciertas pantallas como la rutina de salto y colisión.
- Ajustar paletas de colores

Y tal vez me esté olvidando algo... Madre mía!!  

El código (los programadores "de método" que no me apedreen, reconozco de antemano que no paso de aficionado novicio con algo de voluntad pero casi nada de idea)

Estado último (versión alpha) (binario):

https://sites.google.com/site/emigr...NMD-alpha01.bin

- Implementadas las cuarenta y ocho pantallas (8 horizontales por 6 verticales). Algunas han de ser corregidas.
- La mayor parte de los enemigos se encuentran disponibles en el código aunque sólo algunos se han colocado en esta versión con el propósito de realizar pruebas de colisiones.
- El salto y las colisiones necesitan mejorarse.
- Teletransportadores y rayos funcionales aunque han de recolocarse y redefinir la longitud
- El elevador quedó a medio programar como se puede ver, falta corregirlo y programar la balsa de las pantallas inferiores, otra plataforma móvil.

La "des"ordenación del código:

Último estado del código (no compila tal cual debido a los conflictos con las últimas librerías)

  • main.c: contiene el bucle principal del juego, las llamadas a todas las librerías y otros archivos de código dedicados a tareas específicas.
  • macros.h: básicamente macros para aclarar-castellanizar el código.
    Ejemplo (fragmento)
    //Estados del pad de control ...............................
    #define PULSAR(x)   (state & (x))
    #define SOLTAR(x)   (changed & (x))

    //Constantes aplicalbles al protagonista ...................
    #define PLAYERWIDTH           16
    #define PLAYERHEIGHT          24

    #define PLAYERSPEED         256


  • enemy.h: funciones que inicializan los enemigos y que se encargan de gestionar su movimiento. En el estado actual del código, los enemigos de la pantalla se inicializan-cargan de la siguiente manera:
    //Enemigos de la pantalla ....................................................
        enemigo_pato00( 4,12, SPEED2, 4, PALETA_SPRITES1, NUEVO);
        enemigo_pato00(12,10, SPEED2, 4, PALETA_SPRITES2, COPIA);
        enemigo_pato00(20, 4, SPEED2, 4, PALETA_SPRITES3, COPIA);
        enemigo_pato00(20,10, SPEED2, 4, PALETA_SPRITES1, COPIA);
        enemigo_pato00(20, 8, SPEED2, 4, PALETA_BASICA,   COPIA);
        enemigo_cucara(20,16, SPEED2, 4, PALETA_SPRITES3, NUEVO);
        enemigo_bicefa(25, 8, SPEED2, 4, PALETA_SPRITES1, NUEVO);
        enemigo_balon0( 8, 8, SPEED2, 4, PALETA_SPRITES2, NUEVO);
        nomasEnemigos();

    Los primeros dos parámetros corresponden a las coordenadas en tiles (a una resolución de 32 horizontales por 16 verticales -los 4 inferiores corresponden a la barra de estado-). Luego la velocidad de movimiento del enemigo, un rango de tiles a partir del cual invertirá su dirección, la paleta -a elegir entre cuatro-, y si ha de copiarse el gráfico a la memoria de vídeo -"NUEVO"- o si ya se encuentra -"COPIA"-.
  • items.h: (sin efecto actual) aquí debe de incluirse el código encargado de distribuir aleatoriamente los ítems por el escenario en cada partida. Tenía pensado almacenar dos o tres posiciones posibles donde pueden aparecer, pero no lo llegué a tener decidido del todo.
  • map.h: contiene las funciones dedicadas a los elementos interactivos del mapa. Funciones de inicialización y actualización-movimiento de los rayos, teletransportadores y plataformas móviles, así como las de carga -en el array de ámbito global mapa[]- y dibujo del escenario.
  • player.h: funciones de inicialización y movimiento del jugador (controles al margen, la gestión del joystick está en main.c). Aquí se encuentran las funciones encargadas de gestionar las colisiones, una de ellas es la especial que se encarga de variar el valor que indica la pantalla activa según por qué parte de la pantalla haya salido el protagonista (la variable global id_pantalla).
  • tile.h: funciones genéricas para detectar colisiones con los tiles (siempre en relación a las coordenadas del personaje). Las funciones de colisión de player.h hacen uso de éstas.
  • tilemap.h: funciones de carga de las distintas pantallas, así como de los enemigos que corresponden a éstas (eso quedó a medio hacer). Básicamente lo que hacen todas es rellenar el array mapa[] con los nuevos valores correspondientes a la pantalla que se va a inicializar, además de cargar enemigos. Seguro segurísimo que había una forma más elegante de hacerlo pero como aficionadete malo que soy no se me ocurrió.
  • tileset.h: por cada pantalla creé una función encargada de mandar a la VRAM los tiles que necesita. Aparte tengo void tilesetGeneral(void) la cual deja de forma permanente en la memoria de vídeo los tiles más comunes para aligerar carga. Es una forma chusquera de hacerlo pero al ser tan simple los gráficos podía permitirme falta de eficiencia mientras iba aprendiendo sobre la marcha.

 



 
avatar
spain.png realbrucest Sexo: Masculino
Donante Unreleased €
Segata Sanshirō
Segata Sanshirō
 
Registrado: Marzo 2008
Ubicación: WTC7
Mensajes: 266
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#2  jordigahan 28 Octobre 2011, 06:05 PM

por mi ok, has realizado un trabajo muy grande y reconozco que es dificil mantenr el nivel de trabajo que has realizado.
Lo importante es que se termine el proyecto, asi que no importa quien participe.

todo aquel que este interesado en participar, solo tiene dejarse caer por aqui.
 




____________
1436952427_60ec4285ee_m
VENDO/CAMBIO MERCADILLO RETRO
 
avatar
spain.png jordigahan Sexo: Masculino
Donante Unreleased €
SEGA Fan
SEGA Fan
 
Registrado: Agosto 2009
Mensajes: 103
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#3  realbrucest 28 Octobre 2011, 06:47 PM

Okis, pues a completar la información se ha dicho... Me pongo a ello

dynamitedanspectrumtile

Estado último (versión alpha) (el binario de megaupload, no la imagen enrejillada :P):

http://www.megaupload.com/?d=VTFZHJ4A

- Implementadas las cuarenta y ocho pantallas (8 horizontales por 6 verticales). Algunas han de ser corregidas.
- La mayor parte de los enemigos se encuentran disponibles en el código aunque sólo algunos se han colocado en esta versión con el propósito de realizar pruebas de colisiones.
- El salto y las colisiones necesitan mejorarse.
- Teletransportadores y rayos funcionales aunque han de recolocarse y redefinir la longitud
- El elevador quedó a medio programar como se puede ver, falta corregirlo y programar la balsa de las pantallas inferiores, otra plataforma móvil.

La "des"ordenación del código:

Último estado del código (no compila tal cual debido a los conflictos con las últimas librerías)

  • main.c: contiene el bucle principal del juego, las llamadas a todas las librerías y otros archivos de código dedicados a tareas específicas.
  • macros.h: básicamente macros para aclarar-castellanizar el código.
    Ejemplo (fragmento)
    //Estados del pad de control ...............................
    #define PULSAR(x)   (state & (x))
    #define SOLTAR(x)   (changed & (x))

    //Constantes aplicalbles al protagonista ...................
    #define PLAYERWIDTH           16
    #define PLAYERHEIGHT          24

    #define PLAYERSPEED         256


  • enemy.h: funciones que inicializan los enemigos y que se encargan de gestionar su movimiento. En el estado actual del código, los enemigos de la pantalla se inicializan-cargan de la siguiente manera:
    //Enemigos de la pantalla ....................................................
        enemigo_pato00( 4,12, SPEED2, 4, PALETA_SPRITES1, NUEVO);
        enemigo_pato00(12,10, SPEED2, 4, PALETA_SPRITES2, COPIA);
        enemigo_pato00(20, 4, SPEED2, 4, PALETA_SPRITES3, COPIA);
        enemigo_pato00(20,10, SPEED2, 4, PALETA_SPRITES1, COPIA);
        enemigo_pato00(20, 8, SPEED2, 4, PALETA_BASICA,   COPIA);
        enemigo_cucara(20,16, SPEED2, 4, PALETA_SPRITES3, NUEVO);
        enemigo_bicefa(25, 8, SPEED2, 4, PALETA_SPRITES1, NUEVO);
        enemigo_balon0( 8, 8, SPEED2, 4, PALETA_SPRITES2, NUEVO);
        nomasEnemigos();

    Los primeros dos parámetros corresponden a las coordenadas en tiles (a una resolución de 32 horizontales por 16 verticales -los 4 inferiores corresponden a la barra de estado-). Luego la velocidad de movimiento del enemigo, un rango de tiles a partir del cual invertirá su dirección, la paleta -a elegir entre cuatro-, y si ha de copiarse el gráfico a la memoria de vídeo -"NUEVO"- o si ya se encuentra -"COPIA"-.
  • items.h: (sin efecto actual) aquí debe de incluirse el código encargado de distribuir aleatoriamente los ítems por el escenario en cada partida. Tenía pensado almacenar dos o tres posiciones posibles donde pueden aparecer, pero no lo llegué a tener decidido del todo.
  • map.h: contiene las funciones dedicadas a los elementos interactivos del mapa. Funciones de inicialización y actualización-movimiento de los rayos, teletransportadores y plataformas móviles, así como las de carga -en el array de ámbito global mapa[]- y dibujo del escenario.
  • player.h: funciones de inicialización y movimiento del jugador (controles al margen, la gestión del joystick está en main.c). Aquí se encuentran las funciones encargadas de gestionar las colisiones, una de ellas es la especial que se encarga de variar el valor que indica la pantalla activa según por qué parte de la pantalla haya salido el protagonista (la variable global id_pantalla).
  • tile.h: funciones genéricas para detectar colisiones con los tiles (siempre en relación a las coordenadas del personaje). Las funciones de colisión de player.h hacen uso de éstas.
  • tilemap.h: funciones de carga de las distintas pantallas, así como de los enemigos que corresponden a éstas (eso quedó a medio hacer). Básicamente lo que hacen todas es rellenar el array mapa[] con los nuevos valores correspondientes a la pantalla que se va a inicializar, además de cargar enemigos. Seguro segurísimo que había una forma más elegante de hacerlo pero como aficionadete malo que soy no se me ocurrió.
  • tileset.h: por cada pantalla creé una función encargada de mandar a la VRAM los tiles que necesita. Aparte tengo void tilesetGeneral(void) la cual deja de forma permanente en la memoria de vídeo los tiles más comunes para aligerar carga. Es una forma chusquera de hacerlo pero al ser tan simple los gráficos podía permitirme falta de eficiencia mientras iba aprendiendo sobre la marcha.


Y por aquí lo dejo de momento. Echadle un ojo aunque sea al binario (la alpha del juego) y ya me contáis.

Saludos y ¡viva el homebrew!  
 



 
avatar
spain.png realbrucest Sexo: Masculino
Donante Unreleased €
Segata Sanshirō
Segata Sanshirō
 
Registrado: Marzo 2008
Ubicación: WTC7
Mensajes: 266
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#4  FacundoARG 28 Octobre 2011, 10:45 PM

Muy bueno y felicitaciones. Yo justo estaba viendo el basiEGA, pero con esto es bastante mejor, capaz porte el SonicJump a la genesis, por lo poco que vi es bastante compatible.

Que tal maneja esto el audio??
 




____________
SegaSaturn Developer Addict
 
avatar
argentina.png FacundoARG Sexo: Masculino
Colaborador SEGASATURNO
Colaborador SEGASATURNO
Professional Videogamer Coder
Donante Unreleased €
 
Registrado: Diciembre 2006
Ubicación: San Luis
Mensajes: 691
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#5  jordigahan 29 Octobre 2011, 02:28 AM

acabo de hacer una copia de tus textos en el foro de clasicos de eol, haber si asi tenemos mas exito.
http://www.elotrolado.net/hilo_desa...370#p1726944892
 




____________
1436952427_60ec4285ee_m
VENDO/CAMBIO MERCADILLO RETRO
 
avatar
spain.png jordigahan Sexo: Masculino
Donante Unreleased €
SEGA Fan
SEGA Fan
 
Registrado: Agosto 2009
Mensajes: 103
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#6  realbrucest 29 Octobre 2011, 11:59 AM

@FacundoARG: sí, si bien encaminado va, lo fastidioso es que me saturé después de un mes de darle mucha caña y tras el parón ahora no termino de animarme a reengancharme al desarrollo. El audio no llegué a trastearlo, Pocket_lucho que también tiene entre manos otra conversión de Spectrum a Megadrive (su trabajo me inspiró para empezar con el mío), me ha contado que en lo relativo al audio todo se vuelve un coñazo y un jaleo. Lo que no sé es si lo dice porque también en su caso le ha tocado aprender sobre la marcha o si es que las librerías son poco intuitivas a la hora de trabajar con el chip de sonido y datos de audio.
Uno de los ejemplos incluidos con las librerías muestra la implementación del audio, pero como digo, yo no he llegado a curiosearlo. Lo tienes aquí si le quieres echar un vistazo rápido: http://code.google.com/p/sgdk/sourc...ound/src/main.c
Por cierto, y por supuesto, que sería grandioso el port del SonicJump. El tutoirial "genérico" para inciarse vendría a ser éste del propio site de sgdk: http://code.google.com/p/sgdk/wiki/SGDKTutorial. Haz alguna prueba si te parece y ya nos cuentas.

@jordigahan: claro, sin problemas. Quería dejarlo caer por aquí antes, como ya te dije por tenerle más cariño al rinconcito éste, pero si lo has copiado en EOL realmente me has ahorrado hacerlo a mí en días venideros. A ver si se nos anima la peña  
 



 
avatar
spain.png realbrucest Sexo: Masculino
Donante Unreleased €
Segata Sanshirō
Segata Sanshirō
 
Registrado: Marzo 2008
Ubicación: WTC7
Mensajes: 266
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#7  jordigahan 29 Octobre 2011, 12:22 PM

al final conseguiste que compilara con el ultimo sdk ?
lo bueno de este proyecto es que nos sirve de base para remakes de otros juegos de la epoca que casi funcionaban igual.  mas adelante, me gustaria aprovechar este motor para liarme con el "jack the nipper 2 in coconut cappers"
 




____________
1436952427_60ec4285ee_m
VENDO/CAMBIO MERCADILLO RETRO
 
avatar
spain.png jordigahan Sexo: Masculino
Donante Unreleased €
SEGA Fan
SEGA Fan
 
Registrado: Agosto 2009
Mensajes: 103
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#8  realbrucest 29 Octobre 2011, 02:17 PM

Esto... ahí me quedé  

Uno de los cambios obligados que había que hacerle al código según me comentó pocketlucho es cambiar la definición de los sprites porque con las últimas librerías algo modificó por esa parte:

_spritedef mySprite;

Eso me parece que ya no funciona y es parte de los errores de compilación.

Citar:
el _spritedef, ahora es Spritedef

Me dijo pocketlucho en un correo.

Aparte, tampoco he llegado a averiguar si el sgdk es ahora más tiquismiquis respecto al mal uso de la memoria. Otra cosa a probar. Lo que más me tocó la moral es que restauré la versión previa de las librerías y usando el mismo código (estoy en que sí que era tal cual) con el que saqué el último binario me daba el mismo error que con la versión actual. Ni idea. Supongo que haría falta verlo con la cabeza más despejada y yo no di con la tecla.
Digo yo que las correcciones para que vuelva a compilar deben de ser mínimas. En todo caso, si no los conservas tú, yo sigo teniendo copias de todos los estados previos del código en caso de que se necesiten.
 



 
avatar
spain.png realbrucest Sexo: Masculino
Donante Unreleased €
Segata Sanshirō
Segata Sanshirō
 
Registrado: Marzo 2008
Ubicación: WTC7
Mensajes: 266
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#9  jordigahan 29 Octobre 2011, 04:57 PM

creo que tengo algunos por ahi. de todas formas creo que ahora habria que centrarse en que vuelva a compilar el codigo. el resto ya ira saliendo.

pasate por el hilo de eol, parece que tenemos un voluntario.
 




____________
1436952427_60ec4285ee_m
VENDO/CAMBIO MERCADILLO RETRO
 
avatar
spain.png jordigahan Sexo: Masculino
Donante Unreleased €
SEGA Fan
SEGA Fan
 
Registrado: Agosto 2009
Mensajes: 103
  • Volver arriba Página inferior
 

Mensaje Re: [DESARROLLO] Plataformas Ochobitero Para Megadrive

#10  FacundoARG 30 Octobre 2011, 12:59 AM

Dame un tiempo y si queres te lo compilo, no hay ningun problema. Lamentablemente ahora estoy sin internet :S;
Tenes algun svn para llevar la rastreabilidad de los cambios??
 




____________
SegaSaturn Developer Addict
 
avatar
argentina.png FacundoARG Sexo: Masculino
Colaborador SEGASATURNO
Colaborador SEGASATURNO
Professional Videogamer Coder
Donante Unreleased €
 
Registrado: Diciembre 2006
Ubicación: San Luis
Mensajes: 691
  • Volver arriba Página inferior
 


Ocultar¿Este tema fue útil?
Compartir este tema
Correo a un amigo Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net

Página 1 de 3
Ir a la página 1, 2, 3  Siguiente