Pregunta

Me pregunto acerca de cómo el NES muestra su fuerza gráfica. He investigado y leído cosas en línea a través de él, pero me pregunto sobre una última cosa:. Nametables

Básicamente, por lo que he leído, cada bloque de 8x8 en una NES puntos NameTable a una ubicación en la tabla de patrones, que tiene memoria gráfica. Además, el NameTable también tiene una tabla de atributos que establece una determinada paleta de colores para cada bloque de 16x16. Están ligados juntos de esta manera:

(suponiendo 16 8x8 bloques) NameTable, con A B C D = punteros a Datos de Sprite:

ABBB
CDCC
DDDD
DDDD

tabla de atributos, con 1 2 3 = punteros a los datos de paleta de colores, con

1<2<
^'^'
3<3<
^'^'

Así, en el ejemplo anterior, los bloques podría ser de color como modo

1A 1B 2B 2B

1C 1D 2C 2C

3D 3D 3D 3D

3D 3D 3D 3D

Ahora, si tengo esto en una pantalla fija - funciona muy bien! Debido a que la resolución de 256x240 píxeles es NES. Ahora, ¿cómo hacer estas tablas ajustarán para desplazarse?

Debido a 0 NameTable puede desplazarse en NameTable 1, y si sigue desplazándose NameTable 0 se ajustará alrededor de nuevo. Que consigo. Pero lo que no entiendo es cómo desplazar las envolturas tabla de atributos alrededor también. Por lo que he leído en línea, los bloques de 16x16 asigna atributos para distorsiones de color causará en las baldosas de los bordes de la pantalla (como se ve cuando se desplaza de izquierda a derecha y viceversa en SMB3).

La preocupación que tengo es que comprendo cómo desplazar las nametables, pero ¿cómo desplazarse por la tabla de atributos? Para intsance, si tengo un bloque verde en el lado izquierdo de la pantalla, moviendo la pantalla a la derecha debería, en teoría, la causa de los azulejos a la derecha de ser verde, así hasta que se mueven más en el armazón, a la que van a revertir a sus colores normales.

~~~~ EDIT: Yo quiero señalar que yo sepa acerca de las líneas de exploración, X e Y. Este pensamiento acaba de ejecutar a través de mi mente.

Vamos a decir que estoy en la línea de exploración Y de 10. Eso significa que estoy leyendo 10 valores en mis nametables, horizontalmente. Eso significa que mi primera columna está fuera de la pantalla, ya que sólo tiene ancho de píxel de 8. Sin embargo, las estancias de atributos de color, ya que tiene una anchura de 16.

Suponiendo que el atributo de color para toda la columna es de color verde, habría de ser correcto en el supuesto de que para el usuario, los primeros 6 píxeles a la izquierda de la pantalla serían de color verde, y la más a la derecha 10 en la pantalla deben ser verdes ¿también? Por lo tanto, habría de ser correcto en mi suposición de que de acuerdo a la pantalla, la dejó?

¿Fue útil?

Solución

Este sitio Estoy seguro de que ya están muy, muy familiarizado. Voy a aclarar esto diciendo que nunca llegué a programa para la NES, pero estoy muy experimentado con todo el hardware de Game Boy que nunca fue puesto en libertad y las acciones de NES muchos, ahh peculiaridades con el GB / DMG. Me va a apostar que sea necesario hacer una de las pocas cosas:

  1. no se desplazan la tabla de atributos. Asegúrese de que sus niveles de todos los bloques tienen el color similar a lo largo de la dirección se está moviendo. Supongo que muchos juegos de primera generación hicieron esto.

  2. Vaya por delante y permitir que el atributo de desplazamiento limitado -. Sólo asegúrese de que las áreas en las que los cambios se están produciendo están parcial o escasa colores compartida suficiente como para que el cambio no va a ser notable

  3. Salir de su vieja escuela atari 2600 temporizador y el tiempo de una escritura en el registro $ 2006 en el final de la actualización HBlank para conseguir el cambio de color que necesita hecho, espere unos tics, y luego revertir durante el período de retorno HBlank de manera que el borde izquierdo de la línea siguiente no se ve afectada. Tengo la sensación de que esto es la solución utiliza con mayor frecuencia, pero sin un buen emulador y paciencia, va a ser un dolor en el trasero. También va a comer un poco en su uso total de CPU como usted tiene que esperar en torno a las interrupciones en varias líneas de escaneo para obtener su efecto hecho.

Me gustaría tener una respuesta más concreta para usted, pero esto es de esperar ayuda un poco. Gracias a Dios que el GB / DMG tenía un sistema de desplazamiento un poco más avanzado. :)

Otros consejos

Tanto Super Mario Bros. 3 y Kirby de pantalla Aventura colorear artefactos en el borde de la pantalla cuando se desplaza. Creo que los dos juegos que establecen el bit de espacios en blanco a la izquierda 8 píxeles de la pantalla, de modo 0-8 píxeles serán afectados en cualquier marco de uno.

Si no recuerdo mal, aventura de Kirby siempre trata de poner las columnas de color glitched en el lado de la pantalla que se desplaza fuera para que sea menos perceptible. No creo que estos artefactos se pueden prevenir, sin cambiar a la creación de reflejo vertical, que introduce sus propias dificultades.

exención de responsabilidad:. Ha sido como cinco años que no escribía ningún código NES

Cada NameTable tiene su propia tabla de atributos, por lo que no debe haber objetos gráficos cuando se desplaza de un NameTable a otro. El tipo de color glitching que usted se refiere en realidad es sólo un problema si sus pergaminos juego tanto vertical como horizontalmente. Sólo tiene dos nametables, por lo que el desplazamiento en ambos sentidos requiere que canibalizar la pantalla visible. Hay varias soluciones a este problema, un gran resumen de los cuales se pueden encontrar en este post nesdev:

http://nesdev.parodius.com/bbs/viewtopic. php? p = 58509 # 58509

Este sitio puede ser de alguna ayuda. http://www.games4nintendo.com/nes/faq.php#4

(Búsqueda de "¿Qué pasa con $ 2005/2006?" Y comenzar a leer por esa zona.)

Básicamente, parece que es imposible hacerlo perfecto de píxeles, sin embargo los que van a ser los bits es probable que va a tener que mirar.

Me gustaría poder ser de más ayuda.

Cada NameTable tiene su propia tabla de atributos. Si usted limita su mundo de juego a sólo dos pantallas, lo único que necesita para escribir los nametables y tablas de atributos de una vez. La parte difícil viene cuando se intenta hacer mundos más grande que dos pantallas. Super Mario Bros. 1 hizo esto desplazándose hacia la derecha, envolviendo como sea necesario, y haciendo la columna de nivel de uno de los bloques a la vez (16 píxeles) justo antes de que la columna se hizo visible. No sé cómo se podría codificar de manera eficiente (tenga en cuenta que sólo tiene un milisegundo de tiempo VBLANK).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top