|
Post by Packobilly on Nov 14, 2022 14:49:33 GMT
Is it possible to display a scr developed outside of MPAGD as a game framework? I mean, I have a 6912k scr and I want to call it from MP, but I don't know if with ASM, as it is done in standard AGD it will work. As a result of this, seeing the available memory, where can I save it? Thanks in advance!
|
|
|
Post by ramon on Nov 17, 2022 18:40:37 GMT
En MPAGD se hace así:
1- Crea un programa que presente tu src en pantalla y llámalo UserSRC.asm por ejemplo. Guárdalo en disco. 2- Desde el editor MPAGD, en el menú Tools, selecciona la opción Select User Routine. Esto le indica al MPAGD dónde buscarla. 3- En el guion de tu juego llama al programa con el siguiente comando: USER n, donde n es pasado como valor en el acumulador. Esto es lo que MPAGD hace para tí: por ejemplo al escribir USER 12.
ld a, 12 ; 12 es el valor que pusimos en el comando USER 12 call User ; llama a tu programa.
Estrategias para tu proyecto: Se me ocurren tres:
1- Programa que llame a toda tu presentación (UserSRC.asm). Requiere almacenar la pantalla en memoria, por consiguiente previa carga desde la cinta. 2- El viejo truco de no usar CLS en ningún momento del juego, al cargar el juego, presenta el mosaico o marco de tu pantalla de carga o splash screen. 3- Usar la rutina de Jonathan que pinta las habitaciones para presentar las cuatro esquinas de tu mosaico, desplazando estas al límite de la parrilla de juegos.
---
In MPAGD it is done like this:
1- Create a program that displays your src on the screen and call it UserSRC.asm for example. Save it to disk.
2- From the MPAGD editor, in the Tools menu, select the Select User Routine option. This tells the MPAGD where to look for it.
3- In your game script call the program with the following command: USER n, where n is passed as a value in the accumulator.
This is what MPAGD does for you: for example when typing USER 12.
ld a, 12 ; 12 is the value we put in the USER 12 command
call User ; call your program.
Strategies for your project: I can think of three:
1- Program that calls all your presentation (UserSRC.asm). Requires storing the screen in memory, therefore prior loading from tape.
2- The old trick of not using CLS at any time in the game, when loading the game, presents the mosaic or frame of your loading screen or splash screen.
3- Use Jonathan's routine that paints the rooms to present the four corners of your mosaic, moving these to the edge of the game grid.
|
|
|
Post by pachic on Nov 18, 2022 1:15:33 GMT
Packo, pero vos queres guardar en memoria y sacarla cada vez que la necesites? O queres que cargue una pantalla y después otra que quede como parte del juego (tablero etc) Si es la primer lo que dice Ramon es usando una rutina de usuario, pero tenes que guardar 7 k en algún lado y la rutina es fácil , te ayudamos
Saludos Daniel
|
|
|
Post by ramon on Nov 21, 2022 10:02:04 GMT
Para modelos 48k (obviamente también 128k): Crear una carpeta en el directorio Suite ZX y llamarla Tapes Crear una pantalla de carga o Splash screen en formato scr con tu editor favorito. Llamarla screen.scr Copiar screen.src dentro de la carpeta Tapes Descarga la rutina de usuario y guardala en tu lugar favorito: Splash screen.asm (588 B) ;--------------------------- ; ; Rutina User para presentar Splash screen ; ;---------------------------
; selector de rutinas por si quieres añadir funciones de usuario a tu juego cp 1 jr z,showSplash ; si acumulador (registro a) es 1 entonces salta a showSplash ; cp 2 ; jp z,OtraCosa ret
showSplash ; Volcado de pantalla ld hl,screenorg ; desde origen ld de,$4000 ; hasta direccion de pantalla spectrum zx ld bc,6912 ; todos estos bites ldir ; copialos ret ; gracias
screenorg incbin "../tapes/screen.scr"
Desde el editor MPAGD, en el menú Tools, selecciona la opción Select User Routine. Esto le indica al MPAGD dónde buscar tu rutina Splash screen.asm Llama a tu pantalla en tu guion en el evento favorito mediante el comando USER 1 Para ahorrar memoria hay la opción de comprimir la pantalla con zx7 de einar saukas, si estais interesados se complica el trabajo ya que es necesario un Loader que haga ese trabajo. Para los usuarios del MPAGD Sound mod, les diré que el camino está casi hecho en este sentido; con un par de pequeños cambios de código es posible hacer esto con ahorro de memoria ya que guardaría la pantalla en el banco 6 de memoria de los modelos 128k. Saludos amigos, probar a ver si hay suerte!
|
|
|
Post by xavisan on Nov 22, 2022 21:41:29 GMT
Desde el editor MPAGD, en el menú Tools, selecciona la opción Select User Routine. Esto le indica al MPAGD dónde buscar tu rutina Splash screen.asm Llama a tu pantalla en tu guion en el evento favorito mediante el comando USER 1 Para ahorrar memoria hay la opción de comprimir la pantalla con zx7 de einar saukas, si estais interesados se complica el trabajo ya que es necesario un Loader que haga ese trabajo. Para los usuarios del MPAGD Sound mod, les diré que el camino está casi hecho en este sentido; con un par de pequeños cambios de código es posible hacer esto con ahorro de memoria ya que guardaría la pantalla en el banco 6 de memoria de los modelos 128k. Saludos amigos, probar a ver si hay suerte! Hola Ramon, Deseaba agradecerte la rutina, y muchas gracias por compartirla (no tenía la menor idea de como cargar un fichero externo, siempre se aprende con vosotros muchas gracias!) , tenia una consulta adicional a ver si podrías ayudarme si es posible, he añadido una rutina al codigo que es para utilizar el Flash, tal que asi (la añado aqui), ; selector de rutinas por si quieres añadir funciones de usuario a tu juego cp 1 jr z,showSplash ; si acumulador (registro a) es 1 entonces salta a showSplash cp 2 jp z,Blink ; llamada a rutina de blink USER2 ret showSplash ; Volcado de pantalla ld hl,screenorg ; desde origen ld de,$4000 ; hasta direccion de pantalla spectrum zx ld bc,6912 ; todos estos bites ldir ; copialos ret ; gracias screenorg incbin "../tapes/screen.scr" Blink ld c,a ; Set BC=blockcolour pointer ld b,0 ld hl,bcol ; Set HL=blockcolour table address add hl,bc ; Point to blockcolour ld a,(23693) ; Get COLOUR ld (hl),a ; Store COLOUR as blockcolour ret Pero parece ser que no termina de funcionar, en cambio si la utilizo de forma individual mediante un USER 45, si que funciona, no se si es que es necesario algo más o no, sinceramente me irá muy bien, para el juego que estoy finalizando (con el que estoy disfrutando como nunca). Por otra parte he estado realizando alguna prueba, al realizar el .TAP incluye la imagen al realizar el export tambien, pero si se utiliza una tool que incluye musica y la pantalla de presentación, si utilizas una pantalla para la carga y esta otra para el marco por ejemplo. Existe algún lugar donde explique el como funciona el poder realizar el fichero .BAS de carga?, y que se pueda linkar todo incluida la parte de la musica en formato PT3 (sin complicarse mucho, si es que es posible eso) ? (supongo que esto ya es bastante más complicado). Muchas gracias,
|
|
|
Post by ramon on Nov 22, 2022 22:38:49 GMT
Hola xavisan. Cuando comienza tu rutina el registro a siempre vale 2. Porque así funciona USER 2 Blink ld c,a ; Set BC=blockcolour pointer --> C=A=2 Tienes dos opciones: 1.- En el guion de tu juego escribe, si puedes usar la variable A, (yo creo que es buena práctica reservarla para estas cosas) lo siguiente: LET A=45 USER 2
También cambia una línea de código a tu programa
Blink ld a,(vara) ; guarda la variable A del juego en el registro del acumulador ld c,a ; Set BC=blockcolour pointer ld b,0 ld hl,bcol ; Set HL=blockcolour table address add hl,bc ; Point to blockcolour ld a,(23693) ; Get COLOUR ld (hl),a ; Store COLOUR as blockcolour ret
2.- Usar un código más complicado para seleccionar y pasar valores sin usar variables del juego. No es necesario; pero aquí quedó: User Routines SelectorPara todo lo demás (música, loader basic y screen) usa MPAGD Sound Mod. Hace todo eso pot tí. Y si esperas un poco también te saca la screen cuando tu quieras sin rutina user.
|
|
|
Post by xavisan on Nov 22, 2022 23:16:46 GMT
Para todo lo demás (música, loader basic y screen) usa MPAGD Sound Mod. Hace todo eso pot tí. Y si esperas un poco también te saca la screen cuando tu quieras sin rutina user. Mil gracias Ramon, Una consulta a que te refieres con " Y si esperas un poco también te saca la screen cuando tu quieras sin rutina user." que habrá nueva versión? Probare lo que me comentas sobre MPAGD Sound Mod lo miraré con mucho cariño, ya que utilizaba Musicier (pero este elimina el scr que cargas y lo deja sin este, parece ser que la exportación desde MPAGD no importa la pantalla ni la referencia, o eso me ha parecido ver igual me equivoco), realmente pienso que usar la rutina user me puede ser efectiva (no sé si es lo más adecuado o no), más que nada porqué deseo añadir alguna imagen, en menú de inicio y posiblemente en pantalla de juego (marco o panel de score) miraré de comprimirlo por eso y ya veré la parte de descompresión, me permitiría cargar varias pantallas. Mil gracias por el consejo de la variable "A" lo desconocia totalmente por suerte la tengo libre, Muchísimas gracias de nuevo tus consejos me van a ir de perlas.
|
|
|
Post by ramon on Nov 22, 2022 23:37:39 GMT
MPAGD Sound Mod es un artefacto que surge para salvar el escollo que supone añadir sonido al juego. Aprovecha el trabajo de david saphier 2017/18 AGDMusicizer y MAGDmusicizer y añade algunas cosas como por ejemplo: Llamar a las canciones mediante el comando SOUND n y a los efectos con SOUND 100+n, sin acudir a la variable M del juego. Añade los mencionados efectos que puedes editar tu mismo o importarlos de archivos wav. Además puedes usar un editor muy potente llamado Arkos Traker que importa canciones directamente desde archivos midi. Todo esto lo coloca en el banco de memoria 4 de los modelos 128k, junto con los efectos y así libera memoria para tu juego. Tiene un minicargador de records en basic que tu pedes modificar, con cuidado por que hay poco sitio en memoria basic. Reserva bites si quieres usar el modo adventure. (debes editar el código para cambiar el tamaño un archivo llamado trailer.asm) Todo lo hace transparente para que sólo te preocupes de colocar tus pt3 como venías haciendo hasta ahora. Con un poco de tiempo subo una actualización para que con un pequeño comando USER 16 te presente la SplashScreen! Ah, se me olvidaba, hace lo mismo para modelos 48k, efectos y música.
|
|
|
Post by pachic on Nov 23, 2022 19:21:27 GMT
el MPAGDSOUND es el que uso en las versiones 48k y 128k, gracias a Ramón y funciona de una sin tener que pensar en el tema de música y el screen es más facil de colocar también Ahora el engine lo miramos con Roolando y es diferente al original , tiene otras rutinas o labels incorporados
en el engine que estoy reformando ya vimos también con Roolando que se comio 1,5k. El tema que al agregar más cosas son menos sprites, screens y bloques
Saludos
|
|
|
Post by xavisan on Nov 23, 2022 21:01:54 GMT
MPAGD Sound Mod es un artefacto que surge para salvar el escollo que supone añadir sonido al juego. Aprovecha el trabajo de david saphier 2017/18 AGDMusicizer y MAGDmusicizer y añade algunas cosas como por ejemplo: Llamar a las canciones mediante el comando SOUND n y a los efectos con SOUND 100+n, sin acudir a la variable M del juego. Añade los mencionados efectos que puedes editar tu mismo o importarlos de archivos wav. Además puedes usar un editor muy potente llamado Arkos Traker que importa canciones directamente desde archivos midi. Todo esto lo coloca en el banco de memoria 4 de los modelos 128k, junto con los efectos y así libera memoria para tu juego. Tiene un minicargador de records en basic que tu pedes modificar, con cuidado por que hay poco sitio en memoria basic. Reserva bites si quieres usar el modo adventure. (debes editar el código para cambiar el tamaño un archivo llamado trailer.asm) Todo lo hace transparente para que sólo te preocupes de colocar tus pt3 como venías haciendo hasta ahora. Con un poco de tiempo subo una actualización para que con un pequeño comando USER 16 te presente la SplashScreen! Ah, se me olvidaba, hace lo mismo para modelos 48k, efectos y música. Genial!!! , voy a ponerme hoy que tengo un par de horitas a ver que tal , se agradece enórmente Ramon y de paso ya me descargo la ultima versión que incorporando la presente SplashScreen Muchas gracias!!!!
|
|
|
Post by xavisan on Nov 23, 2022 21:09:11 GMT
el MPAGDSOUND es el que uso en las versiones 48k y 128k, gracias a Ramón y funciona de una sin tener que pensar en el tema de música y el screen es más facil de colocar también Ahora el engine lo miramos con Roolando y es diferente al original , tiene otras rutinas o labels incorporados en el engine que estoy reformando ya vimos también con Roolando que se comio 1,5k. El tema que al agregar más cosas son menos sprites, screens y bloques Saludos Genial!!, yo usaba Estuve mirando el código ASM de MPAGDMusizier, que va bastante bien. Me voy a poner con el de Ramon. El modificar el Engine, la verdad es que hay muchísimas cosas de asm que ya se me escapan y que ni recuerdo, alguna cosa voy realizando para recuperar el ritmo que no es nada sencillo muchos años sin "rascar" demasiado, luego claro está es conocer muy bien MPAGD ya que modificar su asm se hace algo complicado, y eso que está realmente muy bien documentado, cuando termine el juego que estoy realizando al al igual me pongo a experimentar, que tendré más tiempo y es la forma de aprender. Mil gracias a todo os lo agradezco enormemente
|
|
|
Post by xavisan on Nov 23, 2022 23:43:14 GMT
No termina de funcionarme, con las pruebas que realizado (seguramente realizaré algo mal), lo curioso es que me da errores que no me daba AGD Compiler for ZX Spectrum version 0.7.10 (C) Jonathan Cauldwell May 2020 Sourcename: deleteme.agd Unrecognised instruction on line 2387: Unrecognised instruction on line 2387: Unrecognised instruction on line 2387: Unrecognised instruction on line 2387: Unrecognised instruction on line 2387: Only a number will do on line 2388: LET G = 0 ; objects contador Output: deleteme.asm 1 archivo(s) copiado(s). 1 archivo(s) copiado(s). 17 archivo(s) copiado(s) 2 archivo(s) copiado(s) El sistema no puede encontrar el archivo especificado. 1 archivo(s) copiado(s). Optimal LZ77/LZSS compression by Einar Saukas File converted from 6912 to 2284 bytes! (delta 2) AGD Musicizer II David Saphier 2017 v1.8 zxbasic.uk/files/agdmusicizerII.rarwww.facebook.com/groups/785775881484393/Variable to use : m Looking for PT3 files : 1 > [PT3] music01.pt3 (Size: 1996 Bytes ) 2 > [PT3] music02.pt3 (Size: 1548 Bytes ) Total songs found : 2 Total size : 3544 Bytes Mem Free : 10681 Bytes Mem area : 51310 - 54854 Generating asm : OK !! - Saved musicsizes.asm Generating asm : OK !! - Saved musicdepacks.asm Generating asm : OK !! - Saved musicplayback.asm Generating asm : OK !! - Saved irinclude.asm Generating asm : OK !! - Saved music.asm Compressing : music01.pt3 Compressed Size : 775 bytes (~ 0kb) Compressing : music02.pt3 Compressed Size : 640 bytes (~ 0kb) Total compressed size : 1415 bytes Assembling code : Done Creating Loader : Done Joining tape data : ERROR!! Could not read musicizer.bin, maybe it didnt compile? Joining tape data : Ignored by MPAGD-Sound Mod, all is OK. asm\music.asm Replaced 2 occurence(s) in 1 file(s). 2 archivo(s) copiado(s) 1 archivo(s) copiado(s). 1 archivo(s) copiado(s). 21 archivo(s) copiado(s) Cargador para AY-3-8912 con Marcadores 1 archivo(s) copiado(s). BAS2TAP v2.5 by Martijn van der Heide of ThunderWare Research Center Creating output file loader.tap Done! Listing contains 43 lines. deleteme.asm Replaced 1 occurence(s) in 1 file(s). deleteme.asm Replaced 1 occurence(s) in 1 file(s). deleteme.asm Replaced 1 occurence(s) in 1 file(s). deleteme.asm Replaced 1 occurence(s) in 1 file(s). Pre-processing [FX4BANK.asm] Assembling Write binary file FX4BANK.bin (288 bytes) Optimal LZ77/LZSS compression by Einar Saukas File converted from 288 to 269 bytes! (delta 4) ERROR on line 16 of file user.asm ERROR: Symbol 'Vara' is undefined 1 archivo(s) copiado(s). loader.tap MUD.tap 1 archivo(s) copiado(s). chispy128.tap 1 archivo(s) copiado(s). ---- Me aparece este error, es como si faltara un fichero. Este error no se de que va: Joining tape data : ERROR!! Could not read musicizer.bin, maybe it didnt compile? Y utilizando el código ASM (para el SplashScreen) parece ser que no funciona no observo que carga la pantalla real del juego y solo genera el .TAP con la pantalla de SplashScreen, con lo que realmente no incluye el código, compilando unicamente la pantalla en 7K.
|
|
|
Post by ramon on Nov 24, 2022 8:16:09 GMT
Joining tape data : ERROR!! Could not read musicizer.bin, maybe it didnt compile?
Joining tape data : Ignored by MPAGD-Sound Mod, all is OK.
Es un mensaje muy ambiguo, lo reconozco. No eres el primero que se alarma y desconfía. Pero Ignóralo. Está todo bien. Creo que un script de tu juego falla en la línea donde escribes LET G = 0 ; objects contador (Only a number will do on line 2388). la línea 2388 se corresponde con el programa ensamblado que genera MPAGD, se llama deleteme.agd y está en Suite ZX/AGDSource. No lo edites, solo mira qué línea es; yo me centraría en la información "LET G = 0 ; objects contador" puede que sea un letra "O" y no el número 0, no se, a mi me pasan cosas de ese estilo todo el tiempo.
Respecto e la SplashScreen, estoy en ello. Lo dejo listo hoy, estoy en pruebas ahora mismo. Cuantas pantallas menú necesitas? Has considerado la idea de dibujar las pantallas con bloques y presentarlas en habitaciones simplemente con el comando SCREEN ?
|
|
|
Post by pachic on Nov 24, 2022 18:58:25 GMT
Yo sé que me pongo denso, pero comerse 7 k de una pantalla en la memoria es mucho para la 48 SI se pudiera poner en la otra memoria de la 128k seria un golazo pero no tengo ni idea
Saludos
|
|
|
Post by xavisan on Nov 24, 2022 21:22:37 GMT
Joining tape data : ERROR!! Could not read musicizer.bin, maybe it didnt compile? Joining tape data : Ignored by MPAGD-Sound Mod, all is OK. Es un mensaje muy ambiguo, lo reconozco. No eres el primero que se alarma y desconfía. Pero Ignóralo. Está todo bien. Creo que un script de tu juego falla en la línea donde escribes LET G = 0 ; objects contador (Only a number will do on line 2388). la línea 2388 se corresponde con el programa ensamblado que genera MPAGD, se llama deleteme.agd y está en Suite ZX/AGDSource. No lo edites, solo mira qué línea es; yo me centraría en la información "LET G = 0 ; objects contador" puede que sea un letra "O" y no el número 0, no se, a mi me pasan cosas de ese estilo todo el tiempo. Respecto e la SplashScreen, estoy en ello. Lo dejo listo hoy, estoy en pruebas ahora mismo. Cuantas pantallas menú necesitas? Has considerado la idea de dibujar las pantallas con bloques y presentarlas en habitaciones simplemente con el comando SCREEN ? Antes de nada un Millón de gracias por la ayuda. Miré eso que comentas Ramon del LET G = 0 , pero después de solucionarlo me sigue fallando al usar el Splash parece ser, el tema es que que no llega ni a añadir la pantalla de carga, Poniendo el SpashScreen es donde falla en la rutina de ASM utilizando MPAGD Mod, o se si lo usas teniendo esa parte, falla con "C Nonsense in BASIC, 130:1" concretamente, si lo elimino utilizando el código asm anterior del Blink funciona bien. Sobre el SplashScreen Mi idea es utilizar al menos 2 pantallas en el mismo juego, ya que quería usar una para el menú de opciones, y otra por el Game Over es la idea que tenia en mente, eso que comentas de los bloques ya lo había probado y funciona bien la verdad realice una serie de pruebas, pero cuando es un dibujo complejo el tema se complica muchísimo en hacerlo por bloques, por eso lo había descartado. Mil gracias de nuevo!!
|
|