Herramientas de usuario

Herramientas del sitio


miembros_prendas_y_armaduras

Miembros y prendas

Una prenda es una cosa que los jugadores y criaturas pueden vestir en alguna parte de su cuerpo. Las prendas pueden tener propósito de armadura (en los juegos que incluyan combates) o no tenerlo (en el resto de los juegos). Así, ejemplos de objetos que se pueden modelar como prendas en AGE podrían ser una cota de mallas, un traje, unos guantes, un guantelete, unas botas o incluso un anillo o un pendiente.

Las prendas se ponen y se quitan por defecto mediante las órdenes vestir prenda y desvestir prenda. En versiones actuales de AGE (de 1.0.3 a 1.2.3), las órdenes poner jugador prenda (ponerse prenda) y coger jugador prenda (quitarse/sacarse prenda) también funcionan para ponerse y quitarse prendas. Sin embargo, es importante tener en cuenta que estas últimas órdenes se eliminarán en el futuro, por lo que se recomienda a los creadores de aventuras suponer que sólo existen por defecto vestir y desvestir, y programarse en BeanShell los verbos poner y quitar si se quiere que funcionen para este propósito.

Una prenda en AGE siempre se pone en una o varias partes del cuerpo, esto permite crear un sistema de prendas realista (por ejemplo, si tenemos un yelmo puesto no nos podremos poner otro a la vez, porque ambos ocuparían la cabeza; pero sí que podemos tener puestos a la vez un yelmo y unas botas porque el primero va en la cabeza y las segundas en los pies).

Así pues, el sistema de prendas en AGE va ligado al sistema de partes del cuerpo (miembros), que es el que sirve para decidir qué prendas pueden combinarse con otras. No obstante, si en un mundo de AGE no es necesario este nivel de complejidad, se puede simplificar, como se verá más adelante.

Miembros

Los miembros son cosas que representan las partes del cuerpo de un jugador o criatura. Con la funcionalidad por defecto del AGE, la utilidad de los miembros es que sirven para blandir armas así como para vestir prendas y armaduras. Por supuesto, el creador de aventuras puede dar otros usos a los miembros programando en BeanShell si lo considera necesario.

Para definir un miembro, como por ejemplo la cabeza del jugador, la añadimos en el PUCK como una cosa cualquiera, rellenando los campos (nombre único, nombre de referencia, género, etc.) que sean necesarios. A continuación, creamos una relación estructural que vaya del jugador a la cabeza. Por defecto, la flecha resultante está etiquetada con la palabra “tiene”, que quiere decir que la cabeza está en el inventario del jugador (como si éste llevase una cabeza cortada consigo). Para ponerla como miembro, hacemos click en la flecha de la relación, y en la ficha “Relación estructural” del panel asociado cambiamos “tiene” por “se compone de”. De este modo, la cabeza pasa a ser un miembro del jugador, tal y como queremos.

Es posible hacer que un miembro se componga de otros miembros (por ejemplo, que una mano tenga varios dedos) creando relaciones “se compone de” entre unos y otros. Sin embargo, esto no es necesario, al menos con la funcionalidad por defecto del AGE. Si queremos tener anillos que se pongan en los dedos, en la práctica es igualmente válido poner éstos como partes del jugador en lugar de como partes de la mano; aunque un perfeccionista del modelado pueda querer hacer lo segundo.

Cada criatura puede llevar a cabo acciones sobre sus propios miembros (por ejemplo, vendarse el brazo izquierdo, suponiendo que definamos la respuesta al verbo “vendar” adecuadamente en el brazo); pero por defecto no puede llevar a cabo acciones sobre los miembros de los demás.

Si queremos trabajar con los miembros de alguna criatura desde código BeanShell, podemos utilizar los siguientes métodos:

/*clase Mobile*/ Inventory getPartsInventory()

Este método devuelve una lista de la clase Inventory que contiene los miembros directos de la criatura sobre la que se invoca. Con directos queremos decir que, si un brazo está modelado como parte de la criatura y a su vez una mano como parte del brazo, la lista contendrá el brazo pero no la mano.

Este inventario se puede modificar, añadiendo o quitando elementos para añadir o quitar miembros dinámicamente a una criatura.

/*clase Item*/ Inventory getParts()

Devuelve una lista de clase Inventory con las partes de la cosa dada. En el ejemplo anterior, si lo invocáramos sobre el brazo, devolvería un inventario conteniendo la mano.

Este inventario se puede modificar, añadiendo o quitando cosas para añadir o quitar partes dinámicamente a un miembro.

/*clase Mobile*/ Inventory getFlattenedPartsInventory()

Devuelve una lista de clase Inventory conteniendo los miembros directos e indirectos de la criatura sobre la que se invoca. Es decir, en el ejemplo anterior, este método devolvería una lista conteniendo tanto el brazo como la mano.

Al contrario que los anteriores, este inventario es de “sólo lectura”. Si se modifica, no tendrá el efecto de añadir ni quitar miembros a la criatura.

Prendas

Como se explicó anteriormente, una prenda es una cosa que los jugadores pueden vestir en alguna parte de su cuerpo. Para crear una prenda en PUCK, lo hacemos de la siguiente manera:

  • Creamos una cosa en PUCK, rellenando todos los campos estándar de nombres, género, descripción, etc.
  • Vamos a la ficha “Prenda” del panel de entidad de la cosa, y marcamos la casilla “Es prenda”, indicando que efectivamente se trata de una prenda.
  • A continuación, tenemos que especificar en qué miembro o miembros de las criaturas se podrá llevar esa prenda. Por ejemplo, un casco se podrá llevar en la cabeza. Para hacer esto, utilizamos el formulario llamado “Miembros requeridos” de la ficha “Prenda”:
  • Pulsamos el botón “Añadir miembro”. Esto hace que nos aparezca un nuevo panel de “Miembro”, que nos da la opción de añadir una serie de nombres. Introducimos “cabeza”, y con esto, el casco ya tiene la información de que puede ponerse en la cabeza.

Si en lugar de un solo miembro, una prenda necesita ocupar varios (por ejemplo, unas botas podrían ocupar el pie izquierdo y el pie derecho, si los modelamos como objetos distintos); entonces le daremos varias veces al botón “Añadir miembro”, y en cada uno de los paneles que aparezcan introduciremos el nombre de uno de los miembros (por ejemplo, “pie izquierdo” en uno, y “pie derecho” en el otro).

Por otra parte, si una misma prenda se puede poner en distintos tipos de miembros (pero sólo en uno de cada vez), lo que haremos será darle a “Añadir miembro” una sola vez; pero añadirle varios nombres: por ejemplo, si un guante es reversible y puede encajar tanto en la mano derecha como en la izquierda, podríamos poner “mano derecha” y “mano izquierda” como nombres en su miembro requerido. Estos nombres siempre se procesan en orden, es decir, si ponemos primero “mano derecha” y después “mano izquierda” y el jugador teclea vestir guante, se colocará éste en la mano derecha si la tiene libre, y sólo en el caso de que no la tenga libre se lo pondrá en la izquierda.

Si queremos que una criatura comience el juego con una prenda puesta, lo haremos creando en PUCK una relación llamada “wears” con valor true que vaya del miembro correspondiente a la criatura. Por ejemplo, si queremos que un jugador comience con un casco puesto en su cabeza:

  • Creamos una relación (flecha) de la cabeza al casco,
  • Clickeamos en ella,
  • Vamos a la ficha “Otras relaciones” del panel de la relación,
  • Introducimos nombre “wears”, valor true, y tiempo restante -1 (infinito).

Si queremos modificar desde el código BeanShell las prendas que lleva puestas o deja de llevar una criatura, basta con poner el valor de la relación “wears” entre cada miembro y la correspondiente prenda a true o false (véase cómo hacerlo en la sección de relaciones). También podemos utilizar el mecanismo de relaciones para consultar qué prendas lleva puesta una criatura y en qué miembros; pero adicionalmente, AGE nos proporciona métodos para hacer esto más rápidamente:

/*clase Mobile*/ Inventory getWornItems()

Este método devuelve una lista de todas las prendas que lleva puesta la criatura sobre la que se invoca. El inventario devuelto es de sólo lectura, es decir, quitarle y ponerle cosas no tendrá ningún efecto sobre lo que lleva puesta la criatura (para esto, debemos usar las relaciones).

/*clase Mobile*/ Item getWornItem( Item limb )

Devuelve la prenda que lleva puesta la criatura sobre la que se invoca en el miembro dado por limb o, si no lleva ninguna prenda, devuelve null.

/*clase Mobile*/ boolean wearsItem( Item wearable )

Sirve para comprobar si la criatura sobre la que se invoca lleva o no puesta la prenda dada como parámetro. Devuelve true si la lleva puesta (en cualquiera de sus miembros) y false de lo contrario.

miembros_prendas_y_armaduras.txt · Última modificación: 2012/09/16 16:42 por al-khwarizmi