Creando una aventura conversacional con GAC

El foro dedicado a las aventuras conversacionales para Amstrad.
Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor MiguelSky » Sab 09 Jul , 2011 12:58 am

Bueno, los de INFOCOM leen desde disco, solucionando asi el tema memoria (más lento, claro) aunque este zxzvm se podría adaptar para 6128 según el código fuente (sólo habría que adaptar el interfaz del intérprete con el hardware) y da unas pautas para ello; e incluso aquí dan más ideas: http://www.csd.uwo.ca/Infocom/Articles/small.html

Por otro lado, el catálogo de juegos en castellano está bien, no se si serán todos compatibles: http://wiki.caad.es/Categor%C3%ADa:Aven ... %A1quina-Z

Avatar de Usuario
syx
Master of The Forum
Master of The Forum
Mensajes: 1353
Registrado: Mié 02 Sep , 2009 9:55 am

Re: Creando una aventura conversacional con GAC

Mensajepor syx » Sab 09 Jul , 2011 11:00 am

Ya ya, si portar el zxzvm al 6128 no es muy complicado, a lo sumo un par de horas (añadir la paginación y usar llamadas al firmware para impresión, lectura y el manejo de disco... y eso si no funciona directamente en CPM+ la versión de PCW, que lo mismo no hay ni que despeinarse :P), lo que entonces me echó para atrás fue lo de la velocidad... de todas formas intentaré echarle un vistazo durante la semana que viene, aunque no puedo prometer nada, que comienza la feria y no hay nada mejor para desestresarse :mrgreen:

Otro hilo muy interesante acerca de las optimizaciones a los juegos para el caso del spectrum, lo puedes encontrar en este hilo de Utopian en el CAAD, además, échale un vistazo a este artículo suyo del Magazine ZX, que aparte de un análisis del zxzvm incluye algunos juegos y podrás ver como quedaría.

... Pero bueno todo esto era una nota, así que sigamos disfrutando de tu "diario de creación de una aventura en GAC" :D

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor MiguelSky » Sab 09 Jul , 2011 8:23 pm

¿A qué me toca desglosar el hilo otra vez (para "sorpresa" de Litos) :D?

Avatar de Usuario
syx
Master of The Forum
Master of The Forum
Mensajes: 1353
Registrado: Mié 02 Sep , 2009 9:55 am

Re: Creando una aventura conversacional con GAC

Mensajepor syx » Sab 09 Jul , 2011 9:52 pm

Jajajaja, de verdad que no lo hago a posta... pero es que me ha reñio tantas veces ya, que me voy a tener que exiliar xDDD

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor MiguelSky » Dom 31 Jul , 2011 3:43 am

Bueno, tras unos días de asueto volvemos a la carga. Hoy vamos a empezar con las condiciones, que son instrucciones que nos van a permitir evaluar situaciones y actuar en consecuencia. El formato básico es el siguiente:

IF ( condición/es ) acción/es END

(nótense los espacios entre los paréntesis), por ejemplo:

IF ( VERB 12 AND NOUN 13 ) MESS 201 WAIT END

significa "si en la orden tecleada el VERBO es el nùmero 12 y el NOMBRE el 13, muestra el MENSAJE 201 y vuelve a ESPERAR una nueva orden".

Los números de Verbo, Nombre, Mensaje, etc deben ir también entre paréntesis. Aquí no los iré poniendo para más claridad, pero el compilador los añadirá por nosotros.

El GAC establece tres tipos de condiciones: de alta prioridad (que tendrán lugar al entrar en una ubicación antes de poder el jugador teclear nada), locales (que se evaluarán tras introducir el jugador su comando y afectan sólo a esa ubicación) y baja prioridad (también se evaluan tras introducir el jugador su orden, pero no están sujetas a esa ubiación concreta). Para nuestra aventura tendremos que crear condiciones locales con las situaciones de cada una de las ubicaciones, por ejemplo y siguiendo nuestro guión, vender el amuleto en la pantalla 4 o beber vino en la pantalla 2. Son acciones personalizadas para esas pantallas y se introducen con la opción Condition (LOCAL), que nos pedirá el número de ubicación y el número de condición (si le damos un número de condición que ya hayamos introducido, nos la mostrará permitiendo su edición). Como no tenemos los textos del juego vamos a ir metiendo las acciones necesarias para la aventura. Cuando ya tengamos los textos meteremos otras que puedan surgir del texto, como por ejemplo examinar objetos que se mencionen en la descripción de la pantalla y similares.

