Karoshi MSX Community
05 de Julio de 2021, 07:25:50 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 [2] 3
  Imprimir  
Autor Tema: screen 5 y vpokes  (Leído 16135 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #15 : 22 de Enero de 2011, 08:58:09 pm »

Hola, el método que comentas en SC5 si que es como se programa ahora y además supongo que deja de existir la limitación de 2 colores por cada 8 pixels en horizontal, de todas formas como este juego ya lo tengo avanzado prefiero acabarlo con los carácteres ASCII.

Por ahora ya he conseguido usar el NestorPreTer y el XBASIC para compilar con lo que consigo un código legible y lo más ahorrador posible en cuanto a memoria y el juego va rapidísimo por el compilador.

Lo de grabar la VRAM en un fichero y luego cargarlo es una pasada, porque es mucho más rápido que modificar los 160 gráficos y crear los 64 sprites y además no tengo que cargar los dos .BAS, solo cargo el del juego que lo primero que hace el es BLOAD para cargar los gráficos pero tengo un problema pierdo los colores. Si no me equivoco la VRAM va del &H0000 al &HFFFE  y ese es el bloque de memoria que grabo, pero al cargarlo recupero los sprites y los carácteres pero no el color de estos, pierdo toda la información de color. ¿ Tengo que grabar otro rango de direcciones para que también se cargue la tabla de color ?

Luego sigo con el problema en SC2 y SC4 que cuando redefino los gráficos me pinta 2 lineas en pantalla y además necesito el "modo mixto" para solo tener que redefinir una vez los carácteres ASCII ¿ como lo hago ?

Gracias.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #16 : 23 de Enero de 2011, 01:26:20 am »

He seguido leyendo el foro y haciendo pruebas y creo que ya tengo controlado el modo mixto jugando con el VDP(3) para el color y el VDP(4) para los patrones.

Como en principio en SC4 no va el LOCATE y el PRINT he empezado a convertirlos todos por VPOKES pensando que además obtendría más velocidad pero cual ha sido mi sorpresa que es muchísimo más lento hacer los VPOKES que los LOCATE y PRINT y aún se nota más cuando lo compilas con el XBASIC que con los PRINT la pantalla se pinta casi instantánea pero con los VPOKES ves claramente como se va pintando.  ¿ Es normal que me vaya más lento el VPOKE que el PRINT ?  De momento sigo en SC1

Al ver que con los VPOKE me va mucho más lento he pensado en volver a los LOCATE PRINT pero en SC4 no funcionan así que leyendo por este foro he encontrado este formato:

Código:
10 SCREEN 4
20 SCREEN 1
30 VDP(0)=4
40 VDP(3)=&B10011111

No hace falta poner el VDP(4)=0 para el modo mixto de patrones porque como realmente estamos en SC1 (aunque hayamos forzado el VDP(0) a SC4) ya lo hace de forma automática. Con este modo vuelve a funcionar el LOCATE y PRINT pero no se ven los SPRITES. Si hago lo mismo pero en SC2 los SPRITES se ven perfectos, pero en SC4 no se ve ninguno. He probado a cambiarles el color con COLOR SPRITE$ y no hace nada y además tengo un problema, si pongo la línea de color despúes del SCREEN 1, aunque haya puesto el VDP(0)=4 me da un error porque esa instrucción no funciona en SC1.
Lo que hago es:

Código:
10 SCREEN 4
20 GOSUB crear sprites
30 GOSUB colorear sprites
40 SCREEN 1
50 VDP(0)=4
60 VDP(3)=&B10011111

Así no da error, pero tampoco se ven los sprites.

Si lo hago directamente sobre SC4, sin pasar a SC1 ni forzar el VDP(0) los sprites se ven perfectamente. ¿ Alquien sabe porque puede pasar esto ?

Tal y como estoy ahora tengo que elegir entre el SC4 con los 8 sprites por linea y un color en cada linea pero pintar los mapas con VPOKE que va muy lento o bien continuar en SC1 con solo 4 sprites por linea y el sprite completo del mismo color pero el pintado de las pantallas muy rápido con los LOCATE PRINT.

A ver si alguien me puede ayudar

Gracias.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #17 : 26 de Enero de 2011, 02:57:01 am »

Bueno, ya lo tengo todo solucionado. Modo-mixto en SC4 para aprovechar los 8 sprites por linea de MSX2.

Lo único es el pintado de pantalla que sigue siendo muy lento. Entre VPOKES y LOCATE + PRINT la segunda opción me va mucho más rápido y he intentado minimizar los LOCATE poniendo cuando es posible un único LOCATE y luego para moverme por ejemplo a la línea de abajo lo hago con los CHR$ de los cursores (8,10,28,30).

Ahora el "problema", por llamarlo de alguna forma, que tengo es que para ahorrar espacio para las líneas de código y además para que los gráficos no tarden tanto en redefinirse he usado la opción que me comentaron en este post de grabar la VRAM con un BSAVE"";S y luego recuperarla. Es genial esta forma de trabajar, ahora tengo 2 programas uno que genera los gráficos y hace el BSAVE y el otro con el juego que hace el BLOAD, que carga muy pronto y no hay que esperar a que se generen los gráficos pero tengo un problema y es que el fichero que apenas contiene unos pocos gráficos ocupa 64 KB y ya no puedo hacer una ROM con mi juego. Es como matar moscas a cañonazos. He mirado las direcciones de memoria para intentar grabar solo lo justo pero no se puede porque en una zona está la tabla de nombres, en otra los patrones, en otra los colores, otra para los sprites... y el BSAVE solo me deja poner la dirección de inicio y de fin por lo que me veo obligado a copiar toda la memoria.

¿ Hay alguna forma de hacer un fichero solo con algunas zonas de la VRAM o bien hacer una ROM del juego de más de 16KB para poder añadir los 64kb de la VRAM ?

Gracias.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #18 : 26 de Enero de 2011, 08:38:26 am »

Si el código del juego en sí está en BASIC, tendrás que ponerlo necesariamente en la página 2 de memoria y puede tener hasta un máximo de 16 KB. Dicho esto, podrías utilizar otras 16 KB en la página 1 para ejecutar un cargador de gráficos, pero tendría que estar en código máquina, no en BASIC.

Es factible y bastantes juegos de MSXdev hechos en BASIC emplean técnicas de este tipo. Además, si aplicas compresión, verás que 16 KB de gráficos dan para mucho.
En línea
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #19 : 26 de Enero de 2011, 08:46:18 am »

¿ Hay alguna forma de hacer un fichero solo con algunas zonas de la VRAM o bien hacer una ROM del juego de más de 16KB para poder añadir los 64kb de la VRAM ?

Yo veo dos opciones:

-Hacer varios BSAVE/BLOAD de las diferentes zonas de la VRAM que quieres copiar, para no tener uno único de 64Kb
-Meter todo dentro de un DSK con un AUTOEXEC para que se autoejecute y usar la aplicación DSK2ROM para pasarlo a ROM, con lo que tendrás una ROM del tamaño que sea.
« Última modificación: 26 de Enero de 2011, 08:47:53 am por Imanok » En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #20 : 27 de Enero de 2011, 08:46:39 pm »

No sabía que existiera un DSK2ROM, lo he probado y va genial, aunque me crea una rom de 256KB. Intentaré reducir los ficheros .BIN al máximo y cargar varios.

Saludos.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #21 : 27 de Enero de 2011, 10:36:18 pm »

Creo que el DSK2ROM tiene una opción de compresión, para que la rom que genera sea más pequeña.
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #22 : 31 de Enero de 2011, 05:46:35 pm »

Bueno, cuando parecía que lo tenía todo solucionado: modo mixto en SC4 con 8 sprites por línea, un fichero BIN de 16KB para todos los gráficos del juego , conversión a ROM mediante el DSK2ROM, velocidad de sobra gracias al TURBO BASIC... voy y me encuentro con el temido OUT OF MEMORY cuando aún no tengo ni el 25% del juego.

No se muy bien si lo que he agotado es el espacio para variables o para el código fuente o incluso de los dos (no se si van juntos o no). ¿ se puede ampliar el tamaño ?
En variables puedo quitar un vector de 20 strings de 30 carácteres cada uno que uso para pintar la pantalla y detectar las colisiones aunque estas las podría comprobar haciendo un VPEEK a la dirección de pantalla que quiero en vez de leer el valor en el vector, pero incluso quitando esas 20 variables no se si tendré suficiente memoria para acabar el juego.
Ya tengo hechas las cosas típicas para ahorar memoria CLEAR 30 (no uso cadenas de más de 30 carácteres), MAXFILES=0, DEFINT A-Z..

Me he leído todo el manual de NestorBASIC que pone en las características: Acceso a toda la memoria mapeada del ordenador, hasta 4 Mb aunque en la práctica no se muy bien si puedo usar esa memoria en mis juegos BASIC porque he visto que tiene funciones para leer y escribir datos en otros segmentos de la memoria pero creo entender que para usar esos datos los tengo que copiar sobre varibles del BASIC así que el espacio lo sigo gastando igual ¿verdad?
También tiene funciones para tener cargados listados BASIC en otros segmentos de memoria, pero al final creo que solo puedes usar uno, el que está en el sitio reservado para los programas en BASIC por lo que tampoco es útil de cara a hacer un juego grande y tener varios programas pequeños no me siven para el juego.

¿ Alguien sabe si realmente esa memoria a la que se puede acceder con NestorBASIC puede ser útil para hacer el juego ?


Lo único que parece que si que podré usar para ahorar espacio es NestorCadenas y más en el juego que estoy haciendo que hay unos cuantos textos. Esta noche lo intentaré poner a ver si puedo ahorrarme los textos del juego.

Gracias.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
samsaga2
Karoshi Fan
**
Mensajes: 76


Email
« Respuesta #23 : 01 de Febrero de 2011, 02:51:39 pm »

Yo lo que haría es mirar en que se va toda la memoria. En basic los comentarios ocupan un precioso espacio de memoria, reutiliza variables, usa algoritmos que requieran poca memoria y eso de que miras las colisiones en ram en lugar de vram me parece sospechoso. Los gráficos deberían cargarse directamente en vram y las colisiones entre sprites solo requieren cuatro bytes, las posiciones x e y de los dos sprites que van a colisionar. Si son colisiones contra el escenario lo mejor es leerlo desde vram no tener un vector de 80*25 en memoria.
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #24 : 01 de Febrero de 2011, 06:05:35 pm »

Hola.

En el código no hay comentarios porque al pasarlo por NestorPreTer se eliminan todos espacios y comentarios.

He revisado las variables y solo uso 2 de tipo STRING 'S$' que la uso tanto en el INKEY$ para leer si pulsan la letra 'M' o 'N' (botón 2 del joystick) como para leer todos los DATA y 'T$' donde está el texto que va pasando por el marcador de abajo. Y luego está el vector de 20 dimensiones donde tengo el mapa que hay en pantalla, que además de servir para comprobar las colisiones con el decorado de una forma más rápida que leyendo la VRAM me servía para las zonas oscuras donde vas con la vela encendida y solo ves el decorado de tu alrededor y el resto de pantalla está en negro. Al tenerlo en variables se que tengo que pintar según la posición del jugador.

Luego de INTEGERS tampoco tengo tantos:
Código:
' ***** VARIABLES USADAS *****
'  X=100     ' X del jugador
'  Y=100:    ' Y del jugador
'  P=0:      ' POSICION [0..18] DE 6 EN 6
'  PP=0:     ' SUBPOSICION [0..1]
'  S=0:      ' VARIABLE PARA LEER LOS CURSORES
'  S$="":    ' VARIABLE PARA LEER LA TECLA PULSADA
'  B1=0:     ' BOTON 1
'  B2=0:     ' BOTON 2
'  O=0:      ' OBJETO SELECCIONADO
'  O1=1:     ' TENEMOS EL OBJETO 1 (POCIMA)
'  O2=0:     ' TENEMOS EL OBJETO 2 (TIJERAS)
'  O3=0:     ' TENEMOS EL OBJETO 3 (JERINGUILLA)
'  O4=1:     ' TENEMOS EL OBJETO 4 (VELA)
'  O5=0:     ' TENEMOS EL OBJETO 5 (ACEITE)
'  O6=1:     ' TENEMOS EL OBJETO 6 (PALANCA)
'  O7=0:     ' TENEMOS EL OBJETO 7 (CUCHILLO)
'  O8=0:     ' TENEMOS EL OBJETO 8 (SIERRA)
'  I=0:      ' VARIABLE PARA LOS BUCLES
'  J=0:      ' VARIABLE PARA LOS BUCLES DOBLES
'  V=2:      ' VELOCIDAD
'  VI=10:    ' VIDAS
'  T=1000:   ' TIEMPO TOTAL
'  T1=0:     ' TIEMPO PARCIAL
'  CP=0:     ' COLISION PIES
'  PA=100:   ' PANTALLA ACTUAL
'  XO=1:     ' X DEL OBJETO A PINTAR
'  YO=1:     ' Y DEL OBJETO A PINTAR
'  CO=1:     ' COLUMNAS DEL OBJETO A PINTAR
'  LO=1:     ' LINEAS DEL OBJETO A PINTAR
'  PO=1:     ' TIPO DE OBJETO A PINTAR
'  T$="":    ' TEXTO DEL SCROLL
'  T3=0:     ' TIEMPO SCROLL TEXTO
'  TS=-29:   ' POSICION TEXTO SCROLL

Yo creo que lo que se come toda la RAM es el XBASIC/NBASIC y luego el código que he hecho para pegar los objetos disponibles (suelos, paredes, rechos, sillas, mesas, plantas, camas, cuadros....) que son funciones cortas, pero hay muchas y el total son muchas lineas de código.

Lo que voy a intentar hacer esta noche es meter las pantallas en un fichero de texto (aunque estoy en SC4 "engaño" al BASIC para que crea que esté en SC1 y me deje hacer PRINTS de los carácteres ASCII que he modifiado) y con la ampliación NestorCadenas del NestorBASIC meter ese fichero de texto en una zona de RAM fuera de la del BASIC, así me ahorraré todas las líneas de código que pintan los objetos en pantalla y las que dicen cada pantalla que objetos tiene. Lo malo será tener que pintar a mano las pantallas en un fichero TXT, pero eso ya es otra historia.

Supongo que así tendré suficiente memoria para empezar a poner los enemigos.

Algunas pantallas de como va el juego:









Saludos.
« Última modificación: 01 de Febrero de 2011, 06:12:49 pm por Kotai » En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #25 : 01 de Febrero de 2011, 08:21:30 pm »

EL Xbasic se come bastante RAM, si, y lo peor es que es complicado controlar cuanta, como y donde.
Yo deje el Basic ya por eso, por toparme con demasiados impedimentos, especialmente el no tener ya el control de lo que estas haciendo. Te comes la olla y al final no queda algo igual a lo que quieres porque has de renunciar a esto o a aquello.
Asi que me era mas facil aprender ensamblador (ya puestos a pelearse), que seguir asi. Al menos el esfuerzo compensa mas una vez tienes el resultado. Si el juego no da mas, sera porque el MSX o el programador ya no dan mas Wink

Asi en Basic, para ahorrar algo de RAM... que yo recuerde.... si metias todas las variables en una sola matriz ganabas algo.
Si hay zona de VRAM que no uses, aprovechala tambien para meter datos. Usa la zona de F-keys en RAM para meter datos tambien.
Y si hace falta dividir el codigo en varios .BAS y vas cargando, pues arreando. No me acuerdo de mucho mas Tongue
El Basic terminaba siendo tener que inventarse las mil y una. Con Ensamblador te quedas en mil, te ahorras una Wink
En línea

--

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


Kimochi-ii


WWW Email
« Respuesta #26 : 01 de Febrero de 2011, 08:24:27 pm »

Me dejaba 2 cosillas:

1- Si, la memoria accesible desde Nestor Basic es MUY util para el juego.
2- El juego va teniendo buena pinta Smiley Suerte.
En línea

--

Cindy Lauper She Bops!
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #27 : 02 de Febrero de 2011, 04:21:10 pm »

...Con Ensamblador te quedas en mil, te ahorras una Wink

Plas plas plas  Smiley
En línea

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


« Respuesta #28 : 03 de Febrero de 2011, 01:21:29 pm »

Totalmente de acuerdo con Kun: para hacer algunas cosas en BASIC la solución es tan complicada que resulta más fácil hacerlo en ensamblador. Y el resultado, en cualquier caso, será mucho más rápido, compacto y eficiente (salvo error mayúsculo).

Y, lo creáis o no, detrás de este profeta del ensamblador hubo una vez un programador en BASIC que hacía equilibrismos para conseguir algunos juegos. Me encantaría repescar alguno de mis programas viejos para ver qué tal han aguantado el paso del tiempo...
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #29 : 03 de Febrero de 2011, 01:45:45 pm »

Bueno, más o menos ya se porqué del problema de la memoria.

Según el manual de NestorBasic el TurboBasic reserva 256 bytes para los STRING (aunqu hayas hecho un CLEAR 30 para que solo reserve 30) y en mi caso que tenía la Matriz de 20 elementos para la pantalla y luego 2 más hacen 22*256 = 5,5 KB.
Para el BASIC hay unos 28KB pero si cargas el compilador se quedan en unos 12KB y si le quitamos los 5,5KB que he consumido con los STRING me quedan solo 6,5KB para todo el listado y las variables.

Ayer empecé a hacer prubas con NestorBASIC + NestorCadenas para pasar todos los STRING a un serctor de la RAM que no sea el del BASIC y ya lo hice funcionar. Ahora tengo que pasar todos las fases y los textos del juego (que hay muchos) y se me quedará un programa muy corto, con lo que creo que tendré suficiente memoria libre para poder acabar el juego.

Saludos.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
Páginas: 1 [2] 3
  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!