Nephilim – Guardianes del Grial (Introducción)

GUARDIANES DEL GRIAL

Guardianes del Grial es una campaña épica para Nephilim en tres temporadas (bueno, vale, en tres cursos lectivos) que dirigí hace ya unos años. Inicialmente iba a ser de dos temporadas, una ambientada en el siglo XIII y la otra entre la Segunda Guerra Mundial y la actualidad, donde los personajes jugadores tendrían que Salvar_el_Mundo™ enfrentándose al Temple y su Gran Plan (sonido de fanfarrias). En aquel entonces estaba yo envuelto en dos campañas de corte épico también, en este caso como jugador y tenía algunos problemas para creerme que mi personaje tuviera razones para estar metido en esos fregados. En una estaba mejor estructurada y, aunque el comienzo quedó demasiado forzado, el máster nos metió bien en la trama (era Hugo, a fin de cuentas). La segunda, sin embargo, cojeaba por todos lados. Aunque era divertida, obligaba a charlas entre los jugadores para obligarnos a seguir en lugar de hacer lo que nuestros personajes nos pedían: salir por patas, ir a la autoridad competente y quitarnos el marrón de encima.

Nephilim 1edDe cara a mi campaña pensé seriamente en este problema, es decir, cómo hacer que los jugadores se crean realmente que sus personajes deben resolver el problema. Llegué a la conclusión (bastante obvia, de todos modos) de que una historia épica exige, para cuadrar bien, que los implicados, o bien una parte de ellos, tengan PODER. Y no me refiero a muchas habilidades, armas gordas y conjuros poderosos, sino a poder de verdad: contactos, renombre y posición (el tener recursos materiales también ayuda, pero no es realmente necesario). Haciendo un símil adeidero (AD&D) podemos encontrarnos con una campaña donde un aguerrido grupo de aventureros de nivel alto tienen que salvar el reino. Este grupo se ha criado en dungeons, ruinas, templos olvidados, semiplanos demoníacos y tiene una potencia de fuego brutal. Por otra parte, su conocimiento del mundo, aparte de esas ruinas y dungeons, se reduce a una serie de tabernas, prostíbulos y mercachifles variados. Me apuesto el sueldo de un mes a que los jugadores de este grupo estarán más pendientes de salir con vida de la aventura o de las recompensas que de salvar realmente el reino. Ahora bien, si tenemos un grupo de nivel medio-bajo donde encontramos al campeón del reino, a su escudero, al mago del rey, al brazo ejecutor del gremio de comerciantes, abogados y ladrones y así con el resto, sus jugadores estarán mucho más motivados para salvar al reino, haya o no recompensas de por medio.

Continuar leyendo »

Llenar un ComboBox

El problema es el siguiente: tengo una tabla con un número de registros reducido (diez o doce como mucho). Quiero poder elegir el registro en un listbox o un combobox. Simple, ¿no? La ventaja del ListControl, tanto ListBox como ComboBox, es que para cada entrada en el mismo puedo tener dos valores, el mostrado (DisplayMember) y el ValueMember. Así, en el ValueMember puedo tener la clave primaria de la tabla, que es internamente con lo que trabajaré, mientras que muestro el campo descriptor que me interese al usuario. No estoy contando nada nuevo.

Una posibilidad sería usar una combinación de DataSet y BindingSource, estableciendo como DataSource del ListControl el BindingSource y seleccionando los campos a mostrar como DisplayMember y ValueMember. Este método lo he usado bastante, la verdad, pero como herramienta de navagación entre registros en la tabla principal que se muestra en el formulario. Me explico:


Continuar leyendo »

Ups, ¿y la contraseña del superusuario?

Ayer me encontré con un pequeño y pintoresco problema: después de instalar la actualización para el nuevo plan contable en la aplicación de gestión y contabilidad que usamos en la fábrica me encontré con que no me aceptaba la contraseña del superusuario (en este caso, llamado Supervisor). Jaja, diréis algunos, se le olvidó. Pues no, yo juro y perjuro que mi burro nació sin rabo, digo, que con la contraseña que yo intentaba meterle sin éxito estuvimos trabajando el viernes anterior, cuando hicimos el primer intento de abrir el nuevo ejercicio 2008.

En todo caso, el asunto era simple: no podía entrar como Supervisor y el Supervisor es el único usuario que puede hacer ciertas tareas de mantenimiento, como, por ejemplo, no sé, ¿quitar una contraseña olvidada? Para solucionar este pequeño contratiempo necesitaba pensar rápido y conocer a fondo las herramientas internas del programa (que las tiene muy buenas). En la parte primera, el contratiempo se produjo poco antes del fin de la jornada matutina, así que tuve dos horitas para pensar tranquilamente la solución. Realmente, tampoco es que el problema fuera tan complicado, pero todo pasaba por saber dónde guardaba el programa la contraseña de los usuarios y cómo eliminarla (o leerla, si estaba en claro). Por lo pronto, esta información debe ser común a todo el programa. Un rápido vistazo al árbol de directorios del programa me llevó a la carpeta «comunes» y ahí encontrar el archivo «usuarios». Concretamente, tres archivos, con extensión .cdx, .dbf y .fpt. Ya tenía la tabla usuarios localizada, sólo quedaba abrirla.

Continuar leyendo »

Code Geass, primera temporada

Se acabó. 25 episodios. La primera temporada de Code Geass. La acabo de terminar. Y tengo las entrañas revueltas, náuseas, ganas de llorar. 25 episodios acompañando al idealista de Suzaku, a la misteriosa C.C., a la ingenua Kallen, a la encantadora Shirley y, sobre todo, a Lelouch.

Lelouch, terrorista, conquistador, parricida

Lelouch… terrorista, asesino, conquistador, megalómano, parricida. ¿Eres un Alejandro Magno o un Hitler? ¿Cómo alguien como tú es protagonista de una serie? Siguiendo la tradición, el protagonista debía haber sido Suzaku y tú su némesis, el terrorífico malo de la serie. En lugar de ello, te hacen protagonista y uno conoce tu genialidad, tus ideales, tu ansia de venganza oculta. Y ve también como obtienes poder, y al usarlo caes bajo su influjo y en cada encrucijada en que te encuentras escoges el camino de la oscuridad y te sumerges más y más en la locura.

He terminado la primera temporada y tengo ganas de vomitar. La serie me ha dado una paliza; es cruel, dolorosa. Es, básicamente, política aplicada. Las personas son sólo piezas en el tablero donde los poderosos juegan su terrible lucha de poder, sin más remordimiento por los hombres, mujeres y niños muertos o asesinados (no, no es lo mismo: no es lo mismo soldados que mueren en el campo de batalla que civiles masacrados sin posibilidad de defenderse) que el que yo pueda tener por un peón sacrificado para abrir una línea de ataque sobre el rey contrario. Hay purgas, asesinatos, masacres, dobles juegos, fintas… No disfrutaba tanto de un argumento de este tipo desde la genial Babylon 5. En cierto modo, Lelouch me recuerda a Molari por su caída en la oscuridad. No me habría sorprendido encontrarme en Code Geass a un tecnomago diciéndole a Lelouch:

La misteriosa C.C. Me he enamorado.

Veo una gran mano saliendo de las estrellas. Esa mano es su mano. Y oigo sonidos: las voces de millones de personas gritando su nombre: sus víctimas.

He terminado la primera temporada y, aparte de esperar a la segunda, sólo me queda recomendaros esta serie, una obra maestra de Sunrise con una trama magnífica, una mala leche absoluta, un diseño de personajes precioso, una muy buena animación y seiyuus de primer nivel.

He seguido la versión de AnimeUnderground, exquisita como siempre: una resolución de 1024×576, vídeo x264, audio AAC, todo ello en un contenedor mp4 de 170MB de peso por episodio sacada de la edición en DVD. Una de las razones que me hicieron jubilar mi ordenador y comprarme un monitor de 22’’ panorámico.

Cosas bonitas tiene mi niña…

Poquito a poco voy haciéndome a Vista y cada vez encuentro más cosas, de cara al uso cotidiano, que me gustan. O mejor, me encantan. Son cositas pequeñas, pero que te hacen la vida un poco más fácil.

Por ejemplo: al renombrar un archivo en Vista no se selecciona la extensión, sólo el nombre del archivo.

Otro ejemplo: al renombrar un archivo, si pulso el tabulador, me pasa al siguiente archivo (por supuesto, con el nombre seleccionado, pero no la extensión). Así es mucho más cómodo cambiar de nombre varios archivos, como por ejemplo, todos los episodios de la primera temporada de Code Geass.

Otra más: las opciones de ordenación (por ejemplo, Nombre, Fecha de modificación, Tipo, etc.) en las versiones anteriores de Windows sólo aparecen en la parte superior de la ventana del explorador cuando tenemos seleccionada la vista «Detalles». Que aparezcan ahí es muy cómodo porque podemos ordenar por orden ascendente o descendente simplemente pinchando en la etiqueta (o cabecera de la columna, como prefieras) que deseemos. Para ordenar los archivos en cualquier otra vista, tenemos que abrir el menú contextual con el botón derecho, ir a «Ordenar» y seleccionar la ordenación. Ahora, en Vista, las opciones de ordenación siempre aparecen.

Mostrar una imagen en graaaande

Se supone que la primera entrada de un blog debería ser una presentación, pero ni las presentaciones ni las despedidas se me dan bien, así que prefiero empezar con algo que me gusta: Visual Basic 2005 y con la solución a un pequeño problema que se me planteó:

Tengo un pequeño picturebox en un formulario donde se muestra la imagen asociada al registro en el que estemos (me da igual si hablamos de series, actores, muebles o coches). Hay algunas imágenes que son bastante grandes y muy bonitas y verlas en un picturebox de 100×63 es una pena,así que decidí añadir un formulario con un picturebox que me mostrara la imagen a tamañocompleto. Básicamente, cogí un formulario (frmMostrarImagen) y le quite el texto del título y los bordes (FormBorderStyle=None). Le añadí un picturebox que debía ocupar todo el formulario (Dock=Fill). Este picturebox (picImagen) debe ajustarse al tamaño de la imagen (AutoSize=True). De igual modo, el formulario debe ajustarse al tamaño del picturebox, asíque su AutoSize también está en True y AutoSizeMode debe estar en GrowAndShrink.

Con esto ya sólo quedó añadir elcódigo necesario para que, pasándole la imagen a mostrar, la ponga en el picturebox y muestre el formulario.>

Peeeeero… No queda bien. Si se le pasa una imagen con mayor resolución que la pantalla, sólo se ve una parte de la imagen. Mal íbamos. Por fortuna en My.Computer encontramos Screen y, dentro de Screen, WorkingArea. Sabiendo las dimensiones del área de trabajo de la pantalla estrivial comprobar si la imagen es más alta o ancha que el área de trabajo. En este caso pasaremos del AutoSize y ajustaremos el tamaño del picturebox al máximo que nos permita la resolución de pantalla, manteniendolas proporciones de la imagen.

En resumen, esto:

 
''' <summary>
''' Carga la imagen a mostrar y muestra el formulario de modo modal
''' </summary>
Public Sub MostrarImagen(ByRef queImagen As Image)
    'Comprobamos si el tamaño de la imagen (alto o ancho) es mayor
    'al área de trabajo de la pantalla. Si es así, ajustamos la imagen
    'al área de trabajo manteniendo las proporciones.
    If queImagen.Height > My.Computer.Screen.WorkingArea.Height _
    	OrElse queImagen.Width > My.Computer.Screen.WorkingArea.Width Then
        'Lo primero es poner el autosize del formulario a false
        'Si no lo hacemos y quitamos el autosize del picbox, no se muestra nada
        '(el formulario queda con tamaño 0)
        Me.AutoSize = False
        Me.picImagen.SizeMode = PictureBoxSizeMode.Zoom
        'Vemos que dimensión (ancho, alto) es mayor, pues será sobre la que ajustemos
        If queImagen.Size.Width > queImagen.Size.Height Then
        	Me.Width = My.Computer.Screen.WorkingArea.Width
            Me.Height = Me.Width * queImagen.Height / queImagen.Width
        Else
            Me.Height = My.Computer.Screen.WorkingArea.Height
            Me.Width = Me.Height * queImagen.Width / queImagen.Height
        End If
    End If
    Me.picImagen.Image = queImagen
    Me.ShowDialog()
 End Sub

Sólo queda hacer que el formulario se cierre (no hay barra de título, no hay como cerrarlo en principio). Cada cual tendrá sus formas, yo lo hice al hacer click sobre el picturebox y al pulsar cualquier tecla. Esto último en el evento KeyPress del formulario, previo hacer que el formulario capture las pulsaciones de las teclas antes que el picturebox (KeyPreview=True). De paso añadí un tooltip que mostrase un mensajito del tipo «Pulse la tecla any para cerrar esta ventana» y listo.

Fin de la primera entrada, nos vemos en el Forlon.

Actualización 08 de enero de 2008: he corregido la línea Me.Height = Me.Width * queImagen.Height / queImagen.Width y su equivalente con Width ya que no aparecía el símbolo de la división entera (la otra barra inclinada). Lo he sustituido por la barra de división normal, peeeeeero tiene que ser una división entera, o bien convertir el resultado en un entero.