[HO] Former Dawn (NES). Avances y actualizaciones.

1, 2, 3
riffraff escribió:Parece que se usa el mapper para hacer bank switching cada 8 pixels.

Nop, pero sospecho que lo que hacen es algún tipo de interrupción por línea al pixel
¿Por qué crees que no?
Que belleza de proyecto,se ve increible.
riffraff escribió:¿Por qué crees que no?


No tiene mucho sentido [looco]
Diskover escribió:
riffraff escribió:¿Por qué crees que no?


No tiene mucho sentido [looco]

Alguien que dice ser un dev del juego dice que es lo que se está haciendo:

bank switching just in time to provide it with a different attribute byte

We created our own memory mapper to do this.
It's called MXM-1. Memory eXpansion Module
riffraff escribió:
Diskover escribió:
riffraff escribió:¿Por qué crees que no?


No tiene mucho sentido [looco]

Alguien que dice ser un dev del juego dice que es lo que se está haciendo:

bank switching just in time to provide it with a different attribute byte

We created our own memory mapper to do this.
It's called MXM-1. Memory eXpansion Module

Pues entonces estaré equivocado.

Me gustaría que explicaran como consiguen ese byte extra de atributo haciendo un cambio de banco [looco]
Dice que el Castlevania III usaba el mismo truco pero a 8x8, en vez de a 8x1.
Vaya pintazote que tiene este proyecto :O
riffraff escribió:Dice que el Castlevania III usaba el mismo truco pero a 8x8, en vez de a 8x1.


Castlevania III en su versión japonesa utiliza el mapper VRC6 y este mapper no añade tal cosa. Si lo hace el mapper MMC5, cuyo juego utiliza en su versión occidental, pero no hace uso de tal peculiaridad.

Al inicio del hilo, hay una artículo del propio equipo de desarrollo de Former Dawn que explica lo de los atributos de color a 8x1 pixel para backgrounds, y hacen hincapié en que es una mejora del mismo sistema que usaba el MMC5 para sus 8x8 pixeles pero llevado al extremo, y además, permitiendo movimiento de pantalla, cosa que el MMC5 no permitía.

No hacen ninguna mención al backswitch para este truco.

Para salir de dudas, ¿Puedes facilitar la fuente de donde has leído eso?

Gracias.
Diskover escribió:Para salir de dudas, ¿Puedes facilitar la fuente de donde has leído eso?

Gracias.

Un server de Discord pequeño, que no tiene que ver ni con el juego ni con la NES.
Me gustaría que el server siga siendo pequeño, así que perdona que no te diga cuál [carcajad]
riffraff escribió:
Diskover escribió:Para salir de dudas, ¿Puedes facilitar la fuente de donde has leído eso?

Gracias.

Un server de Discord pequeño, que no tiene que ver ni con el juego ni con la NES.
Me gustaría que el server siga siendo pequeño, así que perdona que no te diga cuál [carcajad]

Pues no se quien será el del server ese, pero lo primero no tiene sentido, y lo segundo es que no.- ein?

A parte del artículo traducido que hay al inicio del hilo, podeís leer estas dos paginas del foro NESdev donde uno de los creadores de Former Dawn habla sobre la parte técnica: https://forums.nesdev.org/viewtopic.php?t=23679
https://somethingnerdy.com/unlocking-th ... rmer-dawn/

Allowed:
4. Interposing the PPU’s data fetches in order to alleviate onerous limitations:
- 4.1. 256 unique tiles per screen -> 960 unique tiles per screen.
- 4.3. 16×16 attributes -> 8×8 and/or 8×1 attributes.
5. Automatic bank switching that facilitates items 4.1 and 4.3.
7. Attribute bankswitching that facilitates item 4.3.
riffraff escribió:https://somethingnerdy.com/unlocking-the-nes-for-former-dawn/

Allowed:
4. Interposing the PPU’s data fetches in order to alleviate onerous limitations:
- 4.1. 256 unique tiles per screen -> 960 unique tiles per screen.
- 4.3. 16×16 attributes -> 8×8 and/or 8×1 attributes.
5. Automatic bank switching that facilitates items 4.1 and 4.3.
7. Attribute bankswitching that facilitates item 4.3.

