Karoshi MSX Community
06 de Julio de 2021, 12:30:52 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: Joe Blade (+demo técnica de sprites hardware)  (Leído 9512 veces)
0 Usuarios y 1 Visitante están viendo este tema.
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« : 16 de Abril de 2007, 11:46:15 pm »

Pues he probado el JAIL BREAK de Spectrum y lo cierto es que no hay por donde cogerlo. Es malo con ganas, de verdad. No creo que el MSX se merezca que le hagamos algo así.

Por otra parte, haciendo un poco de arqueología comparada, he dado con sutiles diferencias que explican bastantes cosas. Por ejemplo, ¿porque los usuarios de MSX piensan que el juego JOE BLADE es malo y los usuarios de Spectrum dicen que está bien? Pues bien sencillo, porque hay bastantes cambios entre uno y otro, y sale perdiendo con diferencia la versión de MSX. Es decir, las animaciones tienen la mitad de frames (4 pasos en ZX, sólo 2 en MSX), la velocidad se reduce a la mitad de FPS, el sonido PSG brilla por su ausencia (sólo efectos, como en la versión ZX48) y el salto en MSX no es suave, sino que tiene dos posiciones, al más puro estilo barrio sésamo, arriba y abajo.

Lo cierto es que he estado jugando a la versión de Spectrum y es un juego muy curiosón. Y la versión de MSX no está a la altura, la verdad. Técnicamente es mucho más pobre y aparece "podada" respecto a la de ZX. Por cierto, que el que está todavía mejor es el JOE BLADE 2, que desgraciadamente no vio la luz para MSX. La versión de ZX tiene unos gráficos estupendos.

Por cierto, ya que me aburría he hecho una versión ROM (16 KB) para MSX con el juego original de cassette. La tenéis aquí: Joe Blade (ROM). A disfrutar Smiley
« Última modificación: 18 de Abril de 2007, 06:14:59 am por Viejo_archivero » En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #1 : 17 de Abril de 2007, 04:45:28 pm »

Muchas gracias, Robsy  Cheesy Por cierto, ya que te aburrías, ¿por qué no estabas con el Final Lap? (ah, sí, es que no hay MSXtremo, jejeje)  Grin
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #2 : 17 de Abril de 2007, 05:26:30 pm »

Bueno, te paso el pedazo de código fuente de la conversión de CAS a ROM:

Previo: PACK JOEBLADE.CAS

Programa:
Código:
.bios
.page 1
.rom
.start INIT
.org 4010h

INIT:
ld hl,JOEBLADE_CAS_PCK
ld de,8080h-38 ; Cabecera del PAK
call DEPACK
jp 8080h

DEPACK:
; Incluir aquí rutina del BitBuster

JOEBLADE_CAS_PCK:
.incbin "JOEBLADE.CAS.PCK"

Creo que tampoco es difícil, ¿o sí? Wink
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #3 : 17 de Abril de 2007, 09:25:16 pm »

Molón  Wink (vaya, yo me entretengo en quitarles la cabecera a los archivos y todo)  Cheesy
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #4 : 17 de Abril de 2007, 11:39:30 pm »

Pues al final sí que he hecho algo más... Os dejo una mini-demo técnica a la que le falta mucha optimización: mini-demo malévola.

Moviendo arriba/abajo el cursor cambiaréis el número. Os adelanto los resultados para MSX1 a 50 Hz:

De uno a tres: funciona a 50 Hz
De cuatro a seis: funciona a 25 Hz
De seis a nueve: 12,5 Hz

En cualquier caso, no funciona demasiado bien a partir de 7/8, debido a que no se ha incluido el NOP adicional para los OUTI fuera de V-blank. Además, el código no está optimizado en absoluto, va todo muy a saco. Tongue
En línea
Dioniso
Visitante
« Respuesta #5 : 17 de Abril de 2007, 11:50:50 pm »

Muy curioso el invento  Grin
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #6 : 18 de Abril de 2007, 06:11:51 am »

Muy interesante el thread y muy guapa la demo!!... ya sería acojonante unir esta rutina solapando sprites sobre el protagonista (solo 1 por linea) para colorearlo. Hasta tres muñecos, la cosa va super fina (3 personajes 16x32 o 6 personajes 16x16, supongo). Si esto fuera aplicable a 6 "sprites" 16x16, ya solo pensar en las posibles aplicaciones me produce terror y pavor Cheesy Cheesy.
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
Konamito
Karoshi Excellent Member
******
Mensajes: 1446



WWW Email
« Respuesta #7 : 18 de Abril de 2007, 07:45:09 am »

¡Pedazo sprites! y menudo movimiento que tiene (hasta tres o cuatro es aceptable).
En línea

pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #8 : 18 de Abril de 2007, 08:48:32 am »

Pues para ordenadores a 50 Hz, debería moverse a 50 FPS para 1, 2 y 3 personajes. De 4 a 6 personajes, funcionará a 25 FPS, que era el objetivo original. Si estamos en una máquina a 60 Hz, el límite lo tendremos en unos 5 personajes en movimiento. Eso sí, si lo probáis en un Turbo-R, puede mover hasta 10 personajes a 50 FPS (qué gusto!).

Los sprites, aunque no lo parezca, funcionan como 32x32. El tema de overlay de sprites por hardware es factible y consumiría poco. El problema es que el "gasto" en sprites sería muy elevado para animaciones tan grandes y con tantos frames. Pero bueno, lo que quería demostrar es que el JOE BLADE de MSX podría haber sido idéntico al de ZX. Y eso parece bastante claro. En la versión de Speccy, hay un máximo de 3 personajes en pantalla y funciona a 25 FPS, pero aprovecha también para tener un scroller en la parte superior de la pantalla. En máquinas a 50 Hz sería totalmente factible para MSX.
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #9 : 18 de Abril de 2007, 09:22:51 am »

Wow!!!  Shocked

Malévolos, con OUTis, NOPs y demases no hay quien se entere de nada Grin

Si eso es lo máximo a conseguir en sprites soft, mejor tiro a la basura los proyectos que tengo Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #10 : 18 de Abril de 2007, 09:26:51 am »

Una preguntilla, Edu, ¿qué porción de la pantalla de juego vuelcas en cada frame? ¿O utilizas la técnica de transferencia secreta y haces trampillas?  Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #11 : 18 de Abril de 2007, 09:49:44 am »

Utilizo 2 buffers: FONDO, TRABAJO y VRAM.

Lo que hago es copiar para cada caja de 32x32 píxeles de FONDO a TRABAJO. En trabajo copio con ANDs la máscara negra y con ORs el cuerpo del sprite. Después vuelco cada rectángulo de 32x32 por separado de TRABAJO a VRAM. Y repetimos. No es difícil, la verdad, pero el tema es que el rendimiento tampoco es fantástico. Ten en cuenta que para cada sprite copias 128 bytes 3 veces (restauración del fondo, máscara, sprite) además de hacer operaciones con ello (ANDs, ORs) y luego vuelcas esos 128 bytes a VRAM.

Asumiendo fondo negro se podría ahorrar mucho. O no utilizando máscara. Se conseguiría doblar aproximadamente el rendimiento. Pero lo pagarías en cuanto al detalle obtenido.

En cualquier caso, me sigue maravillando que pudieran hacerse cosas como un Filmation 2 en MSX. Algún día averiguaré un poco más. De momento, hasta aquí he llegado. Y lo que venga después, habrá que verlo.
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #12 : 18 de Abril de 2007, 10:13:56 am »

Gracias, son ideas que sirven para afrontar nuevas rutinas  Wink A mí lo que me trae por la calle de la amargura (devanándome los sesos) es la rutina de ocultación/redefinición en tiempo real de sprites del Final Lap. Pasmao me quedo. Algo así funcionando a tope daría lugar a juegos isométricos en MSX a todo color Shocked ¡Animo con eso!   Cheesy

Por mi parte sigo un estilo más tradicional.

Cargo el sprite en un buffer, lo paso a una rutina con parámetros que definen su altura, etc. Luego lo roto a derecha y hacia abajo hasta dar con su posición x,y correcta. Hago AND con su máscara y OR con el fondo (en otro buffer). Y luego todo a la VRAM a saco.

Eso para sprites en plan Spectrum Smiley Como ves, el proceso es muy mejorable, pero un clásico. Por ahora no uso sprites precalculados porque chuparían mucha memoria.

Para el Filmation (Fistration, en este caso Wink) covierto el mapa de la pantalla donde se desarrolla el juego de fondo (que en realidad está en 2D -gracias, Jon Wink) a coordenadas isométricas, asignando a cada posición un sprite soft. Se ordena esa lista de menor a mayor y se vuelcan todos los sprites en ese orden.

Muchas cosas a mejorar: la rutina de tratamiento de los sprites, la rutina de ordenación, la de volcado a VRAM...

Menuda lástima que la VRAM en los MSX no esté mapeada en la RAM. Se perderían 16kb de memoria, pero... ¡qué juegos saldrían!  Cheesy
« Última modificación: 18 de Abril de 2007, 10:19:21 am por Darth_Fistro » En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
SapphiRe
Visitante
« Respuesta #13 : 18 de Abril de 2007, 11:46:06 am »

Menuda lástima que la VRAM en los MSX no esté mapeada en la RAM. Se perderían 16kb de memoria, pero... ¡qué juegos saldrían!  Cheesy

¿Quién dice que se perderían 16kb de memoria? Para algo existen los slots y subslots Tongue
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #14 : 18 de Abril de 2007, 02:50:22 pm »

¡Está muy divertido el asunto!, creo que si de lo que se trataba de demostrar es que bien hecho, en el MSX se puede sacar tanta velocidad como en el Spectrum, lo has conseguido Wink

Citar
En trabajo copio con ANDs la máscara negra y con ORs el cuerpo del sprite

Puedes transigir un poco y utilizar únicamente un XOR, con eso ahorras el guardarte el fondo para recuperarlo y el enmascaramiento del mismo. Queda un poco "rarillo"; pero era muy típico en los juegos de Spectrum Wink
En línea

Doom dee doom dee doom
Páginas: [1] 2
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!