Herramientas de usuario

Herramientas del sitio


descripciones_y_nombres_dinamicos

¡Esta es una revisión vieja del documento!


Descripciones y nombres dinámicos

Un buen juego no se mantiene siempre estático a lo largo de las partidas; sino que cambia con el tiempo. AGE proporciona un sencillo mecanismo de descripciones y nombres dinámicos que facilita que las descripciones y nombres de habitaciones, cosas y personajes puedan cambiar según las circunstancias. Con esto, se pueden conseguir efectos como:

  • Que la descripción de una calle cambie según si es de día o de noche,
  • Que cambie según el humor del personaje (lo que para uno es un día alegre para otro podría ser un día horrible),
  • Que la descripción y/o nombre de una cosa cambie según su estado (la misma espada a lo largo de una aventura puede estar limpia o manchada de sangre, o tal vez oxidada),
  • Que el nombre de un personaje se muestre distinta según si un jugador lo conoce o no (el jugador podría ver a un personaje como “un hombre de mediana edad” cuando no sabe quién es, y una vez que se lo han presentado verlo como “Benito”),
  • Que el nombre o descripción de una cosa se muestre distinto según los conocimientos de un jugador (lo que para un bárbaro iletrado es “un libro muy grande”, para un mago podría ser “un tomo sobre magia de combate”).

Todo esto se consigue de forma sencilla especificando condiciones en las áreas de nombres y descripciones de PUCK.

Descripciones dinámicas

Las descripciones dinámicas se pueden definir tanto para habitaciones como para cosas y personajes. Esto se hace introduciendo una lista de condiciones y descripciones en el cuadro “Descripciones” de la ficha “General” de estas entidades. Para añadir un elemento a esta lista, introducimos una condición en el campo “Condición”, la descripción asociada en el campo “Descripción”, y pulsamos Añadir. La condición que introduzcamos en el campo “Condición” es un pedazo de código BeanShell con las siguientes características:

  • Tiene que ser una expresión booleana, es decir, un trozo de código simple (sin estructuras if, bucles ni puntos y coma; aunque sí puede tener llamadas a métodos, operaciones, etc.) y que devuelva un valor de tipo boolean (true o false). Dicho con otras palabras, la condición puede ser cualquier trozo de código que pudiese ir como condición de un if.
  • Podemos usar la variable self para referirnos al objeto en que estamos definiendo la descripción, y la variable world para referirnos al mundo, exactamente igual que en los métodos definidos mediante BeanShell.
  • Adicionalmente, en estos campos de condición tenemos una variable especial viewer que podemos utilizar para referirnos al jugador o criatura que está mirando aquello que describimos. Esto se puede usar, por ejemplo, en los ejemplos de aplicación que proponíamos antes para mostrar diferentes descripciones a un jugador según su humor o según sus conocimientos sobre la entidad.

Así, posibles condiciones podrían ser:

get(self,“oxidada”) → esta descripción es sólo para si la cosa que describimos (una espada, por ejemplo) está oxidada. !get(self,“oxidada”) → lo contrario, se muestra sólo si la espada no está oxidada. get(viewer,“conoce”,self) → descripción que se muestra sólo si el jugador que está mirando al personaje que describimos ya lo conoce (hecho descrito por una relación “conoce”). get(viewer,“humor”) > 5 → mostrar esa descripción sólo si el humor del jugador que mira es mayor que 5 (si hemos definido el humor como una propiedad de tipo int que toma valores de 0 a 10, por ejemplo, esto sería una descripción que sólo se ve si estás de buen humor).

Cuando un jugador mire la entidad cuya descripción dinámica hemos definido de esta manera, la descripción que se mostrará al jugador será la concatenación de todas aquellas descripciones de la lista cuyas condiciones asociadas se cumplan. Nótese que esto quiere decir que podemos construir descripciones dinámicas “a trozos”, dividiéndolas en partes con distintas condiciones.

descripciones_y_nombres_dinamicos.1293636252.txt.gz · Última modificación: 2010/12/29 16:24 por al-khwarizmi