Habrá que ver cómo funciona realmente.
Diskover escribió:
riffraff escribió:https://somethingnerdy.com/unlocking-the-nes-for-former-dawn/

Allowed:
4. Interposing the PPU’s data fetches in order to alleviate onerous limitations:
- 4.1. 256 unique tiles per screen -> 960 unique tiles per screen.
- 4.3. 16×16 attributes -> 8×8 and/or 8×1 attributes.
5. Automatic bank switching that facilitates items 4.1 and 4.3.
7. Attribute bankswitching that facilitates item 4.3.

Habrá que ver cómo funciona realmente

¿Pero ahora ya tiene sentido o no? [+risas]
riffraff escribió:¿Pero ahora ya tiene sentido o no? [+risas]

Un cambio de banco simplemente es decirle al programa que lea datos de un banco de memoria o de otro, cambiando la dirección de las puertas lógicas al instante. Tiene sentido si quieres más datos gráficos para tener backgrounds más detallados y saltarte la restricción de 256 tiles (como es el caso).

Para lo del color le veo menos sentido o explicación lógica a no ser que hagas alguna interrupción de línea como ya se ha hecho en alguna demo de la scene de la NES donde se podía llegar a mostrar toda la paleta de la consola al completo en una sola imagen.

El propio equipo de desarrollo explicaba que incluso eran capaces de mostrar más de los 54 colores que supuestamente tiene la PPU de la NES predefinido, llegando a los 400 y pico gracias a usar intercaladamente el énfasis de color para cambiar los tonos, que a fin de cuentas no dejan de ser colores únicos igualmente.

Pero es que para esto no necesitas ningún bankswitch

Tienes más info aquí sobre este detalle de los colores de la NES: https://www.nesdev.org/wiki/Full_palette_demo

Imagen


Detalle curioso: si, no existe un color "amarillo" en la NES
Diskover escribió:
riffraff escribió:¿Pero ahora ya tiene sentido o no? [+risas]

Un cambio de banco simplemente es decirle al programa que lea datos de un banco de memoria o de otro, cambiando la dirección de las puertas lógicas al instante. Tiene sentido si quieres más datos gráficos para tener backgrounds más detallados y saltarte la restricción de 256 tiles (como es el caso).

Para lo del color le veo menos sentido o explicación lógica a no ser que hagas alguna interrupción de línea como ya se ha hecho en alguna demo de la scene de la NES donde se podía llegar a mostrar toda la paleta de la consola al completo en una sola imagen

Yo no sé casi nada de la NES, pero vamos, hacer bank switching justo antes de renderizar un nuevo tile me parece la solución más sencilla o lógica para aumentar el número de colores por tile sin entorpecer a la NES.

Si se conoce el estado en el que se encuentra la PPU (el dev dice que es así), no hace falta generar miles(?) de interrupciones por frame para que el mapper haga bank switching cuando toque, mejorando mucho el rendimiento.

Si no quieren usar coprocesadores, ¿cómo iban a hacerlo si no?

Según el dev,
We do [bank switching just in time to provide it with a different attribute byte] 7,680 times per frame in hardware
riffraff escribió:
Diskover escribió:
riffraff escribió:¿Pero ahora ya tiene sentido o no? [+risas]

Un cambio de banco simplemente es decirle al programa que lea datos de un banco de memoria o de otro, cambiando la dirección de las puertas lógicas al instante. Tiene sentido si quieres más datos gráficos para tener backgrounds más detallados y saltarte la restricción de 256 tiles (como es el caso).

Para lo del color le veo menos sentido o explicación lógica a no ser que hagas alguna interrupción de línea como ya se ha hecho en alguna demo de la scene de la NES donde se podía llegar a mostrar toda la paleta de la consola al completo en una sola imagen

Yo no sé casi nada de la NES, pero vamos, hacer bank switching justo antes de renderizar un nuevo tile me parece la solución más sencilla o lógica para aumentar el número de colores por tile sin entorpecer a la NES.

