PAW-K (Potato Adventure Writer) para ZX-81

Foro dedicado a la programación en todo tipo de sistemas clásicos.
dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor dancresp » 04 Dic 2015, 11:03

Screen_1.gif
Screen_1.gif (2.34 KiB) Visto 9349 veces


EL PROGRAMA
Este programa es un sencillo ejemplo de aventura conversacional, preparado para ser ejecutado en la versión básica del ZX-81.

Este ejemplo nos permite movernos libremente por el mapeado completo de la primera parte del juego "La aventura original" de Aventuras AD, y ver la mayoría de objetos y personajes presentes en él.

Solo permite introducir las 4 direcciones básicas: Norte, Sur, Este y Oeste, detectando que el movimiento sea correcto, pero no nos permite interactuar con los objetos y personajes presentes.

El objetivo final de este proyecto consiste en programar una versión completa y funcional del juego "La aventura original" en un ZX-81 que disponga de un mínimo de 2K.

Descargar el juego:
PAW-K.rar
(1.13 KiB) Descargado 253 veces


COMO FUNCIONA
A continuación detallo, línea por línea, el funcionamiento del programa.

Se utilizan las siguientes variables:
B – Variable usada para convertir el valor de un byte a formato binario.
F – Control de bucles.
I – Variable que contiene el tipo de escenario, con un valor comprendido entre 0 y 15.
N – Variable que contiene el valor del byte a convertir.
P – Localización en la que estamos.

A$ - Variable donde se guardan los cuatro posibles movimientos.
B$ - Variable donde se guarda la orden que se entra.

El programa ocupa un total de 30 líneas:
1 – Línea REM que contiene los 45 bytes que conforman el mapa, con sus direcciones y tipo de escenario.
3 – Definimos la variable “P” con el valor de la localización donde aparecemos al iniciar el programa.
9 – Se borra el contenido de la pantalla.
10 – En la variable “N” guardamos el byte correspondiente a la posición de la línea REM.
11 – Inicializamos a 0 la variable “I”, que guardará el tipo de escenario.
12 – Inicializamos en la variable “A$” las cuatro posibles direcciones en la que nos podemos mover.
13 – Inicializamos a 128 la variable “B”, que se usa para pasar el formato de “N” a binario.
14 – Inicio del bucle encargado de pasar a binario el valor de “N”.
15 – Si el valor de “F<5” y el bit tratado es 0 se oculta la dirección correspondiente de la variable “A$”.
16 - Si el valor de “F>4” y el bit tratado es 1 se sume en “I” el valor del bit, entre 1 y 128.
17 – Se calcula el valor de “N” durante el pase a binario.
18 – Se divide el valor de “B” entre 2.
19 – Final del bucle de conversión.
20 – Se salta a una línea entre 1000 y 1440, en función de nuestra localización en el mapa.
21 – Si estamos en un precipicio, imprime una variable no declarada para detener el programa.
25 – Se imprime una línea en blanco.
26 – Se imprimen las distintas direcciones en la que nos podemos mover.
30 – Introducimos nuestra orden.
31 – Inicio del bucle que analiza nuestra entrada para ejecutar el movimiento correspondiente.
32 – Si el primer carácter de nuestra orden es “N”, “S”, “E” o “O” sale del bucle.
33 – Final del bucle de análisis.
34 - Salta a la subrutina que controla la acción a ejecutar, en saltos de 50 líneas a partir de la línea 50.
36 - Vuelve a la línea 9.
200 - Si el movimiento indicado está permitido se cambia el valor de la localización, guardado en la variable "P".
201 - Se vuelve del GOSUB de la línea 34.
1440 - Se muestra una breve descripción de la localización en la que estamos en función del escenario en el que estamos.
9000 - Inicio del bucle que revisa si en la localización donde estamos hay algo a destacar.
9002 - Si hay algo especial se muestra en pantalla.
9004 - Final del bucle.
9006 - Final de la subrutina.


EL PROGRAMA
Listado.gif
Listado.gif (13.12 KiB) Visto 9349 veces


