Karoshi MSX Community
05 de Julio de 2021, 07:33:58 pm *
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]
  Imprimir  
Autor Tema: OneChip MSX y el bit de colisión de sprites.  (Leído 5487 veces)
0 Usuarios y 1 Visitante están viendo este tema.
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« : 19 de Diciembre de 2010, 06:41:30 pm »

Este es un mensaje de alerta para los que hagais pruebas y desarrolleis usando el OneChip MSX.
Espero que esta experiencia os pueda ser util.

Resulta que me he encontrado con un problemón a la hora de utilizar el bit de colisión de sprites.
He realizado varias pruebas y me atreveria a decir que el OneChip no lo emula correctamente dicho bit.
O eso o hace cosas muy raras. Huh Huh

La cosa viene ya de la RuMSX de junio en Barcelona, donde  Ray - Qbiqs Sapphire Ray - Qbiqs se encontró con este bug al poner su Pong en el OneChip de la organización del evento. La pelota empezó a cruzar las raquetas del juego sin rebotarse.  Wow!
Yo me encontrado con el mismo problema esta pasada RU de diciembre.
Pusimos el Hans Adventure en un OneChip y nada más entrar en la habitación de salida del nivel, daba por pasado el nivel sin tocar la escalera de salida. Es decir, detectaba colisión sin haberlo.
Un Bug parecido ocurrió con una demo de un motor de plataformas: Al posicionar el personaje en unas coordenadas Y en concreto se ponian a parpadear sus sprites  y el bit de colisión marcaba que habia. No podia ser, ya que el personaje estaba creado con 2 sprites y no habia más sprites en pantalla. Al principio crei que era un problema de inicialización de sprites, pero lo verifique y todos estaba con un patron en blanco (a ceros) y en otras coordenadas Y. Era imposible que tuvieran colisión ni parpadeo por 4 sprites en linea. Y además en un MSX real no pasaba eso.

Las soluciones para los 2 casos han sido diferentes Magical Stones
Para el Hans, he tenido que pasar a detectar colisión por software, es decir, calculos con coordenadas para verificar que realmente hay colisión. No ha podido ser de otra manera. Saltaba colisión continuamente en el momento que movieras la figura del protagonista. Este esta formado por 3 sprites de pixels colindantes. Deduzco que el OneChip hace saltar el bit de colisión al reposicionar esos 3 sprites. Internamente en algún microsegundo cree que hay colisión al moverlos.
Para el de plataformas ha sido diferente la solución, aunque cuando lo tenga más desarrollado con enemigos y disparos, el calculo de coordenadas va a ser obligatorio tambien. La cosa que más me mosqueba era el parpadeo de sprites teniendo solo 2 en linea. La solución ha sido realizar los cambios de sprites, el volcado a VDP, justo al principio de la interrupción del VPD, antes incluso del volcado de Tiles de cada frame. Esta demo redibuja los patrones de 4 sprites constantemente en función de las teclas que aprietas. Pues parece que mientras se estan subiendo esos bytes al VDP el OneChip da que hay colisión y apaga durante algún rato la visualización de sprites. O al menos eso parece. Con solo ese cambio de orden de hacer las cosas, ha desaparecido el parpadeo y el bit de colisión no se activa.

Bueno espero que os sea util esta experiencia mia y no os rompais la cabeza volviendoos locos del porque no va bien la colisión de sprites en el OneChip. Roll Eyes

Si teneis alguna experiencia similar, o solución, o quizás esté equivocado en algo que he dicho, completadlo aquí. Anyone?

Venga ! A crear ! Smiley
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #1 : 20 de Diciembre de 2010, 10:23:47 am »

Olvidad ese bit!!   2 Guns Firing
En línea

--

Cindy Lauper She Bops!
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #2 : 20 de Diciembre de 2010, 06:06:51 pm »

Olvidad ese bit!!   2 Guns Firing

La verdad es que yo nunca lo he usado para nada Magical Stones... pero, de ser así, es una incompatibilidad bastante gorda esa del 1chipMSX, ya que muchos juegos tirarán de ese bit para las colisiones: ¿o no?
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.]
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #3 : 21 de Diciembre de 2010, 10:46:39 am »

Pues viejo,
No se si tiran de las colisiones del bit los juegos "de siempre" pero nunca me han fallado ninguno de konami de momento...mmm no se no se ...algo raro hay.

He hecho otra prueba. Esta vez con el juego MSXWars de Basic. Este juego usa la instrucción ON SPRITE GOSUB para detectar colisión de la bala con el tanque.
Lo pasé a ROM y miré de probarlo en el OneChip. Para empezar en el cartucho de Pazos del SCC+ no me funcionó. No arrancaba.
Con el ODO de Ramones, sí.

Una vez ejecutado me he encontrado con el mismo problema: Salta colisión en cualquier momento. Por estadistica salta más veces cuando la bala cruza la mitad de la pantalla. Y ahí no hay ningún sprite.

¿Como puede ser que ni en BASIC funcione correctamente?

Hay un emulador, el de MSX para la consola portatil GP2X WIZ que le pasa algo parecido con ese dichoso bit al cargar un programa BASIC. Este emulador está basado en el fMSX.

Estoy muy sorprendido que algo tan aclamado como el Onechip no tenga bien implementado el VDP...aunque puede que esté equivocandome y estemos haciendo algo mal...aix no se.

@kun
si ya se...olvidad ese bit...pero entonces...
¿Haces siempre colision por coordenadas? ¿Detectas si está en el rectangulo del sprite? ¿Y si el sprite es una pelota o un triangulo ? ¿ No daria colisión sin que los pixels iluminados se solaparan ? el jugador diria que es trampa "A mi no me dao!".

Ideas ?
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #4 : 21 de Diciembre de 2010, 11:55:49 am »

@kun
si ya se...olvidad ese bit...pero entonces...
¿Haces siempre colision por coordenadas? ¿Detectas si está en el rectangulo del sprite? ¿Y si el sprite es una pelota o un triangulo ? ¿ No daria colisión sin que los pixels iluminados se solaparan ? el jugador diria que es trampa "A mi no me dao!".

Ideas ?

Siempre por coordenadas Cheesy
Y nada, o se hace todo cuadrao! O se da cierto margen de maniobra. Si la pelota es de 8x8, pues que detecte una aproximacion de 6, que si va la bola rapida, mas o menos tira, todo depende del caso.
En línea

--

Cindy Lauper She Bops!
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #5 : 21 de Diciembre de 2010, 12:00:03 pm »

Piensa que de todas formas el 99% de las veces vas a tener que comprobar colisiones por coordenadas, bien sea porque tienes sprites multicolor (solapados), o porque tengas balas o cosas que sean caracteres en lugar de sprites...
En línea

--

Cindy Lauper She Bops!
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #6 : 21 de Diciembre de 2010, 12:35:51 pm »

Hombre .. estamos hablando de cosas de 8x8 y 16x16 .. son muy pequeñas .. pero bueno, si un usuario quiere maxima precisión siempre podrias definir varias regiones rectangulares para definir una colisión. Me explico? .. en vez de tener 1 sola . .tener varias asociadas. Asi podrías hilar más fino en aquello que te interesara.
Luego estaría hacer comprobación por mascara de bits pero eso igual al Z80 le pesa, no se, depende de la cantidad de comprobaciones .. primero verificas por rectángulo y luego por máscara.
En línea

MSX4EVER2GETHER
www.nerlaska.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #7 : 21 de Diciembre de 2010, 10:11:24 pm »

Si no recuerdo mal, creo que Armando comentó que el fallo de detección en el bit de colisión de sprites también se daba en algunos modelos de MSX1 con cierto(s) chips de vídeo.

En mi caso, también controlo las colisiones por coordenadas utilizando rectángulos con márgenes de maniobra y listos Smiley
En línea
SapphiRe_MSX
Visitante
« Respuesta #8 : 22 de Diciembre de 2010, 12:02:11 pm »

Curiosamente la versión original del Pong512 hace uso de ese bit y funciona perfectamente en el 1chipMSX. Ha sido al meter varios sprites para cada bate cuando ha empezado a petar. Al final la colisión por coordenadas está hecha hace meses (de hecho se pudo jugar en la RetroMadrid FEST) y en breve enviaré a la Dev la actualización del juego.
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #9 : 22 de Diciembre de 2010, 02:28:34 pm »

Pues Sapphire, eso que dices refuerza mi teoria de que no controlan cuando salta ese bit...y al refrescar sprites colindantes, entre frame y frame, en algún microsegundo debe dar solapamiento.
Esquivable es el bit. Yo ya lo tengo en cuenta para futuras prods.
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
SapphiRe_MSX
Visitante
« Respuesta #10 : 22 de Diciembre de 2010, 04:40:47 pm »

Pues Sapphire, eso que dices refuerza mi teoria de que no controlan cuando salta ese bit...y al refrescar sprites colindantes, entre frame y frame, en algún microsegundo debe dar solapamiento.

Creo que es algo por ahí, pero creo que también probé a leer nuevamente el registro de estado tras volcar los sprites y seguía dando errores.

Aunque como bien dices, no es un bit imprescindible Tongue
En línea
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #11 : 22 de Diciembre de 2010, 07:06:54 pm »

Si no recuerdo mal, creo que Armando comentó que el fallo de detección en el bit de colisión de sprites también se daba en algunos modelos de MSX1 con cierto(s) chips de vídeo.
Me autocorrijo... lo que comentó Armando que fallaba era lo del flag del 5º sprite en línea.
En línea
makinavaja
Karoshi Maniac
****
Mensajes: 388


Email
« Respuesta #12 : 23 de Diciembre de 2010, 01:13:17 pm »

lo que me recuerda:
"...qué gran idea es el 1chip, pero qué mal lleva el tema de compatibilidad..."
Y suerte que ahora tengo un teclado que se lleva bien con él...
Y ahi tengo el 1chip en el armario cogiendo polvo...
En línea
Páginas: [1]
  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!