Si se conoce el estado en el que se encuentra la PPU (el dev dice que es así), no hace falta generar miles(?) de interrupciones por frame para que el mapper haga bank switching cuando toque, mejorando mucho el rendimiento.

Si no quieren usar coprocesadores, ¿cómo iban a hacerlo si no?


Pero es que en la PPU de la NES los tiles almacenan "formas", no colores; ojo con esto. Los tiles no almacenan información de color. Por ello, en el hilo de NESdev aclaran que los tiles siguen teniéndose que dibujar a 8x8

El color va en una capa aparte que llamamos Atributos de Color. Como si pusiéramos una lámina trasparente con tonos coloreados encima de una imagen en blanco y negro. Así funciona la PPU de la NES (y así funciona, por ejemplo, también el ZX Spectrum).

Por diseño, la PPU solo mostraba atributos de color en backgrounds cada 16x16 tiles. Cuando lanzaron el mapper MMC5 allá en 1990, consiguieron reducir los atributos a 8x8 píxeles, y solo para imágenes estáticas. El MXM-0 y 1 se basan en esto para sus atributos de color a 8x1 y además permiten que haya scroll. Solo se me ocurre tal truco si utilizan un interrupción de línea medida al pixel y perfecta.
Diskover escribió:
riffraff escribió:Yo no sé casi nada de la NES, pero vamos, hacer bank switching justo antes de renderizar un nuevo tile me parece la solución más sencilla o lógica para aumentar el número de colores por tile sin entorpecer a la NES.

Si se conoce el estado en el que se encuentra la PPU (el dev dice que es así), no hace falta generar miles(?) de interrupciones por frame para que el mapper haga bank switching cuando toque, mejorando mucho el rendimiento.

Si no quieren usar coprocesadores, ¿cómo iban a hacerlo si no?


Pero es que en la PPU de la NES los tiles almacenan "formas", no colores; ojo con esto. Los tiles no almacenan información de color.

El color va en una capa aparte que llamamos Atributos de Color. Como si pudieramos una lámina trasparente con tonos coloreados encima de una imagen en blanco y negro. Así funciona la PPU de la NES (y así funciona, por ejemplo, también el ZX Spectrum)

Pero aún así, ¿cuántas interrupciones harían falta por scanline para actualizar la tabla de atributos para pasar de atributos de 16×16 a 8×1?
¿La NES podría con tantas interrupciones y el juego a la vez, contando con que no hay coprocesadores?
Si el mapper hace el bank switching sin interrupciones, el rendimiento debería mejorar mucho.

Diskover escribió:uno de los creadores de Former Dawn habla sobre la parte técnica: https://forums.nesdev.org/viewtopic.php?t=23679

Por cierto, el dev que comenta en Discord utiliza el mismo nombre y avatar que en nesdev [carcajad]

EDIT

Otro usuario afirma que no se usan interrupciones.
riffraff escribió:
Diskover escribió:
riffraff escribió:Yo no sé casi nada de la NES, pero vamos, hacer bank switching justo antes de renderizar un nuevo tile me parece la solución más sencilla o lógica para aumentar el número de colores por tile sin entorpecer a la NES.

Si se conoce el estado en el que se encuentra la PPU (el dev dice que es así), no hace falta generar miles(?) de interrupciones por frame para que el mapper haga bank switching cuando toque, mejorando mucho el rendimiento.

Si no quieren usar coprocesadores, ¿cómo iban a hacerlo si no?


Pero es que en la PPU de la NES los tiles almacenan "formas", no colores; ojo con esto. Los tiles no almacenan información de color.

El color va en una capa aparte que llamamos Atributos de Color. Como si pudieramos una lámina trasparente con tonos coloreados encima de una imagen en blanco y negro. Así funciona la PPU de la NES (y así funciona, por ejemplo, también el ZX Spectrum)

Pero aún así, ¿cuántas interrupciones harían falta por scanline para actualizar la tabla de atributos para pasar de atributos de 16×16 a 8×1?
¿La NES podría con tantas interrupciones y el juego a la vez, contando con que no hay coprocesadores?
Si el mapper hace el bank switching sin interrupciones, el rendimiento debería mejorar mucho.

Diskover escribió:uno de los creadores de Former Dawn habla sobre la parte técnica: https://forums.nesdev.org/viewtopic.php?t=23679

Por cierto, el dev que comenta en Discord utiliza el mismo nombre y avatar que en nesdev [carcajad]

EDIT

Otro usuario afirma que no se usan interrupciones.

Cierto, se necesitarían una barbaridad de interrupciones: como 240 líneas.

Pues nada, si lo dicen ellos mismos, quien soy yo para ponerlo en duda. Estaría genial que explicasen un día el funcionamiento que han aplicado.

Las partes técnicas me gustan mucho
@Diskover me ha gustado mucho lo que has comentado del color amarillo en la NES. A mí en su día me encantaba el color morado de la NES, me parecía precioso y también me gustaba mucho como lo usaban.
Me llamaba mucho la atención.
aranya escribió:@Diskover me ha gustado mucho lo que has comentado del color amarillo en la NES. A mí en su día me encantaba el color morado de la NES, me parecía precioso y también me gustaba mucho como lo usaban.
Me llamaba mucho la atención.

En la tercera generación de juegos de la NES, los lanzados más o menos a partir de los años 90, cuando los desarrolladores ya contaban con magnificas herramientas de desarrollo (sobretodo gráficas), usaban muchísimo el efecto de contrastar colores para dar una apariencia más limpia a los juegos.

Verás abuso de negros para perfilar y blancos para dar luz, y luego muchos tonos pastel o colores complementarios para el contraste entre ellos.

Kyatto Ninden Teyandee (Los gatos samuráis), Adventure Island 2, 3, 4, Megaman 3, 4, 5, 6, Kirby's Adventure, Hammerin' Harry, TMNT 3, etc...

Y si, sobre lo del color amarillo... las monedas de SMB en realidad tienen un tono más bien marrón claro.
Diskover escribió:
aranya escribió:@Diskover me ha gustado mucho lo que has comentado del color amarillo en la NES. A mí en su día me encantaba el color morado de la NES, me parecía precioso y también me gustaba mucho como lo usaban.
Me llamaba mucho la atención.

En la tercera generación de juegos de la NES, los lanzados más o menos a partir de los años 90, cuando los desarrolladores ya contaban con magnificas herramientas de desarrollo (sobretodo gráficas), usaban muchísimo el efecto de contrastar colores para dar una apariencia más limpia a los juegos.

Verás abuso de negros para perfilar y blancos para dar luz, y luego muchos tonos pastel o colores complementarios para el contraste entre ellos.

Kyatto Ninden Teyandee (Los gatos samuráis), Adventure Island 2, 3, 4, Megaman 3, 4, 5, 6, Kirby's Adventure, Hammerin' Harry, TMNT 3, etc...

Y si, sobre lo del color amarillo... las monedas de SMB en realidad tienen un tono más bien marrón claro.

Tengo una duda sobre el tema de la paleta de colores. Según la fuente que consulte se habla de una paleta de 52, 54 o 56 colores, ¿esto a que se debe?
Papitxulo escribió:
Diskover escribió:
aranya escribió:@Diskover me ha gustado mucho lo que has comentado del color amarillo en la NES. A mí en su día me encantaba el color morado de la NES, me parecía precioso y también me gustaba mucho como lo usaban.
Me llamaba mucho la atención.

En la tercera generación de juegos de la NES, los lanzados más o menos a partir de los años 90, cuando los desarrolladores ya contaban con magnificas herramientas de desarrollo (sobretodo gráficas), usaban muchísimo el efecto de contrastar colores para dar una apariencia más limpia a los juegos.

Verás abuso de negros para perfilar y blancos para dar luz, y luego muchos tonos pastel o colores complementarios para el contraste entre ellos.

