Pregunta

Actualmente estoy escribiendo en C # básicamente lo que se podría llamar a mi propia interpretación del hardware de NES para una vieja escuela buscando juego que estoy desarrollando. Me he disparado hasta FCE y he estado observando cómo la NES y muestran gráficos prestados.

En pocas palabras, la NES podrían sostener dos mapas de bits valor de la información gráfica, cada una con las dimensiones de 128x128. Éstos se llaman las mesas PPU. Uno era para los azulejos de BG y el otro era para los sprites. Los datos tenían que estar en esta memoria para él que se puede sacar en pantalla. Ahora, si un juego tiene más datos gráficos a continuación, estos dos bancos, que podrían escribir partes de esta nueva información a estos bancos -overwriting lo que estaba allí -. Al final de cada cuadro, y utilizarlo de la siguiente trama en adelante

Por lo tanto, en los juegos antiguos de cómo ha ido el 'interruptor de banco los programadores? Es decir, en el diseño de los niveles, ¿cómo sabían qué conjunto gráfico para la carga? Me he dado cuenta de que Mega Man 2 bankswitches cuando la pantalla se desplaza mediante programación desde una parte de la etapa a la siguiente. Pero ¿cómo se almacenan esta información en el nivel de -? Lo sprites para copiar en las tablas de PPU, y donde escribirlas a

Otro ejemplo sería golpear pausa en MM2. azulejos BG conseguir sobre-escritas durante la pausa, y luego son restaurados cuando los unpauses jugador. ¿Cómo recuerdan los mosaicos que sustituyen y cómo restaurarlos?

Si yo era perezoso, tan sólo pudiera formar un enorme valores de mapa de bits estático y sólo tienes que tomar esa manera. Pero estoy forzando a mí mismo para limitar estos valores para crear una experiencia más auténtica. He leído la guía sorprendente sobre la manera M. C. Los niños se hizo, y yo estoy tratando de ser barebones sobre cómo programo este juego. Todavía apenas perturba mi mente cómo estos programadores accomplisehd lo que hicieron con lo que tenían.

EDIT: La única solución que se me ocurre sería la celebración de mesas separadas ese estado lo baldosas deben estar en el PPU en qué momento, pero creo que sería un gran recurso de memoria que la NES no serían capaces de mango.

¿Fue útil?

Solución

OSM después de una noche de pensar y documentos re-lectura, creo que se me ocurrió una solución perfecta. Una matriz!

Dado los siguientes datos:

 3, -1, -1, -1, -1
-1,  0,  1,  2, -1
-1, -1, -1,  3, -1
-1, -1,  5,  4, -1
-1, -1, -1, -1, -1

Me puede utilizar esta información para acceder a la información en tablas de consulta para determinar qué tipo de información que necesito. La primera entrada (0,0) define todo el mapa, en donde como los otros valores definen lo que se necesita en esa pantalla particular.

MAP ARRAY    PALETTE   MUSIC   TILESET  STARTINGSCR
   0            0        0        1           4
   1            4        3        2           2
   2                         etc.
   3

Así que cuando se carga el mapa, miro a punto (0,0). Se dirá que necesito para azulejos de carga X en el PPU, use Y paleta de colores, juego de fichas Z, y A la música. También dicen que la pantalla 0 es la pantalla de inicio y que el nivel comienza allí -. La posición del carácter en consecuencia

   SCREEN     PALETTE    TILESET   MUSIC   TILEDATA  SCROLLL SCROLLR SCROLLU SCROLLD  
      0           0          1       2         4       true     true    true    true
      1                   etc
      2           2          1       2         3       false   false     false  true

Ahora vamos a decir que necesito para pantallas de transición. Puedo mirar a la pantalla actual vs la pantalla de destino. Si la nueva pantalla de información no necesita en el PPU, puedo iniciar una transición que va a cargar los datos durante el mismo. También puedo ver si puedo desplazarse en esa dirección; por ejemplo, si la pantalla de destino es -1, no puedo desplazo esa dirección. También puedo almacenar en algún lugar de un indicador para determinar que si desplazado en esa pantalla, no puedo volver desplazamiento. Por ejemplo, puedo ir a la derecha en la pantalla # 2, pero no puede desplazarse hacia la izquierda en la pantalla 1.

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