Programacion BEX y trabajo con tiles Megadrive

Este espacio está dedicado a las consolas de mesa y sus juegos. Características, consejos, encuestas y todo lo relacionado a ellas.
Responder
Avatar de Usuario
TheElf
Street Fighter II Player
Street Fighter II Player
Mensajes: 1782
Registrado: 31/05/10 7:03
Ubicación: España + 日本
Contactar:

Programacion BEX y trabajo con tiles Megadrive

Mensaje por TheElf » 30/06/10 4:15

Hola, como no he visto ningun hilo de programacion, y ya que soy nuevo, pense en aportar algo. Si este no es el foro adecuado, que lo muevan donde deve ir

Para mas y mejores tutoriales, pueden visitar mi web

http://theelf-megadev.com/


Comenzare hablando de los graficos, para pasar a la programacion en BasiEgaXorz para Megadrive/MegaCD/32x

Ire subiendo poco a poco, tutoriales

** NOTA: Originalmente habia echo este tutorial, y los ejemplos en otro foro, como borre/perdi mucho de los codigos, no puedo cambiar los ejemplos ya compilados **
Tutorial 0: Tiles
Programas que use en este tutorial:
Editor grafico: Paint Shop pro 9
Conversor de tiles: ImaGenesis http://devster.monkeeh.com/sega/imagenesis/

Seguro muchos ya saven que son los tiles, y como se trabajan.

Para los que no, los tiles son pequeñas unidades graficas, de 8x8 pixeles, en el que se divide la pantalla. Agarrando la calculadora, la megadrive tiene 320x224 pixeles de resolucion asi que:
1 Tile : 8x8 pixeles = 64 pixeles
Pantalla: 320x224 = 71680 pixeles
Cantidad de tiles necesarios para llenar la pantalla: 71680/64 = 1120 tiles
Basicamente, si queremos poner un fondo de pantalla en MD, simplemente agarramos cualquier imagen, redimensionamos a 320x224, le adaptamos los colores a la paleta de megadrive, y listo. Ocupamos los 1120 tiles.

Pero que pasa si, necesitamos mostrar, por ejemplo, un escenario de un juego de peleas? porque el escenario, es mas amplio que 320x224, basicamente, son como poco 2 pantallas de largo.

Ahi es donde viene el calvario, ya que hay que lograr que aunque el fondo sea mucho mas grande que la pantalla, no ocupe mas de los 1120 tiles.

Luego viene otro problema, querremos poner, los personajes, las barras de energia..etc

Asi que hice calculos: La megadrive puede guardar en memoria un maximo de 1344 tiles (43008 bytes de VRAM), pero los tiles 0 a 255 son reservados para fuentes (texto). Con un truco se pueden usar tiles a partir del numero 128. Asi que nos quedarian un total de 1216 tiles utiles.

Otro punto a tomar en cuenta son los colores. Megadrive puede mostrar en pantalla 64 colores, pero con condiciones. No se puede usar una paleta de 64 colores, si no 4 de 16 colores.Pero en cada paleta hay un color de fondo y otro de transparencia, lo que nos resta 8 colores, que nos da un total de 56 colores utiles. En caso de los sprites se puede usar el color de fondo.

Como muestro en el siguiente grafico, un personaje ocupan un promedio de unos 90-100 tiles cada uno
, y se podria decir que un maximo de 110 tiles.

Imagen

Asi que habria que reservar 220 tiles para personajes, y al menos 30 mas para varios (barras, animaciones..etc)

Asi que de los 1216 tiles utiles, solo nos quedan 1216 - 250 = 966 tiles


Volvemos al fondo. Tenemos el fondo de NeoGeo "Fire at Wadamoya" de 640x224 pixeles.
Fondo: 640x224 = 143360 pixeles / 64 = 2240 tiles
Maximo disponible: 966 tiles
O sea, que solo disponemos de un 43% de tiles para trabajar, o lo que es lo mismo, tenemos que descartar un 67% de la imagen original.
Eso sin contar que la neogeo tiene 256 colores, mientras que nosotros solo disponemos de 14 para el plano de fondo.

Aqui viene el trabajo sucio :) con photoshop, paint shop pro..etc, hay que abrir la imagen original del fondo del NeoGeo, dividir en una cuadricula de 8x8 y buscar patrones, tiles similares, sitios muertos...

Que significa esto? pues, que basicamente si dos trozos de 8x8 (1 tile) son iguales, solo ocupan el espacio de 1 tile, si varios tile tienen un mismo color, ocupan solo 1..etc

Por ejemplo:

Imagen
Trozo de 40x24 pixeles, 15 tiles original de neogeo

Imagen
El mismo trozo, modificado, usando solo 6 tiles. Se aprecia la perdida de informacion, pero al menos se mantiene la "escencia" original

Asi que despues de 6 o 8 horas de trabajo, logre que este escenario de NeoGeo de 2240 tiles, quedara en solo 960 tiles!! XD menuda paliza me pege buscando patrones, copiando pegando trozos...
Y lo mas dificil, adaptar los 256 colores del NeoGeo a 14 colores. Lo peor fue que dentro de la paleta de la MD no encontre todos los colores necesarios, solo encontre 11. Asi que tuve que trabajar la imagen, y reducirla a 11 colores.

Imagen
Original NeoGeo, 256 colores, 2240 tiles

Imagen
Modificado para Megadrive, 11 colores, 960 tiles

Aqui dejo la rom de megadrive, si alguien quiere provarla en un emulador. Solo muestra el fondo, y presionando A y izquierda+derecha se hace el scroll
Mirror:

Aqui, pongo una captura de los personajes sobre el fondo, es una rom que hice, muy simple, sin movimientos, solo para probar que la MD puede con los personajes y fondo

Imagen

Y aqui una captura de como trabaje el personaje, para que entre dentro del limite de tamaño de sprites de la MD, y ocupe menos memoria

Imagen




Tutorial 1: Manejo de Tiles y Sprites
[/size]

Si leyeron el tut 0, sabran que la MD tiene 64k de video, muestra 64 colores en pantalla, en 4 paletas de 16 colores cada una, y normalmente se usa la resolución de 320x224 (entre otras)

En Este tutorial ya comenzaremos a programar. Para hacerlo, usaremos Basiegaxorz, un compilador de Basic para Megadrive, muy simple, pero extremadamente potente.
Leer la ayuda de BEX ayuda muchisimo!!



Como dije, el “tile” es la unidad mas pequeña en la que se puede trabajar.Asi que todo estara generado por tiles.O sea la pantalla de la megadrive, no tiene 320x224 pixeles, si no 40x28 tiles

Vamos como primer intento de programación a poner un sprite, y un simple fondo. Bajen el siguiente pack con todo listo para usar


NOTA: X es la resolución horizontal, Y es la vertical

Imagenesis es simple de usar FILE->OPEN abrimos una imagen BMP a 16 colores, en Mode, tenemos dos opciones
En dirección X luego a Y, se usa para fondos por ejemplo
En dirección Y luego a X, se usa para Sprites
Abrimos la imagen fondo.bmp ,seleccionamos 15 colores,4bpp,1plane,8x8 tile, y le damos a ACTIONS->Quantize now

Imagen

Fijarse en los datos en la parte de abajo, muy importantes, 11 colors in 320 tiles.

Si vamos a a ACTIONS->EXPORT TILE DATA, nos aparecerá una ventana, donde si seleccionamos en Format BASIC, nos mostrara un montón de datos en este formato

DATALONG $11121112 ‘Tile #0

Si se fijan bien, cada tile esta formado por 64 caracteres, que representan los píxeles, y los números son el color de cada píxel (de 0 a 15)


En ACTIONS-> Export pallette data, veremos un dato en este formato

DATAINT $0EA0, $0EA0,…etc

Esos son los 16 colores de la paleta del grafico en el que estamos trabajando.

Todos los datos de este grafico estan en el archivo 1.bex


A continuación, abrimos el basiegaxorz, y cargamos el archivo 1.bex, veriamos esto

Imagen

Noten que al final del archivo, esta cargado el grafico, ya transformado a codigo BASIC

Aquí tenemos varios comandos muy utiles

loadtiles suelo,320,256: Este comando, lo que hace es cargar los tiles en memoria de video, carga el tile “suelo”, que tiene 320 tiles (recuerden del imagenesis), en la posición 256 (como explique la MD tiene 1344 espacios para tiles)

Pallettes suelo_pal,0,0,16 : Aquí cargamos la paleta de colores, en este caso “suelo_pal”. El primer 0 es porque cargamos la paleta como la primera de las 4 (0,1,2,3), el segundo 0 es para indicarle cuantos colores cargamos, lo dejamos en 0 porque los queremos todos, y el 16 final es para indicar cuantos colores tiene nuestra paleta.

Drawtilesinc 256,0,20,40,8: Muestra los tiles en pantalla, el comando seria

Drawtilesinc 256, X, Y, ancho, alto

256 es la posición de tiles donde empezara a leer, X en 0 porque comenzamos en la parte izquierda, Y es 40 porque nuestra imagen tiene 8 de alto, y 40x8 es el tamaño de nuestra imagen.[/quote]

Ahora si le damos TOOLS->Compile, nos generara un archivo basic.bin, en la carpeta del basiegaxorz, que podremos cargar con cualquier emulador de megadrive


Imagen

Ahora, cerramos el archivo, 1.bex, y abrimos el 2.bex, aquí ya carge el sprite “sonic.bmp” , que anteriormente transforme en imagenesis


Veremos nuevos comandos utiles:

sonic=addsprite(4,3): Aquí cargamos el sprite del sonic, donde le indicamos que tiene 4 tiles de alto, por 3 de ancho.

propsprite sonic,576,1: Aquí cargamos el sprite en memoria de video, donde 576 es el numero de tile de comienzo (256+320 del fondo), y el 1 es la paleta de colores a usar.

x=160: Le asignamos un valor a x para el movesprite

movesprite sonic,x,303: Finalmente movemos el sprite al sitio de pantalla que mas nos guste, en este caso a las coordenadas X=32, Y=175 (ACLARACION: tanto X como Y comienzan en 128 no en 0)



Cerramos el 2.bex, y abrimos el otro ejemplo el archivo 3.bex, aquí hay varios comandos basicos de acceso al joystick, y un loop para que el programa este siempre leyendo el pad.

Do / loop: Todo lo que este dentro del Do/Loop se repetira por el infinito, es un bucle

J=joypad(): Asignamos el pad a una variable J para que sea mas facil de leer

Código: Seleccionar todo

if j.2 then 
   movesprite sonic, x,303 
   x-- 
end if
Aquí básicamente, le decimos que si se presiona el botón 2 del pad, mover el sprite x lugares en negativo. Como el comando esta dentro de un bucle, x—hace que mientras se mantenga presionado el botón 2, se reste 1 a x


El resultado final, es el sonic de Master System en nuestra megadrive

Imagen
Última edición por TheElf el 16/08/19 20:13, editado 7 veces en total.
Imagen

Avatar de Usuario
kuroi1986
Columns Player
Columns Player
Mensajes: 725
Registrado: 23/04/10 22:14
Frase: Retrogaming is a lifestyle
Ubicación: Rosario, Santa Fe, Argentina

Re: Programacion BEX y trabajo con tiles Megadrive

Mensaje por kuroi1986 » 30/06/10 5:18

Es un despelote :o

:P

Ya en serio, muy bueno el tema y bien explicado. Ayuda a comprender mejor las capacidades tecnicas de la consola y encima enseña como crear o adaptar juegos a Megadrive. Esto me motiva a realmente buscar un cartucho flash para esta maquina y asi poder crear mis propios juegos o adaptar otros y jugarlos comodamente en la consola original


Gracias TheElf por este tutorial introductorio! Espero ver los siguientes pronto!
Imagen

Avatar de Usuario
TheElf
Street Fighter II Player
Street Fighter II Player
Mensajes: 1782
Registrado: 31/05/10 7:03
Ubicación: España + 日本
Contactar:

Re: Programacion BEX y trabajo con tiles Megadrive

Mensaje por TheElf » 30/06/10 5:41

Gracias TheElf por este tutorial introductorio! Espero ver los siguientes pronto!

De nada! gracias por responder, y ya puedes ver el siguiente, que lo acabo de subir, es un ejemplo de como programar un pequeño sonic...

Basicamente pone un fondo, el sprite, movimiento atras/delante y nada mas... pero es la base para programar algo mas complejo


Otra cosa, en mi web tengo todo mejor explicado, lo que no se, es si se puede mencionar la direccion, o eso esta prohibido aqui ?
Imagen

Avatar de Usuario
Shinnok
Admin
Admin
Mensajes: 18780
Registrado: 20/09/06 20:54
Frase: Nothing, Nothing Can Prepare You !
Ubicación: Outworld
Contactar:

Re: Programacion BEX y trabajo con tiles Megadrive

Mensaje por Shinnok » 30/06/10 21:36

Gracias por el aporte The Elf !! Si, mientras no sea un foro como este, podés mencionar tranquilamente tu web. :)
Imagen

nico
Tetris Player
Tetris Player
Mensajes: 404
Registrado: 14/03/10 20:12
Frase: Un Rockman real no vendría mal.

Re: Programacion BEX y trabajo con tiles Megadrive

Mensaje por nico » 13/07/10 2:18

The elf..sos un fenomeno! me colgue leyendo y tratando de entender un poco sobre el tuto que hiciste. Hay varias cosas interesantes. Yo programo muy basico en actionscript, se hacer sprites y animar personajes. Uso mas que nada Flash. Esto es interesante porque quiero hacer un juego con estos parametros y me sirve bastante, asique muchas gracias por el aporte. Cualquier cosa si no te molesta mando MP cuando tenga alguna duda en el desarrollo del proyecto! Gracias de nuevo por el aporte!!

Avatar de Usuario
TheElf
Street Fighter II Player
Street Fighter II Player
Mensajes: 1782
Registrado: 31/05/10 7:03
Ubicación: España + 日本
Contactar:

Re: Programacion BEX y trabajo con tiles Megadrive

Mensaje por TheElf » 14/07/10 5:33

Hola, gracias por responder. En lo q te pueda ayudar, lo hare, solo enviame MP.

Lo que si no tengo ni idea de action script o flash
Imagen

Avatar de Usuario
BADHERO
Street Fighter II Player
Street Fighter II Player
Mensajes: 1780
Registrado: 07/01/14 17:59
Frase: que pasa campeón?
Ubicación: Moreno zona oeste

Re: Programacion BEX y trabajo con tiles Megadrive

Mensaje por BADHERO » 26/06/14 4:01

encontre el tuto made en rg
http://www.theelf-megadev.com/index.htm
aca dejo el tutorial mas completo y hecho por theelf

Responder