Sobre la capacidad de multiplicación de snes, y sus posibles usos

Una de las cosas mas referidas a la hora de exhibir el uso de las instrucciones de multiplicación, es la rotación de sprites.

En snes la cpu carece de dichas instrucciones, pero sin embargo el PPU1 dispone de un juego de instrucciones de 24 bits que incluyen la multiplicación, que es en lo que se basa el modo 7 para los cálculos de perspectiva, escalado, y rotación de planos enteritos con una extensión de 1024x1024 pixels, a 256 colores, y a una tasa de cálculo que supera en varias veces los 60 frames por segundo.

Con esto nos podremos hacer una idea de que tipo de capacidad estamos hablando.

Sucede que podemos hacer uso de esa potencia para implementar por software cualquier rutina inherente a los gráficos. El punto negativo es que no podemos usar la multiplicación para apoyo lógico (ya que es el sistema de vídeo quien se encarga, y en ese sentido no es programable, de ahí que se comente la rigidez del hardware de la snes). No podemos hacer uso de esa capacidad de proceso para tareas típicas de una cpu, ni podemos hacer uso del modo 7 simultáneamente...

Sin embargo, no deja de ser un factor muy aprovechable que brinda una capacidad de cálculo enorme para rutinas gráficas, sin tener que ceñirte a los modos gráficos predefinidos. Lo malo es que tendrías que programar a mano lo que sea que se te ocurra, pero eso significa que incluso podrías hacerte tu propia versión customizada del modo 7, o cualquier efecto gráfico que se te ocurra... como por ejemplo:

Rotación de múltiples sprites por software sin ninguna intromisión de la cpu (a partir del minuto 5:55):
https://m.youtube.com/watch?v=zYIHAgvqWJc


La pregunta es... ¿que usos, apelando al ingenio, se le ha llegado a dar en un hardware a la capacidad de multiplicación?.
Hola, no tengo la menor idea de esto, además soy un poco 'descerebrado' a la hora de aprender y retener, pero quería dejar algo de info. Por ejemplo esta página me ha parecido llamativa, quizá ya la conozcas.

http://wiki.superfamicom.org/snes/show/Registers

Casos, sin entender del todo el concepto de multiplicación.. rotación de sprites... en Super Nintendo Art of Fighting, cuando comprendí como programaron el juego, me impactó sobremanera...

He visto estos posibles ejemplos en Snes

Treasure Conflix
https://www.youtube.com/watch?v=Rx3mW0aRcbM
https://www.youtube.com/watch?v=-mvRsxkWKCY

Ace wo Nerae
https://www.youtube.com/watch?v=gMMxTmLq1lg

Septentrion
https://www.youtube.com/watch?v=fsaw-w3dB0M

Treasure Hunter G
https://www.youtube.com/watch?v=PKk0QZsXBwQ

NHL Stanley Cup
https://www.youtube.com/watch?v=rvDqHdrvbpw

Run Saber
https://www.youtube.com/watch?v=4eblGqe ... be&t=4m18s

Super Air Diver 2
https://www.youtube.com/watch?v=igH1ZnFvIdI

Cameltry
https://www.youtube.com/watch?v=CHS00nAgdk4

Chrono Trigger
https://www.youtube.com/watch?v=WvLaWf5C2Hs

Sobre la pregunta en sí, desde la completa ignorancia me parece que por ejemplo los arcades ochenteros que utilizaban vectores hicieron un uso muy hábil de la capacidad de multiplicación, justo en una época de escasos recursos técnicos donde casi todo estaba por inventar, juegos como Star Wars o Major Havoc eran una maravilla disponiendo de una capacidad de proceso limitada.

https://www.youtube.com/watch?v=9n6I1KPxOfE
https://www.youtube.com/watch?v=_DLEG2S8wiU
https://www.youtube.com/watch?v=cZfsnA7dAHI

En otras plataformas como Megadrive, Saturn, 3DO o PC Engine.. no lo sé, en general conozco muy poca cantidad de juegos de cada máquina...

PD: Gracias por la demo del Gunstar :)


Saludos
En realidad todos esos ejemplos hacen uso de la capacidad de multiplicación a través del modo gráfico establecido (por hardware).

Lo que me interesa es el uso de esas instrucciones por software. Un ejemplo es el que he puesto del super aleste, esa rotación está hecha por software, porque las limitaciones del modo 7 impedirían superponer otro plano al que recibe la capacidad de rotación, y sin embargo sucede, así que ese efecto está "customizado" por software.


P.D: He parado de escribir para cerciorarme, aunque estaba claro analizando la escena. La bola gigante está compuesta por cuatro sprites de 32x32 pixels, que rotan al unísono gracias a la capacidad de multiplicar del PPU1.

Confirmado, está hecho por software.
Este es el uso mas practico que le veo a la multiplicacion, ademas de la de billetes

Imagen
Lo he puesto en un gif, que es mas cómodo de ver.

Son 4 sprites de 32x32 pixels. Rotación haciendo uso de la multiplicación por software... la gracia del asunto está en que la capacidad de cálculo del sistema de vídeo de la snes admite ser programada para tareas que se salgan los modos gráficos. No es tan rígido como la gente se piensa.

Imagen



@theelf
Imagino que para ti ciertas preguntas implican obviedades, pero el resto solo somos simples mortales (me temo).
Señor Ventura escribió:Una de las cosas mas referidas a la hora de exhibir el uso de las instrucciones de multiplicación, es la rotación de sprites.

En snes la cpu carece de dichas instrucciones,

STOP, la cpu de la SNES si tiene la instrucción de multiplicación.

Señor Ventura escribió:...pero sin embargo el PPU1 dispone de un juego de instrucciones...
...no podemos usar la multiplicación para apoyo lógico (ya que es el sistema de vídeo quien se encarga, y en ese sentido no es programable,...

O una cosa o la otra, o es programable con instrucciones o no lo es.

Señor Ventura escribió:La pregunta es... ¿que usos, apelando al ingenio, se le ha llegado a dar en un hardware a la capacidad de multiplicación?.

Exactamente lo mismo que puedas hacer con un lápiz y un papel sólo que más rápido.
Eteream escribió:STOP, la cpu de la SNES si tiene la instrucción de multiplicación.


No es así. La versión del 65c816 de la snes no tiene instrucciones de multiplicación.

Luego está el SA-1, que es básicamente un 65c816, pero a 10mhz, con instrucciones para multiplicar, y una pequeña caché imbuída (dos, de hecho)... pero hablamos de un chip de apoyo, no de la cpu de la consola.

Antes de mandar callar a los demás, aclárate con eso.

Eteream escribió:
Señor Ventura escribió:...pero sin embargo el PPU1 dispone de un juego de instrucciones...
...no podemos usar la multiplicación para apoyo lógico (ya que es el sistema de vídeo quien se encarga, y en ese sentido no es programable,...

O una cosa o la otra, o es programable con instrucciones o no lo es.


El PPU1 no puede usar instrucciones de multiplicación con carácter lógico, porque es un procesador dedicado a gráficos.

Tampoco pueden usarse esas instrucciones si se está haciendo uso de las rutinas gráficas del modo 7, pero si en todo momento mientras que no sea así.

Lo que tenemos es un chip de 16 bits y 21mhz con un set de instrucciones, entre ellos el de multiplicar, siendo este de 24 bits, y puede usarse para ser aplicado a los gráficos, ya sean planos, o sprites.

Eteream escribió:
Señor Ventura escribió:La pregunta es... ¿que usos, apelando al ingenio, se le ha llegado a dar en un hardware a la capacidad de multiplicación?.

Exactamente lo mismo que puedas hacer con un lápiz y un papel sólo que más rápido.


No se ni para que me molesto...
No te molestas a mirar las cosas antes de escribir. Míratelo mejor, anda!
Eteream escribió:No te molestas a mirar las cosas antes de escribir. Míratelo mejor, anda!


Mathematical instructions

These instructions perform addition and subtraction with the registers and memory. (Note that there are no opcodes for multiplication and division; special registers must be used for those.)

http://www.smwiki.net/wiki/65c816_instr ... structions
http://forum.6502.org/viewtopic.php?f=1&t=3469


No sería mala idea que comprobaras las cosas cuando se te dice. Mejor míratelo tu, y deja de desinformar.
Pues eso la multiplicación y división se activa escribiendo a un registro. Cálmate.

Señor Ventura escribió:El PPU1 no puede usar instrucciones de multiplicación con carácter lógico, porque es un procesador dedicado a gráficos.

Tampoco pueden usarse esas instrucciones si se está haciendo uso de las rutinas gráficas del modo 7, pero si en todo momento mientras que no sea así.

Lo que tenemos es un chip de 16 bits y 21mhz con un set de instrucciones, entre ellos el de multiplicar, siendo este de 24 bits, y puede usarse para ser aplicado a los gráficos, ya sean planos, o sprites.

Que el chip gráfico de SNES soportara instrucciones imperativas seria todo un descubrimiento. Hasta dónde yo se simplemente se escriben registros básicamente describiendo sprites y planos (o backgrounds).

Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.

Señor Ventura escribió:No se ni para que me molesto...

Si quieres la descripción científica: la cpu de SNES es un máquina de Turing completa, un papel y un lápiz más un buen cerebro también lo son. En vulgar: que puedes hacer cualquier operación lógica y matemática si no hay límite de tiempo.
Eteream escribió:Pues eso la multiplicación y división se activa escribiendo a un registro. Cálmate.


Dicho registro tarda 8 ciclos de reloj en iniciar el proceso, y de hecho lo que hace es llamar al PPU1 para realizar las operaciones de multiplicación. No es la cpu quien realiza los cálculos.

Eteream escribió:Que el chip gráfico de SNES soportara instrucciones imperativas seria todo un descubrimiento. Hasta dónde yo se simplemente se escriben registros básicamente describiendo sprites y planos (o backgrounds).


Es justo lo que he dicho antes.

Pero tambien se han hecho otras cosas mas alejadas del tratamiento de tiles, como por ejemplo el efecto de pantalla partida de los dragon ball. Tambien es una rutina por software desde el PPU1.

Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.


Concretamente a través de este opcode:

Bitwise instructions

AND - AND Accumulator with Memory
ASL - Left Shift Accumulator or Memory
BIT - Bit Test
EOR - Exclusive OR Accumulator with Memory
LSR - Shift Right Accumulator or Memory
ORA - OR Accumulator with Memory
ROL - Rotate Left Accumulator or Memory
ROR - Rotate Right Accumulator or Memory
TRB - Test and Reset Bit
TSB - Test and Set Bit


Señor Ventura escribió:Si quieres la descripción científica: la cpu de SNES es un máquina de Turing completa, un papel y un lápiz más un buen cerebro también lo son. En vulgar: que puedes hacer cualquier operación lógica y matemática si no hay límite de tiempo.


Pero lo hay. Son máquinas utilizadas para hacer videojuegos, todo debe suceder rápido y ya, no puede tirarse media tarde pensando.
Creo entender de dónde viene tu confusión. En esos tiempos cuando se diseñaba una consola se tenia la opción de crear un chip de gráficos a propósito (custom chip, ASIC) o usar uno genérico de otra casa. La Megadrive usó uno genérico y su calidad gráfica se resintió, en cambió Nintendo optó por crear su propio chip gráfico. Estos chips, como no están producidos en masa tienden a ser bastante caritos. Por lo que si puedes usar uno en vez de dos, pues mejor. Así que todas las consolas de aquellas épocas incorporan estos custom chips con diversas funcionalidades no relacionadas en un mismo chip. Así que en el caso de SNES los chips PPU1 y PPU2 no sólo realizan gráficos, sino que realizan otras tareas no relacionadas.

Señor Ventura escribió:
Eteream escribió:Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.


Concretamente a través de este opcode:

Bitwise instructions

AND - AND Accumulator with Memory
ASL - Left Shift Accumulator or Memory
BIT - Bit Test
EOR - Exclusive OR Accumulator with Memory
LSR - Shift Right Accumulator or Memory
ORA - OR Accumulator with Memory
ROL - Rotate Left Accumulator or Memory
ROR - Rotate Right Accumulator or Memory
TRB - Test and Reset Bit
TSB - Test and Set Bit



No, el chip gráfico no soporta opcodes/instrucciones, eso no pasaría hasta la Saturn/PSX; simplemente es un chip lógico con puertas AND, OR y todo el resto.
Eteream escribió:
Señor Ventura escribió:
Eteream escribió:Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.

Concretamente a través de este opcode:

Bitwise instructions

AND - AND Accumulator with Memory
ASL - Left Shift Accumulator or Memory
BIT - Bit Test
EOR - Exclusive OR Accumulator with Memory
LSR - Shift Right Accumulator or Memory
ORA - OR Accumulator with Memory
ROL - Rotate Left Accumulator or Memory
ROR - Rotate Right Accumulator or Memory
TRB - Test and Reset Bit
TSB - Test and Set Bit



No, el chip gráfico no soporta opcodes/instrucciones, eso no pasaría hasta la Saturn/PSX; simplemente es un chip lógico con puertas AND, OR y todo el resto.


No me has entendido. Esa instrucción pertenece al ensamblador del 65c816.

Es justo la instrucción que has comentado para obtener el resultado, pero sin multiplicar (porque no hay instrucciones para ello).
¿No suele la snes usar tiles de 16x16?
La verdad no se como se hace para "rotar" en calculos,
en 3D tienes X-Y-Z pero en 2D con X-Y habría que mover lineas segun los ejes en orden
para rotar sumando y restando o algo.
(Hablo desde mi poco conocimiento que es solo usar el Rpg maker en pc que no
deja mover lineas de un grafico ni pixeles independientes)
gadesx escribió:¿No suele la snes usar tiles de 16x16?
La verdad no se como se hace para "rotar" en calculos


A través de la constante de una suma por cpu, o de la multiplicación por el sistema de vídeo.

En el caso del ejemplo, son cuatro sprites de 32x32 conformando un único objeto.



Vuelvo a poner el gif:

Imagen
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
Hilo muy interesante y necesario, ya que la SNES sigue siendo una plataforma misteriosa sobre la que la gente no parece querer indagar más allá de su débil C.P.U. A falta de desarrolladores arrojando luz, buenas son las conjeturas que podamos ir labrando por aquí a nivel aficionado.

Antes de nada, ésto:

Señor Ventura escribió:Confirmado, está hecho por software.


¿Esto es una opinión tuya, o lo has contrastado en algún lado? Si es lo segundo fuente por favor.
Sexy MotherFucker escribió:¿Esto es una opinión tuya, o lo has contrastado en algún lado? Si es lo segundo fuente por favor.


¿Eso?... lo que ha sido es una sobrada XD

A ver, por software es, porque no hay ningún modo por hardware para rotar sprites, lo que ocurre es que en realidad, en realidad en realidad, no se si recurren a la multiplicación del ppu1, o "a la cuenta de la vieja" de la cpu.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
Personalmente "a la cuenta de la vieja" me parece demasiado para el 5A22 teniendo en cuenta que carece de instrucción de multiplicación (esencial para la ejecución de estos efectos), o los cuellos de botella que ocasionan los buses de 8 bits cuando la C.P.U quiere comunicarse con otras partes de su hard.

Si al M68000k de la MegaDrive, el cual tiene un acceso bastante directo y rápido a los datos alojados en la vram, ya le cuesta sacar resultados cómo éste:

Imagen

Al 5A22 le costaría la aniquilicación del entorno a cambio de poder rotar una sóla cosa en el Super Aleste.

Me inclino a pensar que es una rutina programada para el PPU vía HDMA en fase HBlank, o bien podría tratarse de una animación prefrabricada almacenada dentro la ram desde el inicio de la fase que el DMA vuelca en la vram llegado ese momento, aunque este último conviene recordar que sólo puede enviar datos durante el VBlank.

No dejan de ser conjeturas.
@Sexy MotherFucker

He ahí el motivo por el que pienso que se trata de una intervención del ppu1 (a través de una operación de multiplicación).

Sobre lo de ser una animación prealmacenada en la memoria de trabajo, ocurre un detalle, que además es fácil de observar, porque es muy típico cuando una rotación es auténtica: el gráfico tratado sufre una ligera descomposición sobre su aspecto original cuando este es rotado (o escalado), mientras que si se trata de una animación, su aspecto es siempre el óptimo.

Y luego hay otro detalle, que es el sentido común. Si te sobra potencia para rotar sprites sin penalización con el tiempo de proceso de la cpu, ¿para que gastar memoria de la ROM en albergarlo?.


Y añado algo mas... los PPU's tienen un acceso a los tiles de sprites, y de planos, de una forma incluso mas directa que el motorola de la megadrive. En snes hablamos de que la VRAM es directamente el frame buffer, y que el ppu1 es un bicho capaz de aplicar cuatro efectos gráficos por pixel, cosa que cuando recurres a la "reprogramación" por software, permite cosas como las del gif del super aleste, y además presumiblemente todavía le queda margen para mas.

Imagina un sistema donde puedes aplicar efectos gráficos al vuelo sobre una posición de memoria que ya está preparada para ser leída y dibujada en pantalla de antemano, en un solo paso, y que además su potencia de proceso es entre tres y cuatro veces superior al del VDP de la mega, con capacidad para aprovechar instrucciones de multiplicación de 24 bits por software...


La realidad, es que hablando hardware completo, quien se muere a la hora de rotar sprites, es con diferencia la megadrive, porque la snes va mas sobrada.
Estamos de acuerdo en que el 65c816 se parte en dos en esa tarea, pero es que un hardware no es solo la cpu...
(mensaje borrado)
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
O sea básicamente aplicaciones GPGPU (General Purpose GPU Apps). Esa feature en verdad está presente en muchos VDPs, que tiene capacidades bastante avanzadas si se compara con la CPU que les acompaña, pero necesitaban esa capacidad para su verdadera labor: mover gráficos. Si vas a usa la GPU para operaciones de uso general como multiplicaciones ya no te queda GPU para otros fines.

No es una pregunta fácil de responder, es difícil imaginar usos para algo tan acotado, ni siquera el software comercial supo darle uso.
AxelStone escribió:O sea básicamente aplicaciones GPGPU (General Purpose GPU Apps). Esa feature en verdad está presente en muchos VDPs, que tiene capacidades bastante avanzadas si se compara con la CPU que les acompaña, pero necesitaban esa capacidad para su verdadera labor: mover gráficos. Si vas a usa la GPU para operaciones de uso general como multiplicaciones ya no te queda GPU para otros fines.

No es una pregunta fácil de responder, es difícil imaginar usos para algo tan acotado, ni siquera el software comercial supo darle uso.


Bueno, esto es made in magno, ¿eh?, no me lo estoy inventando, ni lo he leído de cualquier lado.

Si usas las multiplicaciones de 24 bits del PPU1, no puedes usar las transformaciones del plano del modo 7. Es la única limitación que tiene, porque el resto de modos no usan esa extensión para ninguna otra tarea.

Esto hace pensar sobre lo escasa que resulta la implementación de los modos del sistema gráfico. Con esa potencia, bien podrían haber surgido un par de modos mas para, no se, por ejemplo rotar o escalar un número concreto de sprites de forma nativa (se pueden rotar por software, así que bien se podría haber hecho a través de un modo gráfico, que tal vez resulte mas optimizado).

De otros efectos como el canal alpha se encarga el PPU2, así que pocos conflictos verías con respecto a esto a la hora de usar diferentes cualidades del sistema gráfico simultáneamente.
@Señor Ventura Si hablamos de multiplicaciones las operaciones con vectores es lo primero que me viene a la cabeza, pero algo debe faltar en la ecuación porque de ser así lo habrían aplicado en juegos como Another World o Flashback, en vez de dejar a la CPU haciendo los cálculos.
AxelStone escribió:@Señor Ventura Si hablamos de multiplicaciones las operaciones con vectores es lo primero que me viene a la cabeza, pero algo debe faltar en la ecuación porque de ser así lo habrían aplicado en juegos como Another World o Flashback, en vez de dejar a la CPU haciendo los cálculos.


A veces damos las cosas por supuestas cuando deberían ser de cajón, y luego...

Hasta donde se, las versiones de snes son ports adaptados con mas o menos fortuna, así que no me extrañaría que pasasen de comerse el tarro.

Es que de hecho, como herramienta una instrucción de multiplicación de semejante bicho, es una cosa muy potente, y el another world no es que vuele precisamente, así que la sensación es que lo han dejado de lado.

Esto es algo que me interesa, porque subirían de nivel muchísimo las cosas.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
@ Señor Ventura; yo también pienso que puede ser una rutina del PPU por software, simplemente valoraba otras opciones para que tuviésemos una perspectiva más global. Ahora bien, me interesa mucho el tema pero no soy tan entusiasta cómo tú, para empezar; ¿estamos seguros de cuáles serían las penalizaciones en el entorno? En ese gif de Super Aleste veo un sprite rotar dentro un plano estático sin scroll en dónde hay dos backgrounds; uno detallado que se medio mueve (la nave enemiga), y otro descolorido (el prado verde), más los marcadores. El campo de los sprites lo protagonizan el caza, sus disparos, la bola rotatoria, y los life up que sueltan. Yo ahí no estoy viendo nada que no pueda hacer una Mega Drive de momento. Otra cosa sería que ese tipo de rotaciones las hiciese en un entorno cómo el de Bio Metal cuando el scroll se pone a 25/30 fps, o la pantalla se llena de enemigos, ahí es dónde entiendo yo que se vería el supuesto poder oculto de los PPUs (que nadie en 26 años ha utilizado...), no en entornos super-controlados para que la C.P.U pueda parar para enviarle la instrucción correspondiente al PPU para que ejecute su magia

Mi escepticismo para nada es gratuíto hombre, está plenamente justificado, porque vamos a ver; ¿en una librería de más de 1400 juegos no existe un ejemplo que vaya más allá que el de Super Aleste? ¿Eran todos los desarrolladores unos vagos que dejaban que juegos cómo Flashback, Another World, etc, corriesen sus cutscenes más lentas que en MegaDrive pudiendo hacer lo contrario? ¿O eran unos inútiles? ¿NADIE en 26 años de scene demuestra lo contrario? ¿Hay un complot mundial de developers fanboys de SEGA que no dejan exprimir la SNES cómo se podría? ¿Están en un cofre guardados los secretos a bajo nivel del hard de SNES enterrados con Hiroshi Yamauchi quien lo custodia con manos esqueléticas engarfiadas en su tumba?

Estoy deseoso por llegar al fondo de ésto, pero de momento sólo veo hipótesis en el aire de fans...

Señor Ventura escribió:quien se muere a la hora de rotar sprites, es con diferencia la megadrive, porque la snes va mas sobrada.


Qué exageración XD MegaDrive está lejos de morirse, es una máquina muy solvente para la rotación, zoom/scaling por software, aplica usos muy diversos en sus juegos:

Los mapas de Pier Solar

https://www.youtube.com/watch?v=iH_2VXjkS7g

Los fondos de Monster World IV:

Imagen

Logos a 60 fps:

Imagen

Megaturrican y sus flipadas:

Imagen

El scaling de anillos al mismo tiempo que aplica raster sobre fondos en Sonic 3D Blast:

https://www.youtube.com/watch?v=RFx1XFzbICg

Las rotaciones escalares de Panorama Cotton:

Imagen

Vamos que está lejos de "morirse" para sacar un resultado decente, simplemente la SNES tiene un hardware más preparado para esos menesteres.
P.D: Cambia el título mejor a "SOBRE LA CAPACIDAD DE MULTIPLICACIÓN DE SNES Y SUS POSIBLES USOS», lo mismo concretando se mete más peña a discutir ;)
@Sexy MotherFucker

En realidad son 4 sprites los que conforman esa bola en el super aleste, pero aunque esa escena no ofrece mas, no creo que sea razonable concluir que mientras aplica la rotación, no puede nimover un plano de scroll.

Y lo cierto es que no se hasta que punto hay un poder oculto ahí. Mas bien lo que pienso es que se ha utilizado poco, no que pueda dar mucho mas de si.


La megadrive por su parte tiene potencia para hacer sus cosillas, pero para que una máquina sea muy solvente con las rotaciones/scaling, no puede mover un F-zero a menos resolución, con una distancia de fibujado muy recortada, y con un tope de 30fps.

La snes es capaz de mover 4 veces un plano en modo 7 a 60 fps, y a mucha mas resolución. Esa es la potencia que puedes usar para multiplicar... y llegará hasta donde llegue, pero creo que con la bola del super aleste no tiene ni para empezar.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
Señor Ventura escribió:La snes es capaz de mover 4 veces un plano en modo 7 a 60 fps, y a mucha mas resolución. Esa es la potencia que puedes usar para multiplicar.


Esa esa es la potencia al máximo y ya está limitada a un sólo plano, y cuando hay bastantes sprites moviéndose los colores bajan a cientos menos de los teóricos 256 con los que funciona el modo 7, lo que me lleva a pensar que repartiéndola por software en un entorno más equilibrado con al menos un par de planos de scroll parallax en un movimiento, transparencias, etc, la cosa no pinta mucho más optimista que lo visto en Super Aleste. Luego está el tema de que "se ha usado poco", vale, ¿por qué? 1400 juegos, programadores de vieja escuela, 16 años de scene...

No me malinterpretes; no estoy buscándole trabas a la SNES con acritud antagonista (menuda chorrada), simplemente considero que es un tema muy interesante sobre el que hay poquísima información, y antes de lanzarme con entusiasmo a proclamar: "¡La SNES podría hacer esto y aquello!", prefiero ser prudente y ponerme en el peor de los escenarios. Luego todo lo que suba de ahí bienvenido és.

P.D: ¡Cámbiale el título al hilo cómo he sugerido antes a ver si entra más gente!
@Sexy MotherFucker en eso último creo que el compi se refiere al modo 4 players del Street Racer, que la verdad, al menos desde mi punto de vista noob, el resultado es bastante llamativo cuando menos.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
Aaaaah, ok, ok. Cuando ha dicho "4 veces a 60 fps" pensé que se refería a que rotaba el plano 4 veces xDDDDD!

Retiro lo dicho entonces.
@Sexy MotherFucker Yo soy de tu opinión: ¿en 26 años nadie ha decidido explorar este camino, sea comercial o homebrew? Sobre todo estos últimos, que son muy dados a pequeños experimentos con los hardware que tocan. La explicación la veo simple: no hay camino que explorar. Algo habrá, colisión en el bus de datos o lo que sea, pero no haber visto nada al respecto me extraña mucho, al menos el típico cubo rotando a 60fps con un "mira lo que he hecho".

Digo lo mismo de siempre, las restricciones técnicas son el pan de cada día en nuestro mundillo, todos los sistemas tenían que ver la luz en plazo y coste. Un ejemplo perfecto de incompatibilidad es el canal PCM que tenía el Atari ST, valga un botón:

https://www.youtube.com/watch?v=C7KJ9w1v4VI
Así suena el title screen de Turrican 2.

https://www.youtube.com/watch?v=C7KJ9w1v4VI
Así suena in game, stage 1.

Nótese que el title screen es totalmente estático. ¿Por qué? El ST tiene un bug y es que cuando suena el PCM bloquea el bus y no permite a más dispositivos acceder a él, por lo que no pudo usarse nunca en juegos. Este fallo se resolvió en el STE. Y simplemente no es un bug, es consecuencia de tener que ajustarte a costes y plazos.
Opinion personal

Para rotacion de sprites/tiles y cualquier metodo de trabajo con ellos, es mejor trabajar con matrices predefinidas

Un soporte para multiplicacion en hardware viene bien para operaciones de coma flotante, cosa q no tiene mucha logica en el trabajo de tiles

Para la SNES, en caso de usar la CPU central, veo lo mas logico reducir al minimo las operaciones de coma flotante, y fomentar las operaciones con multiplicacion en base 2, para usar el registro asl

Pero ni puta idea del cpu de la super, tampoco me interesa demasiado la verdad, aunque creo q no voy mal encaminado en esta ultima sentencia



@Sexy MotherFucker efectivamente el hilo tiene q tener SNES en portada, porque otros CPU soportan multiplicacion en sus instrucciones, como el 68k, y parece estar enfocada en esta primera la duda



En todo caso, no le veo mucho sentido al tema, porque lo que hay en hardware, es lo que hay y ya esta. Lo demas, es todo astucia y habilidad por software

12 * 23 = 276

Pero sin multiplicacion....

12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 + 12 = 276

Con astucia podria ser algo asi...(no reirse, estoy en baja forma con las matematicas)

2[(2+2+3)][3+3] = 276
Y una vez que lo pasamos a binario es todavía mejor theelf.

12 x 23 = 276 -> 1100 x 10111 = 100010100

Sin multiplicación:

1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 + 1100 = 100010100

Pero con astucia:

1100 + 11000 + 110000 + 11000000 = 100010100

Que además es como lo hacen internamente muchas CPUs aunque lleven la instrucción de cara al programador.

Llevamos meses leyendo en el foro lo de que si multiplicación sí o no en una CPU y todavía no le he encontrado el sentido a la duda, me recuerda al típico razonamiento de RISC vs CISC de "como no va a ser mejor el CISC si tiene muchas más instrucciones".
@Sexy MotherFucker

Rectifico un dato. En cada pantalla individual en el modo a 4 jugadores del street racer, la resolución horizontal si es superior a la del F-zero de megadrive, pero la vertical, por motivos obvios, no.

Lo que ocurre es que lo que nos estaba marcando las pautas de la conversación es el poder de cálculo de los PPU's, así que la longitud de cada scanline es en lo que toca centrarse, porque la resolución horizontal es lo que afecta a la capacidad de cálculo y fill rate del sistema de vídeo (no la vertical).


Y en cuánto a eso... la cuestión es que internamente tiene capacidad para hacer los cálculos de perspectiva, rotación, y escalado, varias veces por frame (por este motivo puede permitirse la machada de mover cuatro planos a 60fps).

La cuestión, es que parte de esa potencia de cálculo puede usarse para multiplicar... ¿su alcance?, pues hombre, algo se puede hacer con eso, no sabemos mas xD


P.D: No quería decir que la megadrive se muriese haciendo ese cálculo en el turrican, solo estaba parafraseando lo que habías dicho ^^u

theelf escribió:@Sexy MotherFucker efectivamente el hilo tiene q tener SNES en portada, porque otros CPU soportan multiplicacion en sus instrucciones, como el 68k, y parece estar enfocada en esta primera la duda


En realidad mi intención era hablar sobre ejemplos que hiciesen uso de esa capacidad, en general... como por ejemplo el mencionado sprite rotando del turrican de la megadrive.
@Baek

Gracias por el ejemplo

Cuando programo para la mega, suelo usar bastante numero binario, me ayuda a la hora de hacer atajos en operaciones, es bueno ver un ejemplo de ese tipo, gracias

Yo sinceramente tampoco le encuentro sentido a la duda... si alguien me pregunta cual es el posible uso de la multiplicacion, responderia "poder hacer 2x2 y obtener 4...."


@Señor Ventura

Me gustaria ver un ejemplo de rotar un sprite usando multiplicacion. Yo la verdad que con una matriz y suma convencional lo veo mas q suficiente
theelf escribió:@Señor Ventura

Me gustaria ver un ejemplo de rotar un sprite usando multiplicacion. Yo la verdad que con una matriz y suma convencional lo veo mas q suficiente


Supongo que es una forma de ganar ciclos de reloj, no es porque no se pueda, creo yo.

El ejemplo de la bola del super alesta, son 4 sprites de 32x32. Solo por curiosidad, me gustaría saber a que han recurrido para hacerlo (sobre todo para aprender, y para saber cuánta cpu usa).
@Señor Ventura

Si es por software, y la rom aprieta, lo mas logico es hacer un mapa. Postea el sprite, y te hago una rotacion de el por software


Sobre el tema del uso del CPU... realmente cualquier maquina es mas que una CPU suelta, ademas de las instrucciones espeficicas, hay multiple componentes a tomar en cuenta, procesadores secundarios, buses, ram, velocidad de la ram y rom, tipo de refresco de la vram ... etc como para poder discutir sobre papel la importancia del uso del CPU central en cualquier cosa

Eso es algo que a la hora de programar, se decide, dependiendo la situacion del momento, en funcion a lo que se necesita, programar de una manera u otra
theelf escribió:Eso es algo que a la hora de programar, se decide, dependiendo la situacion del momento, en funcion a lo que se necesita, programar de una manera u otra


y lo que se necesita yo diría que es por temas creativos, no técnicos, a no ser que hablemos de compañías first que quieran sí o sí mostrar forzosamente unas determinas características de su consola.

Es lo que le digo a Ventura a veces, que primero la idea y luego la técnica para desarrollarla, porque al revés se estarían invirtiendo los papeles; la consola debe servir al juego, y no al revés.

Por cierto, me molaría ver esa bola; tienes un +1 por mi parte. [chulito]
@theelf

Esta es la imagen:
Imagen


Es un objeto de 64x64 pixels, así que tendrás que trocearlo (no he querido hacerlo yo, por si acaso te viene peor). En la propia snes la rotación se consigue uniendo 4 sprites de 32x32... vamos, que no es solo un sprite.

En el juego las partes naranjas tienen una animación que hace un fade con los colores, pero no tiene nada que ver con la rotación, ya que se limita a cambiar las coordenadas del sprite que se le proporcione en cada frame, así que realmente son dos cosas diferentes, y no afecta.


Me interesa mucho saber cual es la diferencia aproximada en tiempo de proceso, entre hacerlo con multiplicación, o con sumas.


Muchas gracias por pasarte por aquí [risita]


EDIT: ¿Estoy en lo cierto si pienso que aunque sea un solo objeto, en realidad estás rotando 4 sprites "individualmente"?.
Señor Ventura escribió:EDIT: ¿Estoy en lo cierto si pienso que aunque sea un solo objeto, en realidad estás rotando 4 sprites "individualmente"?.


Si fuera un objeto la rotación sería distinta, ¿no? porque un objeto único bastaría con que rotara sobre su propio eje, mientras que varios objetos tendrían que estar coordinados en un movimiento circular, como el corro de la patata vamos. :p

Aunque supongo que bastaría cambiando la posición del eje en el caso de ser varios objetos.
gynion escribió:Si fuera un objeto la rotación sería distinta, ¿no? porque un objeto único bastaría con que rotara sobre su propio eje, mientras que varios objetos tendrían que estar coordinados en un movimiento circular, como el corro de la patata vamos. :p

Aunque supongo que bastaría cambiando la posición del eje en el caso de ser varios objetos.


Con estas cosas uno nunca lo puede tener del todo claro, vete tu a saber por dónde te sale de repente un sistema de estos cuando crees que lo tienes claro xD
Señor Ventura escribió:
gynion escribió:Si fuera un objeto la rotación sería distinta, ¿no? porque un objeto único bastaría con que rotara sobre su propio eje, mientras que varios objetos tendrían que estar coordinados en un movimiento circular, como el corro de la patata vamos. :p

Aunque supongo que bastaría cambiando la posición del eje en el caso de ser varios objetos.


Con estas cosas uno nunca lo puede tener del todo claro, vete tu a saber por dónde te sale de repente un sistema de estos cuando crees que lo tienes claro xD


Sí, vete a saber. Además, como en esas consolas los sprites se juntaban en cachitos para formar objetos gordos puede incluso que tuvieran opciones especificas para agruparse y comportarse como un único objeto, ¿no?

En la actualidad, según comentaba por aquí un compañero hace poco, se ve que ya no desarrollan los juegos 2D así, sino que trabajan con objetos de una pieza, más cómodamente.
gynion escribió:Sí, vete a saber. Además, como en esas consolas los sprites se juntaban en cachitos para formar objetos gordos puede incluso que tuvieran opciones especificas para agruparse y comportarse como un único objeto, ¿no?

En la actualidad, según comentaba por aquí un compañero hace poco, se ve que ya no desarrollan los juegos 2D así, sino que trabajan con objetos de una pieza, más cómodamente.


Para que te hagas una idea.

Si usas un debugger con el donkey kong country, comprobarás que en la escena en la que DK salta encima del abuelete, cada uno de los monos está conformado por un montonazo de sprites... concretamente DK está formado por mas de 30 (así a ojo, porque no me he detenido a contarlos).

PERO, luego resulta que durante el juego son unos 10 o 12 sprites los que forman la figura del mono.

Es decir, que en teoría eso significa que puedes coger varios sprites, y hacer que ocupen un solo slot en la tabla OAM... a menos que el juego utilice dos sets de sprites diferentes para el mismo dibujo del mono en cada uno de sus frames de animación, pero sería tan estúpido que eso queda descartado.


En definitiva, que poderse rotar varios sprites como si fueran un solo objeto es posible, porque parece ser que se puede convertir en un único objeto.


¿La pega?, que en el super aleste la configuración de sprites en el momento en que sale la bola, es de 16x16 y 32x32, así que no puedes hacer que esa bola ocupe un solo slot en la tabla OAM porque ocupa 64x64 pixels, y no es lo configurado.

¿La parte buena?, que puedes cambiar la configuración de sprites al vuelo de un frame a otro para que los objetos de 64x64 ocupen un solo slot cuando no se requieran sprites de 16x16, y así ahorrar rutinas de rotación si tienes que rotar muchos sprites para salvar ciclos de reloj... puedes hacerlo incluso con las resoluciones (aunque esto es otra cosa).


Se que me he explicado como el culo xD
Por mas vueltas q le de, no se me ocurre porque usar multiplicacion en una rotacion simple, aunque obviamente alguien bueno en matematicas, puede generar algun algoritmo cojonudo, cosa q no esta a mi alcanze

Como bien dijo @AxelStone, nadie uso X tecnica antes? estos ultimos 25 anios todos los programadores eran inutiles?
Nuevas cosas salen, seguro, pero con hardware limitado, normalmente lo q se va a ver es mas de lo mismo, llevado al extremo, y si algo no se usa, aun cuando es posiblem, es porque hay alternativas mejores o mas sensillas


Y una mejor alternativa a trabajar pixel a pixel, son los mapas. Basicamente un mapa es un sprite predefinido, echo en codigo binario, o como mismo sprite, sin propiedades extras para que ocupe menos

Lo ideal seria definir una maya de 8x8, pero como no tengo tiempo, directamente defini el mapa igual al sprite, o sea pixel a pixel, lo volvi a guardar como sprite, y a tomar viento

Megadrive rom

http://www.akihabara-online.com/tmp/ale.zip


Total de la animacion: 12kb incluyendo codigo, cuando tenga tiempo, optimizare mas


En la esquina, un calculo simple, que no se si sirve de algo, cada 60 frames, hago un bucle de operaciones que se corta en el vblank. Guardo la ultima operacion que se finalizo. Esto seria 0% de uso del CPU

En el siguiente lo mismo, y comparo con la anterior, si se completaron menos operaciones, significa que el CPU esta mas ocupado que antes, sube el valor


Sinceramente preocuparse lo que el CPU este ocupado me parece una gilipolles, lo escribi porque lo preguntaron, pero no le veo sentido alguno



Ahora estoy muy ocupado, este fin de semana q viene, hago loa rotacion con mapas binarios, a ver que sale
No me he leído todo el hilo porque luego se me olvida lo que quería escribir, pero aclarar una cosa porque he leído cosas contradictorias:
* la multiplicación de 24 bits que realiza la PPU realmente es una multiplicación matricial 2x2 que se usa para posicionar el plano del modo 7; cuando no se usa el modo 7, esta multiplicación de matrices se puede usar para obtener resultados de 24 bits o para seguir haciendo multiplicaciones de matrices y así rotar sprites.
* mientras se realiza esta multiplicación (que en realidad es muy rápida en ejecución, pero se ha de usar varias instrucciones para cargar todos los valores de la matriz), se puede seguir haciendo scroll, actualizar BGx y lo que se quiera.
* Final Fantasy 6 usa esta multiplicación, en vez de la estándar en $4202/03, para hacer cálculos en los menús: HP, MP, status de los personajes, etc. En mi versión sustitui todas las multiplicaciones de 24 bits por multiplicaciones de 16, ya que las de 24 esperaban al blanking (aunque no sé si es necesario) y por tanto terminaban siendo más lentas en media: si estabas cerca del H-Blank, la multiplicación de 24 bits era un par de ciclos más rápida, pero si no, la multplicación de 16bits era muchos ciclos más rápida, además de que desde que programas los multiplicandos hasta que obtienes el producto puedes ir ejecutando otras instrucciones. Por eso, y por otros cambios que hice, mi versión no tiene el bug en la pantalla del menú.


Señor Ventura escribió:Lo que ocurre es que lo que nos estaba marcando las pautas de la conversación es el poder de cálculo de los PPU's, así que la longitud de cada scanline es en lo que toca centrarse, porque la resolución horizontal es lo que afecta a la capacidad de cálculo y fill rate del sistema de vídeo (no la vertical).


Es justo lo contrario... Las limitaciones vienen por la resolución vertical, no la horizontal. La explicación es porque todos los cálculos para la pantalla los tienes que hacer antes de que llegue la siguiente interrupción NMI (eso quiere decir, antes de que llegue el siguiente VBlank), por tanto, cuando menos líneas tengas que "calcular" mejor. Por eso la SNES tiene el modo "overscan", en el NMI salta en la línea 226 de pantalla o en la 240: si salta en la 240, tienes más tiempo en el frame para calcular las cosas, pero menos tiempo en el NMI para enviarlas a VRAM, por lo que igual no te sirve de nada calcular tanto para luego no poder enviarlo a pantalla. Lo normal en el 90% de juegos es dejar configurado el modo sin overscan, saltando el NMI en la lñinea 226.



Señor Ventura escribió:

Es decir, que en teoría eso significa que puedes coger varios sprites, y hacer que ocupen un solo slot en la tabla OAM... a menos que el juego utilice dos sets de sprites diferentes para el mismo dibujo del mono en cada uno de sus frames de animación, pero sería tan estúpido que eso queda descartado.


En definitiva, que poderse rotar varios sprites como si fueran un solo objeto es posible, porque parece ser que se puede convertir en un único objeto.


¿La pega?, que en el super aleste la configuración de sprites en el momento en que sale la bola, es de 16x16 y 32x32, así que no puedes hacer que esa bola ocupe un solo slot en la tabla OAM porque ocupa 64x64 pixels, y no es lo configurado.

¿La parte buena?, que puedes cambiar la configuración de sprites al vuelo de un frame a otro para que los objetos de 64x64 ocupen un solo slot cuando no se requieran sprites de 16x16, y así ahorrar rutinas de rotación si tienes que rotar muchos sprites para salvar ciclos de reloj... puedes hacerlo incluso con las resoluciones (aunque esto es otra cosa).


No puedes cambiar la configuración de tamaño de sprites a 64x64 porque la SNES tiene un bug con ese modo. Aunque se pudiera, eso no se haría nunca porque te da poca capacidad de reutilizar sprites, además de por la detección de colisiónes, sobra mucho espacio "vacío" entre el perfil del personaje y el "bounding-box" que forma la rejilla 64x64.
Lo que se hace en todos los juegos de SNES es formar un objeto en memoria ROM que dice cómo está formado el sprite completo del personaje: por ejemplo, 3 sprites 16x16 y 5 sprites 8x8, junto con sus posiciones relativas respecto a una coordenada que definas del personaje: centro de masas, esquina superior derecha, superior izquierda, inferior izquierda, lo que sea... En ROM existe un objeto de estos para cada frame de animación del personaje, otro objeto que dice qué tiles correspoden con los 3 sprites 16x16 y los 5 8x8, y luego otra tabla que configura, para cada movimiento del personaje, qué frame usar.
Todo esto lo tengo bien explicado en el código del Treasure Hunter G que planeo liberar algún día por si alguien se anima a ayudarme a hacerle ingeniería inversa total al juego.
Resumiendo, para animar a un personaje como Donkey Kong:
* En cada frame, antes del NMI, se comprueba qué acción está ejecutando el personaje (andar, saltar, correr, rodar...)
* Se accede a una tabla que indica cuántos frames ha de estar el personaje en una postura determinada para completar la acción
* Para la postura actual del personaje se lee de ROM la composición de sub-sprites y se envía a OAM en el NMI
* Para la postura actual del personaje se lee de ROM las tiles que componen cada uno de esos sub-sprites y se envía a VRAM en el NMI
* Si se ha terminado la cantidad de frames en esa postura, se pasa a la siguiente postura de animación y se repite el proceso



Creo que hay demasiadas suposiciones y afirmaciones incorrectas en el hilo que no ayudan demasiado a hacerse la idea correcta de cómo funciona la SNES.... :(
@magno
Buena explicacion


Ahora que te leia con lo del vblank, me reia solo, ya que me vino a la memoria cuando estaba programando el emulador de master system para la PSP, los dolores de cabeza que tuve con el tema de adaptar juegos PAL, ya que el vblank es enorme en comparacion a ntsc
magno escribió:Creo que hay demasiadas suposiciones y afirmaciones incorrectas en el hilo que no ayudan demasiado a hacerse la idea correcta de cómo funciona la SNES.... :(


Pues di cuales son concretamente. En tu explicación también hay al menos un error, pero dejarlo así a medias no ayuda en nada.
Un apunte más sobre la rotación de sprites: la multiplicación se usa para multiplicar la distancia de cada pixel respecto del centro de rotación por el coseno del ángulo que se quiere rotar. Esto traslada cada píxel a una posición independiente del resto de píxeles adyacentes y siendo el direccionamiento de la PPU por tiles, es muy complicado pintar píxeles sueltos dentro de cada tile. Es por eso que no se suelen usar algoritmos de giro por software... ¿Estás seguro que el giro del Super Aleste es a través de un algoritmo de rotación por software, @Señor Ventura?
Es que veo más lógico que el disco ése que gira esté guardado en ROM en varias posiciones y lo único que se hace es ir actualizando la VRAM con las tiles correspondientes a cada ángulo de giro.

De hecho, para facilitar esto, el chip SA-1 tiene un modo que permite direccionar píxeles sueltos de un bitmap completo. Esto, sumado a las multiplicaciones más rápidas, permite hacer algoritmos de rotación super rápidos y efectivos, así como abrir la puerta a otro tipo de efectos visuales. Es una de las varias novedades que tenía este chip que daban mucha más potencia a la SNES.


Eteream escribió:Pues di cuales son concretamente. En tu explicación también hay al menos un error, pero dejarlo así a medias no ayuda en nada.


Pues si no ayuda en nada, ¿por qué no dices dónde crees que está mi error? XD Lo que yo decía son varias afirmaciones que son inciertas y no tengo ni el tiempo ni soy quien para hacer aquí un listado.
@magno

En mi opinión puede quedar descartado que esté almacenado en rom en varias posiciones, por un detallito bastante simple.

Esa bola tiene una animación que se sucede independientemente de si gira, o no. Esto hace que para cuando empiece la rotación, el n° de frame mostrado en cada ángulo de giro puede ser mostrado de una manera diferente cada vez. No coincide ni por ritmo, ni por forma. Tendrían que haber un montón de posiciones diferentes solo para esto, y no compensa.

¿Se puede alterar el color de algunas tiles dentro de un sprite?, aquí está la respuesta.

Es una rotación, pero no puedo confirmar que lo esté haciendo el PPU1.


Me gustaría contestar a mas cosas, pero ahora mismo ando muy apretado de tiempo. Lo dejo aparcado para otro momento.
Señor Ventura escribió:En mi opinión puede quedar descartado que esté almacenado en rom en varias posiciones, por un detallito bastante simple.

Esa bola tiene una animación que se sucede independientemente de si gira, o no. Esto hace que para cuando empiece la rotación, el n° de frame mostrado en cada ángulo de giro puede ser mostrado de una manera diferente cada vez. No coincide ni por ritmo, ni por forma. Tendrían que haber un montón de posiciones diferentes solo para esto, y no compensa.


Um, ten en cuenta que la bola es perfectamente simétrica y bastaría con almacenar la mitad de la bola, el resto se hace flipeando tiles. Luego, de esa mitad de bola, dependiendo de la velocidad de giro se guardan más o menos ángulos: si gira muy rápido, con incrementos de 30º quedaría bien al ojo humano, si gira más lento para dar más sensación de fluidez, 15º es lo suyo, y solo habría que guardar la posición 0º, 15º, 30º, 45º, 60º y 75º, porque el resto se consigue usando los bits de flipping de nuevo.
Es lo que se suele hacer normalmente en los juegos si no hay muchas cosas que giren; programar una rutina de rotación de sprites solo para 1 sprite en todo el juego es algo tedioso, aunque estaría bien comprobarlo porque nunca me he topado con ninguna rutina así en la SNES y querría analizarla en profundidad.

Como decías en un post más arriba que habías confirmado algo de esa escena del Super Aleste, intuyo que tendrás una partida grabada o algo así cerca de ese punto, así que comprobarlo es muy sencillo: pilla el Snes9x Debugger de Geiger y ves dumpeando la RAM frame a frame y mira dónde está ese gráfico en RAM
* si no está, es que pasa directamente desde ROM a VRAM y por tanto no habrá ninguna rutina de rotación, cada ángulo está guardado en ROM
* si está en RAM, hay que comprobar si en esa zona de memoria RAM se escribe más de una vez antes de enviar las tiles a VRAM:
* si se escribe en esa zona 1 sola vez, será la copia del gráfico desde ROM a RAM
* si se escribe más de 1 vez, hay que mirar qué rutina es la que lo hace por segunda vez y comprobar qué está haciendo dicha rutina porque probablemente habremos dado con el santo grial XD


Señor Ventura escribió:¿Se puede alterar el color de algunas tiles dentro de un sprite?, aquí está la respuesta.


Claro, facilísimo: o cambias el color de la paleta que usa dcha tile, o simplemente cambias los bits de los planos BPP que representan el color que quieres cambiar, suponiendo que el nuevo color ya estuviera en tu paleta. Además incluso puedes cambiar de paleta por sprite, de modo que un sprite apunte a la paleta 0 y el de al lado a la paleta 1.
Pero esto no quiere decir nada: puede seguir estando las tiles de todos los ángulos en ROM, y antes de enviarlas a VRAM pasar por RAM para cambiar el color de los píxeles que se desee; una vez cambiados, se envían las tiles a VRAM desde RAM.
magno escribió:
Eteream escribió:Pues di cuales son concretamente. En tu explicación también hay al menos un error, pero dejarlo así a medias no ayuda en nada.


Pues si no ayuda en nada, ¿por qué no dices dónde crees que está mi error? XD Lo que yo decía son varias afirmaciones que son inciertas y no tengo ni el tiempo ni soy quien para hacer aquí un listado.


No es lo mismo incierto que incorrecto, a menos que tengas el diseño de los chips de SNES, todas tus afirmaciones sobre estos entran dentro de la categoria de incierto. Se pueden hacer especulaciones con mucha probabilidad de ser ciertas en determinadas ocasiones dónde el hardware se expone al software, pero para estar seguros necesitamos el diseño completo.

El no decir dónde está tu error está hecho a propósito, allá vamos:

magno escribió:No puedes cambiar la configuración de tamaño de sprites a 64x64 porque la SNES tiene un bug con ese modo. Aunque se pudiera, eso no se haría nunca porque te da poca capacidad de reutilizar sprites, además de por la detección de colisiónes, sobra mucho espacio "vacío" entre el perfil del personaje y el "bounding-box" que forma la rejilla 64x64.


¿Que tendrá que ver el sistema gráfico con la detección de colisiones?
68 respuestas
1, 2