De momento he añadido algunas líneas más a Mensajes:
Mensajes:

10
Entregas el amuleto al vendedor entregandote este a cambio 50 monedas.
11
Pagas al vendedor por un vaso de vino que apuras rapidamente. ¡Que rico!
12
No me viene mal otro vasito. Voy entrando en calor.
13
Cuando apuro el vaso el vendedor me entrega una botella: "Parece usted buen catador. Llevese este licor, seguro que sabra apreciarlo".
14
El vendedor dice: "Ya lleva usted suficiente en el cuerpo".
15
El vendedor dice: "Sin dinero no hay nada".
16
Pagas al tendero y te entrega el melon.
17
Pagas al tendero y te entrega el espejo.
18
No tienes suficiente dinero.
19
Ya tienes el melon.
20
El mago se va y no vuelve...
Y también una lista de Nouns, nombres de objetos, personas, etc que reconocerá el parser. Siguiendo el consejo de CECPC he dejado los primeros de la lista (1 al 19) para los objetos que se pueden coger. Estos tendremos que marcarlos también como objetos en la opción Objects del menú, donde se indica su número, descripción (el nombre que nos mostrará al teclear INVENTARIO), ubicación inicial y peso:
Nombres:

1 Amuleto
2 Licor
3 Melon
4 Espejo
5 Varita
6 Piedra
7 Junco
8 Anillo
9 Pocion
9 Pociones
10 Trampa
11 Raton
12 Sabana
13 Paja
14 Pluma
15 Bote
16 Queso
17 Llaves
18 Remedio
19 Monedas

20 Huecos
21 Soldado
22 Celda
23 Palanca
24 Grilletes
25 Mago
26 Gato
27 Jaula
28 Cadaver
29 Paredes
30 Pared
31 Agujero
32 Chimenea
33 Cama
34 Colchon
35 Calavera
36 Boca
37 Ventana
38 Antorcha
39 Muro
40 Matorrales
40 Raices
41 Socavon
42 Reja
42 Barrotes
43 Plantas
43 Juncos
44 Charco
45 Vino
En el manual de GAC tenemos el listado de las diferentes condiciones y las acciones a realizar. Lo primero que haremos será establecer una condición de alta prioridad, opción H que nos dirá que el mago se pira y autocoge el amuleto:

IF ( HERE 1 AND AT 1 ) MESS 20 GET 1 WAIT END

"Si está AQUÍ el objeto 1 (amuleto) y estamos EN la ubicación 1, mostrar el MENSAJE 20, COGER el objeto 1 y mostrar el prompt para ESPERAR la siguiente orden".

No parece difícil, ¿no? :)

Vamos a ver cómo haríamos las condiciones de la pantalla 4. Recordemos esta ubicación:
Un comprador de artículos mágicos. Le venderemos el amuleto (que, al examinarlo, sabemos que necesitaremos para volver).
4

IF ( CARR 1 AND VERB 10 AND NOUN 1 ) 1 TO 0 19 TO 4 GET 19 MESS 10 WAIT END

"Si LLEVAMOS el objeto 1 (amuleto) y el VERBO es 10 (dar) y el NOMBRE 1 (amuleto), mover 1 (amuleto) A la ubicación 0 (una sala inaccesible que quitará el amuleto del nuestro alcance), mover 19 (monedas) de la ubicación 0 (donde comienza) A la 4, la que estamos, COGER el objeto 19 (monedas) mostrar el MENSAJE 10 y mostrar el prompt para ESPERAR la siguiente orden".

Bueno, sigue sin ser complicado, ¿no? :) Vamos a afinar un poco más:
Hay 128 contadores, numerados de 0 a 127. Son con frecuencia utilizados para almacenar el número de movimientos desde un suceso particular, (p.e. movimientos en la oscuridad). El contador 0 mantiene la puntuación y los contadores 126 y 127 llevan los turnos contados desde el principio del juego.
Para hacer el manejo de la cantidad de monedas usaremos el Contador número 1, que arrancará con 50 monedas (lo que nos dan por el medallón) y le iremos descontando con cada compra.
Añadamos 50 CSET 1 a la línea anterior en la parte de acción, que "da el valor 50 al Contador 1" (y así probamos cómo funciona la edición de condiciones ;)
El vaso de vino valdrá 10 monedas, el melón 12 y el espejo 35. La varita de la pantalla 4 no se podrá comprar.
Con ese dinero nos vamos al vendedor de vino y le pedimos, un vaso tras otro. Después del tercer vaso, nos regalará una botella de licor (mucho más fuerte) que guardaremos.
Para llevar las cuentas de las veces que tomamos el vino usaremos el Contador 2. Cada vaso de vino valdrá 10 monedas.

2

IF ( CTR 2 = 0 AND CARR 19 AND VERB 84 AND NOUN 45 ) INCR 2 CTR 1 - 10 CSET 1 MESS 11 WAIT END

"Si LLEVAMOS el objeto 19 (monedas) y el CONTADOR 2 es 0 y el VERBO es 84 (beber) y el NOMBRE 45 (vino), INCREMENTAR el contador 2, RESTAR 10 al contador 1 (monedas) mostrar el MENSAJE 11 y ESPERAR nuevo comando".

Es importante saber que el parser analizará las condiciones de izquierda a derecha y además es recomendable poner las comparaciones en primer lugar (como bien dice el manual): yo no lo he estado haciendo así y casi me vuelvo loco con las respuestas del juego en las pruebas !!

IF ( CTR 2 = 1 AND CARR 19 AND VERB 84 AND NOUN 45 ) INCR 2 CTR 1 - 10 CSET 1 MESS 12 WAIT END

IF ( CTR 2 = 2 AND CARR 19 AND VERB 84 AND NOUN 45 ) INCR 2 CTR 1 - 10 CSET 1 2 TO 2 GET 2 MESS 13 WAIT END

Crearemos también una condición para cuando ya tengamos el licor:

IF ( CTR 2 = 3 AND CARR 19 AND VERB 84 AND NOUN 45 ) MESS 14 WAIT END

Y otra por si intentamos beber vino antes de conseguir la pasta:

IF ( ( NOT CARR 19 ) AND VERB 84 AND NOUN 45 ) MESS 15 WAIT END

Ahora haremos la compra del melón podrido en la pantalla 3:

3

IF ( CTR 1 > 12 AND CARR 19 AND VERB 16 AND NOUN 3 ) CTR 1 - 12 CSET 1 3 TO 3 GET 3 MESS 16 WAIT END

Aquí comprobamos primero que tengamos dinero suficiente (CTR 1 > 12 ). La siguiente condición es por si queremos comprar el melón cuando ya lo tenemos:

IF ( CARR 3 AND VERB 16 AND NOUN 3 ) MESS 19 WAIT END

Y estas dos por si queremos comprar sin dinero o sin el dinero suficiente. Como en el puesto el resto de frutas serán más caras que los 50 dirá que no tenemos sufiente para comprarlos :)

IF ( ( NOT CARR 19 ) AND VERB 16 ) MESS 16 WAIT END

IF ( CARR 19 AND VERB 16 ) MESS 18 WAIT END

Añadamos también la compra del espejo y las de no tienes dinero a la ubicación 4:

4

IF ( CTR 1 > 35 AND CARR 19 AND VERB 16 AND NOUN 4 ) CTR 1 - 35 CSET 1 4 TO 4 GET 4 MESS 17 WAIT END

IF ( ( NOT CARR 19 ) AND VERB 16 ) MESS 19 WAIT END

IF ( CARR 19 AND VERB 16 ) MESS 18 WAIT END

Y para rematar esta entrega podemos añadir la opción comprar donde bebíamos el vino, añadiendo un paréntesis en la parte de verbo y quedando ( VERB 84 OR VERB 16 ), pudiendo entonces escribir o COMPRAR VINO o BEBER VINO, y la de VENDER (creando un nuevo verbo) para usarla en vez de DAR AMULETO en la ubicación 4.

Avatar de Usuario
syx
Master of The Forum
Master of The Forum
Mensajes: 1353
Registrado: Mié 02 Sep , 2009 9:55 am

Re: Creando una aventura conversacional con GAC

Mensajepor syx » Dom 31 Jul , 2011 3:21 pm

En hilos como este se echa de menos el del botón del Like del CPCWiki ;)

Estupendo trabajo Miguel =D>

Toni
Me voy lanzando
Me voy lanzando
Mensajes: 51
Registrado: Sab 04 Sep , 2010 6:06 pm

Re: Creando una aventura conversacional con GAC

Mensajepor Toni » Mié 04 Sep , 2013 3:09 pm

Hola!!! :D

Alguien puede volver a subir ese archivo?
Después de descargarlo,al abrirlo me pone un error como si el archivo estuviera dañado.

Gracias!

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor MiguelSky » Mié 04 Sep , 2013 4:46 pm

