Karoshi MSX Community
05 de Julio de 2021, 03:36:00 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 16133 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« : 20 de Enero de 2011, 12:41:53 pm »

Hola a todos.

Hasta ahora hacía los juegos en screen1 pero me gustaría hacer algo en MSX2 y he pensado en Screen 5
 
El tema de los sprites lo tengo claro, pero no se como va el tema de los caráteres redefinidos. En screen 1 para pintar un carácter en pantalla hago:
VPOKE 6145+X+Y*32,caracter ascii
En screen 5 supongo que la dirección es otra y no 6145 ya que me sale todo negro usando la dirección 6145
 
Creo que lo que también estará mal es a la hora de redefinir un caracter, en screen 1 yo hago
VPOKE caracter ascii*8, valor de la linea
y para pintar ese caracter
VPOKE &H2000 + caracter ascii*8, valor color de linea
¿ en screen 5 es igual pero cambiado la dirección ? ¿ que dirección ?

Otra cosa que me va por la cabeza es la forma de trabajar con un screen > 1. Yo ahora tengo el juego en 2 ficheros, el primero me pone screen1 y carga todos los sprites y redefine los carácteres ASCII por mis gráficos y luego cargo el segundo fichero donde está el código del juego, así cada vez que lo ejecuto no se tira un rato cargando los sprites y vpokes.
Si hago un SCREEN pierdo todos los sprites y vpokes que había redefinido así que como SCREEN 5 (o cualquier otro >1) no es de texto para programar he de estar en SCREEN 0 o 1 y al ejecutar el programa cambiar al nuevo SCREEN con lo que perderé todos los gráficos y cada vez que haga RUN tendré que volver a generarlos todos ¿ hay alguna forma de evitar esto ?

Gracias
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
SapphiRe_MSX
Visitante
« Respuesta #1 : 20 de Enero de 2011, 02:27:16 pm »

Hasta ahora hacía los juegos en screen1 pero me gustaría hacer algo en MSX2 y he pensado en Screen 5
 
El tema de los sprites lo tengo claro, pero no se como va el tema de los caráteres redefinidos. En screen 1 para pintar un carácter en pantalla hago:
VPOKE 6145+X+Y*32,caracter ascii

En screen 5 supongo que la dirección es otra y no 6145 ya que me sale todo negro usando la dirección 6145

SC5 y superiores no son modos por patrones, sino modos bitmap. No puedes hacer lo mismo que en SC1, SC2 y SC4, aquí para pintar un bloque de 8x8, la única forma es hacer 32 VPOKES en las direcciones adecuadas... o utilizar las funciones del VDP para transferencias de VRAM a VRAM, claro está.
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #2 : 20 de Enero de 2011, 02:27:50 pm »

SCREEN 5 es un modo bitmap, es decir, no tiene caracteres redefinidos. Por lo tanto, lo que haces es pintar directamente píxels sobre el lienzo de la VRAM. Con cada VPOKE lo que haces en realidad es cambiar el color de dos píxels, ya que en SCREEN 5 tienes una paleta de 16 colores. Por lo tanto, hazte a la idea de que un VPOKE es igual a dos PSET y no andarás mal encaminado...

En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #3 : 20 de Enero de 2011, 04:51:06 pm »

Realmente lo que quiero del MSX2 son los 8 sprites por linea y poder poner un color diferente en cada linea del sprite. Si eso se puede hacer en screen 4 también me sirve.

Quiero convertir el juego a MSX2, pero no quiero perder los más de 160 carácteres ASCII que he redefinido para los gráficos. ¿ Es posible hacerlo en algún modo de MSX2 ?
Y en caso de poderse, cuales son las direcciones que he de poner para definir los caráteres y sus colores (que supongo que la dirección depende del screen) y luego como lo pongo en pantalla. Lo imporante es poder reutilizar todos los DATA con los gráficos y colores.

También para el menú poner por ejemplo "KOTAI 2010" si hay algo tipo print que le pase la cadena y la pinte con mis letras redefinidas o es preciso poner un vpoke por cada letra.
Y para terminar si hay alguna instrucción que me diga si tienes un MSX1 o superior para cuando cargue el juego comprobar si estoy en un MSX1 o 2 para que no de un error al hacer SCREEN 4 si se trata de un MSX1, poder sacar un mensaje tipo "este juego solo funciona en MSX2"