Kyatto Ninden Teyandee (Los gatos samuráis), Adventure Island 2, 3, 4, Megaman 3, 4, 5, 6, Kirby's Adventure, Hammerin' Harry, TMNT 3, etc...

Y si, sobre lo del color amarillo... las monedas de SMB en realidad tienen un tono más bien marrón claro.

Tengo una duda sobre el tema de la paleta de colores. Según la fuente que consulte se habla de una paleta de 52, 54 o 56 colores, ¿esto a que se debe?


Técnicamente, la NES tiene una paleta de 64 colores si o si. Lo puedes contar tu mismo:

Imagen


Lo que ocurre es que 10 de esos colores son negros y un blanco. Incluso hay un negro, el $0D que no se debe de usar porque proporciona un voltaje muy bajo y puede dañar algunos televisores antiguos.

Al final nos quedamos en la practica con 54 colores.

Luego se puede aplicar "énfasis de color" para teñirlos a más rojizos, más verdosos, más azulados, o más amarillentos, lo que aumenta esa paleta, pero solo puedes usarla en principio si todos los colores a la vez tienen ese énfasis, con lo que te sigues quedando con 54 colores.

Además, la PPU para NTSC y la PPU para PAL, difieren en las paletas. No son exactas. No son RGB ni YUV, por tanto, sacan colores que dependen de la señal de emisión y como lo interprete el televisor.

Tambien existe una PPU para la Playerchoice Arcade, que emite señal RGB y cuya paleta es distinta a la domestica.

Más info sobre la paleta de colores de la NES: https://www.nesdev.org/wiki/PPU_palettes
¡Vamos!




Y antes de que me preguntéis, el cómo es posible que sobrepasen el límite de 8 sprites en pantalla: No los sobrepasan.

Los sprites que hay en pantalla solo son:
- El protagonista
- Algunas copas de árboles (para dar la sensación de superposición con el fondo moviéndose a otra velocidad).
- Algunas partes bajas de las nubes (idem).
- Unas pocas flores en la parte inferior del camino (idem).

Otros trucos:
- Para dar sensación de distintos planos, aparte de los trucos con sprites, se usa, como es obvio, interrupciones de línea IRQ. En este caso hasta seis.
- El carro y el animal que tira de él, SON PARTE DEL FONDO. Hay que tener en cuenta que al tener muchísima capacidad de almacenamiento y no estar limitados a 256 tiles por background, pueden dibujar en el mismo cosas muy animadas haciendo un uso abusivo de cambio de bancos al vuelo (que la consola se lo traga fácil y sin rechistar).
- Se confirma que se ha pasado todo el proyecto a la versión del mapper MXM-1, dejando el MXM-0 como cosa del pasado. Ya explicarán los cambios.


En un par de días darán información sobre el futuro Kickstarter
@Diskover NI VE LON que se marca esta gente. Wow
Diskover escribió:¡Vamos!




Y antes de que me preguntéis, el cómo es posible que sobrepasen el límite de 8 sprites en pantalla: No los sobrepasan.

Los sprites que hay en pantalla solo son:
- El protagonista
- Algunas copas de árboles (para dar la sensación de superposición con el fondo moviéndose a otra velocidad).
- Algunas partes bajas de las nubes (idem).
- Unas pocas flores en la parte inferior del camino (idem).

Otros trucos:
- Para dar sensación de distintos planos, aparte de los trucos con sprites, se usa, como es obvio, interrupciones de línea IRQ. En este caso hasta seis.
- El carro y el animal que tira de él, SON PARTE DEL FONDO. Hay que tener en cuenta que al tener muchísima capacidad de almacenamiento y no estar limitados a 256 tiles por background, pueden dibujar en el mismo cosas muy animadas haciendo un uso abusivo de cambio de bancos al vuelo (que la consola se lo traga fácil y sin rechistar).
- Se confirma que se ha pasado todo el proyecto a la versión del mapper MXM-1, dejando el MXM-0 como cosa del pasado. Ya explicarán los cambios.


En un par de días darán información sobre el futuro Kickstarter

Realmente impresiona bastante.
125 respuestas
1, 2, 3