CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 18 Nov 2017 20:40

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 8 mensajes ] 
Autor Mensaje
NotaPublicado: 06 Nov 2013 20:28 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Buenas,

Baltasar se me adelantó con la idea, así que abro este hilo para no ensuciar el otro. Como dije en el hilo de fi.js, yo también empecé este verano un motor javascript (con jquery) para ficción interactiva online.

Características:
- 3 capas: Presentación, motor y aventura separados
- Definición del mundo de la aventura en xml. Se requerirá javascript por parte del autor cuando se quiera sobreescribir las acciones por defecto y para las acciones nuevas.
- Una aventura consistirá en el xml de definición de la misma y un css si el autor desea cambiar el aspecto por defecto. En un futuro, se podría plantear un IDE para crear el xml y el css.
- Captura de acciones por parte del autor con métodos before/after en el xml.
- Fichero de verbos (xml) externo para ser fácilmente ampliable.
- Reproducción de imágenes, videos y sonidos de manera automática. Desactivable por el autor.
- Inserción de hiperenlaces automáticamente. Desactivable por el autor. Los hiperenlaces ejecutarán con el botón izquierdo del ratón la acción por defecto indicada por el autor (puede ser diferente para cada objeto) y con el botón derecho saca un menú contextual con las acciones más comunes.
- Reconocimiento de inputs de usuario de verbo y hasta 2 objetos, con o sin preposición.
- Los artículos son opcionales.
- Reconocimiento de pronombres.
- Acepta concatenación de acciones.
- Corrección de errores tipográficos con el método de la palabra más cercana.
- Inventario siempre visible, a discreción del autor.
- Posibilidad de ver todo el log de la aventura, o solo el output de la última acción.
- Grabar/Cargar partidas.

Y seguro que hay alguna más que me dejo por el camino.

Ejemplo de xml de definición de aventura:
Spoiler: Mostrar
Código:
<?xml version="1.0" encoding="UTF-8"?>
<World>
  <Info>
   <title>Inkognito</title>
   <subtitle>Una aventura de espias</subtitle>
   <author>Joruiru</author>
   <date>2013-08-07</date>
   <url>http://www.joruiru.es/</url>
   <Contacts>
     <contact type="twitter">...</contact>       
     <contact type="email">...</contact>       
     <contact type="msn">...</contact>         
   </Contacts>
   <description>Breve descripción del juego</description>   
   <initialRoom>lCarniceria</initialRoom>                                     
   <version>0.1</version>
   <initialPlayer>Josef</initialPlayer>
  </Info>
  <Global>
    <hyperlinks>true</hyperlinks>
  </Global>
  <locations>
  <location id="lCarniceria" name="Carnicería Alfonso (exterior)">
    <description>La #{carnicería,carniceria,ex} de Alfonso Martínez, más conocido como Alf Ternera, el mafias del pueblo. #{Uno de sus matones,maton, ex} vigila la entrada al local.</description>
    <exits>
      <exit direction="north" destination=""/>
      <exit direction="south" destination=""/>
      <exit direction="east" destination="lCarniceriaDetras"/>
      <exit direction="west" destination=""/>
    </exits>
  </location>
  <location id="lCarniceriaDetras" name="Carnicería Alfonso (detrás)">
    <description>La parte de atrás de la carnicería es prácticamente un vertedero,
    donde se tiran los desperdicios de la carnicería. El olor es insoportable y
    las ratas campan a sus anchas. Una enorme tubería, por la que salen los
    residuos, queda al aire libre.</description>
    <exits>
      <exit direction="north" destination=""/>
      <exit direction="south" destination=""/>
      <exit direction="east" destination=""/>
      <exit direction="west" destination="lCarniceria"/>
      <exit direction="in" destination="lCloaca"/>
    </exits>
     <before>
       <action name="oler">
         <![CDATA[
           function (command) {
             printOutput('La mezcla de olores es indescriptible y especialmente asquerosa. Te produce arcadas.');
             return 0;
           }
          ]]>
       </action>
     </before>
  </location>
  <location id="lCloaca" name="Cloaca">
    <description>La iluminación escasea en el interior de la cloaca, que se adentra
    aún más hacia la oscuridad. Puedes ver #{una enorme rata,rata,ex} devorando algo que no
    tienes la más mínima intención de averiguar lo que es.</description>
    <exits>
      <exit direction="north" destination=""/>
      <exit direction="south" destination=""/>
      <exit direction="east" destination=""/>
      <exit direction="west" destination=""/>
      <exit direction="out" destination="lCarniceriaDetras"/>
    </exits>
  </location>
  </locations>
  <items>
   <item id="Cuadro" location="lRoom" name="Un cuadro">
     <description>Un carísimo cuadro de algún pintor famoso.</description>
     <matchingNames>pintura$retrato</matchingNames>
   </item>
   <item id="Cosa" location="Player" name="cosa">
     <description>Una cosa que sirve para hacer cosas.</description>
     <attributes female="true"/>
   </item>
   <item id="Llave" location="Player" name="llave">
     <description>Una bonita llave de color dorado.</description>
     <attributes female=""/>
   </item>
   <item id="Puerta" location="lHabitacion" name="puerta">
     <description>Una puerta de madera que no sabes a donde lleva.</description>
     <attributes female="" openable="" closed="" lockeable="" locked="" keyobject="llave"/>
     <before>
       <action name="atacar">
         <![CDATA[
           function (command) {
             printOutput('Toc, toc');
             return 0;
           }
          ]]>
       </action>
     </before>
   </item>
   <item id="Maton" location="lCarniceria" name="matón">
     <description>Se trata de Titín, uno de los hombres de Alf Ternera. Es un
     armario empotrado de 2x2 con cara de pocos amigos y corte de pelo a lo
     marine. Viste totalmente de negro. Es lo más parecido a un elefante que
     puedes encontrar entre los seres humanos. Mata el tiempo afilando un
     #{cuchillo,cuchillo,ex} de carnicero en una amoladora.</description>
     <matchingNames>maton$secuaz$hombre$titin$titín</matchingNames>
     <attributes animate=""/>
   </item>
   <item id="carniceria" location="lCarniceria" name="carnicería">
     <description>Esta carnicería es propiedad de Alfonso Martínez, conocido en
     el pueblo como Alf Ternera. Precisamente el apodo de Ternera le viene por
     su profesión de carnicero. Usa la carnicería como tapadera y base de operaciones
     de sus "negocios".</description>
     <matchingNames>carniceria$guarida$base</matchingNames>
     <attributes scenery="" female=""/>
   </item>
   <item id="cuchillo" location="lCarniceria" name="cuchillo">
     <description>Un enorme cuchillo de carnicero. No quieres ni pensar en
     que pueden haberlo usado estos matones.</description>
     <matchingNames>machete</matchingNames>
     <attributes scenery="" />
     <before>
       <action name="coger">
         <![CDATA[
           function (command) {
             printOutput('No tienes la más mínima intención de enfadar a semejante mastodonte.');
             return 0;
           }
          ]]>
       </action>
     </before>
   </item>
   <item id="ratas" location="lCarniceriaDetras" name="ratas">
     <description>Las ratas campan a sus anchas entre los deshechos de la carnicería.</description>
     <matchingNames>roedores</matchingNames>
     <attributes female="" plural="" animate="" scenery=""/>
   </item>
   <item id="tuberia" location="lCarniceriaDetras" name="tubería">
     <description>Una enorme cloaca, por la que salen los residuos de la carnicería, se
     adentra en la tierra. Es tan ancha que permite el paso de una persona de tamaño medio.</description>
     <matchingNames>tuberia$cloaca$desagüe$residuos$deshechos</matchingNames>
     <attributes female="" plural="" animate="" scenery=""/>
   </item>
   <item id="rata" location="lCloaca" name="rata">
     <description>Una enorme rata, del tamaño de un conejo, devora algo que no
     quieres imaginarte lo que podría ser.</description>
     <matchingNames>roedor</matchingNames>
     <attributes female="" animate="" />
     <before>
       <action name="atacar">
         <![CDATA[
           function (command) {
             printOutput('En cuanto intentas acercarte a ella, la rata coge su comida y sale al exterior de la cloaca.');
             moveTo('rata','lCarniceriaDetras');
             return 0;
           }
          ]]>
       </action>
       <action name="coger">
         <![CDATA[
           function (command) {
             printOutput('En cuanto intentas acercarte a ella, la rata coge su comida y sale al exterior de la cloaca.');
             moveTo('rata','lCarniceriaDetras');
             return 0;
           }
          ]]>
       </action>
     </before>
   </item>
   <item id="Caja" location="lHabitacion" name="caja">
     <description>Una caja en la que meter y sacar objetos.</description>
     <attributes female="" container="" openable="" closed=""/>
   </item>
  </items>
</World>


Una demo del motor con el xml de arriba: https://dl.dropboxusercontent.com/u/176 ... index.html
(es lo que estaba usando para pruebas, así que no esperéis nada coherente)

El motor está en una fase muy temprana, pero aún así varias de las características indicadas arriba ya están implementadas. Tampoco hay demasiados verbos "implementados".