Saludos y 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 #4 : 20 de Enero de 2011, 06:23:27 pm »

Pues si lo que quieres son los 8 sprites en línea y reaprovechar los caracteres que ya tienes, lo suyo sería hacerlo en SCREEN 4. La única diferencia con SCREEN 2 es el modo de los sprites, que aguanta hasta 8 por línea horizontal y multicolores, y que puedes forzar que la pantalla sea de 256x212 en lugar de 256x192. Por supuesto, también puedes jugar con la paleta, pero eso - de hecho - lo puedes hacer en cualquier modo de pantalla si estás en un MSX2/2+/tR.

En SCREEN 4 te diría que no se mueven las direcciones de memoria de caracteres, colores y patrones, pero mejor si lo buscas en el MSX2 TECHNICAL DATABOOK o como se llame, que tienes disponible para su descarga en la página de Konamiman, alias Néstor Soriano. O puedes tratar de usar la instrucción BASE(n) de BASIC para obtenerlas a pelo...

Supongo que en SCREEN 4 sí que puedes hacer algo parecido al OPEN"GRP:"AS#1 y después el típico PRINT #1, pero no te servirá si vas a estar modificando la tabla de nombres. Mejor los VPOKES que dices y así puedes hacerlo con los caracteres que hayas redefinido y no con los feotes de la BIOS.

Y en cuanto a saber si estás en un MSX1/2/2+/tR, te basta con leer una posición de la BIOS. Tienes la dirección concreta y su interpretación en los hilos de arriba del foro de desarrollo, que se llaman algo así como "Desarrollo compatible para MSX".

Con esto deberías tener suficiente para ir tirando. Google es tu amigo Wink
En línea
SapphiRe_MSX
Visitante
« Respuesta #5 : 20 de Enero de 2011, 06:44:53 pm »

Realmente lo que quiero del MSX2 son los 8 sprites por linea y poder poner un color diferente en cada linea del sprite. Si eso se puede hacer en screen 4 también me sirve.

Sí, sin ningún problema.

Citar
Quiero convertir el juego a MSX2, pero no quiero perder los más de 160 carácteres ASCII que he redefinido para los gráficos. ¿ Es posible hacerlo en algún modo de MSX2 ?

Screen 4 desde BASIC.

Citar
Y en caso de poderse, cuales son las direcciones que he de poner para definir los caráteres y sus colores (que supongo que la dirección depende del screen) y luego como lo pongo en pantalla. Lo imporante es poder reutilizar todos los DATA con los gráficos y colores.

Si lo diseñas para Screen 2 puedes usarlos EXACTAMENTE IGUAL en Screen 4. La única diferencia entre ambos modos es (y no me cansaré de repetirlo) que en SC4 puedes usar los sprites modo 2 (8 por línea y multicolor).

Pero en cuestión de caracteres tienes las tres tablas de patrones en 0, 2048 y 4096; las tres tablas de colores en 8192, 10240 y 12288. No tienes una única tabla como en SC1, pero se puede hacer sin problemas con un par de VPOKES y funciona bien en todos los MSX2.

Citar
También para el menú poner por ejemplo "KOTAI 2010" si hay algo tipo print que le pase la cadena y la pinte con mis letras redefinidas o es preciso poner un vpoke por cada letra.

Creo que engañando al BASIC se puede hacer, si mal no recuerdo JLTur publicó algunas cosillas al respecto.

Citar
Y para terminar si hay alguna instrucción que me diga si tienes un MSX1 o superior para cuando cargue el juego comprobar si estoy en un MSX1 o 2 para que no de un error al hacer SCREEN 4 si se trata de un MSX1, poder sacar un mensaje tipo "este juego solo funciona en MSX2"

MV=PEEK(43)

y en MV tendrás un 0 si es MSX1, 1 si es MSX2, 2 si es MSX2+ y 3 si es Turbo-R.

Espero que te sirva Cheesy
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #6 : 20 de Enero de 2011, 07:51:25 pm »

Hola de nuevo

Antes de contestar he estado haciendo pruebas y me pasan cosas "raras".
Yo los juegos los hago SC1 pero redefino los colores de tinta y fondo de cada línea de los carácteres ASCII  y me he dado cuenta que al hacer esto, aunque sigo en SC1 el BlueMSX me dice que estoy en SC2. La verdad es que no se muy bien como lo hago, yo simplemente lo copié de un sitio y lo que hago es poner el rango de carácteres ASCII que quiero cambiar y por supuesto las DATA con los graficos y colores

Código:
150 '***** GRAFICOS *****
160 DEFUSR3=&H7E
170 RESTORE 710
180 M1$="":M2$="":M3$=""
190 READ A$:IF A$<>"*" THEN M1$=M1$+CHR$(VAL("&h"+A$)):GOTO 190
200 READ A$:IF A$<>"*" THEN M2$=M2$+CHR$(VAL("&h"+A$)):GOTO 200
210 READ A$:IF A$<>"*" THEN M3$=M3$+CHR$(VAL("&h"+A$)):GOTO 210
220 A#=VARPTR(M1$)
230 DEFUSR=PEEK(A#+1)+PEEK(A#+2)*256
240 A#=VARPTR(M2$)
250 DEFUSR1=PEEK(A#+1)+PEEK(A#+2)*256
260 A#=VARPTR(M3$)
270 DEFUSR2=PEEK(A#+1)+PEEK(A#+2)*256

280 '***** REDEFINIMOS CARACTERES ASCII *****
290 S=0:RESTORE 750
300 FOR F%=(97*8) TO (113*8)+7:READ A$:VPOKE F%,VAL("&H"+A$):NEXT F%
310 F%=USR(0)
320 F%=USR1(0)

330 '***** PINTAMOS CARACTERES ASCII *****
340 RESTORE 930
350 FOR F%=&H2000+(97*8) TO &H2000+(113*8)+7:READ A$:VPOKE F%,VAL("&h"+A$):NEXT F%
460 F%=USR2(0)
470 F%=USR3(0)
480 RETURN

700 '***** DATAS C.M. *****
710 DATA 1,0,0,C5,E1,CD,4A,0,11,0,8,19,CD,4D,0,C5,E1,CD,4A,0,11,0,10,19,CD,4D,0,3,78,FE,8,20,E2,C9,*
720 DATA 1,1,20,21,0,20,CD,4A,0,C5,E1,CD,4D,0,3,78,FE,28,20,EF,C9,*
730 DATA 1,0,20,C5,E1,CD,4A,0,11,0,8,19,CD,4D,0,C5,E1,CD,4A,0,11,0,10,19,CD,4D,0,3,78,FE,28,20,E2,C9,*


La prueba que he hecho es dibujar un cuadro de 8x8 carácteres en la esquina de arriba a la izquierda:

Código:
FOR I=0 TO 7 : FOR J=0 TO 7 : VPOKE 6145+I+32*J,97+J : NEXT J : NEXT I

Y con los cursores mover un sprite por la pantalla. En SC1 va perfecto:



Pero he cambiado a SC2 y además del cuadro de 8x8 carácteres y el sprite que sale perfecto me aparecen 3 líneas que yo no he escrito:



Y si pongo SC4 también salen las 3 lineas pero ahora no aparece el sprite por ningún sitio por más que mueva los cursores:




Hace tiempo que ya intenté hacer esto ya vi que el SC2 tiene 3 tablas y no supe como solucionarlo, Pero por lo que dices parece que se puede arreglar y dejar en una sola tabla:
Citar
No tienes una única tabla como en SC1, pero se puede hacer sin problemas con un par de VPOKES y funciona bien en todos los MSX2.

¿ Como se podría hacer eso ?

Del sprite no he tocado nada como por ejemplo asignarle los colores por línea , ¿ puede ser por eso que no aparezca en pantalla, o hay que hacer algo distinto a SC1 y SC2 ?


Gracias por la instrucción para comprobar el tipo de MSX y buscaré "JLTur" a ver si puedo hacer más fácil lo de poner las letras del menu, puntos, vidas... y no tener que hacer un VPOKE para cada letra.

Saludos
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
SapphiRe_MSX
Visitante
« Respuesta #7 : 20 de Enero de 2011, 08:01:53 pm »

Citar
No tienes una única tabla como en SC1, pero se puede hacer sin problemas con un par de VPOKES y funciona bien en todos los MSX2.

¿ Como se podría hacer eso ?

A ver, si no tocas nada más prueba con

VDP(3)=&H9F:VDP(4)=0

eso sí, en SC4 Cheesy

Cuando tenga más tiempo ya te doy unas instrucciones más genéricas, que ahora voy de cráneo...
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #8 : 20 de Enero de 2011, 08:34:00 pm »

He probado esas instruciones (que no tengo ni idea de para que son) pero todo sigue igual en los 3 tipos de SC. Lo he puesto antes de redefinir y pintar los carácteres y lugo lo he probado despúes, pero en los dos casos pasa lo mismo, nada.

Saludos.
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 #9 : 21 de Enero de 2011, 10:05:26 am »

Bueno, y la otra gran pregunta:

Citar
Otra cosa que me va por la cabeza es la forma de trabajar con un screen > 1. Yo ahora tengo el juego en 2 ficheros, el primero me pone SC1, carga todos los sprites y redefine los carácteres ASCII por mis gráficos y luego cargo el segundo fichero donde está el código fuente del juego, así cada vez que lo ejecuto (el segundo fichero) no se tira un rato cargando los sprites y vpokes, que ya lo hizo una única vez al cargar el primer fichero.
Si hago un SCREEN pierdo todos los sprites y vpokes que había redefinido así que como SC4 (o cualquier otro >1) no es de texto para programar he de estar en SCREEN 0 o 1 y al ejecutar el programa cambiar al nuevo SCREEN con lo que perderé todos los gráficos y cada vez que haga RUN tendré que volver a generarlos todos ¿ hay alguna forma de evitar esto ?

Esto es importante para mi porque el primer fichero en el que hago los gráficos ya tiene 4960 lineas (de 10 en 10) y como uso el compilador XBASIC apenas tengo memoria para el código fuente por lo que si o si lo tengo que hacer en 2 ficheros y si al cambiar de SCREEN se pierden los gráficos no lo voy a poder hacer y me tendré que quedar en SC1 con las limitaciones del MSX1

Saludos.
En línea

Creador de remakes de juegos con modo online y editor de fases:
http://www.remakesonline.com
http://www.miniracingonline.com
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #10 : 21 de Enero de 2011, 02:01:21 pm »

Una vez tengas todos los datos en VRAM grábalos en disco con BSAVE con la opción ,S. Este parámetro especifica que sea de la VRAM. Luego lo cargas con un BLOAD "loquesea",S. Es más limpio y más rápido.
En línea

sempre fun un valente corredor
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #11 : 21 de Enero de 2011, 04:51:32 pm »

Muchas gracias, este parece el mejor y más rápido método pero tengo un problema.
He mirado las instrucciones y he visto que es BSAVE <filename>, <start address>, <end address>, S

Como no tengo ni idea de las direcciones las he puesto todas:
BSAVE"VRAM.BIN",0,&HFFFE,S

y efectivamente me ha guardado todos los sprites y los carácteres ASCII modificados, incluso sale en pantalla lo que tenía en el momento de grabar, pero he perdido todos los colores.
Aunque esté (de momento) en SC1 creo que es un caso especial porque pongo 2 colores por linea a los carácteres ASCII que creo que eso solo se puede en SC2, no en el SC1. De hecho el BlueMSX en el momento que cambio el color de los carácteres me dice que estoy en SC2, aunque sigo en SC1 con el modo texto (pero sin cursor en los 2 tercios de abajo de la pantalla)

¿ Como podría recuperar los colores ?

Y las otras preguntas pendientes:

¿ Como hago que se vean los sprites en SC4 ?
¿ Como evito las lineas que salen al redefinir los carácteres en SC2 y SC4 ?
¿ Como se hace para solo modificar un patrón y no tres en SC2 y SC4 ? (creo que es lo que llamáis modo-mixto por lo que he estado leyendo en el foro)

Muchas gracias.  Wink
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 #12 : 21 de Enero de 2011, 06:11:57 pm »

Y digo yo... si el juego que estás haciendo es de pantalla fija y no cambian muchos elementos del escenario, quizás no sería mala idea pasar el escenario a SR5 (sin restricciones de colores por línea y puedes cargarlos con un BLOAD" ",S) y los cambios de elementos 'no sprites' los haces con un simple copy??

Igual lo que te digo no sirve, porque no sé qué tipo de juego estas haciendo, claro.
En línea
Kotai
Karoshi Lover
***
Mensajes: 214


Kotai

djkotai@hotmail.com
WWW Email
« Respuesta #13 : 21 de Enero de 2011, 07:04:08 pm »

umm  ¿ Lo que me dices es pintar cada una de las pantallas, grabarlas con un BSAVE y tener todas en ficheros separados para cargar cada vez con BLOAD ?
No pinta mal, solo que el cambio entre pantalla ha de ser rápido porque se cambiará muchas veces de pantalla y mi intención es hacer unas 100 fases, un mapa de 10x10

El juego está visto desde arriba y la historia a groso modo es que eres un "loco" y tienes un tiempo limitado para escaparte del manicomio y para ello tendrás que encontrar algunos objetos y usarlos correctamente cuando toque. Tendrás que dar varias vueltas por todo el mapeado por lo que el movimiento del jugador ha de ser rápido para que no aburra y por lo tanto se cambiará de pantalla muchas veces:







Para dibujar las pantallas sin ocupar demasiada memoria me hecho unas "funciones" que pintan cada uno de los objetos: pared blanca, pared gris, suelo1, suelo2, sillas, mesa, cuadro, planta, camilla, armario1, esquina-izq-sup...
Y pintar una pantalla es tan fácil como indicar la X,Y num de columnas y num de lineas y saltar a la linea donde está la función de pintado de ese objeto
10 rem *** pantalla 1 ***
20 x=0 : y=3 : c=1 : l=20 : gosub xxxx : rem pared de la izquierda
30 x=1 : y=4 : c=22 : l=1 : gosub xxxy : rem pared superior
....
40 return

Solo pinto las zonas que cambian respecto a las 4 pantallas desde las que se puede llegar a esa (las de arriba,abajo,izquieda,derecha) así es más rápido el cambio de pantalla.

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 #14 : 21 de Enero de 2011, 09:21:38 pm »

umm  ¿ Lo que me dices es pintar cada una de las pantallas, grabarlas con un BSAVE y tener todas en ficheros separados para cargar cada vez con BLOAD ?
No, no... a ver si me explico mejor.

Como ya te han dicho por aquí, el SR5 es un modo bitmap, de modo que imagino que la forma de trabajar a nivel gráfico será un poco más tipo a como se hace en plataformas más modernas (pero sólo hay una única capa gráfica + la capa de sprites).

En SR5 tienes 4 páginas disponibles (3 ocultas y 1 visible, que puede ir cambiando), entonces lo suyo es:

-Tener todos los gráficos de los elementos que necesitas para montar las pantallas en una de las páginas ocultas.
-Usar otra de las páginas ocultas para guardar back-up's de fondo y tonteridas varias que puedas necesitar.
-Con las dos páginas restantes puedes hacer dos cosas, según tus necesidades:
1. Usar únicamente una de ellas como página visible del juego, donde irás copiando todo a medida que vayas necesitando.
2. Usar la técnica de swap de páginas... o sea, que mientras enseñas una, las actualizaciones las vas haciendo en la otra y así sucesivamente.

Yo creo que para el juego que quieres hacer y si todos los personajes son sprites, con la opción 1 ya te vale.

Para copiar las cosas de una página a otra, pues simplemente con un COPY(X1,Y1)-(X2,Y2),0 TO (x3,y3),1 estarías copiando un rectángulo del tamaño que quieras desde la página 0 a la 1 (luego tienes la opción de copiar con o sin transparencias y tal).

Como ya te he dicho, seguramente que el método se acerca más a lo que haces para PC actualmente.
En línea
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!