APUNTES FINALES
Gracias a Andrés R. Samudio descubrí a finales de los años 80 el apasionante mundo de las aventuras conversacionales.

En unos tiempos en los que era difícil conseguir una "sensación de inmersión" en los juegos, las aventuras conversacionales me lo permitieron, y jugué a muchas de ellas, especialmente en castellano.

Conservo una carpeta dedicada a las aventuras gráficas, con varios mapas trazados con un boli Bic cristal donde apuntaba las acciones a realizar.

Recuerdo también haber programado un sencillo juego que venía, si no recuerdo mal, en una "Revista ZX", que estaba preparado para un Spectrum pero que acabó en mi ZX-81 con 16KB.

Mi única experiencia de programación de este tipo de juegos fue uno muy sencillo realizado en mi CASIO PB-110, y otro programado en mi ZX-81 y que consistía en una incursión nocturna en el instituto donde estudiaba FP-Electrónica.

Gracias a la experiencia de mis proyectos 1K anteriores he podido programar un parser "casi" completo con el que espero finalizar mi primera aventura gráfica 2K.

El PAW-K de dancresp
Este sencillo programa contempla varias de las partes necesarias para realizar una aventura conversacional.

1. El mapa por el que nos podemos mover.
2. Descripción de los escenarios.
3. Descripción de los objetos y personajes que hay en ubicaciones concretas.
4. Control de la acción a realizar.

Por último hay una parte que ha quedado pendiente que nos debería permitir interactuar con los objetos y personajes, pero al llegar a los 615 bytes... he tocado el RAMTOP !!!

Este programa ahora mismo es como es, por motivos evidentes, pero con pequeños cambios nos permitiría mostrar unas descripciones más detalladas y ampliar el tipo de movimientos. Y con unos cambios "algo" más grandes podríamos interactuar con los objetos.

A continuación detallo los distintos pasos que he seguido para usar el PAW-K.

El mapa
Todos los datos del mapa están introducidos en el REM de la línea 1. En este ejemplo, como el mapa es de 9 posiciones verticales por 5 posiciones horizontales, nos da un total de 45 localizaciones distintas que ocupan 45 bytes. Así, es necesario que a continuación del REM haya un total de 45 caracteres cualquiera.

Como base he usado un mapa dibujado a mano en el año 1990 con las distintas localizaciones de la primera parte del juego. En un principio solo iba a tener 35 localizaciones, pero como me sobraban unos bytes he acabado respetando el mapa original, excepto un par de laberintos y el interior del pozo.

Mapa_AvOrig-1.jpg
Mapa_AvOrig-1.jpg (150.59 KiB) Visto 9349 veces


Codificando las localizaciones
Una vez tenemos claro el mapa, toca introducir los datos de cada localización en el programa.

Cada localización ocupa un único byte del que los 4 bits de la izquierda nos indican las cuatro posibles direcciones en las que nos podemos mover, y los 4 bits de la derecha nos indican una de las 16 descripciones de localización posibles.

CodeEscena.gif
CodeEscena.gif (50.92 KiB) Visto 9349 veces


Para el ejemplo anterior se ha utilizado la localización 10, que corresponde a la zona del volcán.

Se recomienda empezar por la localización 1 (superior izquierda) y se acaba en la localización 45 (inferior derecha), apuntando el código resultante en formato decimal.

Introduciendo las localizaciones
Cuando ya tenemos todas las localizaciones codificadas hay que introducirlas en memoria en la zona reservada en la línea 1.

Este proceso consta de 3 partes:
1. Creamos la línea REM con tantos caracteres como localizaciones tenga el mapa.
2. Ponemos en el programa las líneas del cargador desde la dirección 16514 hasta la misma dirección más el número de localizaciones menos uno.
3. Ejecutamos el programa y vamos introduciendo los valores de uno en uno. En caso de error se puede volver a ejecutar el cargador o modificar una casilla concreta mediante un POKE, por ejemplo, teniendo en cuenta que la primera localización está en la dirección 16514.

Al listar el programa veremos que el contenido de la línea 1 ha cambiado.

Map_Code.gif
Map_Code.gif (18.09 KiB) Visto 9349 veces


Nota:
El código desde las líneas 10 a la 19 son las encargadas de decodificar las localizaciones.

Ahora mismo está preparado para hacerlo tal como se explica en este artículo, pero con sencillas modificaciones se puede alterar su funcionamiento para contemplar más acciones, por ejemplo.

Los textos de las localizaciones
El programa está preparado para poder asignar 10 líneas de código BASIC para cada una de las localizaciones del juego. En este caso desde la línea 1000 hasta la 1440, con un RETURN al final de cada bloque de 10 líneas. Esto puede ser modificado cambiando el "10" de la línea 20 por otro valor.

En otros casos, nos puede interesar tener un código común para cada una de los 16 tipos de localización disponibles, añadiendo o quitando texto en función del valor de la variable "P". Para ello solo hay que cambiar la variable "P" de la línea 20 por la variable "I", que es la que contiene el tipo de localización ("bosque", "camino", "volcán", etc.), y ajustar la fórmula.

Localizaciones.gif
Localizaciones.gif (2.58 KiB) Visto 9349 veces


En el ejemplo que os presento, y por temas de memoria, he reducido los tipos de localización a 7, con textos de 6 letras, y rellenando con espacios los que son más cortos. De esta forma, con una única línea he podido hacer una breve descripción de la localización en la que estamos. Si cambia el tamaño de las descripciones se deberá ajustar la fórmula que hay al final de la línea.

Objetos y personajes del juego
El programa permite, a partir de la línea 9000, gestionar los distintos objetos o personajes que nos podemos encontrar en las distintas localizaciones.

Esta parte se ha quedado "a medias" por problemas de memoria, pero en la versión 2K estará resuelta de una forma sencilla.

De todas formas, para este ejemplo he incluido 4 líneas de código que nos permiten mostrar un nombre de hasta 5 letras de los 7 objetos que hay repartidos por las distintas localizaciones.

Objetos.gif
Objetos.gif (5.03 KiB) Visto 9349 veces


Mediante un simple bucle se compara una cadena que contiene caracteres que se convierten a un valor numérico mediante el CODE de la línea 9002, con el valor de la localización en que estamos, guardada en la variable "P". Si coincide muestra el texto correspondiente.

Para una versión más elaborada, esta parte se debería ampliar para controlar que objetos pueden interactuar entre si o con los personajes presentes, o incluso cambiarlos de lugar.

Moviéndonos por el mapa
El movimiento se introduce y analiza entre las líneas 30 y 34, mirando que el primer carácter del comando de entrada coincida con uno de los 4 caracteres que hay en la línea 32, y verificando que el movimiento es correcto comparándolo con el contenido de la variable A$.

Movimiento_2.gif
Movimiento_2.gif (2.13 KiB) Visto 9349 veces


Las distintas acciones se deberían entrar en la línea 32, y cuando coincide salta a un rango de 50 líneas que hay para cada una de las acciones, a partir de la línea 50. Así, el código BASIC de “Norte” debe estar en la línea 50, “Sur” en la 100, “E” en la 150, “O” en la 200, etc.

Movimiento.gif
Movimiento.gif (3.36 KiB) Visto 9349 veces


Para este ejemplo se controla todo con una única línea que se encarga de seleccionar el CODE correspondiente en función del número de la acción (N=1, S=2, E=3, O=4) y restarle 5 para obtener un número que cambie el valor de la variable “P” que contiene nuestra posición en el mapa. Se restan 5 porque es el ancho del mapa.

Esta parte debería ser ampliada para admitir más acciones o tipos de movimiento, pero para este ejemplo he usado una sencilla fórmula en la línea 200, que en función de la dirección suma ó resta 1 ó 5 a la variable "P", que contiene nuestra localización.


