Karoshi MSX Community
05 de Julio de 2021, 01:00:28 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
  Imprimir  
Autor Tema: Una de SPRITES  (Leído 9893 veces)
0 Usuarios y 1 Visitante están viendo este tema.
x1pepe
Karoshi Newbie
*
Mensajes: 48


Email
« : 15 de Enero de 2006, 12:52:29 pm »

Tengo la pretensión de visualizar un SPRITE en la pantalla. He realizado el diseño con TinySprite http://jannone.org/msx/tinysprite.html,de los cuatro SLOTS disponibles, he utilizado en mi dibujo el nº3 y nº4, luego he exportado en BASIC y el resultado lo he copiado al programa de prueba en BASIC. No me da ningun error pero no se ve nada en la pantalla sólo el fondo azul.

Código:
10 SCREEN 2,0
20 FOR I=1 TO 32
30 READ A$
40 A=VAL("&H"+A$)
50 S$=S$+CHR$(A)
60 NEXT I
70 SPRITE$(1)=S$
80 PUT SPRITE1, (128,96),1,1
90 GOTO 90
100 REM COLOR 1
110 DATA
...
120 REM COLOR 8
130 DATA
...
140 REM COLOR 13
150 DATA
(no he incluído los datas)

Llevo un buen rato haciendo todo tipo de combinaciones raras  cmptr:) y no doy con el fallo. Me podéis dar una ayudita?

« Última modificación: 15 de Enero de 2006, 01:06:18 pm por x1pepe » En línea

MSX. El futuro que viene del pasado.
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 15 de Enero de 2006, 01:17:58 pm »

Hay un problema de partida básico: al hacer SCREEN 2,0 indicas que los sprites sean de 8x8 y, sin embargo, estás copiando 32 bytes, por lo que entiendo que definiste un sprite de 16x16. Prueba a usar SCREEN 2,2 para indicar sprites de 16x16.

Además, te recomiendo que copies los datos a VRAM con VPOKE en lugar de usar la chapuza de las cadenas de caracteres y el comando SPRITE$(n). Simplemente, tendrías que sustituir el código por

Código:
10 SCREEN 2,2
20 FOR I=0 TO 31
30 READ A$
40 A=VAL("&h"+A$)
50 VPOKE 14336+I,A
60 NEXT
70 PUT SPRITE 0,(128,96),1,0
80 GOTO 80
90 DATA ....

Como verás, he movido los índices para que empieces con el patrón de sprites número 0. Si los DATAs están bien, no tendrás ningún problema. De todos modos, plantéate pasarte al ensamblador tan pronto como puedas Smiley
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #2 : 15 de Enero de 2006, 01:34:14 pm »

Edu siempre tan duro con los usuarios de basic  Grin En cuanto huele a lenguaje de alto nivel ya te quiere pasar al lado oscuro  Grin

x1pepe,pienso que si eres capaz de esbozar un algoritmo con cierta tranquilidad, igual te viene mejor pasar directamente al basic. El hacer gráficos y sonido ya es cuestión de aprenderse tablitas y cómo funciona el vdp y demás, pero teniendo los fundamentos, eso es cuestión de documentación.

Ahora, si no tienes ni papa de programar, entonces veo el asm muy "heavy" para los comienzos.

Como bien te ha dicho Robsy, a partir de 14336 comienza la tabla de sprites tanto en screen 1 como en 2. Si son sprites de 8x8 (con el comando screen ,0) el sprite 0 estará en 14336, el 1 en 14344 y así de 8 en 8. Si es de 16x16 (con screen ,2), ocupará cada uno 32 bytes y por tanto en 14336 el número 0, en 14368, etc. Tienes hasta la 16383, o sea que si usas sprites de 8x8 podrías meter hasta 256, y 64 en caso de usar sprites de 16x16 (ocupa cuatro veces los de 8x8).

Y sigue la recomendación de escribir en vram directamente con el comando vpoke.

for i=1 to "número de sprites x8 o x32 según el caso"
read a
vpoke i,a
next

Sencillito y directo.  Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
x1pepe
Karoshi Newbie
*
Mensajes: 48


Email
« Respuesta #3 : 15 de Enero de 2006, 04:48:45 pm »

Muchas gracias por el ejemplo Robsy
Citar
De todos modos, plantéate pasarte al ensamblador tan pronto como puedas
, lo reconozco, el ASM es mucho más rápido y explota más el MSX, pero pienso que el BASIC es un buen comienzo para hacer un primer juego.

Citar
Edu siempre tan duro con los usuarios de basic  Grin En cuanto huele a lenguaje de alto nivel ya te quiere pasar al lado oscuro  Grin
Teneis razón, si salgo bién de ésta, puede que el próximo sea en ASM  Wink

El caso es que la cosa sigue sin ir. Quiza debería haber puesto el código entero, allá va:

Código:
10 SCREEN 2,2
20 FOR I=0 TO 15
30 READ A$
40 A=VAL("&h"+A$)
50 VPOKE 14336+I,A
60 NEXT
70 PUT SPRITE 0,(128,96),1,0
80 GOTO 80
90 DATA &HC0, &H60, &H38, &H0C, &H06, &H03, &H01,
 &H01, &H03, &H06, &H0C, &H18, &H30, &H60, &H40,
 &HC0, &H01, &H03, &H06, &H1C, &H30, &H60, &HC0,
&H80, &HC0, &H60, &H30, &H10, &H18, &H0C, &H06,
&H03

el dibujo es un X de color rojo. Los data deberían de estar bien, por lo menos los he pegado aquí directamente, pero en mi MSX no funciona.


Gracias de nuevo  Embarrassed
En línea

MSX. El futuro que viene del pasado.
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #4 : 15 de Enero de 2006, 04:58:35 pm »

Pues no me extraña que no te funcione  Wink

Estás tratando de cargar como sprites datos con la forma &h&h00, con lo cual el pobre MSX se hace un lío. Lo del VAL y el "&h" está muy bien cuando los datos los pones en los DATAs sin indicar &h. Si los DATAs ya tienen el prefijo adecuado, el programa es aún más sencillo:

Código:
10 SCREEN 2,2
20 FOR I=0 TO 31
30 READ A
40 VPOKE 14336+I,A
50 NEXT
60 PUT SPRITE 0,(128,96),1,0
70 GOTO 70
80 DATA &HC0, &H60, &H38, &H0C, &H06, &H03, &H01,&H01, &H03, &H06, &H0C, &H18, &H30, &H60, &H40,&HC0, &H01,&H03, &H06, &H1C, &H30, &H60, &HC0,&H80, &HC0, &H60, &H30, &H10, &H18, &H0C, &H06,&H03

Al loro con los cambios: para un sprite de 16x16 se usan 32 bytes y no 16, como ponías en tu código. Ahora sí te funcionará.
En línea
x1pepe
Karoshi Newbie
*
Mensajes: 48


Email
« Respuesta #5 : 15 de Enero de 2006, 06:07:34 pm »


Muchas gracias por vuestra paciencia  Wink , ahora sí que funciona  beer:)
En línea

MSX. El futuro que viene del pasado.
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #6 : 15 de Enero de 2006, 06:15:44 pm »

Y aunque hace mucho que no hago nada en BASIC, algunos truquitos sí que recuerdo.

Prueba a hacer

0 DEFINT A-Z

Para ganar algo de velocidad. Y si quieres copiar muchos datos a VRAM rapidito, te conviene usar DEFUSR=&h41:A=USR(0) y DEFUSR=&h44:A=USR(0) para activar/desactivar la pantalla (o al revés, que no me lo sé de memoria).
En línea
x1pepe
Karoshi Newbie
*
Mensajes: 48


Email
« Respuesta #7 : 15 de Enero de 2006, 06:27:43 pm »

                                   
Gracias de nuevo.   Wink
En línea

MSX. El futuro que viene del pasado.
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #8 : 16 de Enero de 2006, 10:35:15 pm »

x1pepe, ánimo con el BASIC!!!

Te paso un ejemplo de cómo definir y mover caracteres en SCREEN 2 (era del antiguo foro, y lo he recuperado).

Código:
10 REM Inicializo SC2
20 DEFINTA-Z:COLOR15,1,1:SCREEN2,2,0
30 REM Pongo 0 en toda la pantalla
40 FORN=6144TO6911:VPOKEN,0:NEXTN
50 REM Redefino caracteres 3 bancos
60 FORN=776TO879:READA:VPOKEN,A:VPOKEN+2048,A:VPOKEN+4096,A:NEXTN
70 REM Redefino colores 3 bancos
80 FORN=8968TO9071:READA:VPOKEN,A:VPOKEN+2048,A:VPOKEN+4096,A:NEXTN
90 REM * Descomprime y pinta maze *
100 FORN=0TO79:READA:A$=RIGHT$("0000000"+BIN$(A),8):FORM=1TO8
110 VPOKE6144+(N*8)+(M-1)+64,ASC(MID$(A$,M,M))+57:NEXTM:NEXTN
120 READX,Y:VPOKE6144+X+(Y*32),107
130 REM Inicia personaje
140 READP:D=5:PO=P:M=0
150 REM Control
160 A=STICK(0):L=0:V=0
170 IFA=1THEND=1:P=P-32:L=1
180 IFA=3THEND=3:P=P+1:L=1
190 IFA=5THEND=5:P=P+32:L=1
200 IFA=7THEND=7:P=P-1:L=1
210 M=M+1:IFM=2THENM=0
220 IFVPEEK(P)=106THENP=PO:L=0
230 IFVPEEK(P)=107THENV=1
240 VPOKEP,96+D+M:IFL=1THENVPOKEPO,0:PO=P
250 FORT=1TO10:NEXTT
260 IFV=1THEN GOTO 290
270 GOTO 160
280 GOTO280
290 REM Victoria
300 FORT=1TO10:FORM=0TO1:VPOKEP,108+M:FORN=1TO50:NEXTN:NEXTM:NEXTT:END
310 ' Patterns
320 DATA &h18,&h38,&h18,&h3C,&h5A,&h18,&h10,&h10,&h00,&h18,&h38,&h18,&h7E,&h18,&h08,&h08
330 DATA &h18,&h1C,&h18,&h38,&h3C,&h18,&h18,&h1C,&h00,&h18,&h1C,&h18,&h1E,&h18,&h24,&h36
340 DATA &h18,&h38,&h18,&h3C,&h5A,&h18,&h10,&h10,&h00,&h18,&h38,&h18,&h7E,&h18,&h08,&h08
350 DATA &h18,&h38,&h18,&h1C,&h3C,&h18,&h18,&h38,&h00,&h18,&h38,&h18,&h78,&h18,&h24,&h6C
360 DATA &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00
370 DATA &h81,&h7D,&hEE,&h7E,&hDC,&hFA,&hFE,&h6C,&hFF,&h81,&h81,&h81,&h81,&h81,&h81,&hFF
380 DATA &h18,&h38,&h99,&h7E,&h18,&h18,&h24,&h66,&h00,&h18,&h38,&h99,&h7E,&h18,&h24,&h66
390 ' Colors
400 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h60,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60
410 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h80,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60
420 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h60,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60
430 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h80,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60
440 DATA &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00
450 DATA &h60,&h90,&h90,&h90,&h90,&h80,&h80,&h60,&hF0,&hF0,&h70,&h70,&h50,&h50,&h40,&h40
460 DATA &h80,&h80,&hA0,&hC0,&hC0,&h40,&h40,&h60,&h80,&h80,&h80,&hA0,&hC0,&h40,&h40,&h60
470 ' Map
480 DATA &hff,&hff,&hff,&hff,&ha1,&h11,&h00,&h01,&hbd,&h15,&h7f,&hdd,&h81,&h15,&h40,&h55
490 DATA &hfd,&h14,&h5f,&h55,&h85,&h15,&hd1,&h55,&hf1,&h75,&h1d,&h05,&h9d,&h04,&h05,&hfd
500 DATA &h81,&hfd,&h7c,&h05,&h9f,&h11,&h41,&hfd,&hb0,&h57,&h5f,&h01,&h87,&hd0,&h50,&h7d
510 DATA &hfc,&h57,&hd7,&hc5,&h81,&hd0,&h14,&h15,&haf,&h07,&hd5,&hf1,&ha8,&h20,&h54,&h1f
520 DATA &haa,&hbf,&h05,&hc1,&hba,&ha5,&hfd,&h7d,&h82,&ha0,&h00,&h01,&hff,&hff,&hff,&hff
530 DATA 9,4,6241
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #9 : 16 de Enero de 2006, 10:48:44 pm »

Ahora sí que tengo un buen motivo para publicar las tablas comparativas de velocidad en basic. ¡Truquitos para los basiqueros!  Cheesy Tendré que ir "maquetando" la cosa  Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
x1pepe
Karoshi Newbie
*
Mensajes: 48


Email
« Respuesta #10 : 17 de Enero de 2006, 12:30:16 am »

Muchísimas gracias, este código es música para mis ojos  beer:) .
En línea

MSX. El futuro que viene del pasado.
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #11 : 17 de Enero de 2006, 12:32:12 am »

Pues yo hice lo contrario: una serie de programas de ejemplo para convencer a la gente de que había que usar ensamblador en lugar de BASIC. El más visual presentaba 32 sprites de 16x16 en pantalla en movimiento. En BASIC, incluso VPOKEando, se arrastraba. En ensamblador, la velocidad era brutal - de hecho, no se podían seguir con la vista si no se frenaba con algún HALT.

En ensamblador, ningún ordenador es lento.  Grin
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #12 : 17 de Enero de 2006, 10:02:37 am »

Sin duda, el ensamblador es lo mejor.

Pero usando el BASIC de reentrada y vpokeando puedes habituarte a las direcciones que luego usarás en un futuro. Yo primero empecé con el BASIC y luego le pegué al ensamblador. Eso sí, un mapa de memoria de VRAM te vendría de perlas para agilizar esos PUT SPRITES y cambiarlos por simples vpokes.

Propongo: ¿que os parece un concursillo de progamas en BASIC? (MSX Basic 1.0, prohibido usar rutinas CM, max...)
¿os molaría?.

Espero respuesta para empezar a organizarlo!!! Smiley
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
Harrison
Karoshi Lover
***
Mensajes: 147



WWW Email
« Respuesta #13 : 17 de Enero de 2006, 10:33:37 am »

Pero sin copiar listados de revistillas eennn  cmptr:)
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #14 : 17 de Enero de 2006, 03:23:36 pm »

Magnífico, Jon, ¡me apunto!  Cheesy

Ahhh... un lugar donde a los programadores en basic se nos respetase y no se nos dijese "hmmmm... ta mu bien, pero sería más rápido y tal...", jajajajaja  Grin
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Páginas: [1] 2
  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!