jueves, enero 28, 2010

Creación de personajes: segundo paso

Había un detalle molestándome en los últimos días y eran las habilidades iniciales del personaje. Sí, básicamente el background dice que eras un vago incorregible (en el caso de los personajes masculinos), pero incluso los vagos son obligados a aprender algo. Y para los personajes femeninos la cosa es algo distinta. En fin, que seas hombre o mujer, la vida no se inicia justo en el punto que empieza el juego, algo deberías tener en la cabeza, además de pelo.
Y nada más óptimo para resolver este problema que introducir un segundo paso en la creación de personajes, en el cual puedes escoger varias habilidades iniciales, supongo que tres o cinco serían un buen número. No sé aún si ofrecer la posibilidad de invertir más de uno de esos cinco puntos en potenciar una habilidad en específico. Aparte de las habilidades opcionales, algunas razas recibirán bonificaciones en forma de habilidades gratis, además de atributos. Técnicamente esto no tiene mucha complicación, sólo debería tomarme un par de horas implementar lo necesario, de hecho, ayer hice el diseño del segundo diálogo en el editor de layouts. Supongo que este fin de semana lo tendré terminado.

miércoles, enero 27, 2010

Reajuste de diálogos

Hace dos días me enfrenté a la tarea de agregar una misión a un diálogo. Francamente lo dejé después de un rato. Así que volví a pensar cómo lograr un sistema más sencillo, pero sin perder la potencia del actual. El sistema permite hacer cualquier cosa, ya que es un script que tiene acceso a toda la información del jugador y su interlocutor. Y por eso mismo se puede volver una pesadilla arreglar algo que ya está hecho.
Luego de un rato valorando un formato basado en XML con Lua incrustado, me enfoqué en otra idea: dividir los nodos en funciones, en vez de meterlos en un if-then enorme. Hice una prueba rápida y funcionó. La cosa es sencilla: se crea una tabla (en Lua, una tabla es como un arreglo) donde cada elemento es una función. Al ejecutarse el script, se recibe el índice de toda la vida indicando dónde estamos, pero esta vez se usa para invocar la función correcta. Y la cosa queda más o menos así:

Dialog = {}

Dialog["1"] = function(player, npc)

end
*
*
-- El parametro q es el indice a ejecutar
Dialog[q](ent_jugador, ent_npc)

Eso, a grandes rasgos. La mejora no es enorme, pero los diálogos son más legibles y se evita el excesivo anidamiento de condiciones. Este es el método que se utiliza en los ejemplos del libro de Buckland para la máquina de estados finitos.

martes, enero 26, 2010

Fallout MMO, posible beta para el 2012

Leo en Joystiq que Interplay sigue adelante con su MMORPG basado en el universo de Fallout, nombre código Project V13, a pesar de los problemas legales con Bethesda. El estudio ha concretado una alianza con Masthead Studios, quien proporciona la tecnología para el desarrollo del juego (utilizada en su proyecto Earthrise) y además han anunciado una posible fecha para el lanzamiento de la beta: 2012. Curioso, no les parece? Me pregunto si tendremos tiempo de meterle mano antes que la lluvia de neutrinos nos mande a un universo post-apocalíptico.
Los CEO de ambas compañías se han deshecho en halagos: Herve Caen (Interplay) acerca de la tecnología de Masthead, y Atanas Atanasov (Masthead) sobre las innovativas características de Project V13.
Pero no ha sido lo único acerca de Project V13 en estos días. Resulta que también Mark O'Green, quien escribió la mayoría de los diálogos de Fallout 1 y 2, se une a Interplay, que también cuenta con Chris Taylor. Esperemos que Interplay logre asegurar el financiamiento del proyecto durante esos dos largos años que tiene por delante hasta la beta.

Centralizando todo

Ayer inicié el trabajo de mover la información del juego a una sola clase. En realidad esto no es esencial, pero tenía esta idea desde hace tiempo y así es como quiero hacerlo. La instancia de esta clase contendrá todo lo referente al juego actual: hora y fecha, lista de entidades, mapas, contenedores, etc. Esto es un trabajito un poco largo, porque un montón de código debe ser adaptado, en C y en Lua, para que acceda a las listas de entidades a través de la nueva clase. Y por supuesto aparecerán los inevitables bugs. 
También agregué una nueva quest al juego, aunque depende de implementar eventos adicionales para las entidades porque se trata de liquidar a alguien.

lunes, enero 25, 2010

3 en raya

Al parecer estoy a punto de implantar algún nuevo record mundial de bugs consecutivos. Al fin logré descubrir qué sucedía con __setitem__, que resultó ser que estaba asignando un valor a un índice inexistente, debido a un atributo que eliminé. Creo que tendré que implementar alguna forma de validar los valores que los scripts tratan de asignar a ciertas cosas.
Sin emabrgo, apenas arreglé ese apareció otro, el juego se caía más o menos ne el mismo lugar. La cuestió era código sin probar que había añadido mientras el anterior bug no me dejaba ejecutar la aplicación. Me tomó un buen rato descubrir que el problema no estaba en los scripts, sino en un parseo incorrecto del XML de los mapas del juego. Y al fin logré entrar otra vez en el juego, solo para descubrir que ahora no funciona el código de movimiento de los personajes en modo isométrico. El modelo simplemente gira y se queda caminando en el mismo lugar. Nada, que hay veces en que uno maldice la hora en que se le ocurrió programar. Me pregunto si cuando solucione ese aparecerá un cuarto problema.
A propósito, busco hosting para proyectos libres, que sea gratis, tenga SVN y espacio web. Obviamente, ubicado fuera de USA.

domingo, enero 24, 2010

Tú también Sourceforge?

Hoy me encontré con un error raro mientras intentaba emerger unos paquetes de KDE. El paquete en cuestión (xine) se descarga directo de Sourceforge, me daba Forbidden, y como es opcional para emerger Phonon, lo omití. Revisando la lista de correo de software libre, me entero de que el problema es que Sourceforge ha pasado de listar a Cuba entre los países que no pueden usar sus servicios a denegar activamente las descargas, tal como hacen Sun y Google Code.   O sea, que cientos de miles de softwares ya no pueden ser descargados de su hosting oficial desde aquí, aún cuando sus autores no sean norteamericanos y la política les toque de los tres el más largo.

sábado, enero 23, 2010

Código roto

Esto de la programación tiene sus cosas. Es muy común encontrarse todo tipo de problemas del Orinoco, que tú no sabes ni yo tampoco, como esto que me acaba de ocurrir.
Como he dicho en varias ocasiones, utilizo SWIG para generar el código que permite a los scripts en Lua acceder a las variables de la aplicación en C++. SWIG maneja casi todo tipo de cosas, incluyendo operadores, pero por desgracia, no maneja arreglos. El operador [] se emula mediante unas funciones auxiliares, __setitem__/__getitem__ muy sencillas y que funcionan (valga la redundancia) bastante bien. Hasta hace una semana. Algo he cambiado que provoca un error: Error in __setitem__ (arg 2), expected 'int' got 'nil'. El valor no es asignado, con el consiguiente fallo de toda la aplicación poco después.
Y por supuesto, en la lista de correo de Lua nadie tiene idea de qué puede estar pasando.

viernes, enero 22, 2010

Rediseñado las habilidades

Esta era una tarea que había dejado para después, ya que ni siquiera tenía un prototipo jugable del proyecto. Desde el principio la idea fue tener atributos básicos y habilidades, como todo RPG que se precie de serlo. El caso es que ya es hora que me tome esto en serio y defina un conjunto de habilidades raíz, las cuales tendrán otras ramificaciones que serán las habilidades que en verdad podremos ejecutar.
Por ejemplo, Magia. Magia influye en la potencia de los hechizos y su probabilidad de fallo, y es la habilidad que podremos nivelar a medida que usemos hechizos. Cualquier jugador puede tener esta habilidad, aún cuando no sea mago. La diferencia es que no tendrás acceso a todo el arsenal de hechizos si eres Mondongo Oblongo, guerrero de profesión y con el cerebro de un protozoo. Sin embargo esto permite cositas tales como que los Antiguos sean guerreros con excepcionales dotes para trucos mágicos. O viceversa: que puedas desarrollar un mago que sea un gran espadachín.
La lista de habilidades raíz es solo una nebulosa en mi cabeza, por el momento. Me falta definir si las diferentes armas de cuerpo a cuerpo serán regidas por habilidades distintas o por una sola, y un conjunto extra como oratoria o comercio.

Tai Chi

He retomado los entrenamientos diarios, esta vez de Tai Chi tradicional, para complementar un poco el EBMAS que ya no puedo practicar a menudo. En general aquí se hace mucho Tai Chi, pero deportivo (la forma 24, forma de espada, etc). Así que el 90% de los practicantes son ancianos, el resto, niños que tienen potencial como competidores.
En cambio, el Tai Chi tradicional, tal como lo hace un reducido número de personas, busca volver a la esencia del estilo como un todo: arte marcial y método terapéutico. Porque obviamente, el Tai Chi no se inventó solo para que los ancianitos chinos ejercitaran el cuerpo, si no también para que los maestros maltrataran el cuerpo de su oponente.
Las similitudes con el Wing Tzung (o Wing Tsun, Wing Chun, como querráis llamarle) son muchas y me da la ligera impresión de que éste se deriva del Tai Chi. Donde el WS usa una estructura triangular, el Tai Chi usa el círculo, ambos hacen énfasis en redirigir los golpes con movimientos de tronco, mantener el contacto, atacar en vez de defender y la pelea a muy corta distancia con combinaciones de varios golpes. Los desplazamientos son muy parecidos, y tantos otros detalles que no me extenderé para no abrumarlos con cosas que no puedo ilustrar adecuadamente.
En fin, que si alguien piensa que el Tai Chi no es un buen método de defensa personal, está muy equivocado.

jueves, enero 21, 2010

Ptex es ahora open source

Ptex es una biblioteca de mapeado de texturas desarrollada por los estudios Disney y utilizada en la película Bolt. Ptex te permite olvidarte del mapeado UV, ya que cada cara recibe una textura individual, ofrece un formato propio para almacenar eficientemente cientos de texturas y proporciona E/S  cacheada y filtrado de alta calidad.
Ahora está disponible bajo licencia BSD, o sea, que básicamente puedes hacer lo que te dé la gana con ella. Veamos cuánto penetra esta opción en el mundo de los videojuegos y herramientas libres.

miércoles, enero 20, 2010

Hechos sobre Jack Bauer

Ahora que estamos en temporada de 24, algunos hechos sobre Jack Bauer:

No puedes comparar a Jack Bauer con Jesucristo. Jesucristo solo resucitó una vez.
Matar a Jack Bauer no lo mata. Solo lo enoja.
Jack Bauer puede respirar el gas nervioso Centox y sobrevivir. Solo le gusta contener la respiración.
En Santa Monica High, salir con Kim Bauer era conocido como "el beso de la muerte".
Jack Bauer puede morderse su propio codo. En menos de 24 horas.
Jack Bauer no muere. Simplemente se queda dormido cuando la tortura se vuelve aburrida.
Jack Bauer no esquiva las balas. Las balas lo esquivan a él.
Si Jack Bauer fuera gay, se llamaría Chuck Norris.
Jack Bauer no sigue los protocolos, los protocolos lo siguen a él.
Jack no cree en las Leyes de Murphy, solo en la Ley de Bauer: Si algo puede ir mal, se resolverá en 24 horas.

SVN actualizado

Estoy en proceso de actualizar el repositorio SVN en Sourceforge con los últimos cambios y arreglos. Ya hay una ventana para revisar el inventario (vacío, a menos que cumplas la misión inicial) y otra para comerciar, aún sin implementar pues no he dispuesto de tiempo suficiente para programar.
Así que si alguien quiere tomarse la molestia de bajar el svn (las indicaciones están en algún sitio aquí), el código debería funcionar a menos que yo haya olvidado algo. Antes de compilar es necesario regenerar los wrappers, que esos sí no me preocupo de tenerlos actualizados. Para ello basta con ejecutar pkgs/swig-regen.sh. Para los usuarios de Windows tendré que buscar una variante, pero es que me resulta más cómodo manejar algunas cosas desde bash.

martes, enero 19, 2010

Ogre y drivers open source

Tenía pensado probar el proyecto con los controladores abiertos de ATI, el viejo radeon que soporta todas las tarjetas obsoletas, pero resulta que Ogre no funciona con ellos. Si no recuerdo mal, no sucedía así antes. Pregunté en el foro y no me han confirmado el problema, pero el error que da ("Problems getting GL version string using glGetString") sí está documentado como problemas con el driver, generalmente cuando no es el oficial. Tendré que seguir esperando hasta que llegue la nueva tarjeta, a ver cómo me va con Nvidia.
Sin embargo esto produce un gran problema: los usuarios que quieran seguir con sus controladores radeon abiertos no podrán jugar. Y siempre los hay, sobre todo los que no pueden actualizar su hardware obsoleto.

lunes, enero 18, 2010

Casi inventario

El fin de semana fue bastante complejo y no tan productivo como esperaba. Pero algo hice, y el prototipo de inventario ya funciona. Falta algo esencial que voy a investigar ahora  y es la implementación de Drag n Drop en CEGUI. La ventana de inventario es sencilla, más bien inspirada en la de Fallout 3: una lista de nombres de objetos y debajo la imagen correspondiente al objeto seleccionado y su descripción. Lo mismo se aplica para la ventana de comercio.
Creo que ya es hora de tomarme en serio los Imagesets de CEGUI, que había pospuesto desde que inicié el proyecto. Ya veremos cómo me va con ellos.

domingo, enero 17, 2010

24

¡Hoy comienza 24! Jack Bauer vuelve en otra temporada más para matar terroristas, torturar y hacer todas esas cosas desagradables que nos gusta tanto ver en la pantalla pero que no queremos que nos hagan a nosotros. En fin, preparen sus clientes P2P, porque empieza la fiesta. O mejor dicho, se reinicia, pues la fiesta no para, solo se detiene durante algunos períodos del año.

viernes, enero 15, 2010

Inventario y comercio

Dede hace un tiempo que quiero comenzar a trabajar en el inventario del personaje, pero usar el inventario requiere de implementar la ventana de inventarios. Así al menos sabes si tienes algo en los bolsillos, ¿no? Ayer dediqué un rato a diseñarla y además, hice un trabajo inicial en la ventana de comercio. Por suerte viene un fin de semana que pienso dedicar a conectar las ventanas con el juego, eso, si no me da por hacer otra cosa.
Otro objetivo que tengo en mente es incluir algunas quests más, lo suficiente para alcanzar un nivel y reorganizar el sistema de habilidades. Aunque las habilidades sigan categorizadas, creo que es mejor mostrarlas en una lista única. Luego explicaré bien esta idea.

jueves, enero 14, 2010

No habrá Sabayon

Al menos para mí. Luego de una larga descarga, tres DVDs y un CD utilizados en vano, preguntar en el foro y hacer varios intentos, he tenido que dejarlo. El LiveDVD 5.0 no arranca y el CoreCD 5.1 menos aún. Así que volvemos a plain Gentoo. No sé si arriesgarme a hacer el intento en casa.

martes, enero 12, 2010

Otro temblor

Esta vez no fue, pero si notan que me ausento durante varias semanas y no aparezco más, coincidentemente luego de un temblor en la ciudad de Santiago de Cuba, pues ya saben. En los últimos dos meses han habido tres sacudidas bastante perceptibles, de más de tres grados.

domingo, enero 10, 2010

Anime en Cuba

El gran problema en este país es la falta de comunicación. Justo hace un par de días acabo de encontrarme con el trailer de Orishas, una película de animación hecha por jóvenes realizadores cubanos y de la que casi nadie sabe nada, me atrevería a decir. Es un poco temprano y no me gusta sacar conclusiones apresuradas a  partir de solo un trailer, pero esta producción pinta genial. Y si quieren comprobarlo pues véanlo aquí:



Y es que talento sobra, lo que no hay es recursos ni financiamiento para apoyar esots proyectos. Pueden ver una sinopsis de la peli aquí, ver otro proyecto muy interesante aquí (pues no es solo Orishas, hay más) y otro, este con un estilo más a lo Pixar, como lo definen sus autores.

sábado, enero 09, 2010

Combates en grupo

En estos días no he podido sentarme a programar como debe ser, pero vengo dándole vueltas a las batallas en grupo, porque entre muchos es más divertido. Una de las cosas que pienso lograr es tener verdaderos combates, no cuatro gatos contra un par de infelices ogros.De hecho (aunque esto es solo una gran masturbación mental), el juego debe empezar con una batalla masiva con no menos de quince o veinte participantes por cada bando.
He ideado un método un poco burdo de propagar las acciones en un grupo, incluso una facción completa, que pienso implementar este fin de semana. Pero servirá mientras aparezca la solución óptima.

viernes, enero 08, 2010

Por qué usar OpenGL y no DirectX

Este artículo ha estado circulando como fuego en paja seca hoy. Incluso ya está en Slashdot, y supongo que muy pronto estará en Barrapunto, con su habitual montón de comentarios inútiles, insultos y etcéteras. Una lecturo esencial para cualqueir desarrollador de juegos.

Jugando con Blender 2.5

Si quieres arriesgarte a probar versiones alfa de Blender 2.5, puedes encontrar builds del repositorio en www.graphicall.org, sitio que descubrí gracias al blog de Farsthary, nuestro desarrollador de Blender cubano (ahí tienen, para que no se rían de los pinareños, ya quisieran las otras provincias tener un genio como él). Recomiendo además python 3.1, si aún no lo tienes

Este es el splash,  muy guay y promocionando Durian.


Abrir archivos ahora es muchísmo más cómodo. Y si no, por lo menos se ve muchísimo mejor.

Este archivo es de la versión anterior, así que arrastra algunas opciones de la interfaz que estaba usando en el 2.49.


Este es el proyecto inicial, o sea, lo que tenemos cuando ejecutamos Blender. Aquí sí me quedé perdido, nótese el cambio total de la interfaz. Baste decir que no logré agregar un nuevo objeto a la escena, ni dividir  la pantalla como en el proyecto de la imagen anterior.
Por supuesto, esto se debe mayormente a ignorancia mía (tal vez algún bug perdido también), sin duda alguna apoyo 100% la  nueva interfaz. Estoy seguro que para los expertos será cuestión de horas acostumbrarse.

jueves, enero 07, 2010

Scripts funcionando

Al fin corregí el problema de la carga de scripts y otro fallo muy molesto que no me permitía acceder al GUI del juego (y de hecho creo que abortaba el script). Este último se debía a algo muy raro, no puedo obtener el puntero al GUI hasta después de haber obtenido los punteros a las entidades involucradas en el script. Curioso.
Al final, tuve que volver atrás a los ifstream de C++. Pero aunque no usé el código que me sugirió spoke, tengoque decir qeu su ayuda fue invaluable, ya que me impulsó  a estudiar el problema a fondo. Además, atrajo mi interés hacia las funciones de Ogre para manejo de archivos, que posiblemente revisite más tarde a ver si les puedo sacar provecho. Creo que tendré que ponerlo en los créditos como uno de los contribuyentes.
Al final, el código es el siguiente:

string loadFile(const char* filename)
{
  string str;
  ifstream ifs(filename, ios::binary);
  if(!ifs.is_open())
  {
    throw exception("file could not be opened");
  }

  long size;
  ifs.seekg(0, ios::end);
  size = ifs.tellg();
  ifs.seekg(0, ios::beg);
  str.resize(size);
  ifs.read(&str[0], size);

  return str;
}

 Y hablando de contribuciones, hoy debo reorganizar un poco el SVN del proyecto en sourceforge y oficialmente se abre la temporada de reclutamiento (otra vez). Se necesitan desarrolladores experimentados ocn Ogre, Lua, OpenAL o Bullet, que conozcan Code::Blocks, aunqeu también me interesarían un mantenedor para Visual C++. En el caso de los artistas, deben usar Blender, Gimp, en fin, solo software libre.
Si no eres desarrollador ni artista aún puedes contribuir: sígueme en twitter, si tienes blog enlaza a los posts de imágenes en este, twitéalos, en fin, ayuda a difundir un poco la noticia. Minetras más personas tenga empujándome, más obligado me veré a disciplinarme y desarrollar más serio. Y  por supuesto, se aceptan sugerencias.

miércoles, enero 06, 2010

Todo el mundo está hablando de Fallout: New Vegas

Se han filtrado algunos detalles del esperado Fallout: New Vegas de Obsidian, que debería salir este año. Digo debería, porque el título recién fue anunciado el año pasado y viendo el retraso de Alpha Protocol... me disculpan si no soy muy optimista al respecto. Como mencioné antes, el juego es muy similar al Fallout 3 de Bethesda, pero esta vez sí tendremos vehículos para explorar un mundo aún mayor, las primeras horas serán diferentes en dependencia del background escogido al crear el personaje, y el sistema SPECIAL será igual al de Fallout 3, que a su vez es igual al de Fallout 1/2 y supongo que sea porque no podía ser de otra forma. Vamos, que sería una tontería cambiar algo tan esencial como el SPECIAL de Fallout y aún así decir que el juego es un Fallout.
Por lo demás, hay que seguir esperando hasta que se filtren o publiquen imágenes y videos.

martes, enero 05, 2010

Nuevas imágenes

Lesdebía las imágenes desde hace tiempo, y al fin están aquí.









 
Vuelve el menú principal, presentamos la creación de personajes y ya se pueden dar porrazos.

lunes, enero 04, 2010

Problemas con los scripts, otra vez

Ayer trabajé para implementar la sugerencia que me dejó spoke en el comentario para solucionar el raro problema de los scripts en Windows. No me había percatado que Ogre tiene sus propias funciones de manejo de archivos, que pueden ser muy útiles. Me tomó cierto tiempo cogerles la vuelta y desde ahora les doy  un consejo: es necesario cerrar adecuadamente el archivo. Aún cuando la clase era una variable local de una función, al volver a llamar dicha función la aplicación explotaba si no se cerraba el archivo. Cerrarlo destruye la instancia y elimina cualqueir problema.
Luego encontré otro fallo muy singular. Los scripts estaban dando errores sintácticos graves, al revisarlos me percaté que solo el primero se carga bien, los siguientes se "contaminan" de alguna forma con el valor anterior de la cadena. He intentado usando la función clear() de std::string, igualando la cadena a "", pero nada. En cambio, esto no sucede en Linux. ¿Alguien me puede dar una idea de qué está sucediendo? Porque la verdad que me he quedado perdido en un campo de lechugas.

domingo, enero 03, 2010

Star Wars: The Force Unleashed

Tengo suerte para decepcionarme con lso juegos de Star Wars. Primero fue KOTOR II, ni los gráficos ni la mecánica de juego me llamaron la atención. Y ahora The Force Unleashed, que no es más que uno frenético correteo por pasillos lanzando cosas y dando sablazos. En fin, que he ocupado 26GB de disco no sé en qué, porque no me explico cómo un juego tan sencillo puede ocupar tanto. Tal vez sea que algunas secciones de los escenarios se pueden destruir. Es que ni siquiera la animación es buena. En fin, a seguir buscando un RPG que valga la pena.

sábado, enero 02, 2010

Actualización de tecnlogía en Regnum Online

Hace unos días leí la noticia de que Regnum Online había recibido un buen lavado de cara. El video demostrativo era impresionante, al menos la parte que logré ver. No fue hasta ayer que pude dedicar un rato a actualizar mi copia, rato que terminó convirtiéndose en un par de horas. Al final, no pude entrar en el juego pues require actualizar los drivers y mi tarjeta de video no soporta más allá del 9.4. Sin embargo sí pude ver las pantallas de inicio, que ahora tienen un look muy profesional (las anteriores tenían un aspecto como de haber sido hechas en los ratos libres por un aprendiz). Si el resto del juego presenta un acabado de tanta calidad... pues hay que quitarse el sombrero. Por suerte, solo faltan un par de semanas para que reciba mi nueva Geforce 9500.

viernes, enero 01, 2010

Ogre 1.7 RC1

Aunque no es el definitivo, al final no hemos tenido que esperar unos meses para ver la rama 1.7 Cthugha. Aquí está el primer Release Candidate. Con la 1.7 llegan algunos cambios interesantes como el nuevo renderizador de terrenos, pero por suerte nada drástico.

Divinity

¡Este es el primer post del año! Y lamentablemente no me pude despedir como debe ser el año pasado, así que aporovecho ahora para desearles un feliz año nuevo.
Este juego me lo recomendó un amigo, que lo cree incluso superior al Dragon Age. Sin embargo, fue una decepción mayúscula. Divinity: Ego Draconis, utiliza Gamebryo, que es un motor excelente y demanda potencia gráfica, sin embargo la calidad de los modelos no es nada excepcional. En teoría podría ser un buen juego de rol, pero su mayor problema, que no sé si atribuirlo a estar mal balanceado o ser yo un mal jugador, es que es demasiado difícil de jugar. Luego de varias horas de juego ya estaba aburrido de batallas que tenía que repetir una y otra vez porque los oponentes eran mucho más fuertes que mi personaje. En algunos casos podía irme y obtener un nivel más, pero ya llegué a un límite que no aparecía más nada que matar ni misiones que hacer.
Además, el mapa solo muestra los NPC más significativos, en algunos casos nunca encotré al NPC que me permitía completar una misión. Así que decidí pasar a cosas más interesantes. Pero eso es otra historia (que también involucra mucha decepción).