Fecha: 07/10/2022
Este
estudio lo comencé porque me gusta hacer utilidades y juegos para Amiga y según
entiendo GRAC tiene algunos problemas. veamos que ocurre.
Ya después
de 2 días de revisar cómo funciona, llego a la conclusión de que no es tan fácil
para el usuario, los comandos no están en el orden en que se deben usar para
una nueva aventura y está muy obsecionado con los path o rutas de los archivos, que
hasta cierto modo son necesarios pero no usa algún tipo de estructura de directorios
para tal o cual cosa, si no que cada archivo debe estar asociado con un
PATH/Ruta el cual debe estar creado a priori en un índice común, me imagino que por
eficiencia, pero complica demasiado la funcionalidad.
El método
de trabajo implica muchas selecciones para hacer lo que se desea, al final no me
parece practico.
Buscando
un poco en sus archivos veo que trae las fuentes, muy de agradecer, estudiándolo, es bastante grande, y algo complicado, aunque tiene buenas zonas y mucho mérito,
veo que se puede mejorar.
Comienzo el estudio del sistema y veo que los archivos de un juego se dividen en 4 archivos principales comienzando por el nombre de juego terminado en ".Grac2". Ejemplo "Juego.Grac2"
- Grac.cont que supongo que significa continuación, o puede ser control ya que en él se guardan los comandos, script y controles del juego de cara al usuario
- Grac.inv que guarda el inventario
- GRAC.closeup que guarda todo lo relacionado con acercamientos y escenas especiales dentro de la escena principal.
No se le ocurra colocar 2 juegos en el mismo directorio ya que usarán los mismos archivos (GRAC.cont, GRAC.inv y GRAC.closeup), pienso que esto es una mala decisión del programador. Tambien me imagino que estas secciones estan cortadas asi para ser compatibles con versiones que no tenian algunas de estas caracteristicas, pero no conozco su historia completa.
Para ejecutar el juego se usa el RunTime y el nombre del juego "Nombre.Grac2" pero sin extensión, o sea que para ejecutarlo se debe renombrar.
El juego
en si se puede editar colocando el nombre del juego con la extensión ".GRAC2" y
usando el editor.
Los archivos
del juego están bien empaquetados para ahorrar bytes, pero al expandirlos veo
que realmente los métodos internos no ayudan mucho a la eficiencia, me explico,
casi todo esta dimensionado a 100, se use o no, por lo tanto, hay capacidad para
100 imágenes, 100 rooms, 100 de todo, aunque hay 1000 textos. El problema que
veo es que guarda 100 de todo, aunque no existan tantos, no hay nada relativo o
definible y asume este maximo como cierto.
Como menú
utiliza los Diálogos del AMOS, que, aunque algo complicados al final son
eficientes y vistosos.
Analizando
el editor veo que en el procedure Definitions hay toneladas de variables,
creo que podía haber usado DATA para algunos ya que son dimensionadas u otro metodo.
Las
aventuras en GRAC2 se componen por escenas (ROOMS) o salas, cada una con una
imagen de fondo que puede ser hasta de 1008 pixeles de ancho (debería ser max 1024
pero un error de Amos lo impide). Con respecto a la altura pueden ser en PAL
hasta 256 y en NTSC hasta 225, pero siempre hay que dejar un espacio para
comandos y mensajes de unos 40 o 60 pixeles de altura, por lo tanto, las imágenes pueden
ser de 191 de alto más o menos.
El menu principal consta de una sección a la derecha:
NEW: borrará el juego para comenzar desde cero.
LOAD GAME: Si ya tiene un proyecto cargelo con "Load game".
SAVE GAME: no olvide grabar su juego antes de salir, use "Save game".
TEXT COLOR: cambia las letras del menu entre blanco y negro.
ABOUT: Datos del programa Grac.
QUIT: Salir del programa.
Inicialmente deberá empezar colocando al menos una ruta para que el sistema encuentre sus archivos.
PATHS
La carga de todos los archivos fallará si no tenemos creadas las RUTAS/PATH o directorios donde estarán los archivos (No crea los directorios, y solo se pueden editar desde el menu principal. (pienso que el sistema debería crearlas automáticamente al ir cargando datos, pero bueno).
PICTURES
Para empezar obtendremos las imágenes de los fondos de las escenas (ROOMS) a través del botón de menú Pictures que permite cargar unas 100 imágenes como maximo, para esto buscaremos la imagen y al terminar de seleccionarla colocaremos el directorio (RUTA/PATH) donde se grabará la imagen comprimida, es necesario colocar la barra de dividir normal "/" (Slash) al terminar el path, para que lo use correctamente, este directorio servirá para colocar los archivos de imagen comprimidos llamados "Grac #.picture" comenzando desde el cero"0" para la primera posición, aunque dentro de Grac sería la imagen "1".
Si hay imagenes ya creadas nos
dejará elegir una o crear otra nueva, este archivo debe ser una imagen
IFF/LBM comprimida por RLE o no, con la extensión IFF, aunque muestra todos los
archivos solo permitirá IFFs del tamaño y colores adecuados (colores desde
2,4,8,16,32,64), aunque no he probado todo esto.
Una vez cargada la imagen (Ruta y nombre del archivo real), se podrá cambiar su nombre a uno mas corto para usarlo mas comodamente (Esto es sumamente confuso para un principiante). La siguiente sección, exxplica como
Edit Picture
El sub menú de Pictures consta de los siguientes botones:
- EXIT: Salir al menú principal.
- Save: Guardar la imagen en formato comprimido como "Grac #.picture" en el Path elegido.
- Name: Cambia el nombre de la imagen (uso interno, puede ser diferente al archivo de imagen IFF)
- Path: Cambiar la ruta donde está o estará guardado el archivo "Grac #.picture", que es el archivo que contendrá la imagen comprimida.
- Load: Puede cargar otra imagen, eso ya no cambia el nombre de la imagen asi que mucho cuidado.
- Delete: Borrar la imagen "GRAC #.picture", mejor no usarlo. Falla mas que una escopeta de feria. jaja. En realidad borra la imagen comprimida, pero como el menú de imagenes mantiene el nombre de la imagen (e internamente su ruta completa), parece como si no se hubiera borrado. Queda la imagen sin el comprimido. algo sumamente extraño para el novato. Esta imagen del menú ya no se podra borrar, si no que la tendrá que suplantar. Obviamente al entrar de nuevo el sistema avisa que esa imagen no tiene comprimido. Pero no lo explica bien. Dira no puedo cargar la imagen cuando en realidad lo que no puede cargar es el comprmido.
- Size: Permite recortar la imagen en la parte baja, ya que Delux Paint siempre agranda la imagen hasta un minimo de 200 pixeles de altura. para recortarla, elija esta opcion y coloque el mouse y presione clic a la altura que desee recortar la imagen (desde ese sitio hacia abajo sera eliminado). Esto es muy poco intuitivo para el novato, cuidado. Conceptos dificiles para principiantes.
TODAS LAS
RUTINAS DE BORRAR FALLAN, si borra una imagen, al salir dirá que no está grabada, puede salir
sin grabar, pero la imagen quedará grabada (al menos el nombre en el menú) y al entrar de nuevo en ella dará error
aunque la podrá ver, si trata de grabarla de nuevo el sistema se caerá o dará
error, perdiendo la información si no tiene grabado el juego.
Una vez
cargadas las imágenes podemos pasar a Rooms.
ROOMS (Escenas/Cuartos/Habitaciones/Salas/Rooms)
los datos de las escenas/rooms estarán almacenados en GRAC #.room, donde # es un número de secuencia desde 0 a 99 que coloca el sistema y por el cual nos referiremos a estas escenas en los scripts. Con la salvedad de que en la programación comienzan en 1. (por chequear).
Este sub menú consta de los siguientes botones:
- EXIT: Salir al menú principal.
- Save: Guardar lo realizado en la escena en 'GRAC #.room', # comienza en 0 para las 1ra escena.
- Name: Cambia el nombre de la escena.
- Path: Cambiar la ruta donde está o estará guardado el archivo "Grac #.Room", que es el archivo que contendrá esta escena.
- Objects: en esta opción indicamos el archivo de objetos con el que trabajaremos en la escena.
- Delete: borrar la escena, mejor no usarlo. Al igual que en imagenes (Pictures), borra el paquete comprimido pero no desaparece del menú.
- Walk: en esta opción se introducen las zonas por donde podrán caminar los personajes.
- Startup: colocaremos acá el script que se ejecutará al comenzar a visualizar la escena.
- Background: acá indicaremos los objetos de fondo, son zonas inamovibles con las que se puede interactuar.
- Foreground: aquí colocamos los objetos con los que se puede interactuar y que podemos pasar por detrás, moverlos o quitarlos
- Point: por medio de este botón colocaremos los puntos de destino a usar.
- Picture: podemos elegir aquí la imagen de fondo (previamente comprimida).
ROOMS/WALK
En esta opcion marcaremos las zonas por donde caminaran los personajes, para esto pintaremos rectanculos en las areas del suelo por donde queremos que puedan pasar los personajes, podemos rodear objetos.
Este sub menú consta de los siguientes botones:
- Exit: Salir al menú anterior
- Add: Agregar otra zona para caminar
- Join: Une las zonas para poder caminar por varias
- Script: Es la cadena de comandos que se ejecutarán al entrar en esta zona. Para elegir la zona solo toquela con el mouse, luego cree el script con lo que desea que haga el personaje al llegar al sitio.
- Flag: Valor del flag de la zona (valores enteros positivos o negativos) normalmente 0, puede usarse para lo que se necesite. como contar cuantas veces se a pisado la zona.
- Delete: Borra la zona
- Height: Normalmente la altura decide si un personaje pasa por delante o detras de otro personaje ou objeto, pero mediante esta propiedad esto puede cambiar. Altura de la zona, sirve para hacer puentes, escaleras o zonas elevadas, primero seleccione todas las zonas y presione el botón izquierdo del mouse, luego apunte a la parte mas baja de las zonas seleccionadas y arrastre hacia arriba. Esto también afecta la escala del personaje que esta en la zona.
Permite crear el script que se ejecutará al entrar en la escena
ROOMS/BACKGROUND
En este submenu agregará o modificará objetos de fondo, esto n o se moveran y no podran ser cogidos (desaparecer), pero pueden investigarse o ejecutar en ellos algunas acciones de los personajes.
Este sub menú consta de los siguientes botones:
- Exit: Salir al menú anterior
- Add: Agregar otro objeto de fondo, esto se hace marcando con un cuadrado el fondo donde está o estará el objeto.
- Name: Nombre del objeto (opcional)
- Actions: Acciones que se pueden usar en el objeto. se elegirá el objeto y la acción para aplicar cosas como (usar boligrafo) mas un script para ejecurar algunas acciones.
- Flag: Valor del flag del objeto (valores enteros positivos o negativos) normalmente 0, puede usarse para lo que se necesite. como contar cuantas veces se ha tocado o visto el objeto.
- Delete: Borra el objeto
- Position: Coloca una segunda imagen en posición.
- Base: Coloca donde estará la base del objeto
- String: Texto que describe el objeto. pedirá elegir el objeto y el string (cadena de caracteres) o descripción
- Zone: Mueve una zona. Primero toque la zona y luego cree la nueva zona.
ROOMS/FOREGROUND
En este
submenu agregará o modificará objetos frontales, en realidad los personajes
pueden pasar por delante o detrás de ellos y se pueden remover de la escena o
moverlos, en este sub menú podrá hacer lo siguiente:
Es igual a objetos en Background excepto que no tiene Zone y tiene 3 opciones más:
- Exit: Salir al menú anterior
- Add: Agregar otro objeto de fondo, esto se hace marcando con un cuadrado el fondo donde está o estará el objeto.
- Name: Nombre del objeto (opcional)
- Actions: Acciones que se pueden usar en el objeto. (creelas en Actions)
- Flag: Valor del flag del objeto (valores enteros positivos o negativos) normalmente 0, puede usarse para lo que se necesite. como contar cuantas veces se ha tocado o visto el objeto.
- Delete: Borra el objeto.
- Position: Coloca una segunda imagen en posición.
- Base: Coloca donde estará la base del objeto.
- String: Texto que describe el objeto.
- ----Falta Zone---------------------------
- Image: Seleccione una imagen del grupo o banco previamente seleccionado en la escena, si ya tiene objetos podra pasar de uno a otro con estos comandos:
- Hide: Oculta los objetos
- Take:
ROOMS/POINTS
En esta entrada marcaremos los puntos de destino que se usaran para diferentes acciones.Este sub menú consta de los siguientes botones:
- Exit: Salir al menú anterior
- Add: Agregar otro punto al fondo, esto se hace marcando el punto con el mouse.
- Identify: Indica la numeración de un punto.
- Delete: Borra el punto.
OBJECTS
Esta entrada se refiere a los grupos de objetos o bancos de objetos, son archivos .Abk de Amos con otra extensión.
Es programa hace algo parecido al editor de AMOS pero algo peor, es dificil marcar correctamente y para el Hot Spot (es el punto que se isa para colocar el objeto en determinadas coordenadas), es solo poner un punto pero no hay posivilisad de corregir (sino haciendolo de nuevo) y no hay muchas ayudas como lupa. Tambien las flechas dejan mucho que desear ya que una pulsación mueve los objetos muchos pixeles.
Cada banco de objetos puede estar asociado a 5 personajes. En este sub menu hay las siguientes opciones:
- Exit: Salir al menú anterior
- Save: Guardar lo realizado en la en el banco
- Name: Nombre del banco
- Path: Cambiar la ruta donde esta guardado el archivo "GRAC #.object", que es el archivo que contendrá esta el banco de objetos, El símbolo # será el número de banco, que automáticamente lo lleva el programa.
- Character: Elige los 5 personajes asociados al banco de objetos, primero elija un lugar del 1-5 y luego elija el personaje, también los puede modificar.
- Delete: Borra el banco de objetos.
- El texto "mouse" y "mouse wait" son solo para la opción de cambiar el apuntador del mouse durante su juego y para esto necesitará cortar las imagenes desde un IFF de 4 colores, estas imagenes no podrán ser mayores a 16 pixeles de alcho y usarán los colores 16-19, siendo el 16 transparente para el mouse.
- Load pic: Cargar una imagen
- Grab: Recortar un objeto (2D) desde la imagen recien adquirida. (si no la hemos cargado previamente, no nos dejara hacerlo.)
- Flechas: estas posicionan el objeto (pero aun no se si influye en algo)
- Hot Spot: Nos permite colocar el punto de agarre de la figura. Generalmente la esquina inferior izquieda (en amos es la superior), pero seguramente necesitaremos la parte central de la imagen (no del cuadrado) abajo, para que pueda girar a la derecha e izquierda y sea simetrica ademas de que todos los objetos y personajes se basan en el nivel de piso, el cual al estar en perspectiva indicara que si esta mas arriva es que esta mas profundo, en esto se basará el sistema para colocar un objeto sobre otro o sobre los personajes o entre ellos.
- Exit: Salir al menú anterior
- Save: Guardar lo realizado
- Name: Nombre del personaje
- Path: Cambiar la ruta donde esta guardado el archivo "GRAC #.character", que es el archivo que contendrá esta el personaje, El símbolo # será el número de personaje pero del 0 al 99, que automáticamente lo lleva el programa.
- Colour: elige un color para el texto del personaje
- Delete: Borra el personaje.
Debajo de estos botones hay una barra de desplazamiento en forma horizontal y al pasar el mouse por ella se podran elejir las 100 casillas para personajes, del 1 al 100, al ir moviendose por las posisiones veremos los fotogramas del personaje que tenemos y sus nombres o si estan vacios algunos de estos, podemos rellenarlos por medio de una botonera en la parte inferior, esta nos permite:
- Load pic: Cargar una imagen
- Grab: Recortar un fotograma desde la imagen recien adquirida. (si no la hemos cargado previamente, no se podrá.). No recorte un cuadro masgrande de lo necesario, ya que esto desperdicia recursosy velocidad.
- Flechas: estas posicionan el fotograma (pero aun no se si influye en algo)
- Load: se puede cargar(importar) un archivo de personajes GRAC #.character.
- Hot Spot: Nos permite colocar el punto de agarre de la figura. Generalmente la esquina inferior izquieda (en amos es la superior), pero seguramente necesitaremos la parte central de la imagen (no del cuadrado) abajo, presionando el botón derecho del mouse colocará el hot-spot en la parte central abajo, para que pueda girar a la derecha e izquierda y sea simetrica, ademas de que todos los objetos y personajes se basan en el nivel de piso, el cual al estar en perspectiva indicará que si está mas arriba en Y es que está mas profundo, en esto se basará el sistema para colocar un objeto sobre otro o sobre los personajes o un personaje sobre otro.
En cada casilla ira la imagen del personaje en una de estas posiciones:
(no se necesita la posición mirando a la izquierda por que el sistema la crea por reflejo de la que mira a la derecha.)
- stand/idle (>) (V)(^) Personaje en espera mirando a la derecha, al frente(o abajo) y arriba (o al fondo). 1 imagen (c/u) (1-3)
- walk Caminando mirando a la derecha, al frente y arriba o al fondo. hay espacio para 8 imagenes por cara dirección. (4-11) (12-19) (20-27)
- reach up/out/down: Alcanzando algo (o agacharse a recoger algo) a la derecha, al frente y arriba o al fondo, mirando a la derecha, arriba y abajo. 1 imagen (c/u). (28-30) (31-33) (34-36)
- head: Movimientos de la cabeza (puede ser mover la boca u otros gestos), mirando a la derecha, al frente (o abajo) y arriba (o al fondo), 4 fotogramas (c/u). (37-40) (41-44) (45-48).
- desde la posición 49 en adelande son libres, el sistema no los colocará al mover el personaje, pero se pueden colocar por medio de scripts (??).
- Exit: Salir al menú anterior
- Save: Guardar lo realizado
- Picture: podemos elegir aquí la imagen de fondo para los controles.
- Path: Puede cambiar o elegir la ruta donde esta guardado el archivo "GRAC #.cont", que es el archivo que contendrá los controles o verbos.
- Objects: en este sitio indicamos con que archivo de objetos trabajaremos para estos controles.
- Size: se indicara en esta opcion el ancho (320) y la altura (ejemplo: 191) de la pantalla a usar para el juego sin los controles.
- Verbs: Verbos a usar. (max. 10)
- Message: ubicación del mensaje. un solo clic es necesario. se colocaran los mensajes de los verbos.
- Windows: Ventana para los mensajes de texto y listados de inventario.
- Pen: Color del texto para los mensajes.
- Paper: Color de fondo para el texto de los mensajes.
- Position: Permite posicionr la pantalla de juego y la de controles.
- EXIT: Salir al menú principal.
- Save: Guardar la imagen en formato comprimido como "Grac #.picture"
- Add: Agregar otro verbo.
- Name: Cambiar el nombre del verbo.
- Script: Es la cadena de comandos que se ejecutarán al usar el verbo.
- Button: Seleccione la imagen del botón presionado, luego la imagen sin presionar y por ultimo coloquela sobre el fondo.
- Type: Tipo de uso. indica si se puede usar en cules objetos. Puede ser
- ANY: sirve para todos los objetos. como mirar
- INV: solo para objetos de inventario. como usar
- ROOM: solo para objetos que no esten en el inventario como tomar/coger
los siguientes son para 2 objetos, el primero debe des de inventario, etos verbos requieren una palabra conestora como "con" (with):
- INV/ANY: Uno de inventario y otro cualquiera.
- INV/INV: Los dos de inventario
- INV/ROOM: Uno de inventario y de la escena
- QUICK: No necesita objetos.
- String: es una cadena de texto para describir si falla el verbo.
- Format: Es para indicar si los mensajes seran escritos PRINT o hablados SAY o nada "NONE"
- EXIT: salir al menú principal.
- Save song: guardar la cancion "Grac.song"
- Samples: Sub menu de samples.
- Song path: ruta del archivo de sonidos.
- Load song: carga una canción ST o MED module
- Delete: Borra la canción.
- EXIT: salir al menú principal.
- Save: guardar el sample RAW
- Name: Coloca el nombre del sample.
- Path: ruta del archivo de samples RAW.
- Load: carga un sample RAW
- Delete: Borra el sample.
- EXIT: salir al menú principal.
- Save: guardar el inventario "GRAC.inve".
- Add: agregar otro artículo al inventario.
- Path: ruta del archivo de inventario "GRAC.inve".
- Name: coloca el nombre de artículo de inventario.
- Delete: borra la animación.
- Actions: acciones del artículo. Se crea o modifica un script por cada artículo y cada acción (verbo)
- String: Textos de descripción del artículo de inventario. Se crea o modifica un texto de descripción por cada artículo.
- EXIT: salir al menú principal.
- Save: guardar el close-up. "GRAC.closeup"
- Name: coloca el nombre del closeup.
- Path: ruta del archivo de close-up "GRAC.closeup".
- Objects: seleccione el banco de objetos con el que se trabajará.
- Delete: borra el close-up.
- Add zone: crea o modifica una zona de la escena para asociarla con un close-up.
- Set zone: crea o modifica una zona de la escena para asociarla con un close-up. permite tener un botón con su imagen presionada y no presionada. y colocada en cierto lugar.
- Del zone: borra la zona del close-up.
- Script: se crea o modifica el scrip que hace funcionar el close-up.
- Startup: se crea o modifica el scrip que se ejecuta al entrar al close-up.
- Picture: crea o modifica las imagenes del botón del close-up.
- Veo que el sub menú de Character actions y el de Character String deberian ir dentro de Character (Personajes).
- Veo que el inventario no es grafico.
- Tambien el inventario deberia ser como en todas las aventuras de texto o graficas una escena que muestre lo recojido con objetos visibles como graficos y con ciertas propiedades que aunque las nombra en el manual (especificamente el peso), no estan imprementadas.
- No tiene implementado cantidad maxima a cargar en el inventario.
- No tiene implementado que ropa llevas puesta o armas.
- El botón Save Path No lo entiendo aún.
- Incluso la manera de manejar los path me parece poco intuitiva y engorrosa.
- El orden de los botones del menú deja mucho que desear.
- Fallas al borrar (delete).
- Dos colores de texto? algun impedimento de usar cualquiera?
- No se para que quiere 100 Rutas, algo como para tener una imagen en cada directorio, en lugar de tener sitios fijos para imagenes, imagenes comprimidas, escenas y demas, tal vez eso permita compartir recursos.
- Tiene para 100 Imagenes y 100 directorios, una vez comprimidas las tiene con 100 nombres, rutas y