CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 16 Jul 2018 11:36

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 10 mensajes ] 
Autor Mensaje
NotaPublicado: 27 Abr 2018 15:29 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 27 Feb 2018 13:49
Mensajes: 83
A la hora de crear la historia para una aventura conversacional, antes de pasarla a ningún parser concreto ¿Utilizáis alguna herramienta, o algún método particular para ayudaros a hacer un seguimiento de las acciones que estáis contemplando como respuesta a las acciones del usuario?

No hablo aquí de herramientas como las que comentábamos en el hilo de Utilidades de Mind Map/Concept Map, sino de algún sistema (informático o no) que os ayude a ver por ejemplo, que todos los elementos susceptibles de ser examinables tienen respuesta, tanto de la descripción principal de la localización en la que está el jugador, como de los que aparecen en las descripciones secundarias.

Yo, para las pequeñas pruebas de conversacional que estoy haciendo (y que no merecen ni el nombre de aventura), utilizo un archivo WORD para ayudarme del corrector ortográfico , sin el que mi vida sería la de un terrorista del idioma. Hacerlo todo en un archivo WORD creo que también aporta la ventaja de tener los textos centralizados para una hipotética traducción posterior.

Lo que hago con él, es escribir el título de cada localización, comenzando con una almohadilla, seguido de la descripción de la misma, y luego, indentadas, cada una de las posibles acciones a las que responder, comenzando por el carácter “>” y bajo este la respuesta de texto que correspondiera mostrar al usuario, o entre llaves una descripción de las acciones que debería llevar a cabo el parser pero cuyo texto no es para mostrar al usuario sino un simple comentario (como mover el personaje a tal sala).

Luego, en los textos, marco cada sustantivo para el que he dado una respuesta subrayándolo con un color (por ejemplo verde si ya le he puesto acción de examinar y rojo si tiene más acciones o lo doy por terminado), de manera que me sea fácil identificar qué sustantivos tienen acciones asignadas y a cuales debería dedicarles más tiempo afinando opciones.

Es decir, el texto word tendría una pinta como esta:

Citar:
#El comienzo

Estás en el desierto de Dash-e-Loot. Sus rojizas arenas queman como el infierno. El viento sopla misterioso, formando en las dunas patrones cautivadores. La sed araña ya tu garganta.


  • >norte|sur|este|oeste|noreste|noroeste|sureste|suroeste|salir|avanzar|retroceder|n|s|e|o|ne|no|se|so
    Has vagado en todas direcciones desde hace sabe dios cuanto tiempo. ¿Qué sentido tendría seguir avanzando sin rumbo? No, decides. No malgastarás más energía en balde.
     
  • >ex desierto| Dash-e-Loot |dunas|arena|arenas|patrones|suelo|tierra
    La arena se mueve de forma lenta y continua en el cambiante desierto.
     
  • >(ex|mirar) cielo|firmamento|sol|techo|arriba|carro
    El carro de fuego que llamáis sol surca el firmamento, secándolo todo con su lento pasar.
     
  • >(ex|mirar) horizonte|lejanía|lejos|lotananza|infinito
    El desierto. Infinitamente distinto. Infinitamente igual.
     
  • >ex infierno
    El desierto es como el infierno, pero estás aún en el desierto. Si continúas mucho más tiempo aquí, no tardarás en comprobar las diferencias.
     
  • > esperar|aguardar|dormir|descansar|reposar|continuar aquí|siesta|malgastar energía|gastar energía|saltar|bailar|brincar
    {Personaje muerto}
     
  • >gritar|ayuda|socorro|auxilio|cantar|reir|llorar
    Una voz resuena en el desierto.
     
  • >escuchar voz|eco|examinar voz
    Si alguna voz ha sonado aquí alguna vez, ha sido la tuya.
     
  • >Escuchar
    Ya sólo se escucha el viento
     
  • >pensar|recordar|hacer memoria|qué hago aquí
    Tu mente está al borde del colapso por la falta de agua. Serías incapaz de dedicarla a otra cosa que no fuera la supervivencia inmediata y la búsqueda de agua. No tiene sentido recordar. No ahora.
     
  • >garganta|sed|fuego
    Tienes sed. Mucha sed. Sólo el agua calmará el fuego de tu garganta.
     
  • >mirarme|examinarme|mirar a mi|mirar yo|diablo
    Un pobre diablo arrastrando su desesperación por el desierto.
     
  • >beber
    Ese sería tu sueño. Pero no hay agua aquí.
     
  • >soñar|ex sueño
    Soñar despierto es un lujo que no te puedes permitir.
     
  • >buscar agua
    Si, encontrar agua sería un sueño, pero ¿cómo?
     
  • >despertar|despertarme|despertarse
    Es una situación de pesadilla, pero por desgracia no se trata de un sueño.
     
  • >cavar|excavar|hacer agujero|coger arena|agarrar arena
    Comienzas a excavar, cogiendo la arena con tus propias manos. Poco a poco al principio, y más rápido cada vez. Tus manos topan con algo duro.
     
    Ansiosas por la novedad de algo que no es arena toman vida propia y comienzan a cavar más rápido de lo que tú mismo podrías ordenarles. Pronto una pequeña trampilla dorada queda al descubierto, cegándote con sus reflejos bajo este sol abrasador.
     
    Sin otra opción, sin preguntarte siquiera qué hace aquí o cómo has podido encontrar la aguja en el pajar, levantas la tapa. Una bocanada de frescor y humedad sale del túnel. Con tus últimas fuerzas, te aferras tembloroso a la escalera de mano que desciende, y comienzas a bajar.
     
    {Ir a El_subsuelo}
 

#El subsuelo
(…)



Tras echar un vistazo no he encontrado ninguna herramienta que ayude a hacer un seguimiento de este tipo de cosas a la hora de crear un juego conversacional. ¿Conocéis algo así? ¿Podría resultaros interesante que se creara algo así?

Tal vez una herramienta que trabajando mismamente sobre un documento WORD como este identificara las localizaciones y sus acciones por sus códigos # y >, y nos mostrara estadísticas de las palabras tratadas, nos subrayara él mismo sobre el propio WORD los sustantivos a los que se ha asignado alguna acción, o tirando de un diccionario de sinónimos nos propusiera alternativas a los sustantivos existentes. Opciones adicionales podrían ser una opción de exportación para crear un esqueleto de aventura con esa información para varios parsers (con todas las limitaciones que el sistema pueda tener, pero para ahorrarnos copiar y pegar manualmente el texto).

¿Cómo lo veis? ¿Cómo lo hacéis vosotros hoy por hoy?


Arriba
 Perfil  
 
NotaPublicado: 27 Abr 2018 18:54 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 27 Feb 2018 13:49
Mensajes: 83
Me respondo a mi mismo con un "mmmmmmm" de interés, en espera de ahondar más, al ver la herramienta Inferno de Baltasar, a la que voy a echar un ojo en profundidad :)


Arriba
 Perfil  
 
NotaPublicado: 27 Abr 2018 21:20 
Desconectado
Implementador
Implementador

Registrado: 09 Jun 2010 14:50
Mensajes: 1655
Ubicación: Argentina
Es interesante lo que propones, As. Se me ocurre que parte de la funcionalidad que sugieres en el propio documento de Word, si no toda, se podría implementar mediante macros programadas para pedir la apertura de un archivo de código fuente de algún parser, saber examinarlo y subrayar/colorear en el documento automáticamente conforme lo que ya haya en el código. Podría guardarse y distribuirse un documento con la macro preparada como una «plantilla habilitada para macros de Word», con extensión .dotm, de modo que ya se pueda tener en la carpeta de plantillas cuando uno va a Archivo>Nuevo o para que, al hacer doble clic desde el Explorador de Windows guardada esta plantilla en cualquier carpeta, no se abra para editar sino directamente un documento nuevo. El problema, cómo no, es que yo no sé VB ni mucho menos VBA, o sea Visual Basic para Aplicaciones, aquello en lo que se programan las macros en los programas de Office.
Se me ocurre también que en vez de usar el signo de número para marcar las localidades podrías usar estilos de título predefinidos —sin perjuicio de que después les personalices la apariencia—, lo que permite emplear el panel de navegación/mapa del documento para moverte rápidamente entre las distintas localidades, expandir/contraer el contenido de las mismas según te convenga en cada momento (Word 2013 o 2016) o reorganizarlas con la vista de esquema sin tener que estar cortando y pegando.
Lo de los sinónimos para sugerir como alternativas de las acciones u objetos, si bien desde luego podría complementarse con otras fuentes, el propio Word ofrece sinónimos, incluso en español.

Inferno, por lo demás, permitiría ir escribiendo uno las órdenes y respuestas como si estuviera jugando y transformar todo eso en código para algún parser; mas hasta donde sé no da la posibilidad de examinar un código ya hecho para analizarlo conforme a una idea como la que expones.


Arriba
 Perfil  
 
NotaPublicado: 28 Abr 2018 14:59 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 713
Hola!

Yo también hago algo parecido al crear mis vaporwares; empiezo escribiendo un esqueleto en un procesador de textos con la que podría ser la transcripción de una partida. Luego, a la hora de implementarlo ---en Inform---, utilizo dos ficheros de mensajes; 1) los mensajes por defecto de la librería para cualquier acción, usando como punto de partida los mensajes de Inform incluyendo personalizaciones para acciones que me parezca oportuno cambiar (habitualmente: rezar, saltar, cantar...) y 2) mensajes de los objetos. En este segundo incluyo una lista con todos los objetos del relato, y para cada uno de ellos una lista con las respuestas que genere ese objeto para cualquier acción que no deba ser el mensaje por defecto. Algo así:

Código:
[ LanguageOM obj n x1;
   switch (obj) {

!!------------------------------------------------------------------------------
Bolso: switch (n) {
1:   ! ##Examine
print "Es un bolso bandolera. Cómodo, sencillo, barato.";
return true;
2:   ! ##Examine (B - Continuación, cuando contiene objetos)
print " Dentro tiene [lista de objetos en Bolso].";
return true;
}

!!------------------------------------------------------------------------------
Cocina: switch (n) {
1:   ! ##Examine
print "Espaciosa y bien iluminada [...]. Cuenta con [una PuertaDelantera] a la calle [al e_obj].";
new_line;
return true;
}

!!------------------------------------------------------------------------------
PuertaDelantera: switch (n) {
1:   ! ##Examine (A - Desde el patio)
print "La puerta delantera de la casa. Está ";
if (obj has open) print "abierta.";
else print "cerrada.";
new_line;
return true;
2:   ! ##Examine (B - Desde el recibidor)
print "Da al sur, al patio delantero de la casa. ";
if (obj has open) print "Está abierta de par en par.";
else print "Ahora mismo está cerrada.";
new_line;
return true;
3:   ! door_to (A)
print "Sale al patio delantero.";
new_line;
return true;
4:   ! door_to (B - no puede recoger el abrigo)
print "Antes necesita coger [el Abrigo], pero ya tiene las manos ocupadas con demasiadas cosas y no puede hacerlo.";
new_line;
return true;
5:   ! door_to (C - si recoge el abrigo del perchero antes)
print "Coge [el Abrigo] del [CocinaPerchero](perchero) y sale al patio delantero.";
new_line;
return true;
}

[...]

   }
];

De esta forma, la definición de la localidad Cocina, por ejemplo, quedaría algo así:

Código:
Object   Cocina "cocina"
 with   name_f   'cocina' 'estancia' 'habitacion',
      gender   G_FEMENINO,
      description [;
         return LanguageOM(self, 1);
      ],
      e_to   Calle
has female;

Luego, a la hora de compilar tiro de sobreingeniería y le paso un pequeño script que traduce ciertas etiquetas en funciones definidas dentro de la obra; por ejemplo, [lista de objetos en Bolso] queda como ";WriteListFrom(child(CocinaEncimera), ENGLISH_BIT + PARTINV_BIT);print ", o [el Abrigo] como ", (the) Abrigo, ". El script se podría hacer aún más sofisticado para continuar facilitando la tarea de escritura de ese fichero de mensajes, pero de momento me vale bastante bien.


Arriba
 Perfil  
 
NotaPublicado: 30 Abr 2018 11:16 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 27 Feb 2018 13:49
Mensajes: 83
En efecto, la herramienta Inferno de Baltasar, que está muy bien, lo que hace es generar salidas de aventura para varios parsers a partir de una entrada en un formato de texto concreto, pero su función no es analizar ni ayudar a la escritura, sino que es una herramienta de exportación, por así decirlo (función que está muy bien y que comentaba de pasada como posible utilidad adicional del software, pero que no sería la principal que busco).

La idea de Fernando Gregoire de utilizar el propio WORD y su lenguaje VBA me ha resultado interesante. Yo he hecho algunas cosas con él, pero principalmente para EXCEL y ACCESSS. Habrá que darle una vuelta en la cabeza a este enfoque.

Makinaimo, gracias por compartir tu modo de trabajo ;) Es interesante tu enfoque de escribir la aventura en el procesador de textos como si la jugaras (si he entendido bien), en lugar de hacerlo de manera exhaustiva. Imagino que con esto tienes un esqueleto "jugable" mucho más rápido, al que luego directamente en código (en tu caso de Inform) le irás añadiendo opciones de comandos y demás cosas que surjan del beta-testeo. ¿Estos posibles cambios posteriores los llevas de vuelta al procesador de textos para tenerlos centralizados, corregir ortografía, traducciones futuras igualmente vaporwarizadas ^.^, etc.?

Resulta muy interesante conocer cómo trabajan los demás porque siempre hay algo que se puede adoptar :)

Como comento, a mí el tema de llevar la cuenta exhaustiva de las acciones evidentes en el texto me interesa mucho (y aquí creo que un software puede ayudar), aunque donde para mi realmente está la belleza de los juegos conversacionales es en las acciones que se pueden llevar a cabo a partir de cosas no explicitadas directamente en el texto (un ejemplo burdo, si entras en una cocina no tengo por qué decirte que hay unas tijeras, búscalas y si las necesitas para la aventura allí deberían estar).

¿Alguna idea para controlar/detectar/listar/gestionar estas acciones basadas en lo implícito?


Arriba
 Perfil  
 
NotaPublicado: 30 Abr 2018 13:31 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 713
[AZ] escribió:
Makinaimo, gracias por compartir tu modo de trabajo ;) Es interesante tu enfoque de escribir la aventura en el procesador de textos como si la jugaras (si he entendido bien), en lugar de hacerlo de manera exhaustiva. Imagino que con esto tienes un esqueleto "jugable" mucho más rápido, al que luego directamente en código (en tu caso de Inform) le irás añadiendo opciones de comandos y demás cosas que surjan del beta-testeo. ¿Estos posibles cambios posteriores los llevas de vuelta al procesador de textos para tenerlos centralizados, corregir ortografía, traducciones futuras igualmente vaporwarizadas ^.^, etc.?

Si, eso es! Con el procesador de textos escribo el esqueleto de un posible camino completo desde la situación inicial a una situación final, contemplando interacciones que considero interesantes aunque sean completamente opcionales para terminar la historia, pero sin ser exhaustivo. Al escribirlo así he encontrado más sencillo ajustar el ritmo de la historia ---dentro de las limitaciones que presenta un medio interactivo como el nuestro--- y la cantidad de información que se va lanzando al usuario. Después, como tú dices, al implementarlo en Inform añado otras interacciones y descripciones que no aparecían en el esqueleto inicial, pero sólo vuelvo a utilizar el procesador de textos si voy a contemplar múltiples finales, por ejemplo, para escribir los caminos que conducen hasta esos otros finales. Creo que volver a escribir los textos de los ficheros de mensajes de vuelta en el procesador es hacer el mismo trabajo dos veces y llegas a puntos en los que hay inconsistencias entre el documento del procesador y el fichero de mensajes ---actualizaciones de uno que no pasas al otro y cosas del estilo---.

Así que trato hacer que los ficheros de mensajes de la aventura tengan la mínima cantidad de lógica posible; esto hace más sencillo su mantenimiento y cumplen con la función que podría facilitarte usar el procesador de textos. Al tener todos los mensajes en uno o dos ficheros puedes pasarles herramientas de corrección ortográfica, tienes los mensajes localizados en el mismo punto ante la posible tarea de traducción a otro idioma, y con el script puedo usar etiquetas para marcar objetos que considero importantes y que deben estar implementados, de forma que si luego me olvido de ellos, el propio compilador Inform me avisa de la falta.

Código:
[ LanguageOM obj n x1;
   switch (obj) {

!!------------------------------------------------------------------------------
Salon: switch (n) {
1:   ! ##Examine
print "El paisaje marino parece colarse en el salón con el romper de las olas, desde el otro lado de [las ventanas].";
new_line;
return true;
2:   ! ##Listen
print "La casa incluye su propia banda sonora de rumor de olas.";
new_line;
return true;
3:   ! ##Smell
print "Huele a café recién hecho, en la cocina.";
new_line;
return true;
}

[...]

   }
];

En el ejemplo, espero que exista un objeto 'ventanas' con el que se pueda interactuar. Si lo olvidas, el compilador da el aviso:

Código:
$ inform -G palacio.inf
[...]
"palacio_langOM.inf", line 310: Error:  No such constant as "ventanas"
Compiled with 1 error and 9 warnings


Última edición por Makinaimo el 30 Abr 2018 14:49, editado 1 vez en total

Arriba
 Perfil  
 
NotaPublicado: 30 Abr 2018 13:47 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 713
[AZ] escribió:
¿Alguna idea para controlar/detectar/listar/gestionar estas acciones basadas en lo implícito?

En cuanto a esto, como parte de un trabajo académico cobre compiladores me había planteado crear un lenguaje mínimo que extendiese las funcionalidades del script ese que uso. La idea era analizar un fichero con definición de objetos en Inform y anotar la cantidad de mensajes que se espera por cada objeto (1, 2, 3, en el siguiente ejemplo. En realidad la sintaxis sería distinta, pero creo que como ejemplo funciona):

Código:
Object   Salon "Salón"
 with   name_f   'estancia' 'habitacion' 'sala',
      name_m   'comedor' 'salon',
      gender   G_MASCULINO,
      description [;
         return TablaMensajes(self, 1);
      ],
      before [;
         Listen: TablaMensajes(self, 2);
         Smell: TablaMensajes(self, 3);
      ],
      s_to   Recibidor,
      w_to   Cocina,
 has   male;

[...]

Después, cogiendo como entrada un fichero de mensajes con un formato predefinido tipo el del siguiente ejemplo (de nuevo, la sintaxis no sería exactamente esta):

Código:
#Salon {
   1 {
   El paisaje marino parece colarse en el salón con el romper de las olas, desde el otro lado de [las ventanas].
   }
   2 {
   La casa incluye su propia banda sonora de rumor de olas.
   }
   3 {
   Huele a café recién hecho, en la cocina.
   }
}

Generaría el código Inform correspondiente con el de esos ficheros de mensajes que uso ahora. Así se puede comprobar que cada objeto tenga definidos todos los mensajes que se espera de él, mostrando mensaje de error si no es así, y alguna otra virguería chula. Pero mi trabajo de compiladores ha ido por otro camino, así que este proyecto ha quedado también como vaporware, al menos por el momento.


Arriba
 Perfil  
 
NotaPublicado: 02 May 2018 19:27 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1863
«Cortadillo» va un poco por ahí. Hace ya un tiempo y no recuerdo lo que soportaba exactamente, pero poca cosa... aunque puede servir de punto de partida para algo más elaborado.

viewtopic.php?f=18&t=5966


Arriba
 Perfil  
 
NotaPublicado: 03 May 2018 19:05 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 27 Feb 2018 13:49
Mensajes: 83
¡Gracias d6! :D

Le echaré un ojo en detalle en cuanto tenga un rato y ya comentaré por aquí.

Por cierto, este tipo de enlaces cortos que veo a veces en el foro van con https que por lo visto (a mi al menos) fallan y hay que quitarle la "s" y dejarlos como http para poder acceder. Lo comento aquí porque no se quién se ocupa de estas cosas, y este enlace tuyo es de esos.


Arriba
 Perfil  
 
NotaPublicado: 03 May 2018 22:10 
Desconectado
Implementador
Implementador

Registrado: 09 Jun 2010 14:50
Mensajes: 1655
Ubicación: Argentina
[AZ] escribió:
Por cierto, este tipo de enlaces cortos que veo a veces en el foro van con https que por lo visto (a mi al menos) fallan y hay que quitarle la "s" y dejarlos como http para poder acceder. Lo comento aquí porque no se quién se ocupa de estas cosas, y este enlace tuyo es de esos.


Sí, fallan porque, como dice Firefox, «el certificado está autofirmado», o sea no por una autoridad de certificación que dé fe de la autenticidad.
En realidad no sé qué necesidad hay aquí de usar HTTPS, pues no suelen transmitirse datos personales sensibles que ameriten ser cifrados. Quizá se deba a esa obsesión malsana que hoy tanto empresas comerciales como diversas ONG del ámbito informático tienen por la encriptación de las comunicaciones ante la posibilidad de que se intercepten y/o modifiquen. Podría ayudar a que Google dé más relevancia a la web en las búsquedas, pero Google seguramente eche al CAAD para atrás entre el certificado autofirmado —que además ahora mismo se encuentra vencido hace dos años— y que el uso de HTTPS tampoco es uniforme en toda la comunidad.
Yo simplemente agregué al CAAD como excepción de seguridad y problema resuelto.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 10 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

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


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM