Ya esta disponible la versión v28 de 8BP, en https://github.com/jjaranda13/8BP la cual incorpora un nuevo comando para imprimir minicaracteres.
la libreria ahora ocupa 1kB mas ( en total 7kB) pero en realidad internamente han quedado 850 bytes para programar nuevas funcionalidades ( la v32 incorporará pseudo 3D sin ocupar mas memoria)
Todo está documentado en el nuevo manual disponible en github
El juego de caracteres del AMSTRAD es bonito y bien construido. Sin embargo, en mode 0 tan solo disponemos de 20 caracteres de ancho por línea y aparecen demasiado “ensanchados”, por lo que en ocasiones no son adecuados para mostrar ciertos textos o marcadores de un juego. Además, el comando PRINT es muy lento, por lo que es poco recomendable actualizar los marcadores frecuentemente, ya que el juego se “detiene” mientras se está imprimiendo, son pocos milisegundos pero es perceptible.
Por ese motivo, a partir de la versión v31 de 8BP se ha incorporado el comando PRINTAT, el cual puede imprimir una cadena de caracteres usando un nuevo juego de caracteres mas pequeño (los llamo “minicaracteres”). Este nuevo comando permite usar el mecanismo de transparencia de los sprites, de modo que podras imprimir caracteres respetando el fondo. Funciona del siguiente modo:
|PRINTAT,<flag transparencia>, y,x,@string
Ejemplo:
cad$= “Hola”
|PRINTAT,0,100,10, @cad$
El comando |PRINTAT imprime cadenas de caracteres y no variables numéricas, por lo que si quieres imprimir un número (por ejemplo, los puntos en el marcador de tu videojuego) debes hacerlo asi:
puntos=puntos+1
cad$= str$(puntos)
|PRINTAT,0,100,10, @cad$
A diferencia del comando PRINT del BASIC, el comando |PRINTAT es bastante rápido y puede ser utilizado para actualizar los marcadores de tu videojuego con frecuencia.
PRINTAT usa un alfabeto redefinible, que puede contener una versión reducida o diferente de los caracteres “oficiales” del amstrad. Por defecto 8BP proporciona un pequeño alfabeto compuesto por números, letras mayúsculas y algunos símbolos. No podrás usar un carácter que no se encuentre entre este conjunto, como las letras minúsculas. Los caracteres de dicho alfabeto miden todos lo mismo: 4pixels de ancho x 5 pixels de alto, es decir 2 bytes x 5 lineas.
Esta cadena contiene todos los caracteres que puedes usar con el alfabeto de serie de 8BP. Fíjate que no hay minúsculas y faltan muchos símbolos, aunque puedes crear tu propio alfabeto que los contenga. Fíjate que el último símbolo es el espacio en blanco, es decir, es un símbolo disponible y por lo tanto puedes incluir espacios en blanco en las cadenas que imprimas. ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.:! ")
IMPORTANTE: Ten mucho cuidado de no usar caracteres no creados cuando uses PRINTAT.
He creado los caracteres usando las tintas 2 y 4, para que se pueda usar la sobreescritura, ya que los colores de fondo son 0 y 1 y usando sobreescritura la tinta 2 debe ser igual a la 3 y la 4 debe ser igual a la 5 ( consulta el capítulo donde explico la sobreescritura). Para usar la sobreescritura simplemente pon a “1” el flag de transparencia en el comando PRINTAT.
Puedes crear tu propio juego de caracteres, en el manual te indico paso a paso como hacerlo. básicamente consiste en definir una cadena que contiene todos los caracteres que vas a crear y dibujar uno a uno cada carácter. Los bytes resultantes de cada dibujo de cada carácter los copias en un fichero de alfabeto con el que se ensambla toda la librería.
a continuación os dejo una pequeña demostración del nuevo comando
hasta pronto amigos!
Genial. ¡Esta librería se está convirtiendo en algo muy serio! Gracias por tu trabajo.
ResponderEliminarFantastico!! Proximo paso scroll a 50 fps? :D
ResponderEliminarFantastico!! Proximo paso scroll a 50 fps? :D
ResponderEliminarscroll a 50 fps...complicado. Pero no hay nada imposible!
EliminarLa v32 sera genial. Motova hacer in fcpc x xD
ResponderEliminarQue ganas de que llegue tu nueva versión, somos unos amigos que de peques teníamos el amstrad y nos ha parecido alucinante tu librería.
ResponderEliminargracias! ya vereis como os gusta!
Eliminar