Sí parece que han corrompido... Este verano no he tenido tiempo de ponerme con esto, el verano que viene seguiremos con el tuto :D

He actualizado los archivos en el primer mensaje del hilo y he incluido un dsk con lo que llevamos de aventura.

Avatar de Usuario
Megacorp_fan
Lechoncillo
Lechoncillo
Mensajes: 10
Registrado: Jue 15 Dic , 2022 1:10 pm

Re: Creando una aventura conversacional con GAC

Mensajepor Megacorp_fan » Mar 20 Dic , 2022 8:19 pm

Subo este hilo porque el usuario CECPC (crack) me ha enviado una versión editable de las dos partes del Megacorp en formato ADV...

...y resulta que el GAC se me ha puesto tonto al editar los textos. Uno de los problemas es una incomodidad (gorda), pero el otro parece catastrófico a simple vista:

PROBLEMA 1) Cuando eliges editar algo en el menú, pulsas "O" para objetos o "M" para mensajes, etc., luego introduces el número de objeto/mensaje, etc. (empezando por el 0), y si te pide un número entre 1 y 9999, metes "1". Entonces ves ese objeto/mensaje/verbo... Hasta ahí bien. Ahora bien, ¿hay alguna forma "humana" de editarlo que no implique escribir el símbolo de flecha derecha o flecha izquierda cada vez que pulsas estas teclas para moverte por el texto? (Cada vez que cambio de carácter al de la derecha, se me escribe una flecha...).
EDIT: Vale, parece que esto solo es un problema en el WinAPE... ¡una cosa menos!

PROBLEMA 2) Cuando editas los textos desde el GAC, aunque el texto antiguo y el nuevo tengan los mismos caracteres o incluso aunque el nuevo texto tenga varios caracteres menos, el GAC te dice que ha bajado en 200-300 kb la memoria disponible. ¿Significa esto que es imposible editar un juego en ADV? ¿Cómo se podría liberar esa memoria?

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor MiguelSky » Mar 20 Dic , 2022 11:02 pm

La manera de crear la aventura que cito en el mensaje adjunto puede serte de ayuda. Creo que fue el propio CECPC quien contó que el GAC tenía pérdidas de memoria si había mucha edición. Creo que lo mejor es que metas la versión corregida directamente en una aventura en blanco.
Aquí tenemos acceso a los distintos parámetros de nuestra aventura. Para ir familiarizándonos, introduciremos los verbos que se usaron en la primera parte y luego iremos añadiendo o quitando según nos haga falta. La lista la he conseguido con la opción Verbs del menú de impresora P. En vez de picarlos a mano, con un emu que soporte entrada de texto (WinaPE, F5 o JavaCPC, F11) los pego y soluciono esto en un periquete :)

Avatar de Usuario
Megacorp_fan
Lechoncillo
Lechoncillo
Mensajes: 10
Registrado: Jue 15 Dic , 2022 1:10 pm

Re: Creando una aventura conversacional con GAC

Mensajepor Megacorp_fan » Mié 21 Dic , 2022 11:01 am

¡Gracias, tío!

Pues nada, me voy mentalizando de "recrear" desde cero el Megacorp... ¡Pero por lo menos ahora tengo el código! (Y no tengo que hacer lo que han hecho miles de veces los programadores de videojuegos: mirar un juego en funcionamiento para hacer una conversión).

Estoy decidido a crear ambas partes del juego desde cero en inglés sin dibujos, ese proyecto no me lo quita nadie de la cabeza.

Ahora bien... ¿alguna sugerencia para añadir los gráficos después en base a los que ya están creados?

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor MiguelSky » Mié 21 Dic , 2022 11:11 pm

Pues en este mensaje contaba yo algo sobre ello.

No recuerdo si el unGAC extraía los gráficos de la versión CPC. Si lo hace, hay mucho ganado; sino, habría que hacer la conversión. Tendría que buscar mi carpeta de trabajo de entonces a ver si hay algo de info recuperable porque aquel disco duro se corrompió.

Avatar de Usuario
Megacorp_fan
Lechoncillo
Lechoncillo
Mensajes: 10
Registrado: Jue 15 Dic , 2022 1:10 pm

Re: Creando una aventura conversacional con GAC

Mensajepor Megacorp_fan » Vie 23 Dic , 2022 10:20 am

Vale, ya estoy traduciendo el Megacorp al inglés. En unos días (o semanas si me da por traducir el manual con Photoshop) abriré hilo en CPCWiki con el proyecto terminado.

