Para mas y mejores tutoriales, pueden visitar mi web
http://theelf-megadev.com/
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:
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.1 Tile : 8x8 pixeles = 64 pixeles
Pantalla: 320x224 = 71680 pixeles
Cantidad de tiles necesarios para llenar la pantalla: 71680/64 = 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.

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.
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.Fondo: 640x224 = 143360 pixeles / 64 = 2240 tiles
Maximo disponible: 966 tiles
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

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:

Trozo de 40x24 pixeles, 15 tiles original de neogeo

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.

Original NeoGeo, 256 colores, 2240 tiles

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

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

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
Abrimos la imagen fondo.bmp ,seleccionamos 15 colores,4bpp,1plane,8x8 tile, y le damos a ACTIONS->Quantize nowEn dirección X luego a Y, se usa para fondos por ejemplo
En dirección Y luego a X, se usa para Sprites

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

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

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
El resultado final, es el sonic de Master System en nuestra megadrive
