#LyX 1.3 created this file. For more info see http://www.lyx.org/
\lyxformat 221
\textclass scrbook
\begin_preamble
\date{}
\end_preamble
\language spanish
\inputencoding auto
\fontscheme pslatex
\graphics default
\float_placement !hbt
\paperfontsize default
\spacing single 
\papersize a4paper
\paperpackage widemarginsa4
\use_geometry 0
\use_amsmath 0
\use_natbib 0
\use_numerical_citations 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language swedish
\quotes_times 2
\papercolumns 1
\papersides 2
\paperpagestyle default

\layout Title

Esquema general de Minë 
\newline 

\emph on 
Una guía para el colaborador
\newline 

\size small 
\emph default 
versión 1.01 
\newline 
21 de Junio de 2003
\newline 
Siempre actualizada en http://eutherpe.org
\layout Author

Pablo Ruiz Múzquiz 
\emph on 
Aranarth
\emph default 
,
\newline 
Andrés Moya Velázquez
\emph on 
 Hirunatan
\newline 

\emph default 
y Diego Moya Velázquez
\emph on 
 Hizgael
\newline 

\begin_inset Graphics
	filename logo_mine_musgo_300_sinletras.jpg
	scale 60
	rotateOrigin center

\end_inset 


\layout Dedication


\size footnotesize 
\emph on 
Ancho, alto y profundo es el reino de los cuentos de hadas, y lleno todo
 él de cosas diversas: hay allí toda suerte de bestias y pájaros; mares
 sin riberas e incontables estrellas; belleza que embelesa y un peligro
 siempre presente; la alegría, lo mismo que la tristeza, son afiladas como
 espadas.
 Tal vez un hombre pueda sentirse dichoso de haber vagado por ese reino,
 pero su misma plenitud y condición arcana atan la lengua del viajero que
 desee describirlo.
 Y mientras está en él le resulta peligroso hacer demasiadas preguntas,
 no vaya a ser que las puertas se cierren y desaparezcan las llaves.
 
\size default 
\emph default 

\newline 

\size normal 
\SpecialChar ~

\newline 
\SpecialChar ~
\SpecialChar ~
 \SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~

\series bold 
Sobre los Cuentos de Hadas, JRR Tolkien
\layout Standard


\begin_inset LatexCommand \tableofcontents{}

\end_inset 


\layout Subsubsection*
\pagebreak_top 
Histórico de cambios
\layout Standard


\shape italic 
21 julio de 2003
\layout Itemize

Borrado el apartado de creación de conversaciones de PNJs (antiguo 4.1) debido
 a que se está reescribiendo.
\layout Standard


\shape italic 
5 noviembre 2002:
\layout Itemize

Añadido histórico de cambios.
\layout Itemize

4.2.3 (Las salidas en una sala): añadida llave en tipo_cierre=
\begin_inset Quotes srd
\end_inset 

horario
\begin_inset Quotes srd
\end_inset 


\layout Itemize

4.2.1 (Datos generales de toda sala): Incrementada versión del sistema de
 salas a 1.2.
\layout Chapter
\line_bottom \pagebreak_top \pagebreak_bottom 
Introducción
\layout Standard

En esta 
\emph on 
guía
\emph default 
 de Minë pretendemos elaborar un documento que facilite al máximo la contribució
n de código y de ficheros de descripción de salas, objetos y personajes
 no jugadores (PNJs).
\layout Standard

Para ello, hemos dividido la guía en dos apartados muy diferenciados; en
 el primero hablamos de cómo puede construirse un área de juego completa
 con salas y objetos pero sin PNJs y en el segundo describimos el diseño
 del programa a nivel de código fuente para dar a conocer las entrañas y
 animar a los programadores a participar en el desarrollo del núcleo.
 Además, acompañamos todo esto con varios apéndices que sirven de apoyo
 a estas dos primeras partes.
\layout Standard

Los conocimientos o el trabajo derivado del uso de esta guía no ha de repercutir
 necesariamente en Minë.
 Ni el equipo de Minë tomará por la fuerza nada que una persona ajena haya
 construido ni estamos obligados aceptar cualquier trabajo o estudio realizado
 en este sentido.
 La única restricción que imponemos es que las modificaciones realizadas
 a una copia privada del código fuente de Minë han de acogerse también a
 la Licencia Pública General (visite http://www.gnu.org).
\layout Standard

Si no tienes conocimientos de programación, sólo has de leer la sección
 2 y los apéndices 4.1, 4.2 y 4.3.
 Si deseas contribuir con código fuente, es necesario que leas por encima
 primero las partes dedicadas al núcleo en sí -sección 3 y apéndices 4.4
 y 4.5-, luego leas las secciones dedicadas a los no programadores y luego
 vuelvas ya en serio a tus apartados.
\layout Standard

Los autores de esta guía somos Andrés 
\emph on 
Hirunatan
\emph default 
, Diego 
\emph on 
Hizgael
\emph default 
 y yo mismo, Pablo 
\emph on 
Aranarth
\emph default 
.
 Cada uno se ha dedicado a un aspecto, Andrés a explicar el código fuente
 de Minë, Diego a todo lo relacionado con los personajes no jugadores (PNJs)
 y yo para los manuales, los comentarios y el armazón final del documento.
\layout Standard

Quisiéramos agradecer al equipo que forma el proyecto Minë su apoyo mostrado
 hasta ahora
\begin_inset Foot
collapsed false

\layout Standard

El logotipo de Minë es obra de Jaime 'Dwalin'.
\end_inset 

.
 Ellos son los suscritos a la lista de correo de usuarios.
\layout Standard

Esperamos que de alguna forma u otra (jugando, informando de fallos, escribiendo
 áreas o código) disfrutéis de Minë tanto como nosotros.
\layout Chapter
\line_bottom \pagebreak_top \pagebreak_bottom 
Construcción de un área
\layout Section

Conceptos generales
\layout Standard

Minë es un juego tipo MUD/MUSH.
 Esto quiere decir que el ordenador que ejecuta Minë construye un mundo
 virtual al que pueden conectarse otros jugadores por internet (o red local).
 La forma en que los jugadores ven el mundo de Minë es muy peculiar ya que,
 al contrario de lo acostumbrado, el entorno de juego no es gráfico sino
 textual.
\layout Standard

De hecho, cuando un jugador se conecta al servidor que tiene Minë
\begin_inset Foot
collapsed false

\layout Standard

el servidor es una máquina física que ejecuta Minë y a la que se puede acceder
 de alguna forma con un programa específico.
\end_inset 

, lo primero que ve es un mensaje de bienvenida en texto simple.
 Este modelo de traspaso de información se mantiene siempre.
 El jugador escribe lo que desea hacer y Minë responde con texto.
 Para aquellos que frecuenten los 
\emph on 
chats
\emph default 
 (sobre todo IRC) resultará fácil hacerse una idea de lo que estamos diciendo.
\layout Standard

En un 
\series bold 
juego de rol
\series default 
, los jugadores se desplazan por lugares muy diversos.
 Pueden estar andando por un camino, registrando una casa, inspeccionando
 una posada, vagando por un laberinto o escalando una montaña.
 En todos estos lugares el Director de Juego 
\shape italic 
divide
\shape default 
 mentalmente el área de juego en pequeñas secciones.
 A veces no es obligatorio que el director de juego tenga diferenciados
 cada trozo del camino como si fuesen independientes y prefiere, todo lo
 más, tener clara la entrada al camino, un punto concreto de éste, el resto
 del camino y la salida o bifurcación más cercana.
 Si el Director de Juego fuese estricto debería informar a los jugadores
 de que según van avanzando, van pasando de un trozo del camino (llamémoslo
 parte 4 del camino) al siguiente (parte 5 del camino) pero esto raras veces
 sucede pues sacrifica demasiada jugabilidad.
 Si nos encontramos en una casa, la situación cambia radicalmente y solemos
 tener delante un pequeño mapa con las salas o cuartos bien diferenciados,
 ya que si sucede algo inesperado, no es lo mismo estar cerca de la escalera
 que al final del pasillo, es decir, cada lugar cuenta.
\layout Standard

Cuando la situación la controla un ordenador en vez de una persona, todos
 los casos han de manejarse como la situación en la casa descrita arriba
 pues éste es incapaz de diferenciar cuándo es importante la división en
 zonas del terreno y cuándo no.
 Por tanto, en Minë hay que documentar cada trozo más o menos grande de
 terreno.
 Veamos, el objetivo es construir una Tierra Media virtual que contenga
 en su interior detalles de un cuarto trastero de una taberna de un poblacho
 del sur del extinto reino de Cardolan, pero también que haga mención explícita
 a un recodo en el camino que cruza el Anduin a la altura de Minas Tirith
 o un pequeño oasis muy al sur de Harad que sirve de descanso para los comercian
tes de la zona.
 Nosotros nos centraremos en una pequeña casa anónima de un poblado del
 Reino de Arthedain alrededor del año 2000 de la Tercera Edad.
\layout Standard

El propósito de esta guía es construir paso a paso cada 
\shape italic 
sala
\shape default 
 del lugar, así como los objetos contenidos en ella.
 Para seguir correctamente el tutorial es muy importante que tengáis en
 todo momento una buena imagen mental del lugar que ocupamos en cada instante.
\layout Standard

Las salas se componen básicamente de 4 cosas.
 
\layout Itemize

Descripción
\begin_deeper 
\layout Itemize

del lugar
\layout Itemize

detalles del lugar
\end_deeper 
\layout Itemize

Objetos existentes 
\layout Itemize

Personajes no jugadores presentes 
\layout Itemize

Salidas posibles 
\layout Section
\pagebreak_top 
Cómo dar forma a la imaginación
\layout Standard

Todo diseño de un área comienza con un dibujo a mano alzada de ésta para
 tener siempre claro la relación entre los cuartos o espacios considerados
 independientes.
 Es cierto que hay gente que posee una gran visión espacial y memoria pero
 para la mayoría es recomendable seguir en el papel todo lo que hacemos
 por escrito.
\layout Standard

Como podéis ver en la figura 1 de una casa inventada que hemos llamado "Casa
 de Seroth, el comerciante" y a la que nos referiremos a partir de ahora
 como área 
\series bold 
seroth
\series default 
, nos hemos limitado a dibujar dos plantas, la de abajo -al nivel de la
 calle- y la de arriba -un simple y pequeño primer piso al que se accede
 por medio de una escalera de caracol-.
 En este ejemplo no pretendemos ser fieles a lo que sería una casa de un
 comerciante de telas en Arthedain y obviaremos muchos detalles.
\layout Standard

Lo que hay en cada habitación o 
\series bold 
sala
\series default 
 no aparece dibujado porque no interesa ni merece la pena.
 Como ya hemos dicho, lo importante es dominar la ubicación de los cuartos
 a fin de tener claro desde dónde se puede venir al lugar en que nos encontramos
 o hacia dónde podemos irnos desde una posición concreta.
 La descripción detallada se deja para la redacción posterior.
\layout Standard

Por tanto, en el dibujo deben quedar claras la colocación de las salas y
 las salidas de que disponen, marcando aquellas que estén ocultas o sean
 difíciles de detectar así como aquellas que se encuentren cerradas con
 llave o con algún tipo de encantamiento (esto último resultará muy raro
 de encontrar).
\layout Standard


\begin_inset Float figure
placement htbp
wide false
collapsed false

\layout Standard
\align center 

\begin_inset Graphics
	filename manual_mine_grafico01.ps
	display color
	rotateOrigin center

\end_inset 


\end_inset 


\layout Section
\pagebreak_top 
Pasamos a la acción.
 ¿Cómo escribo una habitación?
\layout Standard

Los detalles de cómo es el fichero de una sala se describen en el Apéndice
 titulado 
\series bold 
Cómo construir una sala
\series default 
.
\layout Standard

En esta sección pondremos el contenido de cada fichero asociado a una sala.
\layout Standard

Para escribir estos ficheros hemos utilizado un editor de textos sencillo,
 capaz de escribir en formato TXT simple y como guía el mencionado manual
 de los apéndices.
\layout Standard

Creamos un directorio de nombre el del área que vayamos a crear.
 En nuestro caso, creamos un directorio llamado 
\series bold 
seroth.
 
\series default 
Dentro de este directorio vamos creando diferentes ficheros con diferentes
 nombres, siempre de acuerdo al manual mencionado.
 Veamos nuestro ejemplo.
\layout Subsection

Planta baja
\layout Paragraph

Recibidor
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-recibidor01.xml}
preview false

\end_inset 


\layout Paragraph

Almacén
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-almacen01.xml}
preview false

\end_inset 


\layout Paragraph

Salón
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-salon01.xml}
preview false

\end_inset 


\layout Paragraph

Cocina
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-cocina01.xml}
preview false

\end_inset 


\layout Paragraph

Cuarto del servicio
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-servicio01.xml}
preview false

\end_inset 


\layout Paragraph

Letrinas del servicio
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-servicio_letrinas01.xml}
preview false

\end_inset 


\layout Paragraph

Escaleras
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-escaleras01.xml}
preview false

\end_inset 


\layout Subsection

Planta de arriba
\layout Paragraph

Escaleras
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-escaleras02.xml}
preview false

\end_inset 


\newline 

\layout Paragraph

Distribuidor
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-distribuidor01.xml}
preview false

\end_inset 


\layout Paragraph

Cuarto de Seroth
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-cuarto_seroth01.xml}
preview false

\end_inset 


\layout Paragraph

Tocador
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-tocador01.xml}
preview false

\end_inset 


\layout Paragraph

Letrinas
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_salas/seroth/seroth-letrinas01.xml}
preview false

\end_inset 


\layout Section
\pagebreak_top 
¿Qué hay de los objetos?
\layout Standard

Recordemos que en un entorno MUD/MUSH podemos pensar en 4 tipos de entes
 fundamentalmente:
\layout Itemize

Personajes jugadores.
 Son personas físicas que se conectan por internet y realizan acciones conscient
emente.
\layout Itemize

Personajes no jugadores.
 Son programas de ordenador capaces de reaccionar a eventos y que se aparecen
 a los otros personajes jugadores como ellos.
\layout Itemize

Objetos.
 Son elementos virtuales que simulan ser objetos físicos que pueden ser
 manipulados por PJs o PNJs.
\layout Itemize

Salas.
 Son los espacios físicos virtuales por donde circulan personajes jugadores
 (PJs) personajes no jugadores (PNJs) y en donde se encuentran los objetos.
\layout Standard

En las salas que hemos descrito anteriormente hemos mencionado la existencia
 de tres objetos muy diferentes.
 Unas ramitas de tomillo, un cuchillo de cocina y una pluma de ave para
 escribir.
\layout Standard

Veamos cómo son por dentro exactamente estos ficheros (véase el apéndice
 titulado 
\series bold 
Cómo fabricar objetos
\series default 
)
\layout Paragraph

Tomillo
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_objetos/tomillo01.xml}
preview false

\end_inset 


\layout Paragraph

Cuchillo
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_objetos/cuchillo01.xml}
preview false

\end_inset 


\layout Paragraph

Pluma de ave
\layout Standard


\family typewriter 
\size small 

\begin_inset Include \verbatiminput{../../desc_objetos/pluma_de_ave01.xml}
preview false

\end_inset 


\layout Standard

Estos ficheros 
\emph on 
NO
\emph default 
 se guardan en el directorio 
\series bold 
seroth 
\series default 
dentro del directorio 
\series bold 
desc_salas.

\series default 
 Se almacenan todos juntos en el directorio 
\series bold 
desc_objetos
\series default 
.
\layout Section

El paso final.
 Pasear por nuestras salas
\layout Standard

Existen varias formas de poder visitar nuestras salas o áreas pero aquí
 explicaremos la que, a nuestro entender, es más sencilla.
 
\layout Standard

Para empezar, las salas han de estar localizadas en un directorio de área
 (en nuestro caso, 
\series bold 
seroth
\series default 
) y éste dentro del directorio 
\series bold 
desc_salas.
 
\series default 
Es necesario, por tanto, conseguir una copia de la versión de Minë que aparece
 en la página web del proyecto (http://eutherpe.org) concretamente, en la
 sección 
\series bold 
jugar ya!
\series default 
.
 Habréis de montar un servidor de Minë en vuestro propio pc para poder ver
 las salas.
 Tras haber seguido las instrucciones de la página, tendréis un Minë propio
 corriendo en vuestro ordenador y podréis conectaros a él con cualquier
 cliente MUD indicando que la IP del servidor Minë es 
\series bold 
127.0.0.1 
\series default 
(una dirección IP especial que siempre se refiere a la máquina en la que
 estáis).
 El puerto, naturalmente, seguirá siendo 
\series bold 
2000
\series default 
.
 Cuando hayáis comprobado que podéis jugar a Minë en vuestro ordenador (sin
 necesidad de estar conectados a Internet), id al directorio 
\series bold 
poblado
\series default 
 dentro del directorio 
\series bold 
desc_salas
\series default 
 y modificad un fichero de sala cualquiera añadiendo una salida más que
 apunte a uno de los ficheros de vuestra área.
\layout Standard

Por ejemplo, podréis poner algo así en el fichero de 
\series bold 
poblado
\series default 
 que elijáis:
\newline 

\newline 

\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<sureste id='seroth-recibidor01'>el recibidor de la Casa de Seroth</sureste>
\newline 

\newline 

\family default 
\size default 
Y al llegar a la sala en cuestión veréis aparecer una nueva salida que os
 conducirá (a modo de portal interdimensional) a una de las salas de vuestra
 área.
\layout Standard

Normalmente 
\emph on 
NO
\emph default 
 es necesario reiniciar Minë cada vez que se efectúan cambios en los ficheros
 de 
\series bold 
desc_salas
\series default 
, ya que estos se reconocen automáticamente.
\layout Standard

Los ficheros de objetos, simplemente colocadlos en el directorio 
\series bold 
desc_objetos
\series default 
.
 
\layout Standard

Es natural que se nos escapen algunas comillas o que hayamos cerrado mal
 un paréntesis del tipo '<>'.
 Cada vez que se produzca un error (Minë los detecta), la conexión al servidor
 se verá interrumpida (aparecerá un mensaje en el cliente MUD) y en la ventana
 en donde salen los mensajes del servidor se os mostrará el mensaje del
 error que provocó la desconexión.
 A veces será sencillo, tras leer las últimas líneas del error, entender
 qué salió mal (y qué ficheros hay que revisar).
 En otras ocasiones no lo será tanto.
 En estos casos, no despesperéis, revisadlo todo bien y si seguís sin encontrar
 el error (o errores) enviados a los desarrolladores principales (Aranarth
 pabloruiz@gnu.org y Hirunatan hirunatan@hammo.org) el directorio comprimido
 del área (o las salas sueltas que creáis que tienen el error).
 
\layout Standard

También podéis enviarnos salas o áreas que deseéis que pasen a formar parte
 del servidor de pruebas de Minë y así permitir que otras personas puedan
 explorar lo que hayáis construido (no os olvidéis de enviar los ficheros
 de objetos conjuntamente con el fichero comprimido del área o áreas).
\layout Chapter
\line_bottom \pagebreak_top \pagebreak_bottom 
Contribuir con código
\layout Section

El código fuente de Minë
\layout Standard

Ésta es la otra forma de ayudar al proyecto Minë.
 Puedes incorporarte al equipo de programadores y escribir código fuente
 del programa.
 Tenemos una lista de correo especialmente dedicada a tratar este tipo de
 temas (que a los usuarios normales no les importan en absoluto) ambar-dev@mail.f
reesoftware.fsf.org.
\layout Standard

El código fuente de Minë es 100% 
\series bold 
python
\series default 
.
 Utilizamos 
\series bold 
python
\series default 
 como lenguaje de programación por motivos históricos (el fundador del proyecto,
 Pablo Ruiz Múzquiz comenzó a programar 'ambar' -precursor de Minë- en 
\series bold 
python
\series default 
) y por motivos prácticos (
\series bold 
python
\series default 
 resuelve con elegancia muchos de los problemas que aparecen en el diseño
 de un juego de estas características, es multiplataforma y la curva de
 aprendizaje es muy suave, lo que facilita nuevos colaboradores).
\layout Standard

También utilizamos 
\series bold 
XML
\series default 
 para los ficheros fuente de las salas, PNJs y objetos ya que apostamos
 por estándares asentados y versátiles.
\layout Section
\pagebreak_top 
El mapa del código
\layout Standard

Para no perdernos en el proceloso mar de líneas de código (actualmente los
 ficheros fuente de Minë ocupan cerca de 10.000 líneas), mantenemos a modo
 de mapa un diagrama de clases, hecho con UML.
 La última versión está disponible en la página electrónica de Minë, http://euth
erpe.org/desarrollo.html.
\layout Standard

Los diagramas muestran el diseño de alto nivel del programa, y son imprescindibl
es para conocer su estructura, antes de empezar a leer las clases de una
 en una.
 Hay tres grandes bloques:
\layout Itemize

Modelo de datos 
\begin_inset Formula $\longrightarrow$
\end_inset 

 una representación abstracta del mundo y sus habitantes, independiente
 del interfaz (debería poder usarse tal cual si cambiáramos el interfaz,
 por ejemplo a uno gráfico).
\layout Itemize

Control 
\begin_inset Formula $\longrightarrow$
\end_inset 

 el interfaz de usuario.
 Aquí se interactúa con los jugadores y se controla (o sea, se da órdenes)
 a los PJ y PNJ.
\layout Itemize

Infraestructura 
\begin_inset Formula $\longrightarrow$
\end_inset 

 algunas clases no relacionadas entre sí, con utilidades genéricas usadas
 por el resto de módulos.
\layout Standard


\begin_inset Float figure
placement htbp
wide true
collapsed false

\layout Standard


\begin_inset Graphics
	filename mine.png
	scale 40
	BoundingBox 0 0 307bp 391bp
	rotateOrigin center

\end_inset 


\end_inset 


\layout Subsection

Modelo de datos
\layout Standard

Éste es el bloque más significativo, que contiene el diseño 
\emph on 
conceptual
\emph default 
.
 Cada clase de aquí representa una entidad del juego tal como lo ven los
 usuarios (personajes, salas, objetos...).
\layout Standard


\begin_inset Float figure
placement htbp
wide true
collapsed false

\layout Standard


\begin_inset Graphics
	filename mine-modelo.png
	scale 45
	rotateOrigin center

\end_inset 


\end_inset 


\layout Standard

El diagrama se lee mejor de arriba a abajo.
 Al principio parece un poco confuso, pero todos los elementos tienen un
 sentido intuitivo.
\layout Standard

El Mundo es único y representa eso, todo el mundo de Minë y lo que hay en
 él.
 Contiene una lista de Salas (el rombo en UML significa contener), y cada
 Sala, a su vez, contiene personajes: los personajes que se encuentran dentro
 de esa sala.
 Los Objetos ahora no están modelados del todo, pero en principio podrán
 estar dentro de una Sala o de un Personaje.
\layout Standard

Un Personaje, a su vez, puede ser PersonajeJugador o PersonajeNoJugador
 (la línea de puntos con un triángulo, en UML, significa subclasificación).
 Todos los personajes conocen de 1 a 5 idiomas, y los jugadores tienen además
 una Raza y una Profesión.
\layout Standard

Finalmente, todo Personaje es manejado por un objeto Controlador, que es
 quien le da las ordenes de lo que debe hacer, y a quien informa de las
 cosas que le ocurren.
 Controlador no es una clase, sino un interfaz, lo que significa que no
 contiene código, sino sólo la declaración de qué métodos debe tener una
 clase que pueda controlar Personajes.
 Las clases que implementan ese interfaz pertenecen al siguiente bloque
 del diagrama.
\layout Standard

Hay algunas asociaciones más entre clases, que se pueden entender observando
 el código fuente.
 Las clases que tienen un único rectángulo (por ejemplo ConnectionHandler)
 no pertenecen a este diagrama, se muestran aquí sólo para poder ver las
 asociaciones.
\layout Subsection

Control.
\layout Standard

Este bloque es un poco más abstracto.
 Contiene las clases que llevan el control del programa y la interacción
 con el jugador.
\layout Standard


\begin_inset Float figure
placement htbp
wide true
collapsed false

\layout Standard


\begin_inset Graphics
	filename mine-control.png
	scale 50
	rotateOrigin center

\end_inset 


\end_inset 


\layout Standard

La clase Mine es el programa en sí.
 Es el fichero que se ejecuta al inicio y contiene el bucle principal.
 Inicializa el Mundo y los InterfacesPJ (las flechas punteadas en UML representa
n una asociación no permanente).
\layout Standard

Un InterfazPJ es el objeto que controla a un PersonajeJugador.
 Acepta conexiones telnet para recibir comandos de un jugador y enviarle
 sus respuestas, y también da órdenes al personaje y recibe los "sucesos"
 o "eventos" que éste genera.
\layout Standard

La funcionalidad de un InterfazPJ, al ser bastante complicada, está repartida
 en diferentes Diálogos.
 Cada Dialogo es una "máquina de estados" que representa una situación de
 diálogo con el jugador (por ejemplo, creación de un personaje nuevo, juego
 normal, modo combate, etc.).
\layout Standard

Una máquina de estados es un objeto que tiene un "estado" en cada momento,
 y responde a "sucesos" que le ocurren bien cambiando a otro estado o realizando
 una acción.
 Por ejemplo, en el dialogo "crear un pj", al entrar en estado 1 pregunta
 el nombre del pj, y espera que ocurra algo.
 Si el jugador teclea un nombre correcto, lo registra y pasa al estado 2.
 Si teclea un nombre incorrecto (que ya existe, por ejemplo), devuelve un
 mensaje de error y continúa en estado 1.
\layout Standard

Un InterfazPNJ tiene la misma misión, pero esta vez sobre un PersonajeNoJugador.
 La diferencia es que no tiene ningún socket telnet, sino que las órdenes
 a ejecutar las decide un programa de inteligencia artificial (más o menos
 "inteligente").
\layout Subsection

Infraestructura
\layout Standard

En este bloque tenemos clases que representan conceptos genéricos que tienen
 más relación con el sistema operativo que con un juego MUD.
\layout Standard


\begin_inset Float figure
placement htbp
wide true
collapsed false

\layout Standard


\begin_inset Graphics
	filename mine-infraestructura.png
	scale 50
	rotateOrigin center

\end_inset 


\end_inset 


\layout Standard

ConnectionHandler y Connection representan "sockets" TCP/IP, es decir, los
 canales de comunicación que implementan el protocolo telnet, usado para
 hablar con los jugadores.
\layout Standard

TimerHandler y Timer son temporizadores, o cronómetros, útiles para medir
 tiempos.
 Utils es un módulo "cajón de sastre" para meter funciones sencillitas y
 variadas.
\layout Section
\pagebreak_top 
Entendiendo el código
\layout Standard

Hemos seguido unas reglas básicas de codificación, para mantener un estilo
 coherente en distintos ficheros hechos por diferentes programadores.
 En primer lugar, tenemos un fichero fuente por cada clase, con el mismo
 nombre de la clase en minúsculas (p.
 ej.
 la clase 
\family typewriter 
\size small 
DialogoCrear
\family default 
\size default 
 está en dialogocrear.py).
 Todos los ficheros tienen al principio la nota de "CopyLeft", el comentario
 que indica su contenido, los import, y la clase.
 Todas las clases tienen un bloque de comentarios explicando la clase con
 detalle.
 Al final se incluye un trozo de código para pruebas unitarias del módulo.
\layout Standard

Al escribir el código se siguen unas normas de diseño, que se pueden consultar
 en el apéndice titulado 
\series bold 
Normas de diseño de código fuente de Minë
\series default 
.
\layout Standard

Al leer el código es fundamental leer las clases siguiendo el diagrama,
 de arriba a abajo, y leer y entender en primer lugar la cabecera donde
 se explica qué representa, y cuales son sus atributos.
\layout Standard

El bucle principal del programa está en mine.py, pero casi no hace falta
 ni que lo mires.
 El programa se comporta como si todos los objetos del sistema estuvieran
 "vivos" y funcionando al mismo tiempo.
 Cuando ocurre cualquier cosa, el objeto correspondiente recibe un mensaje
 de "evento", es decir, "alguien" llama a un método de un objeto diciéndole
 que ha ocurrido algo (al principio no es necesario que sepas quién es ese
 alguien).
 Por ejemplo, si un jugador escribe algo desde su terminal, el objeto de
 tipo InterfazPJ correspondiente a ese jugador recibe una llamada al método
 
\family typewriter 
\size small 
comando_recibido()
\family default 
\size default 
.
\layout Chapter
\line_bottom \pagebreak_top \pagebreak_bottom 
Apéndices
\layout Section

Descripción del sistema de conversaciones con los PNJ
\layout Standard

Los Personajes No Jugadores tienen su importancia dentro de la ambientación
 del mundo de la Tierra Media.
 Son sus residentes naturales, los vecinos con los que puedes mantener una
 conversación formal pero agradable, y que te pueden revelar algún secreto
 de la región que estás visitando.
 A continuación se describe el mecanismo que se incluirá en Minë para hablar
 con ellos.
\layout Standard

El sistema de conversación con los PNJ está ideado para facilitar a los
 jugadores las tareas de:
\layout Itemize

Crear nuevas conversaciones PJ - PNJ por parte de los maestros de lugares.
\layout Itemize

Interactuar con los PNJs durante el juego.
\layout Standard

Otro objetivo importante es el permitir que los PNJs ayuden a crear un entorno
 de juego creíble y una historia interesante.
 La conversación que se puede sostener con un PNJ la creará un Maestro de
 Lugares, con un mecanismo similar al que se usa para crear habitaciones.
\layout Standard

Cada conversación estará centrada en "temas" que tienen asociado un fragmento
 de diálogo.
 El jugador, en función de cómo transcurra el diálogo, escoge el siguiente
 tema por el que quiere preguntar.
 Normalmente escogerá alguno que se acabe de mencionar, aunque puede preguntar
 por alguno del que se haya hablado un rato antes, o que no haya salido
 en la conversación.
\layout Standard

Los jugadores dispondrán de los comandos "+decir" y "+preguntar por".
 Con el comando +decir se supone que el PJ ofrece información que el PNJ
 no conoce, y con +preguntar (más frecuente) intenta sonsacarle.
 El estilo literario del texto puede hacer que se consiga un diálogo bastante
 bueno.
 Este tipo de conversación se podría adornar con verbos adicionales, sobre
 todo de comunicación no verbal (
\family typewriter 
\size footnotesize 
+tocar, +abrazar, +pellizcar, +carraspear
\family default 
\size default 
, incluso 
\family typewriter 
\size footnotesize 
+besar
\family default 
\size default 
!) que pueden ayudar a cambiar el humor del PNJ.
\layout Standard

Como muestra, éste es un fragmento del diálogo que se puede mantener con
 el "Tutor", un PNJ que aparecerá a la entrada del juego para enseñar a
 los jugadores nuevos los comandos de Minë:
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
? +decir hola 
\layout Standard


\family typewriter 
\size footnotesize 
- Saludos, buen mentor.
 
\layout Standard


\family typewriter 
\size footnotesize 
- Bienvenido, mi joven aprendiz.
 ¿Estás preparado para comenzar tu instrucción sobre habilidades de supervivenci
a en el mundo de la Tierra Media? 
\layout Standard


\family typewriter 
\size footnotesize 
- Asientes con admiración y respeto.
 
\layout Standard


\family typewriter 
\size footnotesize 
- Para hablar conmigo, escribe "+preguntar por", seguido por el tema del
 que quieras hablar.
 Con este comando puedes preguntarme sobre cualquier duda que tengas.
 También puedes escribir "+?" para obtener una ayuda, con un resumen de
 todo lo que puedes hacer.
 ¿Has entendido bien? 
\layout Standard


\family typewriter 
\size footnotesize 
- Sí, maestro.
\layout Standard


\family typewriter 
\size footnotesize 
- De acuerdo, vamos allá.
 Pregúntame sobre lo primero que quieras aprender.
\layout Standard


\family typewriter 
\size footnotesize 
? +preguntar por habilidades de supervivencia 
\layout Standard


\family typewriter 
\size footnotesize 
- Maestro, ¿qué es lo mas importante para sobrevivir en el mundo de la Tierra
 Media? 
\layout Standard


\family typewriter 
\size footnotesize 
- Lo primero que debes dominar es el funcionamiento de la línea de comandos.
 No irás muy lejos si no sabes siquiera cómo desplazarte, ¿verdad? También
 es importante que sepas cómo combatir, y por cierto que deberás aprender
 el arte de una buena conversación si quieres llegar a alguna parte.
\layout Standard


\family typewriter 
\size footnotesize 
? +preguntar por linea de comandos 
\layout Standard


\family typewriter 
\size footnotesize 
- Si escribes texto directamente, dirás en voz alta lo que has escrito,
 en idioma oestron.
 Puedes escoger en qué idioma quieres hablar, de todos modos.
 En cambio, para realizar cualquier acción, primero debes conocer el comando
 adecuado.
 Ya conoces "+preguntar por" y "+?".
 Los comandos empiezan por el signo "+".
 Todo lo que escribas detrás de este signo es un comando que intentarás
 realizar.
\layout Standard


\family typewriter 
\size footnotesize 
? +preguntar por ejemplo 
\layout Standard


\family typewriter 
\size footnotesize 
- ¿Podrías darme algún ejemplo de manejo de la línea de comandos, mi buen
 mentor?
\layout Standard


\family typewriter 
\size footnotesize 
El tutor se rasca la cabeza unos instantes, meditando la respuesta.
\layout Standard


\family typewriter 
\size footnotesize 
- Si escribes: "Estoy de buen humor, ¿tú no?", dirás ese texto y te podrán
 oír todos los que estén en la misma habitación.
 También puedes escribir el comando: "+preguntar por supervivencia" para
 comenzar una conversación sobre ese tema.
\layout Standard


\family typewriter 
\size footnotesize 
? +preguntar por combate 
\layout Standard


\family typewriter 
\size footnotesize 
- Para atacar a un personaje, escribe "+atacar" y el nombre del personaje.
 Esto comenzará una pelea.
 No te recomiendo que empieces un combate a muerte, sin embargo, hasta que
 llegues a ser un gran guerrero.
\layout Standard


\family typewriter 
\size footnotesize 
? +preguntar por personaje 
\layout Standard


\family typewriter 
\size footnotesize 
- Maestro, ¿qué tipo de criaturas me puedo encontrar en mis viajes? 
\layout Standard


\family typewriter 
\size footnotesize 
- Es pronto para que te preocupes por eso.
 Más adelante podrás estudiar este asunto, si te interesa.
\layout Standard


\family typewriter 
\size footnotesize 
? +preguntar por mundo
\layout Standard


\family typewriter 
\size footnotesize 
El tutor parece un poco desorientado por tu pregunta.
\layout Standard


\family typewriter 
\size footnotesize 
- ¿Por qué este mundo se llama Tierra Media, por cierto? 
\layout Standard


\family typewriter 
\size footnotesize 
- ¡Ah! Se llenaría un tratado entero para responder con propiedad esa pregunta.
 ¿Por qué no me pides que te lo explique...
 en otra ocasión?
\layout Subsection

Confianza entre el PNJ y los PJs
\layout Standard

Otra idea importante es la de que la conversación dependa del grado de confianza
 del PNJ con cada uno de los personajes de la sala.
 El PNJ tendrá un humor (o 'ánimo') base, que al inicializarse depende de
 los personajes presentes en la sala.
 Por ejemplo, el posadero puede empezar la conversación de mal humor porque
 la taberna se le ha llenado de enanos (este posadero, ha salido un poco
 racista).
\layout Standard

El humor cambiará a mejor o peor, como efectos por activar items de texto
 específicos.
 También bajará (¡mostrando mensajes de ambientación como efecto secundario!)
 si el PJ cambia constantemente entre temas no relacionados; esto favorece
 que los jugadores procuren mantenerse "dentro de contexto" y mejora mucho
 la apariencia de realidad del diálogo.
\layout Standard

Además, si un PJ hace subir el humor, la confianza del PNJ en él aumenta,
 o si le estorba o dice algo raro, disminuye.
 La confianza inicial en cada personaje estará en proporción con su atributo
 de Carisma.
 Ciertos contextos o items de la conversación sólo serán accesibles si la
 confianza en el PJ está por encima de un umbral.
\layout Subsection

Salas llenas de gente 
\layout Standard

¿Cómo se comporta el sistema de conversaciones con varios jugadores acosando
 a preguntas al PNJ desde varios frentes? Los diálogos hacen mejor efecto
 cuando un solo jugador habla con el PNJ.
\layout Standard

El efecto confianza puede ayudar a resolver este problema.
 El PNJ sólo tocará los textos más delicados (es decir, que requieren una
 secuenciación correcta), si los PJ hablan de uno en uno.
 Además, sólo se dirigirá en este caso al PJ con el que tenga más confianza.
 Esto aproxima la conversación a un diálogo entre dos personajes.
\layout Standard

Otra idea para mejorar esto es que, si varios jugadores hablan a la vez,
 el PNJ sólo responda a aquél con el que ya estaba hablando, o bien con
 el que tenga más confianza.
 Esto último refuerza la ambientación de la característica Carisma: los
 PNJs tenderán a hablar con los PJ más carismáticos.
\layout Subsection

Iniciativa de los PNJ 
\layout Standard

El personaje no jugador puede tener su propia agenda de intereses.
 Al tocar un cierto tema, se puede despertar su curiosidad por algún otro
 relacionado.
 Si el jugador no pregunta por este otro tema posteriormente, el PNJ tomará
 la iniciativa y lo introducirá en la conversación ('¿Te he dicho ya que
 maté 80 orcos en la Batalla de los 5 Ejércitos?'), en cuanto el diálogo
 decaiga.
\layout Standard

Además, el incluir temas con la iniciativa del PNJ puede valer para que
 reaccione a palabras clave de los diálogos entre los PJ, sin que resulte
 demasiado forzado.
 Por ejemplo, si el grupo de jugadores se pone a discutir a voz en grito
 sobre el Nigromante en medio de la posada, seguro que alguno de los aldeanos
 intervendrá en la conversación para recriminarles.
 Para hacer esto, no hace falta que el sistema sea capaz de entender el
 lenguaje natural de los mensajes entre jugadores; basta que reaccione a
 la palabra clave "Nigromante".
\layout Standard

Este sistema puede forzar a que los jugadores hablen con el PNJ más interesante
 de la sala, si antes les había pasado desapercibido.
\layout Subsection

Efectos especiales durante la conversación
\layout Standard

Los diálogos entre PJ y PNJ deberían estar plagados de 'frases de ambientación'
 que reflejen la actitud que presentan los personajes frente a cómo se está
 desarrollando el diálogo; o que refuercen el efecto dramático de los pasajes
 más importantes.
 Por ejemplo, cuando Gandalf lee en el Concilio de Elrond el texto inscrito
 en el Único en Lengua Negra, todos los presentes en la sala se estremecen,
 y un velo de oscuridad parece cubrir el sol.
\layout Standard

Estos 'trucos de ambientación' son especialmente efectivos si se refieren
 a posturas y expresiones de los personajes.
 Si aparecen frecuentemente durante el diálogo, se evita el efecto de bustos
 parlantes, personajes entre los cuales sólo se intercambia texto.
 Al describir su actitud corporal, la ambientación se enriquece y la credibilida
d aumenta.
\layout Standard

Las frases de ambientación no necesariamente deben estar ligadas a un ítem
 de texto concreto; habrá un mecanismo para que la frase se pueda activar
 automáticamente en momentos claves del diálogo, por ejemplo cada vez que
 el humor del PNJ cambia, o bien cuando desciende por debajo de un cierto
 umbral.
 
\layout Standard

En realidad, este mecanismo de efectos especiales debería estar disponible
 para ser utilizado fácilmente en todos los comandos del juego: uso de objetos,
 magia, movimiento, combate...
 La diferencia entre Petria y Minë puede estar en que, en el combate, en
 vez de 'El monstruo de la cueva te pega un zurriagazo.
 Estás malherido' el mensaje que se muestre sea de tipo: 'El Trasgo Maloliente
 hace girar su bastón nudoso sobre su cabeza.
 Intentas esquivarlo echándote a un lado, pero dada la estrechez de la sala
 no consigues apartarte lo bastante rápido y el garrotazo te alcanza en
 el cuerpo.
 ¡Aï! ¡Ese último golpe parece haberte dejado sin respiración!' 
\layout Section
\pagebreak_top 
Cómo construir una sala
\layout Standard

Abrimos un editor de textos cualquiera del que podamos estar seguros que
 será capaz de guardar en formato TXT simple.
 Nosotros recomendamos siempre el uso de software libre.
\layout Standard

Para los que deseen saber qué es lo que escribirán exactamente, podemos
 decir que se trata de un fichero XML.
 Un fichero XML es un documento con un lenguaje interno que nos permite
 conocer luego los elementos que lo conforman.
 La sintaxis puede resultar algo extraña para un profano pero no es necesario
 entenderla para escribir correctamente un fichero de éstos correctamente.
\layout Subsection

Datos generales en toda sala
\layout Standard

Nada más comenzar a escribir colocamos 'de regalo' estas dos líneas: 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> 
\layout Standard


\family typewriter 
\size footnotesize 
<!DOCTYPE saladeMine SYSTEM "mine_sala.dtd"> 
\series bold 

\newline 

\layout Standard

No importa qué sala vayas a hacer, estas dos líneas aseguran que nuestro
 programa pueda dar por válido o no tu fichero.
 
\layout Standard

Una vez escritas esas dos líneas, ponemos: 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<sala version="1.2" autor="Aranarth" area="moria" comentario="una sala de
 prueba"> 
\series bold 

\newline 

\layout Standard

en donde cada uno puede cambiar tanto el autor como el área pero no la version
 (¡ojo! NO poner tildes en 
\family typewriter 
\size small 
area="loquesea"
\family default 
\size default 
).
 Lo de 
\family typewriter 
\size small 
version="1.2"
\family default 
\size default 
 dejadlo así, es una manera de que el programa no se haga líos según vayamos
 evolucionando el formato de este fichero.
 Cada vez que se haga un cambio aumentaremos el número de versión, y el
 programa se negará a cargar ficheros con una versión distinta a la que
 él entiende.
 Para no desaprovechar el trabajo realizado, normalmente proporcionaremos
 un 
\emph on 
script
\emph default 
 para convertir automáticamente los ficheros a las nuevas versiones (si
 es posible hacerlo).
 Esto lo decimos para que la gente no se lleve a engaño y crea que 
\family typewriter 
\size small 
version="1.2"
\family default 
\size default 
 se refiere a la versión de su sala...
 Si deseáis realizar algún comentario, hacedlo en el campo -opcional- de
 
\family typewriter 
\size small 
comentario=""
\family default 
\size default 
 (ej: 
\family typewriter 
\size small 
comentario="Sala de pruebas, intento de tener una sala con personajes no
 jugadores"
\family default 
\size default 
).
 No confundir tampoco con la version del lenguaje XML de la primera línea
 del fichero.
 
\layout Standard

Bien.
 Lo siguiente es bastante sencillo.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<id>moria-entrada01</id> 
\series bold 

\newline 

\layout Standard

dentro de
\family typewriter 
\size small 
 <id></id>
\family default 
\size default 
 habréis de poner un texto 
\series bold 
que no contenga espacios
\series default 
 y que identifique de forma unívoca al fichero en donde se guarda la sala.
 Para ello, la regla es que escribáis 
\newline 

\layout Standard


\family typewriter 
\size small 
nombre_de_area-nombre_de_sala.
 
\newline 

\layout Standard

Es decir, dos partes separadas por un guión 
\begin_inset Quotes sld
\end_inset 

-
\begin_inset Quotes srd
\end_inset 

, la primera coincide con el nombre del área que hemos puesto arriba, y
 la segunda es un nombre que no se repite dentro de ese área.
 En cada nombre se pueden usar únicamente letras, números y el signo 
\begin_inset Quotes sld
\end_inset 

_
\begin_inset Quotes srd
\end_inset 

 para separar palabras.
\layout Standard


\series bold 
Importante
\series default 
: el nombre del fichero que estáis editando será SIEMPRE el id de la sala
 + la coletilla '.xml'.
 Éste puede ser un buen momento para guardar el archivo con el nombre indicado.
\layout Standard

Si existe un área llamada "poblado" y creéis que la posada del poblado se
 merece un área para ella sola, indicadlo escribiendo 
\family typewriter 
\size footnotesize 
poblado_posada
\family default 
\size default 
 en el campo área de todas las salas que pertenezcan a la posada del poblado.
 La parte del id de una sala que se refiere a la sala en sí también puede
 contener más de dos palabras pero siempre separadas por guiones bajos (a
 modo de espacios), como por ejemplo; 
\family typewriter 
\size small 
piso01_cuarto02
\family default 
\size default 
.
 Con lo que el id completo resultaría ser: 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<id>poblado_posada-piso01_cuarto02</id> 
\newline 

\layout Standard

Al principio puede costar un poco acostumbrarse pero con el tiempo veréis
 que es mucho más inteligente para llevar buena cuenta de las áreas y las
 salas.
 
\layout Itemize

ejemplos válidos para id: 
\family typewriter 
\size footnotesize 
moria-sala07, moria-pasillo77, lorien_sur-estancia03,
\begin_deeper 
\layout Standard


\family typewriter 
\size footnotesize 
tharbad_oeste-posada03_piso02_cuarto01.
 
\end_deeper 
\layout Itemize

ejemplos no válidos: 
\family typewriter 
\size footnotesize 
lorienflet03
\family default 
\size default 
 (no habéis puesto 
\family typewriter 
-
\family default 
 entre área y nombre de sala), 
\family typewriter 
\size footnotesize 
moriamazarbul
\family default 
\size default 
 (no habéis puesto 
\family typewriter 
-
\family default 
 ni un número, aunque sea 01), 
\family typewriter 
\size footnotesize 
tharbad-cocina8
\family default 
\size default 
 (el número debería tener al menos dos cifras).
\layout Standard

Un área puede ser una construcción grande (+20 salas) o un pueblo, o una
 sección de un camino muy largo, etc.
 En general se apela al sentido común de la gente.
 No puede haber áreas de 5 salas porque sería fragmentar demasiado todo.
 Recomendamos que las áreas tengan un mínimo de 30 salas aunque hay casos
 particulares en donde podemos bajar a 20.
 
\layout Standard

Ahora viene algo bastante fácil, el nombre 'normal' de la sala, lo que aparecerá
 como título del lugar a los visitantes.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<nombre>la entrada a Moria</nombre> 
\series bold 

\newline 

\layout Standard

Intentad que se quede en menos de 6 palabras pero que sirva de referencia.
 El nombre debe contener un artículo y empezar por minúscula, ya que será
 mostrado de la forma "Estás en la entrada a Moria".
 
\layout Subsection

La descripción de la sala
\layout Standard

Ahora nos encontramos algo más largo pero que es a la vez lo más importante,
 sin duda.
 La descripción de la estancia en sí.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<descripcion> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item>Una gran sala se aparece ante ti.
 Tanto el techo como las paredes son de color rojizo oscuro y notas que
 la atmósfera es bastante húmeda debido, sin duda, a las filtraciones de
 agua del cercano lago.
 Tres columnas impiden que la estancia se derrumbe.</item>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item dificultad='12'>Hace tiempo que nadie limpia por aquí.</item> 
\layout Standard


\family typewriter 
\size footnotesize 
</descripcion> 
\series bold 

\newline 

\layout Standard

Vayamos por partes.
 Lo primero que has de notar es que hemos escrito 
\family typewriter 
\size footnotesize 
<descripcion>
\family default 
\size default 
.
 Exacto, nos hemos metido en el 'modo descripción'.
 Es aquí donde se demuestra la habilidad descriptiva del Maestro de lugares
 porque ha de tener en cuenta los siguientes elementos.
 
\layout Enumerate

La descripción ha de estar comprendida entre 3 y 10 líneas a ser posible.
 
\layout Enumerate

Esta descripción ha de ser intemporal y no depender de ninguna futura circunstan
cia.
 Nada de 'un enorme orco de da la bienvenida' porque no sabemos cuánto tiempo
 va a durar ese pobre orco ahí (poco, lo más probable) y quedaría muy mal
 que la gente leyese algo que 
\series bold 
no
\series default 
 es verdad.
 
\series bold 
Tampoco
\series default 
 alusiones a 
\series bold 
objetos
\series default 
 que se puedan coger son bienvenidas por el mismo motivo.
 Quizá en versiones posteriores de Minë esto pueda modificarse pero de momento
 no es posible.
 Entended que hemos de ir por partes.
 
\layout Enumerate

Ha de provocar al viajante una sensación global del lugar.
 
\layout Standard

Si leéis los dos 'items' dentro de 
\family typewriter 
\size footnotesize 
<descripcion></descripcion>
\family default 
\size default 
 veréis que uno lleva un 
\family typewriter 
\size footnotesize 
dificultad='12'
\family default 
\size default 
 y el otro no.
 ¿Por qué? Digamos que una sala 
\series bold 
siempre
\series default 
 tiene un 
\family typewriter 
\size footnotesize 
<item>
\family default 
\size default 
 sin dificultad que se le aparecerá a cualquier jugador que entre ahí mientras
 que aquellos 
\family typewriter 
\size footnotesize 
<item>
\family default 
\size default 
 con dificultad aparecerán impresos sólo a aquellos personajes que superen
 una tirada interna de percepción del programa.
 Para que os hagáis una idea de a qué equivalen ciertos valores en la dificultad
 ahí va una tabla resumen orientativa.
 
\layout Standard

Dificultad de los items descriptivos en una sala: 
\layout Standard


\begin_inset  Tabular
<lyxtabular version="3" rows="11" columns="2">
<features islongtable="true">
<column alignment="center" valignment="top" leftline="true" width="0pt">
<column alignment="block" valignment="top" leftline="true" rightline="true" width="4in">
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

0
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

 Para eso no pongas dificultad.
 Lo ve todo el mundo por muy cegato que esté.
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

10
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Hombre, con un poco que se fije uno aparece.
 
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

20
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Se podría decir que uno debe tener buen ojo para ver esto
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

30
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

 La cosa se complica pero con mucha atención se acaba descubriendo.
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

40
\end_inset 
</cell>
<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Aquí aparece una barrera natural.
 Mucha gente no superará esta dificultad hasta que sume bastante experiencia.
 
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

50
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Difícil aunque un elfo no tendría muchos problemas.
 
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

60
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Aquí el humano corriente puede abandonar porque se dejaría los ojos antes
 que descubrir la descripción extra.
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

70
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Aquí los elfos tienen ya problemas serios para ver algo.
 
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

80
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Esta descripción se reserva para Istari en la práctica.
 
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

90
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

Gandalf tendría serios problemas.
 
\end_inset 
</cell>
</row>
<row topline="true" bottomline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

100
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\layout Standard

 Reservado a Maiar de alto linaje.
 
\end_inset 
</cell>
</row>
</lyxtabular>

\end_inset 


\layout Standard

Para que os hagáis más idea aún, diremos que en igualdad de tiempo jugado,
 de un grupo de humano, elfo, orco, hobbit o enano en los primeros niveles
 tendríamos que un humano apenas pasaría del 30, el elfo lograría quizá
 llegar al 50 en contadas ocasiones, el orco como el humano o un poco más,
 el hobbit como el humano y el enano se queda en el 40.
 
\layout Standard

Podéis poner tantos items descriptivos como queráis, con o sin dificultad
 pero intentad que el resultado final no sea excesivo o inundaréis de letras
 la pantalla del jugador (con la consiguiente desgana lectora de éste) 
\layout Subsection

Las salidas en una sala
\layout Standard


\series bold 
Importante
\series default 
: los siguientes datos se refieren a las posibles salidas.
 se recomienda que se relacionen items de descripción con alguna salida.
 De vez en cuando colocad el mismo valor de dificultad en aquellos 
\family typewriter 
\size footnotesize 
<item>
\family default 
\size default 
 y salidas relacionados.
 Luego pondremos un ejemplo.
 
\layout Standard

Esto es bastante simple pero hay que entenderlo bien porque es lo que relaciona
 esta sala con el resto de ellas.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<salidas> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<oeste id="moria-cocina01">la cocina</oeste> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<este dificultad='12' id="moria-salon01">el salon</este> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<norte id="moria-cuartucho08">un cuartucho oscuro</norte>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<sur id="moria-entrada01">la entrada</sur>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<arriba id="moria-bano01">el baño</arriba> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<abajo></abajo> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<otro id="moria-tunel01" tipo_cierre="cerradura" datos_cierre="moria-llave_de_tu
nel01" 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
mensaje_cerrado="una reja con un candado bloquea el paso"> un estrecho [tunel]</
otro>
\layout Standard


\family typewriter 
\size footnotesize 
</salidas> 
\series bold 

\newline 

\layout Standard


\series bold 
Importante
\series default 
: También son válidas las salidas 'noreste, noroeste, sureste y suroeste'.
 
\layout Standard

Analicemos esto detenidamente.
 
\layout Standard

lo primero es escribir 
\family typewriter 
\size footnotesize 
<salidas>
\family default 
\size default 
 (y lo último 
\family typewriter 
\size footnotesize 
</salidas>
\family default 
\size default 
).
 Entremedias, y en este caso, tenemos 7 -siete- posibles direcciones a las
 que ir.
 Escribe tan sólo aquellas que de verdad existan o déjalas vacías.
 
\layout Standard

Por ej: 
\family typewriter 
\size footnotesize 
<abajo></abajo>
\family default 
\size default 
 quiere decir que no hay nada hacia abajo.
 Para eso, simplemente no lo escribas.
 
\layout Standard

Cojamos la primera salida de nuestro ejemplo: 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<oeste id="moria-cocina01">la cocina</oeste> 
\series bold 

\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<oeste
\family default 
\size default 
 <-- esto indica que se refiere a la sala a la que entraremos si nos dirigimos
 al oeste (a la izquierda en un mapa) ¡Haced un dibujo antes! 
\layout Standard


\family typewriter 
\size footnotesize 
<oeste id="moria-cocina01
\size default 
" 
\family default 
<-- el id es el identificador de la sala que hay en esa dirección.
 Coincide con el nombre del fichero (sin el .xml) que contiene la información,
 y con el párrafo <id>...</id> de dicho fichero.
 
\layout Standard


\family typewriter 
\size footnotesize 
<oeste id="moria-cocina01">la cocina</oeste>
\size default 
 
\family default 
<-- Escribid en medio algo descriptivo que pudiese dar una idea al personaje
 de lo que hay en esa dirección.
 Puede coincidir exactamente con el verdadero nombre de la sala al oeste
 o puede que no.
 Por ejemplo, si Kloin el enano está vagando por los túneles de Moria y
 llega a una bifurcación del camino oeste-este puede que el este aparezca
 como "Al este divisas un pasadizo oscuro" 
\layout Standard


\family typewriter 
\size footnotesize 
<este id="moria-pasadizo87">un pasadizo oscuro</este> 
\layout Standard

y el oeste como "Al oeste divisas un pasadizo con [restos] humanos" 
\layout Standard


\family typewriter 
\size footnotesize 
<oeste id="moria-pasadizo88">un pasadizo con [restos] humanos</oeste> 
\layout Standard

Si Kloin el enano decide ir hacia el oeste se encontrará con que ha entrado
 en "La Antesala de Mazarbul" que, desde lejos, parecía un simple 'pasadizo
 con restos humanos'.
 
\layout Standard

Los jugadores también pueden usar la primera palabra de la descripción para
 moverse (exceptuando artículos: el, la, los, las, un, uno, una, unos, unas).
 En el ejemplo anterior es lo mismo decir "+sur" que "+entrada".
 Si no interesa la primera palabra, o hay varias salidas que repiten, se
 puede indicar otra rodeándola entre corchetes.
 En el caso que tenemos aquí, "+pasadizo" seria igual que "+este", y "+restos"
 seria "+oeste".
 Ojo, solo puede haber una palabra entre corchetes, sin espacios.
 Esto es imprescindible si se usan salidas con dirección <otro>.
 
\layout Standard

Bien.
 también está la dificultad.
 Si creéis que una de las salidas no es visible a simple vista podéis poner
 un 
\family typewriter 
\size footnotesize 
dificultad="37"
\family default 
\size default 
 que se aplicará de la misma forma que los items de la descripción de antes.
 
\layout Standard

Un personaje que sea capaz de ver un ítem de descripción de 
\family typewriter 
\size footnotesize 
dificultad='35'
\family default 
\size default 
 podrá ver cualquier salida con dificultad igual o menor a 35.
 Así que un 
\emph on 
combo descripción-salida
\emph default 
 puede ser el siguiente: 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<item dificultad="26">Arriba alcanzas a ver una trampilla</item>
\layout Standard


\family typewriter 
\size footnotesize 
...
 
\layout Standard


\family typewriter 
\size footnotesize 
<arriba id="tharbad-herrero_cuartito03" dificultad="26">una trampilla</arriba>
 
\newline 

\layout Standard

cada uno en su respectivo sitio dentro del fichero, claro.
 No abuséis mucho de las 
\family typewriter 
\size footnotesize 
dificultad=' '
\family default 
\size default 
.
 Usadlo con mesura.
 Se trata de la Tierra Media, no de un laberinto oscuro.
 Una salida con dificultad por sala es una auténtica burrada.
 Una por cada diez salas, aceptable, una por cada 20, correcto.
 Por otro lado, un personaje incapaz de ver una salida, podrá cruzarla si
 sigue a otro que pueda.
 
\layout Standard

Finalmente, tenemos los cierres.
 Las salidas normalmente se pueden transitar libremente, pero a veces nos
 podemos encontrar puertas con candado o algún otro tipo de obstáculo.
 De ello trata el 
\family typewriter 
\size footnotesize 
tipo_cierre
\family default 
\size default 
, que por el momento puede tener los siguientes valores: 
\layout Itemize

ninguno 
\begin_inset Formula $\rightarrow$
\end_inset 

 éste significa que no hay cierre, es el que se sobreentiende si no ponemos
 nada.
 
\layout Itemize

cerradura 
\begin_inset Formula $\rightarrow$
\end_inset 

 cualquier tipo de cerradura o candado que se abra con una llave.
 
\layout Itemize

horario 
\begin_inset Formula $\rightarrow$
\end_inset 

 un cierre controlado por alguien que lo abre o cierra a determinadas horas.
 Cuando está cerrado, es posible que se tenga que abrir con una llave.
\layout Itemize

magia 
\begin_inset Formula $\rightarrow$
\end_inset 

 éste de momento no está hecho, pero en el futuro permitiremos bloquear
 mágicamente una puerta.
 
\layout Standard

Si ponemos un tipo de cierre distinto de "ninguno", pondremos también datos_cier
re, que sera: 
\layout Itemize

para 
\family typewriter 
\size footnotesize 
"cerradura"
\family default 
\size default 
 
\begin_inset Formula $\rightarrow$
\end_inset 

 el id del objeto llave 
\layout Itemize

para 
\family typewriter 
\size footnotesize 
"horario"
\family default 
\size default 
 
\begin_inset Formula $\rightarrow$
\end_inset 

 las horas en las que está abierto (sólo horas completas, de 0 a 24).
 Por ejemplo, "10-14,17-21" está abierto de las 10:00 a las 14:00 y de las
 17:00 a las 21:00.
 Si hay una llave para abrirlo las horas en que está cerrado, ponemos su
 id al final, separado por un espacio.
 Por ejemplo, 
\begin_inset Quotes sld
\end_inset 

10-14,16-18 llave_gorda02
\begin_inset Quotes srd
\end_inset 

.
 OJO: es importante no poner ningún otro espacio en el texto.
\layout Itemize

para 
\family typewriter 
\size footnotesize 
"magia"
\family default 
\size default 
 
\begin_inset Formula $\rightarrow$
\end_inset 

 aquí pondremos el id del hechizo o algo así, cuando esté hecho.
 
\layout Standard

Y no nos queda más que 
\family typewriter 
\size footnotesize 
mensaje_cerrado
\family default 
\size default 
, con el texto que le aparecerá al jugador si intenta pasar y no puede.
 
\layout Standard

Ejemplos de cierre podrían ser: 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<norte id="xxxx" tipo_cierre="horario" datos_cierre="10-20" mensaje_cerrado="el
 guardia te dice 'el puente está cerrado, no se puede entrar en la ciudad
 hasta las 10'"> 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<norte id="xxxx" tipo_cierre="magia" estado="cerrado" datos_cierre="bloquear_por
tal" 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
mensaje_cerrado="hay una puerta fuertemente cerrada, no parece que haya
 medios de abrirla"> 
\series bold 

\newline 

\layout Subsection

Propiedades globales de la sala
\layout Standard

Ahora pasamos a una de las partes más sencillas, más rápidas y que más vida
 le dan al juego.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<propiedades tipo='caverna' subtipo ='entrada' volumen='25' luz='06' aura='56'
 combate="si" 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
ocultabilidad='30'/> 
\series bold 

\newline 

\layout Standard

A simple vista parece sencillo rellenar este campo.
 Y lo es, para qué negarlo.
 
\layout Standard

Estas 'propiedades' se refieren a atributos muy específicos de la sala en
 la que estamos y la elección de los valores determinará mucho de lo que
 pueda acontecer en ella.
 
\layout Standard

Vayamos uno por uno.
 
\layout Itemize

tipo: Se refiere al campo semántico al que pertenece la sala.
 Puedes elegir entre: población, edificio, campo, agua, montaña y caverna.
\layout Itemize

subtipo: No es obligatorio pero sí muy recomendable.
 Se trata de especificar más sobre el tipo de sala.
 A continuación mostramos una lista de los tipos y sus subtipos correspondientes
:
\begin_deeper 
\layout Standard


\begin_inset  Tabular
<lyxtabular version="3" rows="14" columns="6">
<features islongtable="true">
<column alignment="block" valignment="top" leftline="true" width="25mm">
<column alignment="block" valignment="top" leftline="true" width="25mm">
<column alignment="block" valignment="top" leftline="true" width="20mm">
<column alignment="block" valignment="top" leftline="true" width="20mm">
<column alignment="block" valignment="top" leftline="true" width="20mm">
<column alignment="block" valignment="top" leftline="true" rightline="true" width="25mm">
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\series bold 
Población
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\series bold 
Edificio
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\series bold 
Campo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\series bold 
Agua
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\series bold 
Montaña
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\series bold 
Caverna
\end_inset 
</cell>
</row>
<row bottomline="true">
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
\emph on 
cielo abierto, suelo liso
\end_inset 
</cell>
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
\emph on 
techo, suelo liso
\end_inset 
</cell>
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
\emph on 
cielo abierto, suelo irregular
\end_inset 
</cell>
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
\emph on 
cielo abierto, suelo irregular, agua
\end_inset 
</cell>
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
\emph on 
cielo abierto, suelo irregular, mucha altura
\end_inset 
</cell>
<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
\emph on 
techo, suelo irregular
\end_inset 
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
calle
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
salon
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
llanura
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
ribera
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
cima
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
entrada
\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
callejon
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
habitacion
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
bosque
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
costa
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
ladera
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
cueva
\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
plaza
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
pasillo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
claro del bosque
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
acantilado
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
promontorio
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
pasadizo
\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
portal
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
escaleras
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
colina
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
cala
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
grieta
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
sima
\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
pasadizo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
vestibulo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
valle
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
rio
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
desfiladero
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
rio subterraneo
\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
puerto
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
cuarto sin ventanas
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
pantano
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
lago
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
quebrada
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
lago subterraneo
\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
arco
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
sotano
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
paramo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
mar
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
abismo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
embarcadero
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
calabozo
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
desierto
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
islote
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
cornisa
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
azotea
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
alcantarilla
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
tejado
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
balcon
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
</row>
<row bottomline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard


\size footnotesize 
letrina
\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\layout Standard

\end_inset 
</cell>
</row>
</lyxtabular>

\end_inset 


\end_deeper 
\layout Itemize

volumen: Se refiere, no al volumen físico sino a la capacidad de albergar
 a personas.
 Escribir un número entre 0 y lo que vuestra imaginación considere que es
 MUY grande.
 una persona normal ocupa 1 unidad de volumen (un hobbit 0.5 u.vol).
 Un dragón puede ocupar desde 30 hasta 500 u.vol.
 Si ponéis 
\family typewriter 
\size footnotesize 
volumen="0"
\family default 
\size default 
 nadie podrá entrar.
 si ponéis 
\family typewriter 
\size footnotesize 
volumen="0.5"
\family default 
\size default 
, sólo los hobbits podrán entrar y sólo de uno en uno.
 Esto puede dar mucho juego.
\begin_deeper 
\layout Standard

Una plaza del pueblo, si la consideráis una sala única, podría tener 
\family typewriter 
\size footnotesize 
volumen='200'
\family default 
\size default 
 ó mucho más si se trata de Minas Tirith pero recomendamos que a partir
 de 200 subdividáis la estancia en varias o incluso convirtáis una zona
 con ambiente propio en un área diferente.
 Es decir, es mejor escribir '
\family typewriter 
\size footnotesize 
minastirith_ciudad-plaza01_norte01
\family default 
\size default 
' 
\family typewriter 
\size footnotesize 
volumen='80'
\family default 
\size default 
 
\family typewriter 
\size footnotesize 
'minastirith_ciudad-plaza01_sur01'
\family default 
\size default 
 
\family typewriter 
\size footnotesize 
volumen='90'
\family default 
\size default 
 que 
\family typewriter 
\size footnotesize 
'mintastirith_ciudad-plaza01
\family default 
\size default 
' 
\family typewriter 
\size footnotesize 
volumen='170'
\family default 
\size default 
.
 Siempre habrá excepciones, naturalmente, pero se apela al sentido común
 del 'maestro de lugares'.
 Un cuarto corriente estaría entre 
\family typewriter 
\size footnotesize 
volumen='6' 
\family default 
\size default 
y 
\family typewriter 
\size footnotesize 
volumen='15'
\family default 
\size default 
.
 
\layout Standard

Si una sala está repleta no podrás acceder a ella.
 Te aparecerá un mensaje como 'la Cocina está llena de gente, no puedes
 pasar'.
 
\end_deeper 
\layout Itemize

luz: esto que parece una tontería NO lo es.
 la luz tomará un valor entre 0 (oscuridad total) y 100 (¿el negro? ¿qué
 es el negro?).
 No cometáis el error de describir la sala como 'oscura y viscosa' y poner
 
\family typewriter 
\size footnotesize 
luz='78'
\family default 
\size default 
.
 
\begin_deeper 
\layout Standard

Al mediodía en la plaza mayor podríamos tener 
\family typewriter 
\size footnotesize 
luz='70'
\family default 
\size default 
.
 Por la noche, con luna llena, 
\family typewriter 
\size footnotesize 
luz='27'
\family default 
\size default 
 En un cuarto con ventana, a media tarde, 
\family typewriter 
\size footnotesize 
luz='50'
\family default 
\size default 
.
 En los pasadizos de Moria, 
\family typewriter 
\size footnotesize 
luz='20'
\family default 
\size default 
 
\layout Standard

Escribid el 
\family typewriter 
\size footnotesize 
luz=""
\family default 
\size default 
 el máximo posible de luz atendiendo al mediodía.
 El programa, según qué hora sea, hará un pequeño ajuste automático.
 
\layout Standard

La luz afecta a la percepción del personaje (vital para encontrar objetos,
 salidas o personajes escondidos), al combate (poca luz lo entorpece pero
 demasiada también), a los atributos de ciertas razas como los orcos por
 ejemplo, etc.
 Una 
\family typewriter 
\size footnotesize 
luz='90'
\family default 
\size default 
 se considera mágica, al igual que una 
\family typewriter 
\size footnotesize 
luz='10'
\family default 
\size default 
 se considera obra de algún tipo de hechicería oscura.
 
\end_deeper 
\layout Itemize

aura: Llegamos a una de las propiedades más importantes de todas.
 El aura no es realmente algo espiritual pero sirve bien para hacernos una
 idea.
 El aura es la sensación de bondad o maldad que desprende una sala.
 Un 0 significaría encontrarse en las propias entrañas de Melkor y un 100
 haber cantado con los Ainur el Ainulindalë.
 Los valores con los que se trabajará normalmente estarán en el rango [25-75]
 y sólo de forma MUY excepcional se debería poner un 85 (el mismo centro
 de Lórien) o un 15 (el trono de Sauron).
 El aura es algo que también tienen los objetos y los personajes, tanto
 jugadores como controlados por el ordenador.
 Esto quiere decir que un orco tendrá típicamente un valor de 
\family typewriter 
\size footnotesize 
aura='35'
\family default 
\size default 
 mientras que un elfo, dependiendo de su casta podrá alcanzar 
\family typewriter 
\size footnotesize 
aura='70'
\family default 
\size default 
.
 El aura de la sala no sólo sirve para hacernos una idea del ambiente que
 se 'respira' en ella sino que puede afectar de forma directa a los personajes
 que se encuentren en ella y que posean auras muy diferentes a las de la
 sala.
 Un orco de 
\family typewriter 
\size footnotesize 
aura='30'
\family default 
\size default 
 que entre en un santuario élfico de 
\family typewriter 
\size footnotesize 
aura='70'
\family default 
\size default 
 verá disminuido su potencial a prácticamente la mitad o incluso puede morir
 con sólo tocar un objeto puesto que una diferencia de 40 puntos en aura
 es excesiva.
 Un camino perdido en mitad de la Tierra Media tendrá un 
\family typewriter 
\size footnotesize 
aura='50'
\family default 
\size default 
.
 Tened en cuenta en qué época estáis escribiendo vuestra área.
 Si lo hacéis a mediados de la tercera edad los valores son los que os hemos
 dicho pero según avanza el señor oscuro y llegamos al Señor de los Anillos
 no estaría de más restar 5 a todos los lugares normalitos.
 
\layout Itemize

combate: puede tomar dos valores.
 'si' o 'no'.
 en principio todo sitio permite el combate (así que si no pones, se sobreentien
de que has puesto 
\family typewriter 
\size footnotesize 
combate='si'
\family default 
\size default 
) pero a veces conviene reservar ciertos lugares para la curación o para
 charlar sin ser molestados, o quizá es que no hay apenas sitio (
\family typewriter 
\size footnotesize 
volumen='2'
\family default 
\size default 
) para hacerlo, y entonces podéis poner 
\family typewriter 
\size footnotesize 
combate="no"
\family default 
\size default 
.
 
\layout Itemize

ocultabilidad: esto resume dos aspectos de la sala.
 por un lado lo abigarrada que está de trastos o lo llena de piedras y ramas,
 por otro la facilidad para ocultarse en ella.
 un valor de cero '0' indica que es imposible ocultarse por los motivos
 que sean mientras que un valor de 100 quiere decir que ni tú mismo serías
 capaz de encontrarte aunque te palparas.
 Un valor estándar para estancias en casas podría ser de 
\family typewriter 
\size footnotesize 
ocultabilidad='15'
\family default 
\size default 
.
 No convirtamos la Tierra Media en el juego del escondite, no te pases dando
 facilidades para ocultarse.
 Este valor también se tendrá en cuenta a la hora de intentar descubrir
 personajes escondidos en la sala.
 Naturalmente, el valor de la ocultabilidad se verá modificado dependiendo
 del número de personas que en esa sala ya se encuentran ocultas.
\layout Subsection

Objetos en la sala
\layout Standard

Y llegamos a los objetos, otra de las partes más interesantes de una sala.
 En principio un objeto o lo tiene un personaje o lo tiene una sala.
 Cada 
\family typewriter 
\size footnotesize 
<objeto>
\family default 
\size default 
 tiene un 
\family typewriter 
\size footnotesize 
id="identificativo"
\family default 
\size default 
, una 
\family typewriter 
\size footnotesize 
cantidad
\family default 
\size default 
 mayor que 1 (si no se especifica se sobreentiende que es 1) y una 
\family typewriter 
\size footnotesize 
dificultad
\family default 
\size default 
 de encontrarlo (se aplica el mismo criterio que arriba) aparte, naturalmente,
 de un breve texto o una palabra que haga referencia a él.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<objetos> 
\layout Standard


\family typewriter 
\size footnotesize 
<objeto id="pocion01" cantidad="3">una poción recuperadora</objeto> 
\layout Standard


\family typewriter 
\size footnotesize 
<objeto id="espada02" probabilidad="15" maximo="3">una espada brillante</objeto>
 
\layout Standard


\family typewriter 
\size footnotesize 
<objeto id="pocion02" cantidad="2" dificultad="14">una poción curativa</objeto>
\layout Standard


\family typewriter 
\size footnotesize 
</objetos> 
\newline 

\layout Standard

El texto o palabra descriptivo (lo que se encuentra dentro de los signos
 
\family typewriter 
\size footnotesize 
>
\family default 
\size default 
 y 
\family typewriter 
\size footnotesize 
<
\family default 
\size default 
 ) no ha de ser necesariamente el texto 'verdadero' del objeto aunque sí
 tiene que ver algo con él.
 
\layout Standard

Una espada herrumbrosa no debería hacer referencia al fichero 
\family typewriter 
\size footnotesize 
id="vino34"
\family default 
\size default 
, por ejemplo.
 Pero una poción élfica reconstituyente sí podría verse a simple vista como
 una 'poción vitalizante' que hace referencia oculta al fichero con 
\family typewriter 
\size footnotesize 
id="pocion_elfica02"
\family default 
\size default 
.
 Es decir, el personaje verá sólo aquellos objetos con una dificultad aceptable
 (si un objeto no dispone de dificultad se sobreentiende que se ve a simple
 vista) y de éstos, sólo la descripción y la cantidad.
 Si un personaje decide recoger un objeto, automáticamente descubrirá su
 nombre verdadero pero no sus efectos hasta que no lo examine (a no ser
 que ya lo sepa porque haya tenido previamente uno de ellos) , y aún así
 podría no conocerlo todo sobre el objeto en cuestión hasta que no se decida
 a usarlo.
 Además, la 
\family typewriter 
\size footnotesize 
probabilidad
\family default 
\size default 
 marca la facilidad (de 1 a 100) de que aparezca 
\emph on 
espontáneamente
\emph default 
 ese objeto en la sala cuando entra un personaje (o de que desaparezca también
 espontáneamente).
 Esto sirve para lugares en donde de vez en cuando aparecen hierbas curativas
 o pequeños trozos de pan, etc.
 Hay que usar esto con mucho cuidado.
 Recordad que la cantidad marca el número inicial de regalo de esos objetos,
 una vez que se acaben se comenzará a aplicar la probabilidad que será 0
 si no pusiste tal atributo.
 El 
\family typewriter 
\size footnotesize 
maximo
\family default 
\size default 
 indica el tope de número de ese objeto que puede generarse en esa sala.
 Tened en cuenta que si hay una probabilidad alta de que aparezca un objeto
 al entrar un personaje, al cabo de unos días aquello podría ser imposible
 de transitar.
 Si colocamos un 
\family typewriter 
\size footnotesize 
maximo="3"
\family default 
\size default 
 nos aseguramos que nunca se superará esa cantidad para ese objeto en particular
 y esa sala.
 Si no colocas un máximo, se sobreentiende el valor inicial que aparece
 en la sala.
 Si el máximo es 0, no hay límite y la cantidad puede crecer indefinidamente
 ¡cuidado!.
 
\layout Standard

En cualquier caso, cada objeto tiene un fichero y tendrás que leerte el
 apéndice 
\series bold 
Cómo fabricar un objeto
\series default 
 para entender del todo cómo funcionan.
 
\layout Standard

La descripción del objeto sigue las mismas normas que el 
\family typewriter 
\size footnotesize 
<nombre>
\family default 
\size default 
 de un objeto, tal como se explica en el apéndice mencionado.
\layout Subsection

Personajes no jugadores (en construcción)
\layout Standard

Y por último nos encontramos con los encuentros de personajes no jugadores.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<encuentros> 
\layout Standard


\family typewriter 
\size footnotesize 
<encuentro id="unicornio" probabilidad="20" dificultad="30">un unicornio</encuen
tro>
\layout Standard


\family typewriter 
\size footnotesize 
<encuentro id="orco" probabilidad="15" cantidad="2" maximo="4">un orco</encuentr
o> 
\layout Standard


\family typewriter 
\size footnotesize 
</encuentros> 
\series bold 

\newline 

\layout Standard

Un encuentro se compone de -
\family typewriter 
\size footnotesize 
id
\family default 
\size default 
-, que es el fichero en donde residen sus datos, una -
\family typewriter 
\size footnotesize 
probabilidad
\family default 
\size default 
- que indica la facilidad con la que puede aparecer 'mágicamente' en el
 lugar (de 0 a 100 siendo 0 imposible y 100 todo el rato que alguien entre
 en la sala), una -
\family typewriter 
\size footnotesize 
dificultad
\family default 
\size default 
- que marca la fácil o difícil que es descubrir al encuentro en la sala
 y -
\family typewriter 
\size footnotesize 
cantidad
\family default 
\size default 
- que indica el valor inicial del número de ese tipo de encuentros y el
 posterior número de unicornios u orcos que mágicamente pueden aparecer
 cuando entre un personaje en la sala.
 Si se omite la probabilidad, se sobreentiende 0 y si se omite la cantidad
 se sobreentiende 1.
 El máximo funciona igual que en los objetos.
 Luego está la descripción genérica para que sepáis cómo hacer referencia
 a ellos en vuestras acciones de compra-venta, charla o combate.
\layout Subsection

Finalmente...
\layout Standard

Y por último.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
</sala> 
\series bold 

\newline 

\layout Standard

Guardad este fichero como uno de tipo xml.
 
\layout Standard

ejemplo: moria-entrada01.xml 
\layout Standard

Bien, un texto completo quedaría tal que así: 
\layout Standard

---------------------- 
\layout Standard


\family typewriter 
\size footnotesize 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
\layout Standard


\family typewriter 
\size footnotesize 
<!DOCTYPE saladeMinë SYSTEM "mine_sala.dtd"> 
\layout Standard


\family typewriter 
\size footnotesize 
<sala version="1.1" autor="Hirunatan" area="moria" comentario="pruebas">
 
\layout Standard


\family typewriter 
\size footnotesize 
<id>moria-entrada01</id> 
\layout Standard


\family typewriter 
\size footnotesize 
<nombre>la sala nueva</nombre> 
\layout Standard


\family typewriter 
\size footnotesize 
<descripcion> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item>Una sala nueva se aparece ante ti.
 Tanto el techo como las paredes son de color rojizo oscuro y notas que
 la atmósfera es bastante húmeda debido, sin duda, a las filtraciones de
 agua del cercano lago.
 Tres columnas impiden que la estancia se derrumbe.</item> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item dificultad='12'>Hace tiempo que nadie limpia por aquí.</item> 
\layout Standard


\family typewriter 
\size footnotesize 
</descripcion> 
\layout Standard


\family typewriter 
\size footnotesize 
<salidas>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<oeste id="moria-cocina01">la cocina</oeste> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<este dificultad='12' id="moria-salon01">el salon</este>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<norte id="moria-cuartucho01">un cuartucho oscuro</norte>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<sur id="moria-entrada02">la entrada</sur> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<arriba id="moria-bano01">el baño</arriba>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<otro id="moria-tunel01" tipo_cierre="cerradura" datos_cierre="moria-llave_de_tu
nel01" 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
mensaje_cerrado="una reja con un candado bloquea el paso"> un estrecho [tunel]</
otro>
\layout Standard


\family typewriter 
\size footnotesize 
</salidas>
\layout Standard


\family typewriter 
\size footnotesize 
<propiedades tipo='caverna' subtipo ='entrada' volumen='25' luz='56' aura='56'
 combate="si" 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
ocultabilidad='30'/> 
\layout Standard


\family typewriter 
\size footnotesize 
<objetos>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<objeto id="pocion01" cantidad="3">una pocion recuperadora</objeto>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<objeto id="espada02" probabilidad="20" maximo="3">una espada brillante</objeto>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<objeto id="pocion02" cantidad="2" dificultad="14">una pocion curativa</objeto>
 
\layout Standard


\family typewriter 
\size footnotesize 
</objetos> 
\layout Standard


\family typewriter 
\size footnotesize 
<encuentros> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<encuentro id="unicornio" probabilidad="20">un unicornio</encuentro>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<encuentro id="orco" probabilidad="15" dificultad="36" cantidad="3" maximo="4">u
n orco</encuentro>
\layout Standard


\family typewriter 
\size footnotesize 
</encuentros> 
\layout Standard


\family typewriter 
\size footnotesize 
</sala>
\layout Standard

---------------------- 
\layout Standard

Lo que un personaje estándar vería, por ejemplo, sería algo como: 
\newline 

\newline 

\layout Standard

Estás en la sala nueva: 
\newline 

\layout Standard

********* 
\layout Standard

Una sala nueva se aparece ante ti.
 Tanto el techo como las paredes son de color rojizo oscuro y notas que
 la atmósfera es bastante húmeda debido, sin duda, a las filtraciones de
 agua del cercano lago.
 Tres columnas impiden que la estancia se derrumbe.
 
\newline 

\layout Standard

Hace tiempo que nadie limpia por aquí.
\layout Standard

********* 
\newline 

\layout Standard

Al oeste ves la cocina 
\layout Standard

Al este ves el salón 
\layout Standard

Al norte ves un cuartucho oscuro 
\layout Standard

Al sur ves la entrada 
\layout Standard

Hacia arriba ves el baño 
\layout Standard

También ves un estrecho [tunel] 
\newline 

\layout Standard

Aquí se encuentran:
\layout Standard

un unicornio
\layout Standard

un orco
\layout Standard

Galran el elfo
\newline 

\layout Standard

Aquí hay:
\layout Standard

una pocion recuperadora (3)
\layout Standard

una espada brillante
\layout Standard

una pocion curativa (2)
\layout Standard

? 
\layout Standard

------------------------ 
\layout Subsection

Consejos
\layout Enumerate

Sé coherente.
 primero escribe la descripción general, luego las especiales y luego las
 propiedades, asegúrate que el sentido común impera.
 Un baúl en un sitio con 
\family typewriter 
\size footnotesize 
luz="75"
\family default 
\size default 
 y 
\family typewriter 
\size footnotesize 
ocultabilidad="2"
\family default 
\size default 
 no puede tener 
\family typewriter 
\size footnotesize 
dificultad="70"
\family default 
\size default 
 porque es que se ve a simple vista.
 
\layout Enumerate

No hagas lugares generadores de monstruos.
 hacer algo como 
\family typewriter 
\size footnotesize 
<encuentro id="orco03" probabilidad="95" cantidad="10">orco enorme</encuentro>
\family default 
\size default 
 sólo tiene sentido en mitad de Mordor.
 
\layout Enumerate

Para los caminos o lugares cuya descripción es muy repetitiva no te comas
 la cabeza, copia varias veces el mismo fichero, retoca el nombre de ese
 trozo del camino y hacia adonde apuntan las salidas y poco más.
 
\begin_deeper 
\layout Standard

ejemplo:
\layout Standard

Estás en un lugar del camino de Bree: 
\layout Standard

*******
\layout Standard

Un trozo de camino igual que tantos otros.
 Algo de vegetación y surcos de ruedas en la blanda tierra.
 
\layout Standard

*******
\layout Standard

Al norte ves que el camino sigue.
 
\layout Standard

Al sur ves que el camino sigue.
 
\newline 

\layout Standard

No encuentras nada.
 
\layout Standard

Aquí no hay nadie.
 
\layout Standard

? 
\layout Standard

------
\layout Standard

cuyo fichero sería algo como: 
\layout Standard

------------------------- 
\layout Standard


\family typewriter 
\size footnotesize 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> 
\layout Standard


\family typewriter 
\size footnotesize 
<!DOCTYPE saladeMinë SYSTEM "mine_sala.dtd"> 
\layout Standard


\family typewriter 
\size footnotesize 
<sala version="1.0" autor="Aranarth" area="camino_bree"> 
\layout Standard


\family typewriter 
\size footnotesize 
<id>camino_bree-camino34</id> 
\layout Standard


\family typewriter 
\size footnotesize 
<nombre>un lugar del camino de Bree</nombre> 
\layout Standard


\family typewriter 
\size footnotesize 
<descripcion>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item>Un trozo de camino igual que tantos otros.
 Algo de vegetación y surcos de
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
ruedas en la blanda tierra.</item> 
\layout Standard


\family typewriter 
\size footnotesize 
</descripcion> 
\layout Standard


\family typewriter 
\size footnotesize 
<salidas>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<norte id="bree-camino35">que el camino sigue</norte> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<sur id="bree-camino33">que el camino sigue</sur>
\layout Standard


\family typewriter 
\size footnotesize 
</salidas>
\layout Standard


\family typewriter 
\size footnotesize 
<propiedades tipo='campo' subtipo ='llanura' volumen='30' luz='66' aura='58'
 combate="si" 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
ocultabilidad='13'/> 
\layout Standard


\family typewriter 
\size footnotesize 
<objetos> </objetos> 
\layout Standard


\family typewriter 
\size footnotesize 
<encuentros> </encuentros> 
\layout Standard


\family typewriter 
\size footnotesize 
</sala>
\layout Standard

------------------ 
\end_deeper 
\layout Enumerate

Intenta no forzar a que la gente escriba con tildes porque si bien los creadores
 de este juego defendemos la ortografía creemos que dificultaría el disfrute
 de gente con teclados americanos.
 Por lo tanto los objetos o cualquier encuentro o lo que sea que haya que
 escribir su nombre no debe tener ni tildes ni nuestra preciada eñe.
 En lugar de la eñe, escribid una simple 'n'.
 
\layout Enumerate

Todos los atributos que sean 
\family typewriter 
\size footnotesize 
dificultad="3"
\family default 
\size default 
 o 
\family typewriter 
\size footnotesize 
atributo="constitucion"
\family default 
\size default 
 DEBEN tener comillas en los valores.
 Serán no válidos cosas como 
\family typewriter 
\size footnotesize 
aura=3
\family default 
\size default 
 ó 
\family typewriter 
\size footnotesize 
volumen=34
\family default 
\size default 
, cuidad que las comillas son las mismas y no se os escapa una mezcla como
 
\family typewriter 
\size footnotesize 
ocultabilidad='3"
\family default 
\size default 
, por ejemplo.
 
\layout Enumerate

Ningún 
\family typewriter 
\size footnotesize 
<id>
\family default 
\size default 
 debe contener '.xml' al final.
 sólo el fichero en donde se guardan esos datos.
 
\layout Section
\pagebreak_top 
Cómo fabricar un objeto
\layout Standard

Lo primero es abrir un editor de textos simple con un nombre del estilo
 de 
\family typewriter 
abrigo03.xml 
\family default 
o 
\family typewriter 
pocion_elfica11.xml
\family default 
, etc.
 
\layout Subsection

Inicialmente
\layout Standard

Escribimos estas dos líneas tal cual.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> 
\layout Standard


\family typewriter 
\size footnotesize 
<!DOCTYPE objetodeMine SYSTEM "mine_objeto.dtd"> 
\series bold 
\size small 

\newline 

\layout Standard

luego escribimos esta línea modificando en cada caso el autor.
 El comentario y el área son opcionales (el área raras veces se escribe
 ya que los objetos son móviles y no parece que tengan que pertenecer a
 un área concreta).
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<objeto version="1.0" autor="Hirunatan" comentario="una prueba que se me
 ha ocurrido" area="poblado"> 
\layout Subsection

Datos generales
\layout Standard

Ponemos 
\family typewriter 
\size footnotesize 
<id></id>
\family default 
\size default 
 y entremedias el nombre del fichero que estamos editando y que corresponde
 al identificador del objeto SIN .xml.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<id>pocion01</id> 
\series bold 
\size small 

\newline 

\layout Standard

luego ponemos entre 
\family typewriter 
\size footnotesize 
<nombre> 
\family default 
\size default 
y 
\family typewriter 
\size footnotesize 
</nombre>
\family default 
\size default 
 una par o tres de palabras por el que queremos que se conozca nuestro objeto
 (es mucho mejor sin tildes) 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<nombre>una pocion recuperadora</nombre> 
\newline 

\layout Standard

El nombre del objeto normalmente empezará por un artículo, ya que en las
 listas de objetos aparecerá algo así: 
\begin_inset Quotes sld
\end_inset 

Aquí hay una pocion recuperadora
\begin_inset Quotes srd
\end_inset 

.
 
\layout Standard

La primera palabra (que no sea artículo) del nombre servirá para que los
 jugadores se refieran a ese objeto cuando esté dentro de una lista.
 Por ejemplo, un jugador puede escribir 
\family typewriter 
\size footnotesize 
+beber pocion
\family default 
\size default 
 para usar el objeto del ejemplo.
\layout Standard

Si queremos usar otra palabra que no sea la primera, o varias palabras,
 las rodearemos por un par de corchetes [ ].
 En el caso anterior, si queremos que el usuario tenga que escribir 
\family typewriter 
\size footnotesize 
+beber recuperadora
\family default 
\size default 
, escribiremos:
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<nombre>una pocion [recuperadora]</nombre> 
\layout Subsection

Descripción
\layout Standard

Llega la descripción.
 ponemos 
\family typewriter 
\size footnotesize 
<descripcion>
\family default 
\size default 
 y luego tantos 
\family typewriter 
\size footnotesize 
<item>
\family default 
\size default 
's como queramos (mínimo 1).
 No hay que poner muchos, con uno basta, aunque si queremos poner algún
 ítem secreto podemos hacerlo especificando una 
\family typewriter 
\size footnotesize 
dificultad='nn'
\family default 
\size default 
 como aparece en el ejemplo de abajo.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<descripcion> 
\layout Standard


\family typewriter 
\size footnotesize 
<item>Se trata de un elixir fabricado a partir de hojas frescas de diversas
 plantas y que devuelve un poco de vitalidad a la persona que la ingiere.</item>
\layout Standard


\family typewriter 
\size footnotesize 
<item dificultad="40">Devuelve hasta 15 pv.
 si se conoce Hierbas</item> 
\layout Standard


\family typewriter 
\size footnotesize 
</descripcion> 
\size small 

\newline 

\layout Subsection

Propiedades generales
\layout Standard

Y llegamos a las propiedades generales.
 Para 
\family typewriter 
\size footnotesize 
aura
\family default 
\size default 
 consúltese el Apéndice 
\series bold 
Cómo construir una sala
\series default 
.
 
\family typewriter 
\size footnotesize 
volumen
\family default 
\size default 
: lo que ocupa.
 desde 0 (despreciable) hasta infinito.
 Una caja de zapatos ocupa 
\family typewriter 
\size footnotesize 
volumen='0.2'
\family default 
\size default 
.
 
\family typewriter 
\size footnotesize 
volumen='1'
\family default 
\size default 
 es como un humano adulto así que con esa referencia debería valer.
 
\layout Itemize

tipo: madera, metal, cristal, piel, tejido, piedra, organico, cera, liquido
 o barro (de momento).
\layout Itemize

categoria (no es obligatorio): mobiliario, arma, recipiente, joya, armadura,
 herramienta, vestimenta, escritura, recipiente, comestible o accesorio
 (de momento)
\layout Itemize

peso: en kilos 
\layout Itemize

cargas: un valor numérico que indica cuántas veces se puede usar hasta que
 el objeto sea descartado.
 un valor de '0' quiere decir que siempre se puede usar y es típico de objetos
 permanentes.
 
\layout Itemize

valor: en monedas de estaño.
 una barra de pan o una jarra de cerveza cuestan 1me.
 una espada corriente cuesta 8 monedas de plata.
 una hierba curativa muy rara cuesta, por ej, 4 monedas de oro.
 
\begin_deeper 
\layout Standard

TABLA de precios (copiado de MERP) 10me = 1 moneda de cobre 10mc = 1 moneda
 de plata 10mp = 1 moneda de oro 100mo= 1 moneda de mithril 
\layout Standard

Así, si algo cuesta 3 monedas de oro, en valor pon 
\family typewriter 
\size footnotesize 
valor="3000"
\family default 
\size default 
.
 
\end_deeper 
\layout Itemize

estado: el estado en el que está el objeto.
 100 quiere decir que está como nuevo (o lo que 'nuevo' pueda significar
 en cada caso) y si llega a '0' el objeto se pierde irremisiblemente.
 Para subir el valor de estado habrá que utilizar ciertas habilidades.
 Un objeto no tiene por qué comenzar con un estado="100", pero si empieza
 con estado="0" se romperá en cuanto alguien lo coja.
 
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<propiedades tipo="metal" categoria="recipiente" aura="65" volumen="0" peso="0.05
" cargas="1" valor="10" estado="100"/> 
\newline 

\layout Subsection

Usos
\layout Standard

Llamamos uso a una forma concreta de utilizar el objeto.
 Una espada puede empuñarse o arrojarse (dos usos), una botella puede beberse,
 arrojarse o empuñarse (tres usos) y así con muchos objetos.
\layout Standard

La sintaxis de los usos va como sigue:
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<usos>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<uso tipo=
\begin_inset Quotes erd
\end_inset 

xxx
\begin_inset Quotes erd
\end_inset 

 posicion=
\begin_inset Quotes erd
\end_inset 

yyy
\begin_inset Quotes erd
\end_inset 

 gasto=
\begin_inset Quotes erd
\end_inset 

zzz
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

descripción del uso
\begin_inset Quotes erd
\end_inset 

 duracion=
\begin_inset Quotes erd
\end_inset 

nnn
\begin_inset Quotes erd
\end_inset 

>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<requisito atributo=
\begin_inset Quotes erd
\end_inset 

xxx
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

nnn
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

mensaje de error si el requisito no se satisface
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
...
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<efecto atributo=
\begin_inset Quotes erd
\end_inset 

xxx
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

+/- nnn
\begin_inset Quotes erd
\end_inset 

 duracion=
\begin_inset Quotes erd
\end_inset 

nnn
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Descripción del efecto
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
...
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
</uso>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
...
\layout Standard


\family typewriter 
\size footnotesize 
</usos>
\family default 
\size default 

\newline 

\newline 
Como puede apreciarse, un objeto puede tener varios usos y cada uso puede
 tener ninguno o varios requisitos y ninguno o varios efectos.
 Los tipos posibles para el uso son: 
\series bold 
comer
\series default 
, 
\series bold 
beber
\series default 
, 
\series bold 
poner
\series default 
 (ponerse una pieza de ropa, un collar, un anillo, etc), 
\series bold 
lanzar
\series default 
 (algo que se arroja y golpea, causando daño) y 
\series bold 
usar
\series default 
 (uso genérico, como en un artefacto mecánico).
 El uso 
\begin_inset Quotes eld
\end_inset 

lanzar
\begin_inset Quotes erd
\end_inset 

 puede ser obviado ya que todo objeto es 
\emph on 
lanzable
\emph default 
.
 Minë calculará unos requisitos y efectos genéricos para el objeto cuando
 se desee lanzar.
 Sin embargo, Minë no realizará estos cálculos automáticos si encuentra
 un uso de tipo 'lanzar' explícito en el fichero descriptivo del objeto.
\layout Standard

Las diferentes posiciones en las que un objeto se puede 
\series bold 
poner
\series default 
 son: 
\series bold 
cabeza, cuello, tronco, brazo-izq, mano-izq, brazo-der, mano-der, dos-manos,
 pierna-izq, pierna-der, pie-izq, pie-der
\series default 
 (para los otros usos no es necesario indicar posición).
 Naturalmente, un arma puede empuñarse tanto con la mano derecha como con
 la izquierda así que pondremos dos usos diferentes para las dos manos.
 Suponiendo que los PJs son todos diestros (aunque esto es fácilmente cambiable)
 tendremos que los requisitos de destreza con la mano izquierda serán mayores
 y el efecto en el combate será menor.
\layout Standard

El 
\series bold 
gasto
\series default 
 es el número de cargas que gasta este uso.
 0 = no gasta.
 * = gasta todas las que resten.
 Si se cumplen los requisitos pero no hay suficientes cargas para un uso
 concreto Minë avisará al jugador.
\layout Standard

La 
\series bold 
duración
\series default 
 en el efecto se refiere al número de segundos que dura el efecto (pon 0
 si es definitivo, o no pongas 
\family typewriter 
\size footnotesize 
duración=''
\family default 
\size default 
).
 El tiempo lo lleva el servidor de Minë así que será independiente de los
 ordenadores de los jugadores.
 En el momento en el que un uso activa una 
\emph on 
cuenta atrás
\emph default 
, Minë se hace cargo del tiempo y avisará cuando el efecto haya pasado (si
 es menester).
 La duración en el uso se refiere al tiempo que existe ese uso con ese objeto.
 Esto permite añadir usos a objetos durante el juego mediante habilidades
 especiales (encender una antorcha, por ejemplo).
\layout Standard

Los 
\series bold 
requisitos
\series default 
 pueden pedir ciertos valores mínimos a los atributos: 
\series bold 
Fuerza, Destreza, Constitución, Inteligencia, Sabiduría, Carisma, luz
\series default 
 y 
\series bold 
Aura
\series default 
.
 Los efectos incluyen estos atributos y añaden: 
\series bold 
Vida, Ataque
\series default 
 y 
\series bold 
Defensa
\series default 
.
\layout Standard

En nuestro ejemplo particular:
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<usos>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<uso tipo=
\begin_inset Quotes erd
\end_inset 

beber
\begin_inset Quotes erd
\end_inset 

 gasto=
\begin_inset Quotes erd
\end_inset 

1
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Bebes un elixir revitalizante
\begin_inset Quotes erd
\end_inset 

>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<requisito atributo=
\begin_inset Quotes erd
\end_inset 

destreza
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

3
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Eres demasiado torpe para beber la poción
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<requisito atributo=
\begin_inset Quotes erd
\end_inset 

aura
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

47
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Te quema la lengua.
 No puedes beberla
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~

\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<efecto atributo=
\begin_inset Quotes erd
\end_inset 

vida
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

+15
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Te sientes mucho mejor.
 Has recobrado parte de tu vitalidad
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~

\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
</uso>
\layout Standard


\family typewriter 
\size footnotesize 
</usos>
\series bold 

\newline 

\layout Standard

Como vemos, este objeto requiere una mínima coordinación cabeza-mano (
\family typewriter 
\size footnotesize 
destreza='3'
\family default 
\size default 
) y un aura aceptable (
\family typewriter 
\size footnotesize 
aura='47
\family default 
\size default 
').
 Si se cumplen estos requisitos, la vida subirá 15 puntos.
 Es posible que personajes con habilidades especiales puedan sacar más partido
 a esta poción.
\layout Standard

Uniendo todos los pedazos de nuestro fichero descriptor del objeto pocion01,
 tenemos:
\newline 

\layout Standard


\family typewriter 
\size footnotesize 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> 
\layout Standard


\family typewriter 
\size footnotesize 
<!DOCTYPE objetodeMine SYSTEM "mine_objeto.dtd"> 
\layout Standard


\family typewriter 
\size footnotesize 
<objeto version="1.0" autor="Aranarth">
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
<id>pocion01</id> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
<nombre>una pocion recuperadora</nombre> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
<descripcion> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item>Se trata de un elixir fabricado a partir de hojas frescas de diversas
 plantas y que devuelve un poco de vitalidad a la persona que la ingiere.</item>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<item dificultad="40">Devuelve hasta 15 pv.</item> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
</descripcion> 
\newline 
<propiedades aura="65" volumen="0" peso="0.05" cargas="1" valor="10" estado="100"
/> 
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
<usos>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<uso tipo=
\begin_inset Quotes erd
\end_inset 

beber
\begin_inset Quotes erd
\end_inset 

 gasto=
\begin_inset Quotes erd
\end_inset 

1
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Bebes un elixir revitalizante
\begin_inset Quotes erd
\end_inset 

>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<requisito atributo=
\begin_inset Quotes erd
\end_inset 

destreza
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

3
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Eres demasiado torpe para beber la poción
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<requisito atributo=
\begin_inset Quotes erd
\end_inset 

aura
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

47
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Te quema la lengua.
 No puedes beberla
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~

\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
<efecto atributo=
\begin_inset Quotes erd
\end_inset 

vida
\begin_inset Quotes erd
\end_inset 

 valor=
\begin_inset Quotes erd
\end_inset 

+15
\begin_inset Quotes erd
\end_inset 

 msg=
\begin_inset Quotes erd
\end_inset 

Te sientes mucho mejor.
 Has recobrado parte de tu vitalidad
\begin_inset Quotes erd
\end_inset 

/>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~

\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
\SpecialChar ~
\SpecialChar ~
</uso>
\layout Standard


\family typewriter 
\size footnotesize 
\SpecialChar ~
</usos>
\layout Standard


\family typewriter 
\size footnotesize 
</objeto>
\layout Section
\pagebreak_top 
Normas de diseño de código fuente en Minë
\layout Itemize

Es pérdida de tiempo escribir código para que haga cosas en seguida, y luego
 borrarlo y volverlo a escribir para que haga cosas bien.
 Esto sólo es válido para hacer prototipos de alguna técnica nueva que aún
 no se conoce.
\layout Itemize

Para el resto del código, hay que diseñar primero el interfaz de las clases
 y luego el código.
 El interfaz consiste en las declaraciones de clase y de métodos, incluyendo
 los "doc comments".
\layout Itemize

Dicho de otra manera, hay que escribir primero el "contrato" de la clase
 y luego la implementación del contrato (para saber qué significa esto,
 seguir leyendo).
 El contrato es la parte más "creativa" de escribir, si está bien hecho,
 la implementación es casi automática.
\layout Subsection

Diseño por contrato
\layout Paragraph

Tipos Abstractos de Datos
\layout Standard

Según esta técnica, cada clase representa un Tipo Abstracto de Datos, en
 el sentido matemático: es decir, una pieza de información, con propiedades
 (o atributos), y operaciones que realizan cálculos sobre esas propiedades
 o cambian el valor de las mismas.
 El interfaz de la clase debe coincidir con el T.A.D., y el resto de la clase
 debe ser oculto (privado).
 
\layout Description

ejemplo una Sala es una habitación o lugar del juego.
 Sus propiedades son el id, autor, nombre, volumen, personajes que contiene,
 etc.
 Sus operaciones son crear una sala nueva, entrar y salir un personaje,
 etc.
\begin_deeper 
\layout Standard

En Python, el mapa entre T.A.D.
 y clase no está perfectamente definido, pero 
\emph on 
grosso modo
\emph default 
, las propiedades corresponden a los atributos públicos, y las operaciones
 a las funciones miembro, públicas también.
 La parte privada de la clase no tiene reflejo en el T.A.D., y no debe ser
 conocida por ningún otro trozo de código.
\layout Description

ejemplo Sala.id, Sala.autor, etc.
 son atributos, y 
\family typewriter 
\size footnotesize 
Sala.__init__(), Sala.entrar_personaje()
\family default 
\size default 
, etc.
 son funciones miembro.
\end_deeper 
\layout Paragraph

Requisitos de las propiedades: dominios e invariantes
\layout Standard

Las propiedades deben cumplir una serie de requisitos.
 Por un lado, el DOMINIO o conjunto de valores que puede tomar (es decir,
 el tipo: string, int, etc.).
\layout Description

ejemplo El dominio del id de una Sala son los números enteros (int), el
 del autor son las cadenas de caracteres (string), etc.
\begin_deeper 
\layout Standard

En Python, los tipos existen pero no son declarados (es un lenguaje dinámicament
e tipado), e incluso una variable puede adoptar valores de distintos tipos.
 Esto puede ser cómodo en proyectos pequeños, pero en los medianos o grandes,
 hay que indicar los tipos en el interfaz, y para ello se pueden usar los
 strings de documentación.
 Estoy buscando una forma más o menos estándar de hacerlo, pero de momento
 lo haremos así (si un atributo puede tener distintos tipos, se comenta
 también, pero no es algo tan frecuente):
\layout Standard


\family typewriter 
\size footnotesize 
> class Sala:
\layout Standard


\family typewriter 
\size footnotesize 
> """<descripción de la clase, una línea>
\layout Standard


\family typewriter 
\size footnotesize 
>
\layout Standard


\family typewriter 
\size footnotesize 
> <descripción más larga>
\layout Standard


\family typewriter 
\size footnotesize 
>
\layout Standard


\family typewriter 
\size footnotesize 
> Contiene los siguientes atributos:
\layout Standard


\family typewriter 
\size footnotesize 
> - id (string): <descripción>
\layout Standard


\family typewriter 
\size footnotesize 
> - luz (int): <descripción>
\layout Standard


\family typewriter 
\size footnotesize 
> [...]
\layout Standard


\family typewriter 
\size footnotesize 
> """
\layout Standard

Por otro, las propiedades tienen restricciones o condiciones que deben cumplirse
 siempre.
 A estas condiciones se les denomina INVARIANTES.
 Una instancia cuyas propiedades cumplen todas las invariantes es una instancia
 válida.
 NO SE ADMITEN INSTANCIAS NO VÁLIDAS EN NINGÚN MOMENTO, excepto durante
 la creación de la instancia o la ejecución de una única de sus funciones
 miembro públicas.
 A la salida de cualquier función miembro pública, el código debe asegurar
 que ninguna invariante se ha roto, en ningún caso (esto no es necesario
 en las privadas).
\layout Description

ejemplo son invariantes 
\family typewriter 
\size footnotesize 
Sala.area != None, aura in range(0,100), n_jugadores >= 0, n_jugadores <=
 len(personajes)
\family default 
\size default 
, etc.
 El 
\family typewriter 
\size footnotesize 
__init__()
\family default 
\size default 
 debe dar valores a todos los atributos que satisfagan todas las invariantes.
 No se admite, por ejemplo, crear una sala con area == None, y luego darle
 un valor más tarde.
 Sí se admite que el 
\family typewriter 
\size footnotesize 
__init__()
\family default 
\size default 
 la inicialice a None y más tarde llame a una función que lee el área de
 un fichero y actualice el valor, siempre y cuando todo ello ocurra dentro
 de la ejecución de 
\family typewriter 
\size footnotesize 
__init__()
\family default 
\size default 
.
\layout Standard

En Python no hay ningún mecanismo para expresar invariantes, así que lo
 haremos también en la documentación.
 También estoy buscando una forma estándar.
 De momento será como sigue.
 Durante la depuración, si se quiere verificar algunas invariantes, se puede
 usar la instrucción assert justo antes del return de todas las funciones
 (no hacerlo sistemáticamente con todas, porque puede cargar mucho).
\layout Standard


\family typewriter 
\size footnotesize 
> class Sala:
\layout Standard


\family typewriter 
\size footnotesize 
> """[...]
\layout Standard


\family typewriter 
\size footnotesize 
> [...]
\layout Standard


\family typewriter 
\size footnotesize 
> Invariantes:
\layout Standard


\family typewriter 
\size footnotesize 
> id != None
\layout Standard


\family typewriter 
\size footnotesize 
> aura in range(0,100)
\layout Standard


\family typewriter 
\size footnotesize 
> n_jugadores <= len(personajes)
\layout Standard


\family typewriter 
\size footnotesize 
> [...]
\layout Standard


\family typewriter 
\size footnotesize 
> """
\layout Standard


\family typewriter 
\size footnotesize 
>
\layout Standard


\family typewriter 
\size footnotesize 
> def entrar_personaje(self, personaje):
\layout Standard


\family typewriter 
\size footnotesize 
> [...]
\layout Standard


\family typewriter 
\size footnotesize 
> assert self.n_jugadores <= len(self.personajes)
\layout Standard


\family typewriter 
\size footnotesize 
>
\layout Standard


\family typewriter 
\size footnotesize 
> def salir_personaje(self, personaje):
\layout Standard


\family typewriter 
\size footnotesize 
> [...]
\layout Standard


\family typewriter 
\size footnotesize 
> assert self.n_jugadores <= len(self.personajes)
\end_deeper 
\layout Paragraph

Requisitos de las operaciones: declaración, precondiciones y postcondiciones
\layout Standard

Las operaciones también tienen requisitos.
 Por un lado, está la DECLARACIÓN (el nombre y tipo de los parámetros, y
 el tipo de valor devuelto).
\layout Description

ejemplo, la operación "entrar personaje en una sala" tiene un parámetro
 que es la sala y otro que es el personaje que entra; sus tipos son las
 clases Sala y Personaje.
 No devuelve ningún valor.
\begin_deeper 
\layout Standard

En Python los parámetros vienen explícitos, y los tipos se pueden poner
 en el comentario, si no son obvios.
 Pueden ser obvios en los siguientes casos: si el nombre coincide con el
 de una clase, el tipo es esa clase; si coincide con el de un atributo de
 la clase actual, el tipo es el mismo que el del atributo; si el tipo es
 int o string, en muchos casos queda claro con sólo el nombre.
 Lo mismo con el valor de retorno.
\layout Standard


\family typewriter 
\size footnotesize 
> def entrar_personaje(self, personaje):
\layout Standard


\family typewriter 
\size footnotesize 
> """[...]
\layout Standard


\family typewriter 
\size footnotesize 
> self(Sala) -- obvio, el self siempre está claro
\layout Standard


\family typewriter 
\size footnotesize 
> personaje(Personaje) -- obvio, mismo nombre que clase
\layout Standard


\family typewriter 
\size footnotesize 
> """
\layout Standard


\family typewriter 
\size footnotesize 
>
\layout Standard


\family typewriter 
\size footnotesize 
> def mensaje_filtrado(self, mensaje, idioma, oyente):
\layout Standard


\family typewriter 
\size footnotesize 
> """[...]
\layout Standard


\family typewriter 
\size footnotesize 
> mensaje(string) -- puede ser obvio, no hay clase mensaje así que
\layout Standard


\family typewriter 
\size footnotesize 
> será un string
\layout Standard


\family typewriter 
\size footnotesize 
> idioma(Idioma) -- obvio, nombre de clase
\layout Standard


\family typewriter 
\size footnotesize 
> oyente(Personaje) -- en principio no es obvio, pero se sabe
\layout Standard


\family typewriter 
\size footnotesize 
> por la descripción del método
\layout Standard


\family typewriter 
\size footnotesize 
> 
\layout Standard


\family typewriter 
\size footnotesize 
> Devuelve string -- puede ser obvio también por la descripción
\layout Standard


\family typewriter 
\size footnotesize 
> """
\layout Standard

Las PRECONDICIONES son requisitos que hay que cumplir antes de llamar a
 una operación.
 Pueden referirse a los parámetros de la operación o a las propiedades de
 la clase.
 Su comprobación es responsabilidad del código llamante (lo puede hacer
 bien explícitamente, con algún if, o bien apoyándose en una invariante
 o postcondición).
 La función debe asumir que las precondiciones se cumplen, y no debe volverlas
 a chequear.
 Así se asegura que cada chequeo se realiza sólo una vez, y se evitan redundanci
as.
\layout Description

ejemplo, la sala tiene una invariante que dice que el aura es mayor que
 0.
 Si el constructor lee los datos de la sala de un fichero, al leer el aura
 debe comprobar que cumple la invariante, y si no, dar un error y no crear
 la sala.
 A partir de ahí, todo el resto del código asume que el aura es mayor que
 0, y se puede pasar como parámetro a una función que tenga esto como precondici
ón.
\layout Standard

En Python las precondiciones las colocaremos en el texto del comentario,
 de la
\layout Standard

siguiente manera.
 Durante la depuración, también se puede usar assert para
\layout Standard

comprobar algunas precondiciones, justo al principio de la función:
\layout Standard


\family typewriter 
\size footnotesize 
> def salir_personaje(self, personaje):
\layout Standard


\family typewriter 
\size footnotesize 
> """[...]
\layout Standard


\family typewriter 
\size footnotesize 
> Requiere:
\layout Standard


\family typewriter 
\size footnotesize 
> personaje != None
\layout Standard


\family typewriter 
\size footnotesize 
> personaje in self.personajes.values()
\layout Standard


\family typewriter 
\size footnotesize 
> [...]
\layout Standard


\family typewriter 
\size footnotesize 
> """
\layout Standard


\family typewriter 
\size footnotesize 
> assert personaje in self.personajes.values()
\layout Standard

Las POSTCONDICIONES son requisitos que una operación se compromete a asegurar
 que se cumplen una vez que la misma haya terminado con éxito.
 Pueden referirse a las propiedades de la clase o al valor de retorno, si
 lo hay.
 El código llamante no debe volverlos a chequear.
 En cierta forma, las postcondiciones representan la información semántica
 de la operación (su utilidad prevista), frente a la información sintáctica
 de la declaración.
\layout Description

ejemplo, la operación salir personaje de una sala asegura que si se completa
 con éxito, el personaje ya no está dentro de la sala.
\layout Standard

En Python, se colocan de forma similar a las precondiciones.
 Si se usa el assert, se puede poner justo antes de volver, o en el código
 llamante justo después de hacer la llamada:
\layout Standard


\family typewriter 
\size footnotesize 
> def salir_personaje(self, personaje):
\layout Standard


\family typewriter 
\size footnotesize 
> """[...]
\layout Standard


\family typewriter 
\size footnotesize 
> Asegura:
\layout Standard


\family typewriter 
\size footnotesize 
> personaje not in self.personajes.values()
\layout Standard


\family typewriter 
\size footnotesize 
> """
\end_deeper 
\layout Paragraph

El contrato
\layout Standard

El conjunto de requisitos de propiedades y operaciones se conoce como el
 CONTRATO del T.A.D.
 Se llama así porque se asemeja a un contrato real: existe un proveedor
 (la clase), clientes (cualquiera que lea sus propiedades o use sus operaciones)
 y cláusulas (los requisitos).
\layout Standard

Igual que en un contrato real, cada parte se compromete a cumplir su obligación,
 y hay un sistema para tratar los incumplimientos.
 El cliente se compromete a asegurar las precondiciones.
 Si no se puede cumplir alguna de ellas, no debe llamar a la operación en
 ningún caso.
 Una función no debe añadir código para protegerse contra precondiciones
 no cumplidas (puede permitirse incluso dejar el ordenador colgado o matar
 el programa si quiere), ya que nunca se va a dar el caso cuando el programa
 esté depurado (durante la depuración se puede usar assert).
\layout Standard

El constructor de la clase debe asegurar todas las invariantes.
 Si no es posible cumplir alguna de ellas, debe lanzar una EXCEPCIÓN y abortar
 la creación de la instancia.
 En ese caso el cliente debe tirar la instancia a medias sin usarla.
\layout Standard

Finalmente, las operaciones de la clase se comprometen a verificar tanto
 las invariantes como las postcondiciones.
 Si no pueden cumplir alguna, se debe lanzar una EXCEPCIÓN.
 En ese caso, puede que algunas postcondiciones estén cumplidas y otras
 no (no se puede asegurar), pero al menos la instancia tiene que seguir
 siendo válida y la operación tiene que restaurar todas las invariantes
 que puedan estar temporalmente deshabilitadas.
\layout Standard

Las excepciones no son un mecanismo de control de flujo.
 Sólo deberían ocurrir en caso de incumplimiento de invariantes o postcondicione
s, y en casos excepcionales (tipo disco duro lleno, datos corruptos, versiones
 incompatibles, etc.).
 Para situaciones que puedan ocurrir en una ejecución normal del programa
 (por ejemplo, el usuario introduce un nombre que no existe, se ha llegado
 al final de una lista, etc.) es mejor usar condiciones explícitas (con if,
 while, etc.).
 Del mismo modo, las excepciones sólo se deben capturar en dos casos: cuando
 haya que restaurar alguna invariante, y luego seguir pasando la excepción
 hacia arriba, o cuando se llegue a un punto en el que se pueda volver a
 intentar la operación.
 En particular está prohibido capturar una excepción y luego hacer return
 normal, devolviendo un valor falso o que no cumple las postcondiciones.
\layout Section
\pagebreak_top 
Descripción formal de los ficheros de salas y objetos
\layout Standard

Un DTD (Document Type Definition) es la plantilla que especifica de manera
 formal el contenido de un fichero XML, para que un programa lo pueda leer.
 Si no sabes XML, no es necesario que entiendas estas plantillas, son útiles
 para los colaboradores que quieran participar en la parte de código que
 trata los ficheros.
\layout Subsection

DTD de una sala
\layout Standard


\begin_inset Include \verbatiminput{../DTD/mine_sala.dtd}
preview false

\end_inset 


\layout Subsection

DTD de un objeto
\layout Standard


\begin_inset Include \verbatiminput{../DTD/mine_objeto.dtd}
preview false

\end_inset 


\the_end
