jueves, julio 01, 2010

Demon's Souls: Segundas impresiones

Un añadido bueno y otro malo.
Por un lado, sí hay algunas sombras. Sutiles, pero el protagonista y los enemigos si lanzan sombra.
Por otra parte, los muros hasta la cintura que bloquean tu paso en ocasiones sí son traspasables: cuando forman una "entrada secreta". Así que un obstáculo que debería poder ser siempre superable sólo lo es cuando a los creadores del juego les ha parecido bien.

miércoles, junio 30, 2010

Demon's Souls: Primeras impresiones

Gráficos
Buenos, aunque no increiblemente. No hay sombras dinámicas (ni estáticas, de hecho) pese a la prevalencia de luces dirigidas y escenarios de aspecto oscuro.
Las animaciones, sobre todo de los enemigos, son muy buenas.

Jugabilidad
Se hecha de menos más interacción con el escenario, y duele encontrarse hoy en día con barreras infranqueables que le llegan al héroe a la cintura: ¿por qué no sabe saltar o trepar?
El combate, aunque sencillo (dos ataques por arma o escudo, además de esquivar) es muy táctico. Cualquier despiste contra cualquier enemigo puede enviarte al otro barrio, así que mantiene el interés bien.

Dificultad
Sí, mucha. Perder miles de almas acumuladas por morir en una emboscada y luego morir otra vez al intentar llegar rápido a recuperarlas es muy doloroso.

Historia
El trasfondo mencionado no es nada destacable: reino sumido en tinieblas por rey loco que convoca Lo Que No Debe Ser Convocado, todo lleno de demonios que roban las almas, héroes van a recolectar las almas robadas a base de matar demonios. De momento no hay más.

Multijugador
El sistema de multijugador integrado es fantástico. Poder tener visiones de otros jugadores y de lo que hacen en ese momento, las manchas de sangre que te enseñan como murieron otros, el sistema de mensajes de aviso o engaño para los demás... Todo muy bueno.
Aún no he llegado a poder probar el invadir las partidas de otros.

lunes, enero 25, 2010

Boletín de cine

Dos noticias breves:
-Samurái Jack, la serie de animación terminará finalmente su historia con una película de cine. Y producida por J.J. Abrams. Fuente.
-Se prepara una nueva secuela que nadie pide: Gremlins 3.

martes, mayo 19, 2009

¿La fuente Small Fonts se ve mal?

Comprueba que el tamaño PPP está configurado a un valor estándar (100% o 125%, por ejemplo). Si está en otro valor pueden surgir problemas de visionado con esa fuente.

lunes, mayo 18, 2009

Configurar acceso remoto a una BBDD SQL Server

Este post va a ser tremendamente poco profesional, pero quizás a alguien le sirva de algo.

Se tiene una BBDD en un servidor SQL Server. Se quiere acceder remótamente, por ejemplo creando un acceso de datos ODBC desde otra máquina.

1) Ejecutar las herramientas de red de servidor en la máquina servidor. Habilitar el protocolo TCP/IP y fijar un puerto. Comprobar que dicho puerto está abierto en el firewall del servidor.

2) Ejecutar %windows%\system32\cliconfig.exe en el cliente. Habilitar el protocolo TCP/IP marcando detectar el puerto automáticamente. En la pestaña Alias, crear un alias para el servidor con un nombre distintivo. Marcar la opción TCP/IP, e indicar en acceso su IP.

3) En el cliente, crear el origen de datos ODBC indicando como servidor el alias creado.

EDITADO: Se me había olvidado que, evidentemente, hay que abrir también el puerto en el cliente.

miércoles, abril 29, 2009

Acceder a ficheros Excel desde C#

Se podría pensar que al ser ambos productos de Microsoft lo tendrían todo mejor integrado y preparado (a lo mejor lo tienen y me he complicado la vida. De ser así, por favor avisadme), pero acceder a los datos de un archivo Excel multihoja no es trivial.
Así he conseguido hacerlo yo:

public String[] getHojas() {
String[] listadoHojas;
DbConnection connection;
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
try {
DataTable worksheets;
connection = factory.CreateConnection();
String connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ruta + ";Extended Properties=\"Excel 8.0;HDR=Yes\"";
connection.ConnectionString = connectionString;
connection.Open();
worksheets = connection.GetSchema("Tables");
listadoHojas = new String[worksheets.Rows.Count];
int i = 0;
foreach (DataRow dr in worksheets.Rows)
{
string hoja = dr["TABLE_NAME"].ToString();

//las siguientes líneas "limpian" el nombre
hoja= hoja.Substring(0,hoja.LastIndexOf("$"));
if (hoja.IndexOf("'") == 0)
hoja = hoja.Remove(0, 1);

listadoHojas[i++] = hoja;
}
connection.Close();
return listadoHojas;
}
catch (Exception e) {
throw new Exception(e.Message, e);
}
}


Y luego, para acceder a los datos de una hoja concreta:

DataSet dsMsExcel = new DataSet();
DbConnection connection;
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
try
{

if (hoja.Contains(" ") || hoja.Contains("-"))
hoja= "['" + hoja+ "$']";
else
hoja= "[" + hoja+ "$]";

DbDataAdapter adaptador = factory.CreateDataAdapter();
DbCommand selectCommand = factory.CreateCommand();

selectCommand.CommandText = "SELECT * FROM " + hoja;

connection = factory.CreateConnection();
String connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ruta + ";Extended Properties=\"Excel 8.0;HDR=Yes\"";
connection.ConnectionString = connectionString;

selectCommand.Connection = connection;
adaptador.SelectCommand = selectCommand;
dsMsExcel.Tables.Clear();
adaptador.Fill(dsMsExcel);

return dsMsExcel;
}
catch (Exception e)
{
throw new Exception(e.Message, e);
}