Un saludo!

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 07 Nov 2013 17:59 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2888
Ubicación: España (Galicia)
Hola,

Buena idea publicarlo, joruiru.
Por cierto, que tiene muy buena pinta.
¡Adelante!

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 07 Nov 2013 18:56 
Desconectado
Momio
Momio
Avatar de Usuario

Registrado: 09 Mar 2004 16:14
Mensajes: 4614
La idea de las acciones comunes me parece bien (de hecho la propuse en fi.js), pero el botón derecho no existe en tabletas y móviles. Quizá podría meterse, aparte del boton derecho, calculos en el OnkeyDown y onkeyup (o como se llamen los eventos), pare detectar pulsacion larga.

Y sería importante definir el modo en el que se mostrarían las opciones. En el otro hilo alguien (perdón por la pereza de no buscarlo) decía que un <select>, lo cual a priori me parecía bien porque como se decía esto hace que cada dispositivo muestre un modelo cómodo, no me imagino dandole a la ruedecita todo el rato para selecciona "Abrir" porque está el último. Quizá lo mejor sea que esa "accion secundaria" llame a una funcion JS, que se encargue del tema (por defecto puede añadir un div al DOM con el select dentro, pero un programador podría cambiar ese "hook" y apuntar a una funcion donde , dependiendo de los atributos del objeto relacionado, saque un select con determinadas opciones, o una capa con un menu en plan bonito). Es decir, dar una solución básica, pero dejar puntos en enganche para cambiarla.

De lo demás no digo nada porque me parece todo bien, especialmente lo de las tres capas :)

_________________
Sígueme en twitter: @uto_dev
http://www.ngpaws.com


Arriba
 Perfil  
 
NotaPublicado: 07 Nov 2013 19:04 
Desconectado
Momio
Momio
Avatar de Usuario

Registrado: 09 Mar 2004 16:14
Mensajes: 4614
Mira, ahora que veo la demo, te diría que el inventario también debería tener un hook. Quizá alguien quiera hacerlo gráfico, o gráfico si resolucion mayor que tal, etc.

Lo mismo ya lo habías pensado...

_________________
Sígueme en twitter: @uto_dev
http://www.ngpaws.com


Arriba
 Perfil  
 
NotaPublicado: 07 Nov 2013 19:29 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
Bienvenido también al selecto club (:P) de los creadores de parsers[*], joruiru :)

Sólo he echado un vistazo rápido al fichero joru.js, que parece ser donde está el meollo de la cuestión. ¿Algún otro fichero que me haya perdido? ¿El de verbos, tal vez?

¿Qué licencia tienes pensada? Puede ser decisivo a la hora de compartir código con otros proyectos.

En cuanto al XML, el IDE y las posibles cros-polinizaciones... Aparte de lo obvio de la posible colaboración entre fi.js y tu parser, me golpea insistentemente la idea de aprovechar PUCK y el XML de AGE.

De un primer vistazo, quizás con ciertas adaptaciones, parece que para lo básico los XML podrían hacerse compatibles. Estando en fase temprana este parser, creo que sería el momento adecuado para investigar la posibilidad.

Otra cosa que me viene a la mente es que, a falta de IDE, se pueda hacer un módulo para Inferno/txtMap. Quizás durante este paso puedas aprovechar para investigar el XML de AGE (que tiene módulo en txtMap).

¡Suerte!

[*] ¿Nos quitaremos de encima alguna vez este término, ciertamente sobrecargado, para referirnos a los sistemas de autoría? (Es una pregunta retórica, conste... la historia del término tiene un peso). Yo tengo claro que para el mío intentaré diferenciar claramente los términos.


Arriba
 Perfil  
 
NotaPublicado: 07 Nov 2013 20:11 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Uto escribió:
La idea de las acciones comunes me parece bien (de hecho la propuse en fi.js), pero el botón derecho no existe en tabletas y móviles. Quizá podría meterse, aparte del boton derecho, calculos en el OnkeyDown y onkeyup (o como se llamen los eventos), pare detectar pulsacion larga.


Esta utilidad la he probado en Android con mi S3 y con Chrome funciona. Pulsación rápida hace click izquierdo y pulsación prolongada hace el click derecho, con lo que saca el menú contextual y eliges la acción que quieras. No dispongo de ningún dispositivo con iOS para probar.
En cuanto a tabletas, en breve dispondré de una Surface, con lo que podré probar el funcionamiento en Windows 8.

Uto escribió:
Mira, ahora que veo la demo, te diría que el inventario también debería tener un hook. Quizá alguien quiera hacerlo gráfico, o gráfico si resolucion mayor que tal, etc.

Como dije en el otro hilo, la idea es que haya funciones de ayuda al autor, para que no tenga que saberse el nombre ni los métodos de los objetos internos del motor (en el xml de ejemplo el uso de printOutput sería uno de esos métodos). El que imprime en la ventana del inventario, efectivamente, es uno de ellos. Se le pasará como parámetro un string con la cadena html a imprimir y au.

dddddd escribió:
Sólo he echado un vistazo rápido al fichero joru.js, que parece ser donde está el meollo de la cuestión. ¿Algún otro fichero que me haya perdido? ¿El de verbos, tal vez?

El de verbos es el verbs.xml, pero vamos, no tiene ningún misterio ese fichero. Un XML con formas verbales y acción a ejecutar.

dddddd escribió:
¿Qué licencia tienes pensada? Puede ser decisivo a la hora de compartir código con otros proyectos.

Todo lo libre que se pueda, mencionando autoría. Supongo que GPL v3.

dddddd escribió:
En cuanto al XML, el IDE y las posibles cros-polinizaciones... Aparte de lo obvio de la posible colaboración entre fi.js y tu parser, me golpea insistentemente la idea de aprovechar PUCK y el XML de AGE.

De un primer vistazo, quizás con ciertas adaptaciones, parece que para lo básico los XML podrían hacerse compatibles. Estando en fase temprana este parser, creo que sería el momento adecuado para investigar la posibilidad.


Para tu tranquilidad, me he basado en el XML de AGE en todo lo que he podido. De todas maneras, lo que es la carga del XML a objetos de javascript está muy localizada, así que si tuviera que cambiarse la estructura no implicaría demasiado tiempo.


¡Veremos que sale!

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 10 Nov 2013 11:25 
Desconectado
Momio
Momio
Avatar de Usuario

Registrado: 09 Mar 2004 16:14
Mensajes: 4614
joruiru escribió:
Uto escribió:
La idea de las acciones comunes me parece bien (de hecho la propuse en fi.js), pero el botón derecho no existe en tabletas y móviles. Quizá podría meterse, aparte del boton derecho, calculos en el OnkeyDown y onkeyup (o como se llamen los eventos), pare detectar pulsacion larga.


Esta utilidad la he probado en Android con mi S3 y con Chrome funciona. Pulsación rápida hace click izquierdo y pulsación prolongada hace el click derecho, con lo que saca el menú contextual y eliges la acción que quieras. No dispongo de ningún dispositivo con iOS para probar.
En cuanto a tabletas, en breve dispondré de una Surface, con lo que podré probar el funcionamiento en Windows 8.


Si esa funcionalidad está incluida en el link de dropbox de arriba, no funciona en iOS (sale la lupa de ampliar el texto de debajo), al menos en la version de Safari de iOS7.

_________________
Sígueme en twitter: @uto_dev
http://www.ngpaws.com


Arriba
 Perfil  
 
NotaPublicado: 18 Nov 2013 22:25 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Uto escribió:
joruiru escribió:
Uto escribió:
La idea de las acciones comunes me parece bien (de hecho la propuse en fi.js), pero el botón derecho no existe en tabletas y móviles. Quizá podría meterse, aparte del boton derecho, calculos en el OnkeyDown y onkeyup (o como se llamen los eventos), pare detectar pulsacion larga.


Esta utilidad la he probado en Android con mi S3 y con Chrome funciona. Pulsación rápida hace click izquierdo y pulsación prolongada hace el click derecho, con lo que saca el menú contextual y eliges la acción que quieras. No dispongo de ningún dispositivo con iOS para probar.
En cuanto a tabletas, en breve dispondré de una Surface, con lo que podré probar el funcionamiento en Windows 8.


Si esa funcionalidad está incluida en el link de dropbox de arriba, no funciona en iOS (sale la lupa de ampliar el texto de debajo), al menos en la version de Safari de iOS7.


Últimas noticias:

He implementado el tema de la pulsación larga para sacar el menú contextual. Al menos eso creo, ya que en pc's funciona en IE, en Firefox y en Chrome. En Android me funciona en Chrome (aunque ya me funcionaba antes de tocar nada) y con el navegador por defecto. En iOS no puedo probarlo.

Además, ya que me ponía, he añadido la posibilidad de que el autor defina para cada link las opciones que saque el menú contextual. Por ahora, "Examinar" y "Coger" las sacará siempre, por lo que no hace falta que el autor las especifique en la definición del link. Sólo tendrá que añadir las opciones que salgan aparte de esas dos.

Seguiremos informando en próximos boletines

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 8 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 2 invitados


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:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM