Tutorial programacion NES - Basico

1, 2, 3
wave escribió:cpx es: "comparar x con" así que comparamos el valor del color con el $0D que era el color "malo" para saltárnoslo y seguir con los siguientes, stx backColor copia el valor del registro X (ya incrementado) a la variable que tiene el color de fondo.


Pero entonces $0D ¿que es? ¿se guarda algo aquí? si es así ¿cuando?

Y otra cosa ¿por que empieza por defecto en gris oscuro?
Diskover escribió:
wave escribió:cpx es: "comparar x con" así que comparamos el valor del color con el $0D que era el color "malo" para saltárnoslo y seguir con los siguientes, stx backColor copia el valor del registro X (ya incrementado) a la variable que tiene el color de fondo.


Pero entonces $0D ¿que es? ¿se guarda algo aquí? si es así ¿cuando?

Y otra cosa ¿por que empieza por defecto en gris oscuro?

$0D es el codigo del color "demasiado negro" si te fijas en la paleta de colores que puse mas arriba, solo es un numero.
Casualmente el color 0 es gris en la NES.
wave escribió:$0D es el codigo del color "demasiado negro" si te fijas en la paleta de colores que puse mas arriba, solo es un numero.
Casualmente el color 0 es gris en la NES.


Mmmm, si $0D es el color negro, cuando llegamos a "negro" debería de dejar de funcionar el programa ¿no? y aun así continua... :-?
Diskover escribió:
wave escribió:$0D es el codigo del color "demasiado negro" si te fijas en la paleta de colores que puse mas arriba, solo es un numero.
Casualmente el color 0 es gris en la NES.


Mmmm, si $0D es el color negro, cuando llegamos a "negro" debería de dejar de funcionar el programa ¿no? y aun así continua... :-?

No porque la paleta de colores tiene 13 colores 3 negros, 14 colores, 3 negros, etc no estan los blancos al principio y los negros al final.
wave escribió:No porque la paleta de colores tiene 13 colores 3 negros, 14 colores, 3 negros, etc no están los blancos al principio y los negros al final.


Parece que no tiene sentido. Pongo $39 que es el color verde claro y sigue funcionado con normalidad :-?
Diskover escribió:
wave escribió:No porque la paleta de colores tiene 13 colores 3 negros, 14 colores, 3 negros, etc no están los blancos al principio y los negros al final.


Parece que no tiene sentido. Pongo $#39 que es el color verde claro y sigue funcionado con normalidad :-?

Comparar con el color #$0D solo es para saltarselo, no para mostrar ese color, si quieres que empiece por ese color, añade antes del
forever{
}


lda #$39
sta backColor


De todos modos, si quieres hacer algo, yo me iria leyendo un manual de 6502...
wave escribió:
Diskover escribió:
wave escribió:No porque la paleta de colores tiene 13 colores 3 negros, 14 colores, 3 negros, etc no están los blancos al principio y los negros al final.


Parece que no tiene sentido. Pongo $#39 que es el color verde claro y sigue funcionado con normalidad :-?

Comparar con el color #$0D solo es para saltarselo, no para mostrar ese color, si quieres que empiece por ese color


Ahhhhhhhhhhhh. Ok.

Entonces lda es para almacenar en "a" un valor
Y sta es para almacenar el valor de "a" en un sitio ¿no?

He añadido una linea que hace que cuando pulas arriba se ponga en el color rojo y cuando pulsas abajo el color azul.

Ya voy pillando [ginyo]
Diskover escribió:Ahhhhhhhhhhhh. Ok.

Entonces lda es para almacenar en "a" un valor
Y sta es para almacenar el valor de "a" en un sitio ¿no?

He añadido una linea que hace que cuando pulas arriba se ponga en el color rojo y cuando pulsas abajo el color azul.

Ya voy pillando [ginyo]

Si, y tambien tienes ldx, stx, ldy y ldy, entre otros:
http://www.obelisk.demon.co.uk/6502/instructions.html
wave escribió:
Diskover escribió:Ahhhhhhhhhhhh. Ok.

Entonces lda es para almacenar en "a" un valor
Y sta es para almacenar el valor de "a" en un sitio ¿no?

He añadido una linea que hace que cuando pulas arriba se ponga en el color rojo y cuando pulsas abajo el color azul.

Ya voy pillando [ginyo]

Si, y tambien tienes ldx, stx, ldy y ldy, entre otros:
http://www.obelisk.demon.co.uk/6502/instructions.html


Bieeennnnnn. Ok. Gracias.


Ahora, como te comente antes, voy a tratar de hacer que el arranque en rojo y que vaya incrementando los colores pero cada segundo.

Y luego lo mismo, pero cuando mantenga pulsado A, y el B para reiniciar.
socram8888 está baneado por "incumplimiento términos y condiciones de uso"
Eso deberias utilizar las interrupciones de la PPU. Esto no tengo ni idea de como se hace la verdad :S
Mmm, no consigo sacarlo.

Creo que tiene que ver con alguna declaración a NMI y el interrupt vblank() pero no se como poner lo que quiero ni donde... :-?
Diskover escribió:Mmm, no consigo sacarlo.

Creo que tiene que ver con alguna declaración a NMI y el interrupt vblank() pero no se como poner lo que quiero ni donde... :-?

No hay que complicarse tanto, declara una variable contador en el archivo wram.as, incrementala cada doFrame y cuando sea 60 incrementa el color y pon la variable a 0.
socram8888 está baneado por "incumplimiento términos y condiciones de uso"
60 para NTSC (60Hz) y 50 para PAL (50Hz)

En NesDev había un pequeño código de inicio con el que podías detectar la region automáticamente
wave escribió:
Diskover escribió:Mmm, no consigo sacarlo.

Creo que tiene que ver con alguna declaración a NMI y el interrupt vblank() pero no se como poner lo que quiero ni donde... :-?

No hay que complicarse tanto, declara una variable contador en el archivo wram.as, incrementala cada doFrame y cuando sea 60 incrementa el color y pon la variable a 0.


¿Como declaro la variable contador en wram.as?

Para incrementar hago un ldx cont() o como se ponga y debajo un cpx 60 dentro de un IF?
Diskover escribió:
wave escribió:
Diskover escribió:Mmm, no consigo sacarlo.

Creo que tiene que ver con alguna declaración a NMI y el interrupt vblank() pero no se como poner lo que quiero ni donde... :-?

No hay que complicarse tanto, declara una variable contador en el archivo wram.as, incrementala cada doFrame y cuando sea 60 incrementa el color y pon la variable a 0.


¿Como declaro la variable contador en wram.as?

Para incrementar hago un ldx cont() o como se ponga y debajo un cpx 60 dentro de un IF?

En wram.as:
byte contador


Incrementar la variable:
ldx contador
inx
stx contador

o
inc contador
ldx contador


Comparar y si es 60 incrementar el color:
   cpx #60
   if(equal) {
      ldx backColor
      inx
      cpx #$0D
      if(zero) {
         inx
      }
      stx backColor
      ldx #0
      stx contador
   }


Tambien puedes por ejemplo hacerte la funcion de incrementar el color (esto va arriba, antes del inline doFrame() {):
function incrementaColor() {
   ldx backColor
   inx
   cpx #$0D
   if(zero) {
      inx
   }
   stx backColor
}

Y llamarla asi:
        cpx #60
   if(equal) {
      incContador()
      ldx #0
      stx contador
   }
Wowwwww, funciona perfectamente.

Me estaba liando y al final era una mamonada.
De momento he estado arreglando algunos fallos del framework e intentandolo hacer mas facil de usar, cual os gustaria que fuera el proximo minitutorial?
Ya que estamos con los fondos la cosa seria poner algo en el fondo una imagen.
Diskover escribió:Ya que estamos con los fondos la cosa seria poner algo en el fondo una imagen.

Ok, empezaremos por una imagen estatica porque cargar cosas de forma dinamica tiene tela, una imagen como la que puse en la primera demo.
Eso es, me parece que seria lo mejor.
Esta noche subire el tutorial junto con una revision del framework, pero me ronda otra cosa por la cabeza, y si hacemos un juego en grupo, ya se que se ha propuesto muchas veces xD pero asi podemos ir viendo hacia donde tirar la programacion de NES (cosas que ni tengo ahora claras) y tenemos una meta. Yo habia pensado en un juego de scroll lateral/aventura, estilo metroid o zelda 2, que os parece?
Me parece buena idea, aunque me gustaría aprender primero estas cosas básicas que estamos aprendiendo por ahora, junto con saber poner sprites, moverles, hacer colisiones, etc...

Mi idea inicial era lo del tema Zelda pero visto desde arriba, que me parece que es menos complejo que los de forma lateral.

De todas formas, si hacemos uno en forma lateral ¿que te parece practicar haciendo una replica del primer nivel de Super Mario World portado a la NES, e intentando superar al que hicieron los chinos en los 90?

Te dejo un ejemplo de como podría quedar un Zelda 3 en la NES con las limitaciones de esta. La captura retocada solo tiene 16 colores y teniendo en cuenta lo máximo posible los límites de la NES.

Imagen Imagen
El tema es que con las cosas basicas faltara la manera de juntarlas todas o de aplicarlas a un entorno real, pero bueno, explicare 2 o 3 cosas mas y ya al ajo.
En cuanto al juego, yo preferiria hacer algo original.
Y bueno la captura que has puesto por ejemplo, la barra de estado no seria posible de esa forma, habria que hacerla como en el Zelda I por ejemplo.
wave escribió:El tema es que con las cosas basicas faltara la manera de juntarlas todas o de aplicarlas a un entorno real, pero bueno, explicare 2 o 3 cosas mas y ya al ajo.
En cuanto al juego, yo preferiria hacer algo original.
Y bueno la captura que has puesto por ejemplo, la barra de estado no seria posible de esa forma, habria que hacerla como en el Zelda I por ejemplo.


Ajam ¿estas seguro de que no seria posible? Mmm, en Megaman hay una barra de estado algo parecido pero sin tanto sprite... ¿no seria lo mismo?
Diskover escribió:
wave escribió:El tema es que con las cosas basicas faltara la manera de juntarlas todas o de aplicarlas a un entorno real, pero bueno, explicare 2 o 3 cosas mas y ya al ajo.
En cuanto al juego, yo preferiria hacer algo original.
Y bueno la captura que has puesto por ejemplo, la barra de estado no seria posible de esa forma, habria que hacerla como en el Zelda I por ejemplo.


Ajam ¿estas seguro de que no seria posible? Mmm, en Megaman hay una barra de estado algo parecido pero sin tanto sprite... ¿no seria lo mismo?

En el megaman es como si solo hubiera la barra verde, recuerda que solo pueden haber 8 sprites en la misma linea.
Mmm ¿no se podría hacer algo como esto o nos tendríamos que meter ya en un MMC3 o MMC5?

Imagen
Diskover escribió:Mmm ¿no se podría hacer algo como esto o nos tendríamos que meter ya en un MMC3 o MMC5?

Imagen

Asi si que se podria apañar algo con MMC1, como el Zelda 1:
Imagen
Pero yo creo que ya que es tu reto mejor que lo vayas haciendo en paralelo a medida que vaya surgiendo un proyecto mas "comunitario" :)
Ok, pues a la espera del siguiente tutorial.
socram8888 está baneado por "incumplimiento términos y condiciones de uso"
En realidad no haría falta MMC3 ni nada. El Mario 1 emplea el IRQ que la PPU genera cuando el sprite 0 colisiona contra un pixel no transparente

Entonces pone ese sprite junto a un pixel no transparente en el scanline a partir del cual se genera el mapa y listo
socram8888 escribió:En realidad no haría falta MMC3 ni nada. El Mario 1 emplea el IRQ que la PPU genera cuando el sprite 0 colisiona contra un pixel no transparente

Entonces pone ese sprite junto a un pixel no transparente en el scanline a partir del cual se genera el mapa y listo

Si pero el Zelda hace scrolling hacia arriba y tengo la impresion de que lo hace con mirroring single table y el mapper mas decente que lo soporta es el mmc1 (a parte de que en 32KB no te va a caber el zelda)
socram8888 está baneado por "incumplimiento términos y condiciones de uso"
Me estaba refiriendo al tema de poner la barra. Para un Zelda creo que un MMC3 iría bien, que es más fácil de usar que el MMC1
socram8888 escribió:Me estaba refiriendo al tema de poner la barra. Para un Zelda creo que un MMC3 iría bien, que es más fácil de usar que el MMC1

Bueno tanto el MMC1 como el MMC3 estan soportados por mi framework(excepto las interrupciones aun)

PD: el sprite 0 hit no produce ninguna IRQ
socram8888 está baneado por "incumplimiento términos y condiciones de uso"
Cierto, cierto. Se marca un bit en la PPU pero no produce ninguna interrupción. Creía recordar que sí...
Voy a subir el framework entero otra vez ya que la version que tengo del fceux ahora el avast me la reconoce como malware ¬¬ la he actualizado a una superior.
Ademas he actualizado el framework con rutinas molonas para las paletas de colores, estas se pueden ver en el proyecto: megamanEffects que por ahora no explicare ya que solo es una pequeña demo tecnica pero si alguien tiene curiosidad que pregunte.
He simplificado bastante las cosas en el framework (y mas que lo hare) para intentar al maximo que todo lo posible se haga de forma transparente (como ahora el update de los sprites o de la paleta de colores).
El otro proyecto, backgroundTable es el que contiene el codigo para cargar la pantalla
Sin mas dilacion:
DESCARGA

Y el codigo, que es de lo mas simplon (solo pongo la parte que hace referencia a la carga):
   //Cargamos la paleta titlepal
   nes_loadMemsrc(titlepal)
   vid_loadBackGrndPalette()
   
   //Copiamos los datos del titulo a la nametable 0
   vid_copyNametable0Vram(titledata);
   
   ldx #PALETTE_BLACK
   stx backColor

Con la primera linea se carga el puntero a memoria con la direccion de la paleta de colores del titulo.
Con la segunda se le dice que cargue como paleta de fondo la paleta a la que apunta el puntero.
La tercera linea copia de la rom a la nametable 0 toda la informacion sobre que tiles usar y los colores.
Los graficos en si no hay que cargarlos (por ahora) porque estamos usando chrrom y ya vienen cargados.

Si quereis jugar un poco con los graficos, abrid el archivo title.nam con el programa que hay en: \tools\gfx\nesst
Mmmm, creo que has pegado un salto demasiado grande, pero bueno...

Con ese código la verdad que no me queda muy claro como da de resultado esa pantalla ya formada. Resulta que tenemos un CHR donde se guardan todos los titles que forman la pantalla de título, ok. Pero no veo como interpreta el código esos titles para que acaben formando esa imagen.

Estoy perdido [+risas]
Diskover escribió:Mmmm, creo que has pegado un salto demasiado grande, pero bueno...

Con ese código la verdad que no me queda muy claro como da de resultado esa pantalla ya formada. Resulta que tenemos un CHR donde se guardan todos los titles que forman la pantalla de título, ok. Pero no veo como interpreta el código esos titles para que acaben formando esa imagen.

Estoy perdido [+risas]

Tienes que remontarte a la parte donde explique las nametables, el archivo title.nam contiene los datos que se pasan directamente a la PPU de la NES y que forman el fondo, si lo abres con el programa que he dicho podras verlo y modificarlo.
La nametable de la nes lo unico que contiene es una secuencia de tiles de izquierda a derecha y de arriba a abajo, esto se copia en la direccion $2000 de la PPU que es la que contiene la primera nametable, no tiene mas misterio.
Ok, esa información ya viene en el CHR propio para formar la imagen. Si yo ahora me hago una imagen desde cero pasará mas de lo mismo. Esto es lo mas simple para mostrar algo en pantalla ¿no?

Pero mas adelante, si por ejemplo, hacemos un scroll ya no será tan fácil la cosa y habrá que ir sobrescribiendo en la RAM de la PPU para cambiar constantemente esa pantalla... ¿es así?

Por otro lado, el NES Screen Tool me estoy volviendo loco usandolo y no me aclaro. Hace mucho lo que se le pone de los cojones. Hago un screen de una forma, salvo el CHR, luego el NAM, y luego la paleta. Monto la rom y al final, me cambia la paleta, muchos de los titles me les cambia, etc... no me aclaro :-( ¿Como debería de usarlo?
Diskover escribió:Ok, esa información ya viene en el CHR propio para formar la imagen. Si yo ahora me hago una imagen desde cero pasará mas de lo mismo. Esto es lo mas simple para mostrar algo en pantalla ¿no?

Pero mas adelante, si por ejemplo, hacemos un scroll ya no será tan fácil la cosa y habrá que ir sobrescribiendo en la RAM de la PPU para cambiar constantemente esa pantalla... ¿es así?

Por otro lado, el NES Screen Tool me estoy volviendo loco usandolo y no me aclaro. Hace mucho lo que se le pone de los cojones. Hago un screen de una forma, salvo el CHR, luego el NAM, y luego la paleta. Monto la rom y al final, me cambia la paleta, muchos de los titles me les cambia, etc... no me aclaro :-( ¿Como debería de usarlo?

Esto es lo mas simple, yo aun no he llegado a hacer un escenario dinamico, me tengo que montar un buen engine porque sino luego todo seran problemas, ahora mismo estoy con el engine para poder manejar "objetos" una vez tenga este pasaremos a intentar hacer aparecer objetos y que tengan comportamiento (y espero que colisiones :p)

Lo has guardado todo con el mismo nombre que los que yo tenia o estas creando unos nuevos?
Si son archivos nuevos tendras que modificar romdata.as y chrdata.h para que apunte a tus graficos.
wave escribió:Lo has guardado todo con el mismo nombre que los que yo tenia o estas creando unos nuevos?
Si son archivos nuevos tendras que modificar romdata.as y chrdata.h para que apunte a tus graficos.


Ahhhh, ok... jajaja, bueno miraré a ver como modifico eso. Si, estaba haciendo una imagen nueva desde cero.

Adelante con ese engine. Sinceramente, pensé que explicarías como programar en la NES en ASM, pero veo que con esto es mas fácil, aunque menos "puro". Pero mientras de resultados: Vale.
Diskover escribió:
wave escribió:Lo has guardado todo con el mismo nombre que los que yo tenia o estas creando unos nuevos?
Si son archivos nuevos tendras que modificar romdata.as y chrdata.h para que apunte a tus graficos.


Ahhhh, ok... jajaja, bueno miraré a ver como modifico eso. Si, estaba haciendo una imagen nueva desde cero.

Adelante con ese engine. Sinceramente, pensé que explicarías como programar en la NES en ASM, pero veo que con esto es mas fácil, aunque menos "puro". Pero mientras de resultados: Vale.

Si, mi intencion es hacerlo lo mas sencillo posible, llegar a tener un conjunto de rutinas con las que poder hacer mas o menos cualquier tipo de juego evitandose dolores de cabeza varios.
En romdata y chrdata no veo que poder cambiar, por que los titulos ha los que hace referencia "title.xxx" les respeto totalmente y no se que mas podría cambiar.

Creo que el problema esta principalemnte en el propio programa NES Screen Tool que hace cosas "raras". Muchos titles me les convierte en el mismo una vez guardados aunque sean diferentes. Creo que tiene que ver con el nametable. Cuando lo guardas te lo cambia todo.
Diskover escribió:En romdata y chrdata no veo que poder cambiar, por que los titulos ha los que hace referencia "title.xxx" les respeto totalmente y no se que mas podría cambiar.

Creo que el problema esta principalemnte en el propio programa NES Screen Tool que hace cosas "raras". Muchos titles mes les convierte en el mismo una vez guardados aunque sean diferentes.

No se que estas intentando transformar pero hay que tener en cuenta que si el dibujo tiene demasiados tiles diferentes, en NES no se pueden usar mas de 256 para el fondo, primero intenta modificar la imagen que ya hay a ver que sale, o la paleta o un tile en concreto, en vez de intentar cargar una imagen nueva.
Veamos, abro el NES screen Tool y cargo el CHR del proyecto backgroundTable.

¿Como hiciste esa screen? ¿A partir de que, de un BMP?

Juego un poco con los tiles y las paletas, pero no me saca de nada puesto que los tiles ya tienen asociada una paleta y no me deja cambiarla libremente a mi gusto o al menos no doy con la herramienta que me permita coger un tile en concreto y darle una paleta diferente. Me explico: Tenemos cuatro paletas de cuatro colores diferentes para todos los tieles que hay. Si yo quiero coger X tile y cambiarle la paleta, puedo modificarle los colores, pero no puedo decirle que en vez de la paleta 1, me coja la 3. El cambiar los colores está muy bien, pero me cargo los demas tiles y no es lo que deseo.

No se si me he explicado bien :-(
Diskover escribió:Veamos, abro el NES screen Tool y cargo el CHR del proyecto backgroundTable.

¿Como hiciste esa screen? ¿A partir de que, de un BMP?

Juego un poco con los tiles y las paletas, pero no me saca de nada puesto que los tiles ya tienen asociada una paleta y no me deja cambiarla libremente a mi gusto o al menos no doy con la herramienta que me permita coger un tile en concreto y darle una paleta diferente. Me explico: Tenemos cuatro paletas de cuatro colores diferentes para todos los tieles que hay. Si yo quiero coger X tile y cambiarle la paleta, puedo modificarle los colores, pero no puedo decirle que en vez de la paleta 1, me coja la 3. El cambiar los colores está muy bien, pero me cargo los demas tiles y no es lo que deseo.

No se si me he explicado bien :-(

Recuerda que en la nes, cada 2x2 tiles comparten paleta, no puedes poner una paleta a cada tile, por eso hay que intentar alinear los graficos para que la paleta quede lo mejor posible.
Si que puedes cambiar la paleta que afecta a cada bloque, usa esta version del programa que es mas nueva (la añadire al framework en la proxima version) ftp://ftp.untergrund.net/users/shiru/nesst.zip
Marca la opcion "Apply palettes" y elige una paleta, a partir de ahi podras cambiar la paleta a conjuntos de 2x2 tiles por la que tienes seleccionada.
Si, yo la hice a partir de un BMP
Ok. Con este se ve todo muchísimo mas claro y es mas cómodo para retocar los 2x2 tiles.

EDITO: Jeje, bueno, después de un trabajillo desde 0, conseguí sacar esto:

Imagen

Basado en esta escena de la versión de SNES

Imagen

Aquí dejo la rom:
Queda muy bien, como se nota que el Zelda de SNES tambien esta optimizado en uso de tiles :)
Pues me llevó lo suyo, puesto que tuve que ajustar la imagen lo justo para que por ejemplo los números usasen solo un tile, los objetos de hierba no se mezclasen con los de la casa, algunos objetos, etc... y así poder usar paletas diferentes, etc...

Al final usé Photoshop con un act que tenia la paleta de la NES, jeje. Me hice una cuadricula que me representaba los tiles y luego unas guías que me hacían los 2x2 tiles para tener en cuenta el uso de paletas. Hice la imagen en BMP y luego con el NES Screen Tool me dedique a dar color, modificar alguna cosa, etc...

EDITO: He mejorado un poquito mas la casa, añadido la sombra, y algún detalle mas.

Imagen

EDITO 2: Añado un screen de un supuesto Super Mario World versión NES.

Imagen

EDITO 3: Y otro screen de un supuesto Super Mario World versión NES. El marcador es diferente. Colocado arriba para que sea lo mas fiel al original, a parte de que prescindí del escenario trasero y he hecho una recreación libre por ser mas fácil de portar.

Imagen Imagen
Anda, no habia visto esas otras imagenes, que chulas.
Podrias intentar tambien a ver si puedes hacer diferentes pantallas utilizando los mismos tiles.
Ah, otra cosa, los tiles de la barra superior no hace falta que los incluyas ya que si se hace bankswitch de los graficos a medio frame, puedes utilizar dos paginas diferentes para la barra y para el resto.

Sprites y Metasprites

La NES es capaz de manejar por hardware 64 sprites de 8x8 pixels o de 8x16 pixels. Con un solo sprite en la mayoria de juegos no es insuficiente para representar un objeto del mismo, por eso utilizaremos el concepto de Metasprite.
Un Metasprit ees un conjunto de sprites secuenciales que utilizan tiles tambien secuenciales en memoria para generar un sprite mas grande, como por ejemplo en Mario Bros, el personaje principal es un Metasprite de 2x2 y cuando esta en Super Mario es un Metasprite de 2x4

En este tutorial vamos a utilizar precisamente eso, el MetaSprite de SuperMario y moverlos un poco por la pantalla utilizando los MetaSprites tal y como estan en el framework.

Mas adelante, si consigo hacer un sistema de objetos usable, se intentara otro tutorial pero con objetos, que son conjuntos de MetaSprites (con diferentes paletas, tamaños) y la idea es que estos objetos puedan tener velocidad, aceleracion, colisiones...

Pero ahora con lo basico: DESCARGAR(solo incluyo las carpetas del framework y del proyecto, pegar en la carpeta donde tengais el framework)

Espero preguntas :)
Bien, pero me parece que has pegado un salto grande.

¿Puedes explicar como pones un solo tile en pantalla? ¿o un solo sprite? Sin que tenga animación ni movimiento. Lo de la animación y movimiento se podía haber dejado para el siguiente tutorial :-)

¿La carpeta BIN que has metido en este ejemplo tiene los archivos del framework diferentes al ultimo que publicaste?

wave escribió:Anda, no habia visto esas otras imagenes, que chulas.
Podrias intentar tambien a ver si puedes hacer diferentes pantallas utilizando los mismos tiles.


De hecho, me he currado un BMP mezclando los tiles de unos y otros y luego optimizando, dado que muchos repetían tiles.

Poco a poco le cojo el tranquillo a esto. :-)

wave escribió:Ah, otra cosa, los tiles de la barra superior no hace falta que los incluyas ya que si se hace bankswitch de los graficos a medio frame, puedes utilizar dos paginas diferentes para la barra y para el resto.


No se lo que es el bankswich, pero me imagino que sea lo de la interrupción para poner el marcador ¿no?

Si no incluyo esos tiles ¿donde irian?

Por otro lado, aprovecho para subir la última pantalla que me curré basado en el SMW. En este caso he intentado copiar los tiles de la SNES lo mas fielmente posible.

Imagen Imagen
Vayamos por partes.
¿Puedes explicar como pones un solo tile en pantalla? ¿o un solo sprite? Sin que tenga animación ni movimiento. Lo de la animación y movimiento se podía haber dejado para el siguiente tutorial :-)

Manejar un solo tile no lo voy a contemplar ya que todo se hara mediante metasprites y con las funciones que he creado en el framework, pero siempre puedes hacer un metasprite de 1x1, cambiando la linea:
putMetaSprite(#50, #50, #2, #4, #SPR_ATTR.PALETTE_0, #8)

Los valores son por orden:
posicion x, posicion y, tamaño x en tiles, tamaño y en tiles, atributos , tile inicial
Si quieres quitar la animacion, quita el codigo que pone:
//Animacion andando de mario
   lda frames
   cmp #15
   if(greater) {
      lda metaSprites[0].firstTile
      switch(reg.a) {
         case #0 {
            lda #$8
         }
         case #$8 {
            lda #$10
         }
         case #$10 {
            lda #0
         }
      }
      sta metaSprites[0].firstTile
      
      lda #0
      sta frames
   }

Lo de la animacion... es que tampoco tiene mucho misterio, si tienes bien ordenados los tiles es decirle que el tile inicial del metasprite sea uno u otro, de todos modos poner un sprite solo sin moverlo es muy soso, mejor poner un poco de chicha y ya se irá sacando poco a poco lo que no se entienda.

¿La carpeta BIN que has metido en este ejemplo tiene los archivos del framework diferentes al ultimo que publicaste?

Si, siempre lo estoy actualizando

No se lo que es el bankswich, pero me imagino que sea lo de la interrupción para poner el marcador ¿no?
Si no incluyo esos tiles ¿donde irian?

El bankswitch es cambiar de unos tiles a otros, en el caso de usar CHR-ROM se puede hacer a media pantalla.
Estos tiles del marcador irian en su propio chr.

Por cierto, los 8 primeros pixels y los 8 ultimos no suelen ser visibles asi que yo desplazaria la barra superior un tile hacia abajo.
127 respuestas
1, 2, 3