Y para terminar...
La verdad es que estoy satisfecho con el funcionamiento y rendimiento de este programa, y ha sido un nuevo reto que considero superado a pesar de que en si no es un programa funcional porque la verdad es que su fantástico KB no da para más.

De todas formas no deja de sorprenderme que un programa de 30 líneas, que podrían ser 26, y 615 de para tanta explicación.

Espero tener lista en breve una versión 100% jugable y fiel al original en un ZX-81 con solo 2KB, usando este programa.


Pues nada más, solo me queda desearos una muy feliz aventura !!!

Este programa se ha desarrollado íntegramente con el emulador “EightyOne” de Windows.


Os invito a probarlo.

Screen_3.gif
Screen_3.gif (2.32 KiB) Visto 9349 veces

Screen_2.gif
Screen_2.gif (1.93 KiB) Visto 9349 veces
Última edición por dancresp el 10 Dic 2015, 09:23, editado 2 veces en total.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Alan_Smithee
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 156
Registrado: 11 Mar 2007, 22:57
Gracias dadas: 3 veces
Gracias recibidas: 33 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Alan_Smithee » 04 Dic 2015, 20:34

¡Aah! Esto me recuerda que una vez quise compartir ésto en uno de tus posts y creo que no llegué a ahcerlo :)
Hace un tiempo, a Bieno Marti le dio por hacer un homenaje al fallecido autor de aventuras Paul Allen Parks "Dunric" pasando al español una obra suya realizada para el "Commodore Ultimax", una máquina de 2 Kbs de memoria. El resultado fue este "Castillo Belmar" :

Imagen Imagen

Como yo me dedicaba a hacer los ports para Speccy de las aventuras de Bieno para C64, se nos ocurrió intentar hacer lo propio con Belmar para ZX81... y... ¡no lo conseguí! :P

La idea era que la versión ZX81 hiciera lo mismo que la de Ultimax, que no era de por sí gran cosa, pero al menos incluía la manipulación básica de objetos (coger, dejar, examinar, usar, inventario) para tener un juego minimalista pero en el que hubiera que hacer algo más que moverse.

Descartada obviamente la opción de 1 Kb, lo intenté con 2... y ni de coña. La gestión del BASIC del Ultimax parecía mucho más óptima y además éste tiene su propio medio Kb para la memoria de video, con lo que estaba en clara ventaja. Al final sólo lo pude hacer funcionar en 4 Kbs de memoria y, dando el intento por fracasado, ni siquiera lo hice público.

Es posible que usando tus trucos pudiera llegar más lejos. En cualquier caso aprovecho que has sacado el tema para enlazar programa y fuente y dejar constancia de la prueba :D

Juego: https://www.dropbox.com/s/1v0oz5i4lgqlw ... X81.p?dl=0
Fuente: https://www.dropbox.com/s/a4j4m1v1z0eaf ... 1.bas?dl=0

--

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor dancresp » 07 Dic 2015, 23:51

Alan_Smithee escribió:Es posible que usando tus trucos pudiera llegar más lejos. En cualquier caso aprovecho que has sacado el tema para enlazar programa y fuente y dejar constancia de la prueba :D

He estado probando tu versión de ZX-81 y está bien, y revisando el código he visto cosas interesantes, y líneas muuuy largas.

Yo estoy convencido que usando el Potato PAW puedo hacer una réplica del juego "La aventura original" con 2KB, con textos de unas 3 líneas por localización, y otra de 16KB adaptando los gráficos a la resolución del ZX-81...

En breve lo veremos.
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Demiurgo
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 26 Oct 2014, 11:04
Sistema Favorito: MSX
primer_sistema: (Otro)
consola_favorita: Vectrex
Primera consola: Sega Game Gear
Gracias dadas: 81 veces
Gracias recibidas: 183 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Demiurgo » 09 Dic 2015, 21:15

Gran trabajo, pero me permito puntualizar que "La Aventura Original" no era de Aventuras Dinamic, sino de Aventuras AD, que no es lo mismo. [-X

Antes de que acabe el año (salvo desastre mayor) estará listo el libraco en el que se desvela ese misterio y otros muchos sobre la compañía de Samudio (léase en plan Iker). 8-)
Web del CAAD (Club de Aventuras AD): https://caad.club

Avatar de Usuario
Alan_Smithee
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 156
Registrado: 11 Mar 2007, 22:57
Gracias dadas: 3 veces
Gracias recibidas: 33 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Alan_Smithee » 09 Dic 2015, 22:19

Demiurgo escribió:Antes de que acabe el año


¡Eh! Pero eso es, como quien dice, "ya mismo" :D
(espero que ahora no salgas con el socorrido "es que no especifiqué qué año" :P )

--

Avatar de Usuario
Demiurgo
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 26 Oct 2014, 11:04
Sistema Favorito: MSX
primer_sistema: (Otro)
consola_favorita: Vectrex
Primera consola: Sega Game Gear
Gracias dadas: 81 veces
Gracias recibidas: 183 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Demiurgo » 09 Dic 2015, 22:38

Vaya, me temo que he sido descubierto... 8-[
Web del CAAD (Club de Aventuras AD): https://caad.club

dancresp
Amiga 1200
Amiga 1200
Mensajes: 1393
Registrado: 23 Dic 2008, 17:53
Sistema Favorito: MSX
primer_sistema: ZX81
Primera consola: Atari 2600
Gracias dadas: 3 veces
Gracias recibidas: 20 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor dancresp » 10 Dic 2015, 09:25

Demiurgo escribió:... me permito puntualizar que "La Aventura Original" no era de Aventuras Dinamic, sino de Aventuras AD, que no es lo mismo. [-X

Pues nada, que antes lo dices, antes lo corrijo.
Es lo que tiene escribir de memoria...

Gracias !!!
Buscando la IP de la W.O.P.R.

Avatar de Usuario
Lenko
Atari 1040 STf
Atari 1040 STf
Mensajes: 798
Registrado: 29 Mar 2005, 11:39
Gracias dadas: 445 veces
Gracias recibidas: 94 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Lenko » 10 Dic 2015, 18:19

No sé si me alucina más lo que dancresp hace con el ZX-81 o la cara dura de Demiurgo de venir aquí, soltarnos esa bomba y quedarse tan pancho :shock: :D ;)

En serio... a esa noticia le faltan más detalles... ¿Este año es ESTE año?

Avatar de Usuario
Demiurgo
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 26 Oct 2014, 11:04
Sistema Favorito: MSX
primer_sistema: (Otro)
consola_favorita: Vectrex
Primera consola: Sega Game Gear
Gracias dadas: 81 veces
Gracias recibidas: 183 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Demiurgo » 11 Dic 2015, 05:08

Bueno, lo cierto es que no debí haberlo comentado aquí. Tan solo quise hacer la pequeña puntualización AD-Aventuras AD, pero lo dejé caer... :?

Lo cierto es que este hilo debe dedicarse al gran trabajo realizado con el PAW-K, y sobre el tema del libro, ya reflotaré el antiguo hilo al respecto o crearé uno nuevo. Adelanto brevemente que está previsto acabarlo este año, y que Samudio ya ha visto una versión previa, y no le ha entrado un ictus, así que no debe ser tan malo. 8-)
Web del CAAD (Club de Aventuras AD): https://caad.club

Avatar de Usuario
Jaimen
Amiga 1200
Amiga 1200
Mensajes: 1656
Registrado: 17 Mar 2009, 13:39
Sistema Favorito: Amstrad CPC
primer_sistema: Amstrad CPC
Ubicación: Madrid
Gracias dadas: 156 veces
Gracias recibidas: 19 veces

Re: PAW-K (Potato Adventure Writer) para ZX-81

Mensajepor Jaimen » 11 Dic 2015, 08:17

Pues lo esperamos con fervor ... [-o<

Por cierto, admirable como siempre el trabajo de dancresp ... =D>

Saludos.
Mi galeria de fotos en 500px.com


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados