Mensaje
por Hark0 » Lun Mar 03, 2014 7:21 am
Vale, esta parte si la entiendo... y de hecho, es lo que estoy usando en mi codigo...
Actualmente tengo una variable v$(32,20) que seria el "buffer de video"...
Luego tengo en ram la ristra de bytes que corresponden a los codigos de cada tile (16x10: 160 bytes).
Cuando cargo un nivel, leo la "rsitra de bytes", y en función del contenido, "relleno/machaco" la posición correspondiente de v$() con los 4 caracteres que forman el tile. Con este metodo tengo la variable "buffer video" con la pantalla completa del mapa. Perfecto porque pinto v$ de un golpe y no tarda nada.
Tras dibujar la pantalla, pinto encima el personaje que controlamos... y cada vez que pulso para que se mueva (QAOP), lo que hago es comprobar los bytes de la ristra... dependiendo del byte obtenido, dejo pasar, bloqueo, recoge item ,etc...
Si el personaje se puede mover, pinto en posición del personaje los caracteres v$(x,y) e v$(x,y+32)... usando print v$(posicion TO posicion+1) con el tile correpondiente (que se obtiene de la ristra de bytes)...
Lo que me resulta más lento es cargar los mapas desde la zona de la ram original (cargado desde cinta), hasta la zona ram que utilizo para examinar. He probado diferentes trucos como reemplazar en v$ el tile SOLO si es diferente, o en lugar de leer todo el mapa completo, leer solo los nuevos tiles, reseteando el resto...
Lo haga como lo haga, minimo me tarda unos buenos 8 segundos (en emuladores, máquina real desconozco)... si, ya, podria añadir un texto y/o imagen para entretener mientras cargo el mapa... pero me estoy quedando sin ram... por no contar que no me gusta nada hacer esperar 8 segundos a nadie...
Probando la rutina que se comenta aqui, se copian los 768 caracteres+atributos de un tiron, de una zona de la ram a la otra, lo que me iria de perlas para cargar el nivel, ya que solo tendria que reconstruir v$...
Viene a ser un LDIR en basic... (he probado montando una rutinilla CM LDIR... y no hay color, zas, lo hace del tiron y rapido rapido), pero como soy un capullo... y quiero solo basic, pues nada, a ir lenticos...
Hoy quiero probar a usar solo pokes, en lugar de: v$(pos to pos+1)=s$(codigotile, 1 to 2), etc... para pokear directamente en la zona donde v$ esta ubicada... tengo la rutina a medias, v$ localizada en ram, etc...hoy si tengo tiempo la termino...