Tutorial programacion NES - Basico

1, 2, 3
Ok, estuve mirando y lo de la animación de Mario incluso subirle o bajarle la velocidad :-). Los case... no lo pillo. Dependiendo hacia donde lo muevas te hace una cosa u otra, ok, pero por ejemplo

case #0 {
            lda #$8
         }


Mmm le estamos diciendo que si empieza en el tile 0 avance hasta el 8, que esto se guarde en "a" y que el sprite se cargue a partir de ahí con los atributos que le dimos antes? ¿Esto es así?

Otra cosa ¿El sprite de Mario de donde coge la paleta de colores? Lo estoy abriendo con el NES Screen Tool y cargo el archivo PAL que viene y ninguna de las muestras corresponde con el de Mario.

EDITO: Retiro lo dicho. Me he dado cuenta que los colores que te muestra el NES Sreen Tool son muy diferentes a los que muestra luego la NES.

De todas formas no me cuadra. He cambiado la pantalla de fondo por otra mía con una PAL diferente y el sprite de Mario parece como que tiene la suya propia, ¿pero de donde coje su paleta?
Diskover escribió:Ok, estuve mirando y lo de la animación de Mario incluso subirle o bajarle la velocidad :-). Los case... no lo pillo. Dependiendo hacia donde lo muevas te hace una cosa u otra, ok, pero por ejemplo

case #0 {
            lda #$8
         }


1)Mmm le estamos diciendo que si empieza en el tile 0 avance hasta el 8, que esto se guarde en "a" y que el sprite se cargue a partir de ahí con los atributos que le dimos antes? ¿Esto es así?

2)Otra cosa ¿El sprite de Mario de donde coge la paleta de colores? Lo estoy abriendo con el NES Screen Tool y cargo el archivo PAL que viene y ninguna de las muestras corresponde con el de Mario.

3)De todas formas no me cuadra. He cambiado la pantalla de fondo por otra mía con una PAL diferente y el sprite de Mario parece como que tiene la suya propia, ¿pero de donde coje su paleta?


1)Si, si estas en el $0 pon el $8, si estas en el $8, pon el $10, si estas en el $10 pon el $0, creo que era esta la secuencia, si en el FCEUX miras los datos de la ppu veras que son los tiles de inicio de la cabeza del mario grande.

2) La paleta de colores esta en el codigo, en el main.as mas arriba, donde pone marioPal, para este caso no sirve el NES Screen Tool

3)Si, tiene la suya propia ya que del NES Screen Tool solo cargo la paleta del background, está donde te he dicho en 2)
Jeje. Esto marcha.

He probado con la escena de Zelda 3 NES haciendo una table nueva para los sprites de Link, cambiando su posición hacia un lado u otro según a que lado caminamos. Tengo que revisarlo a fondo lo del código para dejarlo perfecto. Entre otras cosas, cambie su paleta, el tamaño del metaSprite, la posición inicial donde aparece, etc...

Imagen
Jeje, ya veo, la verdad es que no esta nada mal, de cara al sprite de Link, si sus animaciones ocupan muchos tiles lo que hacen muchos (con MMC3) juegos es utilizar 1/4 parte de los sprites para el personaje principal y con el MMC3 hacer bankswitch de los tiles segun que animacion se esté mostrando.

Os interesaria que hiciera un resumen de los mappers que soporto en el framework, cuales son sus caracteristicas, que efectos se pueden lograr, etc?
wave escribió:Jeje, ya veo, la verdad es que no esta nada mal, de cara al sprite de Link, si sus animaciones ocupan muchos tiles lo que hacen muchos (con MMC3) juegos es utilizar 1/4 parte de los sprites para el personaje principal y con el MMC3 hacer bankswitch de los tiles segun que animacion se esté mostrando.

Os interesaria que hiciera un resumen de los mappers que soporto en el framework, cuales son sus caracteristicas, que efectos se pueden lograr, etc?


Estaría interesante, pero mas adelante, que con esto de los sprites me salen muchísimas dudas.

Por ejemplo, para ahorrar tiles, he usado la animación que tenias con Mario para Link, pero con la cosa de que el gorro de Link, en ambos lados es el mismo tile. De esta forma, en los "case" en vez de decirle que me muestre de #0 a #4 (en el caso de Link, eh) y luego de #4 a #0, le quiero decir que solo me muestre de #2 a #4 y de #4 a #2, que es la parte de la cara, manos y pies, sin tener que cambiar los dos primeros tiles del gorro. Pruebo, pero no doy con la solución para representar esto.