Este es el proceso para traducir cualquier juego programado con GAC:

1) LO MÁS DIFÍCIL: PASAR UN JUEGO COMERCIAL DE .BIN A .ADV
Esto me lo ha hecho el usuario CECPC, al cual he contactado por correo gracias a su perfil en este foro. El proceso sería este:
El cargador está desplazado en memoria. Si miras el BAS, y sigues el call, verás que el primer código ensamblador es el típico LD HL,xxx LD DE,xxx LD BC,xxx LDIR CALL
Eso es porque usa un cargador BASIC, y las direcciones del juego inferiores colisionan con el cargador.
Por tanto el final del juego incluye un pequeño código de ensamblador para relocalizarse antes de ejecutarse.
Lo cargué con WinAPE, y tras relocalizarse le puse un punto de ruptura. Luego usé el mecanismo de copiar la memoria del WinAPE (el fragmento desde 4000h hasta donde termina el LDIR) y, usando el CDTMASTER, ponerlo como contenido de un archivo y pasarlo a CDT
2) PASO OPCIONAL (O NECESARIO SI ELIGES LA OPCIÓN 2 EN EL PASO 3): VOLCAR LOS MENSAJES DEL JUEGO PARA TRADUCIRLOS
Para esto hay varios métodos: yo usé el Grackle para extraerlo, pero tuve que extraer los BIN con el CPCDiskXP (el Grackle no me funcionaba con snapshots SNA) y usar los comandos "grackle megacor2.bin dump" y "grackle megacor3.bin dump" (megacor1.bin es la pantalla de carga y hay que traducir cada parte por separado), lo cual me generó un montón de texto en la interfaz de línea de comandos de Windows 10 (a la que se accede con "cmd"). Después, tuve que sustituir algunos caracteres cambiados que extrañamente aparecían al final de algunas palabras (símbolos ASCII en lugar de letras o números). Otro procedimiento puede que más fácil sería ir directamente al paso 3 y ya con la aventura importada en el GAC, o bien imprimir los mensajes con la opción de "PRINTER" del GAC o bien ejecutar dos emuladores (uno con los mensajes sin editar y otro con los mensajes borrados para meter los nuevos y no agotar la memoria, ver paso 3).

3) LO FÁCIL: EDITAR EL ADV
Una vez tienes el ADV editable en el GAC, todo es sencillo y el único problema es la poca memoria, pero no tiene fallos de memoria: lo que pasa es que cuantas más palabras diferentes metas, menos memoria tienes. Y al cambiar de idioma, tienes los "un", "una" en español y los "a" y "an" en inglés, es decir, cada vez te acercas más a duplicar las palabras.
Para esto hay dos soluciones: 1) la más sencilla, que es borrar primero todos los mensajes del juego antes de volver a escribirlos para liberar muchísima memoria y 2) copiar el GAC a una cinta y ejecutarlo con el CPCE en modo 464 y con la opción "ROM_EXTRAS_DISABLE=1" desactivada en el INI, con lo cual tienes más del triple de memoria al no cargar el controlador de disco.

Avatar de Usuario
Megacorp_fan
Lechoncillo
Lechoncillo
Mensajes: 10
Registrado: Jue 15 Dic , 2022 1:10 pm

Re: Creando una aventura conversacional con GAC

Mensajepor Megacorp_fan » Sab 24 Dic , 2022 4:19 pm

Malas noticias: Sí es cierto que hay "fugas de memoria" al editar una aventura existente. No es posible traducir el Megacorp porque falta mucha memoria. Pensaba que arrancando en modo "puro 464" sin controlador de disco en el CPCE y eliminando todo el texto en español se ganaría la suficiente, pero parece que no es así.

Es más, ahora mismo no podemos descartar que programar la aventura desde cero (incluso redibujando los gráficos artesanalmente) solucione el problema porque es posible que Dinamic utilizara una versión diferente del GAC o tuviera acceso a más memoria.

Avatar de Usuario
litos.net
Loading, Please Wait...
Loading, Please Wait...
Mensajes: 5959
Registrado: Mié 05 Oct , 2005 7:57 pm
Ubicación: Madrid
Contactar:

Re: Creando una aventura conversacional con GAC

Mensajepor litos.net » Dom 25 Dic , 2022 1:16 am

Os recuerdo que Nicolás Lecuona utilizó una versión modificada del GAC para hacer Megacorp. :roll:
Si es CPC es en Color


¿Quién está conectado?

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


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic