Bueno, si te gusta AGE pero no te gusta BeanShell, siempre lo podrías cambiar por otro intérprete de otro lenguaje (mientras el intérprete esté escrito en Java). AGE está diseñado para pasar sus eventos, métodos invocables y demás "callbacks" a un intérprete. Ahora mismo el que hay es el de BeanShell, pero el acoplamiento es débil: fue diseñado desde el principio para que resultase sencillo añadir alguno adicional, y en el XML hay un campo para especificar en qué lenguaje está cada fragmento de código (que se puede usar para decidir qué intérprete llamar), de forma que es perfectamente posible añadir otro lenguaje y que las aventuras puedan funcionar indistintamente con BeanShell y con el nuevo.
Al-Khwarizmi
Recent community posts
Los mundos de AGE son precisamente XML. Las características de los objetos están descritas de forma declarativa, salvo los comportamientos que hay que definir en código (BeanShell). Así que el material para generar descripciones está, la herramienta es adecuada para eso. Otra cosa es que generar bien descripciones podría ser casi una tesis doctoral...
Respondiendo a la invocación de Ruber, salgo un momento de la cueva para comentar tu idea.
El tema de las aventuras de texto multijugador siempre me ha interesado. Aunque es cierto que no es fácil encontrar jugadores, creo que es algo que ofrece muchísimas posibilidades, sobre todo si los personajes jugadores tienen diferentes características que haga necesario que colaboren para conseguir un objetivo (por poner un ejemplo muy simplón, un personaje muy alto que es el único que llega a coger un objeto de encima de una estantería, pero luego se lo tiene que dar a uno bajito que es el único que cabe por un agujero... pero todos sabemos que se puede llevar mucho más lejos). Es una forma de acercar las aventuras a una experiencia de rol de mesa. Por eso AGE está diseñado, y lo estuvo desde el principio, para poder hacer estas cosas.
Desde la experiencia desarrollando un sistema de creación de aventuras, creo que no es realista crear un sistema para aventuras multijugador decente en tres meses y en solitario. La creación de un sistema de creación de aventuras ya es, en sí, bastante trabajosa. Hay toda una serie de detallitos que se deben incluir, funcionalidades que todo el mundo espera y que vas sumando y al final son un montón de líneas de código. Además, si quieres que la cosa sea extensible, tampoco puedes tomar el camino más corto sino que tienes que hacer las cosas medianamente genéricas, lo cual añade más trabajo.
El multijugador añade bastante complejidad a mayores, más de lo que la gente suele creer. Ten en cuenta que no es sólo programar unos sockets para que los clientes se comuniquen con el servidor (que también), gestionar eventos como desconexiones y reconexiones (que también), y hacer que los personajes jugadores sean objetos independientes y asimilables a los no jugadores (que es algo que ya harías también para monojugador si diseñas bien). Son también cosas como por ejemplo programar el sistema de mensajes para que cada evento se narre indistintamente en primera, segunda o tercera persona. Si estamos los tres en la misma habitación y Ruber me ataca con la espada, yo tengo que leer "Ruber te ataca con la espada", él tiene que leer "Atacas a Al-Khwarizmi con la espada", y tú tienes que leer "Ruber ataca a Al-Khwarizmi con la espada". Esto, por cierto, también supone necesariamente un cierto grado de trabajo para el creador de aventuras cuando introduce acciones personalizadas, y posiblemente es uno de los motivos por los que la gente no crea aventuras multijugador: si ya las normales dan trabajo, éstas dan más. De todas formas, te animo a crear una, sea con un sistema propio o uno existente. ¡Sería genial!
Como te ha dicho Ruber, AGE es un sistema que puedes utilizar para crear aventuras de este tipo. Está diseñado desde el principio para ello (por ejemplo, tiene el soporte integrado para las descripciones en distintas personas que he mencionado). Respecto a los ítems concretos de tu lista:
- Explorar, acciones básicas, inventario: todo está soportado, por supuesto.
- Hablar con personajes: también está soportado. Por defecto no es por menús, sino con conversación libre. Podrías implementar menús sin mucho problema, se ha hecho en bastantes aventuras en AGE (por ejemplo, "Una de Dragones"). Sin embargo, en el caso concreto de una aventura multijugador, te recomendaría encarecidamente que lo hagas con conversación libre, por un sencillo motivo: las aventuras multijugador son mucho más naturales si son asíncronas (en tiempo real), y los menús son por naturaleza síncronos. ¿Qué ven los otros jugadores mientras un jugador está dentro de un menú? ¿Qué pasa si varios inician el mismo menú? Todo ello se puede resolver, pero opino que es mucho más natural con la conversación libre, que además posibilita fácilmente que varios jugadores puedan intervenir en la misma conversación (y no tenga cada uno la suya). Es sólo mi opinión.
- Modelar el comportamiento de personajes no jugadores: también está soportado, se les pueden dar las mismas órdenes que a los jugadores.
- Hablar con otros jugadores: se puede haber simplemente por la propia conversación libre, siempre que los jugadores estén en la misma habitación, se oirán unos a otros (o sea, si yo pongo "decir hola", los demás veréis: "Al-Khwarizmi dice: hola"). Si quieres implementar un chat global que se lea desde cualquier parte del mundo, no viene implementado por defecto pero lo puedes hacer (AGE permite añadir scripts de comportamiento a todos los objetos) y sería bastante trivial, no creo que más de 10 líneas de código.
- Gestionar eventos de tiempo: sin problema, AGE soporta tiempo real y es el modo más natural en el caso de multijugador.
- Alternativas de descripciones: se pueden poner sin problema.
- Describir de forma inteligente/no robótica las situaciones: esto te lo tendrías que currar tú programando en los scripts de tu aventura. En la última versión de "Wizard's Quest: Morluck's Lair" hice algo parecido para el combate, puedes echarle un vistazo (cosas como que si te atacan dos veces, no aparezca "El goblin te ataca con la espada. El goblin te ataca con la espada." sino "El goblin te ataca con la espada. ¡Te vuelve a atacar!", etc.
- Mantener la posición relativa de los jugadores: no está por defecto pero lo podrías programar en tu aventura. Ojo que lo de la izquierda y la derecha se ha intentado alguna vez pero puede resultar un poco farragoso... Ruber de hecho tiene un experimento con eso, "Randolph Dwight", que estaba muy bien. Pero lo estaba porque su aventura en concreto se ajustaba a eso. En general es cuestionable que ese tipo de control de movimiento sea cómodo en la práctica. Estoy de acuerdo con lo de evitar "norte", "sur" y demás, pero eso lo puedes hacer sin posicionamiento relativo. Todas mis aventuras se pueden explorar sin poner ningún punto cardinal, simplemente es cuestión de soportar cosas como "subir por las escaleras", "ir por la puerta grande", "ir al baño", "salir de la habitación", etc.
- Poder controlar la secuencia de eventos: sin problema.
Como ves, AGE te proporciona buen soporte para implementar lo que quieres. Ahora bien, también hay puntos negativos. Que son los siguientes:
- Como ya ha dicho Ruber, AGE está hecho en Java, que ha caído en desgracia a la hora de ejecutar contenido online. La forma de ejecutar aventuras pasa o bien por hacerlo en el escritorio (cosa que no excluye la posibilidad de multijugador, claro, se conectan a través de sockets) o bien hacerlo en el navegador sólo después de dar permisos y aceptar cuadros de diálogo que asustan. Esto es una limitación que seguirá ahí salvo que alguien porte el sistema a JavaScript, cosa que yo no voy a hacer. Pero si quieres, ya sabes... el sistema es totalmente libre, y tendrías todo el apoyo que te pueda dar :)
- Aunque la funcionalidad de multijugador está ahí, no hay mucha documentación ni muchos ejemplos porque en la práctica la gente apenas la ha usado. Bastante gente ha creado aventuras con AGE, pero prácticamente todas monojugador. Sólo se creó una aventura multijugador, que es "Burbuja", de dddddd. http://wiki.caad.es/Burbuja La puedes usar como ejemplo, pero el problema es que no es una aventura al uso, sino más bien un juego de simulación sobre especular en los mercados y ganar más dinero que los demás. Por lo tanto, no explota realmente todas las capacidades del sistema dado que no tiene localidades, apenas necesita decir a unos jugadores lo que hacen los otros, etc. En todo caso, si decides usar AGE y te surge cualquier duda, sólo tendrías que preguntarme (o mejor aún, preguntar en el foro del CAAD, donde hay más gente que conoce AGE aparte de mí y alguien te echará una mano). Y de hecho si te decidieras a hacer eso, seguramente me animaría a escribir una documentación como Dios manda sobre cómo hacer aventuras multijugador, que hasta ahora no he hecho porque simplemente nadie había mostrado interés.
Por cierto, la documentación (aunque sin decir apenas nada de multijugador) la tienes en http://www.caad.es/aetheria/doc/doku.php
Vaya tocho he soltado. Me vuelvo a mi cueva, hay demasiada luz aquí fuera :)