¿alguna idea?

Y otra cosa ¿puedo poner mas metaSprites? Es que no me queda clara una cosa, si metaSprite es una función en si misma o es el nombre que le has dado a ese metaSprite, por que se me estaban ocurriendo muchas cosas que hacer, jejeje

Y por último, cuando pones metaSprites[0].... ¿que es ese "0"?
Diskover escribió:
wave escribió:Jeje, ya veo, la verdad es que no esta nada mal, de cara al sprite de Link, si sus animaciones ocupan muchos tiles lo que hacen muchos (con MMC3) juegos es utilizar 1/4 parte de los sprites para el personaje principal y con el MMC3 hacer bankswitch de los tiles segun que animacion se esté mostrando.

Os interesaria que hiciera un resumen de los mappers que soporto en el framework, cuales son sus caracteristicas, que efectos se pueden lograr, etc?


Estaría interesante, pero mas adelante, que con esto de los sprites me salen muchísimas dudas.

Por ejemplo, para ahorrar tiles, he usado la animación que tenias con Mario para Link, pero con la cosa de que el gorro de Link, en ambos lados es el mismo tile. De esta forma, en los "case" en vez de decirle que me muestre de #0 a #4 (en el caso de Link, eh) y luego de #4 a #0, le quiero decir que solo me muestre de #2 a #4 y de #4 a #2, que es la parte de la cara, manos y pies, sin tener que cambiar los dos primeros tiles del gorro. Pruebo, pero no doy con la solución para representar esto.

1)¿alguna idea?

2)Y otra cosa ¿puedo poner mas metaSprites? Es que no me queda clara una cosa, si metaSprite es una función en si misma o es el nombre que le has dado a ese metaSprite, por que se me estaban ocurriendo muchas cosas que hacer, jejeje

3)Y por último, cuando pones metaSprites[0].... ¿que es ese "0"?

1)Para eso tendrias que usar 2 metasprites
2)Si, pero tendras que moverlos todos cuando muevas a link, por eso si son sprites complejos me gustaria llegar a tener un engine para "objetos", si quieres que haya 2, en principio con añadir un segundo metasprite despues de
putMetaSprite(#50, #50, #2, #4, #SPR_ATTR.PALETTE_0, #8)

y en el bucle diciendo que hay 2:
   
        //Numero de metasprites cargados
   lda #sizeof(MetaSprite)*2
   sta _vidLastMetaSprite

metaSprites es el nombre de la variable que apunta a la lista de metaSprites

3)Es el primer metaSprite de la lista, si quisieras tocar los datos del segundo, es con metaSprites[1], actualmente hay espacio en RAM para 16 metaSprites (0 a 15)

La gracia del sistema de objetos es que si lo implemento y termino el definidor de objetos en java que hay en:
\tools\gfx\objecteditor (puedes hacer pruebas con el chr de link)
Ya no tendras que tocar los metasprites a mano e iran todos juntos al mover el objeto.
Mmm, ok, veras. Yo ahora mismo para representar a Link, lo tengo declarado así:

//Metasprite de Link
   putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_0, #0)


Que representa en esencia esto:

Imagen

Y quiero hacer dos metaSprites que representen esto:

Imagen Imagen

Entonces como lo haría ¿así?:
putMetaSprite1(#150, #130, #2, #1, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite2(#150, #130, #2, #2, #SPR_ATTR.PALETTE_0, #2)
Diskover escribió:Mmm, ok, veras. Yo ahora mismo para representar a Link, lo tengo declarado así:

//Metasprite de Link
   putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_0, #0)


Que representa en esencia esto:

Imagen

Y quiero hacer dos metaSprites que representen esto:

Imagen Imagen

Entonces como lo haría ¿así?:
putMetaSprite1(#150, #130, #2, #1, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite2(#150, #130, #2, #2, #SPR_ATTR.PALETTE_0, #2)

Casi casi, la llamada a la funcion siempre es putMetaSprite, sin el 1 y el 2, y las coordenadas del link no gorro deberian estar 8 pixels mas abajo, tal que asi:
putMetaSprite(#150, #130, #2, #1, #SPR_ATTR.PALETTE_0, #0)
putMetaSprite(#150, #138, #2, #2, #SPR_ATTR.PALETTE_0, #2)


Sin olvidarse de la parte del bucle:
//Numero de metasprites cargados
   lda #sizeof(MetaSprite)*2
   sta _vidLastMetaSprite
Iba todo muy bien... pero algo falla.

Hace el bucle en el sprite de la cara y cuerpo, que es un 2x2, pero cuando llega a #$9, en vez de dibujar inmediatamente otra vez el #2, me sube los dos sprites de abajo a los de arriba, los de abajo se quedan invisibles, y luego empieza el bucle.

Que coño estoy haciendo mal, que después de muchas combinaciones no doy con ello.

Mi código:

//Animacion andando de link
   lda frames
   cmp #20
   if(greater) {
      lda metaSprites[1].firstTile
      switch(reg.a) {
         case #2 {
            lda #$6
         }
         case #$6 {
            lda #$9
         }
         case #9 {
            lda #2
         }
         
      }
      sta metaSprites[1].firstTile
   
      lda #0
      sta frames
   }


EDITO: Solucionado.

En el bucle, cuando llego a #$9 le digo inmediatamente que me ponga "a" a 2

case #$6 {
            lda #$9
            lda #2
         }
(mensaje borrado)
Venga, que estoy en el ajo... ¿como puedo cargar en este mismo código otra paleta para otro metaSprite diferente respetando la paleta de Link?
Diskover escribió:Venga, que estoy en el ajo... ¿como puedo cargar en este mismo código otra paleta para otro metaSprite diferente respetando la paleta de Link?

Hay 4 paletas de sprites, define las que quieras donde tienes la del link y cargalas como se carga la del link al principio con:
   //Cargamos la paleta de mario
   nes_loadMemsrc(nombrePaleta)
   lda #Paleta del 4 al 7 (la del 4 la usa link ahora mismo)
   vid_loadPalette_a()


Y luego al invocar los metasprites acuerdate de la paleta:
putMetaSprite(#50, #50, #2, #4, #SPR_ATTR.PALETTE_1, #8)

SPR_ATTR.PALETTE_1 es la clave, pudes decirle que use SPR_ATTR.PALETTE_0, SPR_ATTR.PALETTE_1, SPR_ATTR.PALETTE_2 o SPR_ATTR.PALETTE_3
Que son las paletas 4 a 7 de la NES

Por ultimo acordarse del contador de metasprites:
   
//Numero de metasprites cargados
       lda #sizeof(MetaSprite)*3
       sta _vidLastMetaSprite



EDIT: tampoco le des muchas vueltas a esto porque cambiara del todo con el sistema de objetos y sin un sistema de objetos no se podra hacer gran cosa excepto pantallas estaticas con un numero de enemigos estaticos.
Bueno maestro: A ver si consigo que se te abra la boca.

Lo que no se si ponerle la linea de dibujo de Link de color negro o dejárselo azul oscuro XD

Imagen Imagen

Imagen

Por cierto, ocurre algo extraño cuando pulso hacia abajo. He tenido que quitar esta linea and #SPR_ATTR.V_FLIP en el metasprite nuevo que he añadido dentro de la acción de pulsar hacia abajo por que entonces la paleta de este metasprite se volvia entero gris ?????

Aun mas, si te das cuenta, aunque está solucionado, hay una posición de Link, que cuando pulsas hacia abajo, en el gorro a la altura de la oreja derecha, parpadea un pixel por que se monta encima del otro metasprite, y es por que no se ha dado la vuelta como debería... ¿que puede ser?

Creo que cuando finaliza el codigo, los metasprite no se ponen correctamente en su posición inicial ¿puede ser por eso?
Zelda3_22112011c.rar


Versión corregida con Link moviendose solo cuando pulsamos las direcciones.
Zelda3_22112011d.rar
Mola :)
A mi me gusta mas con el borde negro.
En cuanto a los errores de los metasprites, los atributos de V_FLIP y H_FLIP estan pensados para un solo metasprite asi que ya puede ser que algo no funcione correctamente. Yo he probado el mario utilizando la segunda paleta y parece que va bien.

Si me pasas tu codigo entero (un zip con la carpeta del proyecto solo) te podré decir mas exactamente.
Ok, te adjunto los archivos que llevan cambios.

Ahora mismo me estoy peleando para que cuando pulso a derecha o a izquierda cambie el sprite de Link mirando hacia la izquierda o hacia la derecha. El CHR ya esta hecho, y parte del código también, pero resulta que me muestra todos los metaSprites a la vez y estoy mirando a ver como arreglarlo.
En tu tercer metasprite has puesto:
putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_1, #10)

y deberia ser (creo asi a ojo)
putMetaSprite(#150, #130, #2, #2, #SPR_ATTR.PALETTE_1, #10)
wave escribió:En tu tercer metasprite has puesto:
putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_1, #10)

y deberia ser (creo asi a ojo)
putMetaSprite(#150, #130, #2, #2, #SPR_ATTR.PALETTE_1, #10)


Jajaja, si, si, me acababa de dar cuenta. Puse al principio un 2x3 con la idea de añadir detalle al cinturón y las botas, pero desistí y luego se me olvido cambiarlo XD XD XD

Sigo peleandome con el tema este. Se me muestran los metaSprites de Link mirando de frente y de lado (los acabo de hacer estos). La cosa es que quiero que cuando vaya hacia arriba o abajo me dibuje solo los de frente y cuando vaya de izquierda a derecha solo los de lado ¿Debo meter los bucles dentro del control de mando?
Diskover escribió:
wave escribió:En tu tercer metasprite has puesto:
putMetaSprite(#150, #130, #2, #3, #SPR_ATTR.PALETTE_1, #10)

y deberia ser (creo asi a ojo)
putMetaSprite(#150, #130, #2, #2, #SPR_ATTR.PALETTE_1, #10)


Jajaja, si, si, me acababa de dar cuenta. Puse al principio un 2x3 con la idea de añadir detalle al cinturón y las botas, pero desistí y luego se me olvido cambiarlo XD XD XD

Sigo peleandome con el tema este. Se me muestran los metaSprites de Link mirando de frente y de lado (los acabo de hacer estos). La cosa es que quiero que cuando vaya hacia arriba o abajo me dibuje solo los de frente y cuando vaya de izquierda a derecha solo los de lado ¿Debo meter los bucles dentro del control de mando?

En cuanto a la paleta que cambia de color es porque estas haciendo:
      lda metaSprites[2].attributes
      AND #SPR_ATTR.V_FLIP
      sta metaSprites[2].attributes
      inc metaSprites[2].y

Que lo que hace es coger el metasprite y dejar SOLO activo el bit de V_FLIP, deberias eliminar las tres primeras lineas de cada metasprite en esta parte ya que no vas a hacer V_FLIP de esos metasprites.

Respecto a lo de las direcciones, deberias hacerte una variable (byte linkDir) en ram/wram.as donde guardaras hacia donde mira link y si se cambia de direccion recargar los metasprites en la posicion que toque. Deberias guardar tambien la posicion x e y de link en otras variables y cada vez que recargues los metasprites posicionarlos en esas posiciones (con las desviaciones de cada metasprite)
Esto ya va a ser un poco mas complicado...
Ok, mas progresos. Meti los bucles en cada dirección de tal manera que ahora solo se anima el andar de Link solo cuando lo estamos moviendo.

Bien, ahora vamos con lo de linkDir. Como me has comentado, en metido en wram lo de byte LinkDir. Ahora vamos al main.as y como debería de hacer para declarar que dirección toma, que cuando vaya hacia x incremente o decrezca su posición (a parte de hacer el bucle de animación) y lo mismo en y.

¿Como lo declaro y le explico al programa eso que quiero hacer?
Te voy a hacer un ejemplo a ver si puedes extrapolarlo al resto:
Suponiendo que definas las variables xLink e yLink y para hacer calculos xLinkTmp e yLinkTmp

//si pulsamos la derecha
ldand(pads[CONTROLLER.PLAYER1].pressed, #BUTTON.DOWN)
   if(true) {
      ldx #0
      sta linkDir
                inc yLink
   }
ldand(pads[CONTROLLER.PLAYER1].pressed, #BUTTON.UP)
   if(true) {
      ldx #1
      sta linkDir
                dec yLink
   }

...

//Y al final de todo antes del draw metasprites
lda linkDir
switch(reg.a) {
        case #0 {
//cargar los metasprites de link mirando abajo
lda yLink
sta yLinkTmp
lda xLink
sta xLinkTmp
putMetaSprite(xLinkTmp , yLinkTmp, #2, #1, #SPR_ATTR.PALETTE_0, #0)
//Si hay mas tenemos que sumar a xLinkTmp o yLinkTmp la diferencia entre uno u otro
lda yLinkTmp
clc
adc #8
putMetaSprite(xLinkTmp , yLinkTmp, #2, #1, #SPR_ATTR.PALETTE_0, #0)
}
...
//mas cases

}




Pero todo esto es lo que pretendo que se haga "automaticamente" con el sistema de objetos.
Me tome la libertad mientras me escribías y se me ocurrió hacerlo de esta manera. Ademas, como juego con hasta tres metaSprites a la vez y uno de ellos con 8 pixels por debajo del principal, he tenido que inventarme dos clases para cada coordenada, x1, x2, y1 e y2. Todo lo demás es copiar y pegar.

Funciona bien, pero cuando va ha hacer la animación de Link, se queda como cortada. Antes, sin hacer esto, la animación se realizaba correctamente.

¿por que puede ser debido?

Te pego el código:

vid_waitFadeToNormal_a()
-------------------------- de aquí para arriba, todo igual.

   //Coordenadas iniciales. Las damos un valor.
   lda #150
   sta linkDir_x1

   lda #130
   sta linkDir_y1

   lda #150
   sta linkDir_x2

   lda #138
   sta linkDir_y2   

   //Bucle principal, se ejecutara siempre
   forever {
      //Metasprite de Link
      putMetaSprite(linkDir_x1, linkDir_y1, #2, #1, #SPR_ATTR.PALETTE_0, #0) //0
      putMetaSprite(linkDir_x2, linkDir_y2, #2, #2, #SPR_ATTR.PALETTE_0, #2) //1
      putMetaSprite(linkDir_x1, linkDir_y1, #2, #2, #SPR_ATTR.PALETTE_1, #10) //2
      doFrame()
   }
}

inline doFrame() {
   //Leemos el joypad 1
   inp_update(#PORT_1)
   
   ldand( pads[CONTROLLER.PLAYER1].mantained, #BUTTON.DOWN)
   if(true) {

      lda frames
      cmp #12

      if(greater) {
         lda metaSprites[1].firstTile
         switch(reg.a) {
            case #2 {
               lda #$6
            }
            case #$6 {
               lda #$9         
               lda #2
            }
         
         }
         sta metaSprites[1].firstTile
   
         lda #0
         sta frames
      }

      inc metaSprites[0].y //Incrementamos el valor de metaSprite 0 en y
      lda metaSprites[0].y //Cargamos ese valor en a
      sta linkDir_y1   //Introducimos el valor de a en la coordenada y1
      
      inc metaSprites[1].y //Incrementamos el valor de metaSprite 1 en y
      lda metaSprites[1].y //Cargamos ese valor en a
      sta linkDir_y2

      inc metaSprites[2].y //Incrementamos el valor de metaSprite 2 en y
      lda metaSprites[2].y //Cargamos ese valor en a
      sta linkDir_y1 //Introducimos el valor de a en la coordenada y1
   }
   
   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.UP)
   if(true) {

      lda frames
      cmp #12

      if(greater) {
         lda metaSprites[1].firstTile
         switch(reg.a) {
            case #2 {
               lda #$6
            }
            case #$6 {
               lda #$9         
               lda #2
            }
         
         }
         sta metaSprites[1].firstTile
   
         lda #0
         sta frames
      }

      
      dec metaSprites[0].y //Decrecentamos el valor de metaSprite 0 en y
      lda metaSprites[0].y //Cargamos ese valor en a
      sta linkDir_y1   //Introducimos el valor de a en la coordenada y1
      
      dec metaSprites[1].y //Decrecentamos el valor de metaSprite 1 en y
      lda metaSprites[1].y //Cargamos ese valor en a
      sta linkDir_y2

      dec metaSprites[2].y //Decrecentamos el valor de metaSprite 2 en y
      lda metaSprites[2].y //Cargamos ese valor en a
      sta linkDir_y1 //Introducimos el valor de a en la coordenada y1
   }
   
   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.LEFT)
   if(true) {

      lda frames
      cmp #12
      if(greater) {
         lda metaSprites[1].firstTile
         switch(reg.a) {
            case #2 {
               lda #$6
            }
            case #$6 {
               lda #$9         
               lda #2
            }
         
         }
         sta metaSprites[1].firstTile
   
         lda #0
         sta frames
      }
      
      dec metaSprites[0].x //Decrecentamos el valor de metaSprite 0 en x
      lda metaSprites[0].x //Cargamos ese valor en a
      sta linkDir_x1   //Introducimos el valor de a en la coordenada x1
      
      dec metaSprites[1].x //Decrecentamos el valor de metaSprite 1 en x
      lda metaSprites[1].x //Cargamos ese valor en a
      sta linkDir_x2

      dec metaSprites[2].x //Decrecentamos el valor de metaSprite 2 en x
      lda metaSprites[2].x //Cargamos ese valor en a
      sta linkDir_x1 //Introducimos el valor de a en la coordenada x1
   }   
   
   ldand(pads[CONTROLLER.PLAYER1].mantained, #BUTTON.RIGHT)
   if(true) {

      lda frames
      cmp #12
      if(greater) {
         lda metaSprites[1].firstTile
         switch(reg.a) {
            case #2 {
               lda #$6
            }
            case #$6 {
               lda #$9         
               lda #2
            }
         
         }
         sta metaSprites[1].firstTile
   
         lda #0
         sta frames
      }

      inc metaSprites[0].x //Incrementamos el valor de metaSprite 0 en x
      lda metaSprites[0].x //Cargamos ese valor en a
      sta linkDir_x1   //Introducimos el valor de a en la coordenada x1
      
      inc metaSprites[1].x //Incrementamos el valor de metaSprite 1 en x
      lda metaSprites[1].x //Cargamos ese valor en a
      sta linkDir_x2

      inc metaSprites[2].x //Incrementamos el valor de metaSprite 2 en x
      lda metaSprites[2].x //Cargamos ese valor en a
      sta linkDir_x1 //Introducimos el valor de a en la coordenada x1
   }   
   ----------------------- a partir de aquí para abajo, todo igual
   inc frames   
Al llamar a la funcion putMetaSprite estas indicandole de nuevo el tile, machacando el que has cambiado mas abajo.
Ok, ya he conseguido hacer que cuando Link vaya a la derecha o a la izquierda, cambie el metasprite, etc...

Resulta que he ahora estoy animando el andar a la derecha e izquierda y llega un momento que sin venir a cuento, el compilador casca en cuanto meto el ultimo case de una de las animaciones. Error de fuera de rango o algo así. Si meto un case mas, casca.

d:\Users\Diskover\Desktop\nesframework\projects\zeldaSprites>..\..\bin\neshla ".
\src\project.as" -o ".\out" -listvars -listfuncs -listbanks -listsrc

Nintendo NES High Level Assembler
Version 1.0.0, April 12th, 2005
By Brian Provinciano :: http://www.bripro.com

Compiling file: .\src\project.as ...
[Error]: Within "doFrame": (118),
        main.as (106: 3): Branch out of range!The time was: 0.093000


[Fatal Error]: Compile: FAILED!

d:\Users\Diskover\Desktop\nesframework\projects\zeldaSprites>pause
Presione una tecla para continuar . . .


¿Puede ser que me haya pasado del límite de calculo o algo así? Por que la verdad que es bastante complejo, son 3 frames diferentes, y cada uno esta compuesto de 2 metasprites para el tema de los colores :-)

P.D.: Tengo la cabeza que me echa humo entre lo de ayer y hoy, jajaja [+risas]
Diskover escribió:Ok, ya he conseguido hacer que cuando Link vaya a la derecha o a la izquierda, cambie el metasprite, etc...

Resulta que he ahora estoy animando el andar a la derecha e izquierda y llega un momento que sin venir a cuento, el compilador casca en cuanto meto el ultimo case de una de las animaciones. Error de fuera de rango o algo así. Si meto un case mas, casca.

¿Puede ser que me haya pasado del límite de calculo o algo así? Por que la verdad que es bastante complejo, son 3 frames diferentes, y cada uno esta compuesto de 2 metasprites para el tema de los colores :-)

P.D.: Tengo la cabeza que me echa humo entre lo de ayer y hoy, jajaja [+risas]

Dentro de un switch o de un if no puede haber mas de 128 posiciones, cada instruccion ocupa unas 3-4.
Pero yo que tu me iria mirando de hacer otras pruebas o iria preparando los graficos que quieras poner porque todo esto sera "automatico" con el sistema de objetos, no habra que colocar los metasprites a mano ni nada.
Bueno, debido al poco éxito que vemos cosechar en este tutorial continuaremos el hilo en RetroNES.

Nos vemos a los interesados.
¡Nooooooooooooo!

A mi si me interesa. Pero ahora mismo no ando con tiempo como para meterme en algo así.
De todas maneras leo el hilo a diario y me parece muy interesante todo. No escribí ésto antes para no ensuciar el hilo.

Bueno, tampoco es gran cosa si llevan el hilo en otra parte, sólo que no lo leeré a diario.
Mmm, si tal, ya sabes en donde encontrarnos.

Acabo de crear el hilo nuevo [360º]
¿por que no probar con c y luego meterse con el ensamblador?

http://shiru.untergrund.net/articles/pr ... s_in_c.htm
127 respuestas
1, 2, 3