Iniciado por
masteries
Efectivamente, como son gráficos muy recurrentes; se han modificado los originales para que muchas de las líneas que componen cada frame, tengan la misma longitud; intentando mantener un compromiso entre aspecto y rendimiento, pero hay que favorecer más el rendimiento en esta máquina. Al compartir longitud de muchas líneas, pueden compartir la misma configuración del blitter, y te ahorras muchas reconfiguraciones del mismo.
Estos gráficos se pintan línea a línea, pero el orden de dibujado de las líneas está salteado... incluso se agrupan las líneas que comparten misma máscara de comienzo, misma máscara de final...
También ambas explosiones son sprites con un predesplazamiento de 4 píxeles, para ahorrar memoria; y algo muy importante, y de ahí también la naturaleza algo cuadrada de las explosiones.
Las explosiones sirven para limpiar los sprites que has destruido, el helicóptero, el avión, el tanque... y se limpian a sí mismas.
Una explosión no tiene activada la limpieza del fondo, hasta que alcanza su fotograma número 5, entonces empieza a limpiar porque la explosión decrece de tamaño.
Esto permite limpiar el helicóptero, el avión, el tanque e incluso los sprites más grandes.
¿De dónde sale el rendimiento? De mil trucos como este.... xD
Hay más trucos, como un mecanismo de limpiado, que sólo limpia en la dirección en la que el sprite ha ido dejando el rastro: el tanque, el avión, el slug tocho (lo que swapd0 llama el cangrejo), el barco.
Y un mecanismo de dibujado que permite dibujar hasta 16 segmentos "middle" (256 píxels) del blitter sin que intervenga la CPU para nada, éste es un mecanismo ilegal, pues la primera vez que lo usas salta una trap del sistema; pero esta trap tiene un código que la atiende y deja configurado el blitter de manera que la próxima vez que salte, en lugar de tener que atender la trap; uno de los registros del blitter queda configurado como contador decreciente, lo que te permite dibujar hasta 256 pixels sin que el blitter realice operación de máscara, es el dibujado más rápido que hay. Cuando el blitter ha leído y enviado una palabra de 16 bits, envía la siguiente de forma automática... y el contador decrece sólo... cuando llega a 0, el blitter devuelve el control a la CPU
Si la línea es mayor de 256 píxeles, terminas con un "end" mask, y concatenas los siguientes 16 y más píxeles con un "start" mask y a seguir pintando sin middle mask.
Y si hay un hueco por en medio, pues un "end" y un "start" mask, no queda otra.
Y luego existe también, la operación de rellenado de superficies rectangulares con el blitter; esto ya se había usado anteriormente (en Metal Slug no lo estoy usando, pero lo he probado a modo de debug para ver los cuadros de colisión, y me he quedado sorprendido de que pintar un cuadrado enorme 50 veces por segundo, come muy poquito tiempo), estoy seguro de que el juego Robocop 3 para STE se ejecuta tan bien; porque usa el blitter de esta manera. Puedes elegir un color de relleno de la paleta, o un patrón alternante de dos colores de la paleta, para rellenar el área de la pantalla que especifiques; y todo sin necesidad de acceder a la RAM para recuperar datos gráficos, con lo que el blitter rellena áreas muy deprisa... como si fuera el primer rasterizador 3D acelerado de la historia. No realiza operaciones de geometría, pero las tarjetas Voodoo / TNT 2 tampoco lo hacían, necesitaban conocer de antemano la infomación de las superficies a pintar... aquí las superficies son rectangulares, en lugar de triangulares, pero salvando la distancia de capacidades, puedes rellenar caras de polígonos muy rápido... como hace Robocop 3
Me gustraría grabar un vídeo contando el cómo se ha hecho el port,
Marcadores