Oblivion:ArchiveInvalidation

De Teswiki

ArchiveInvalidation Explicado y Destrozado

Todo lo que Nunca Quisiste Saber y Tenías Miedo de Preguntar


Tabla de contenidos

ArchiveInvalidation Destrozado

Introducción

Oblivion normalmente obtiene todos los que necesita (piezas, diálogos, música, etc.) de unos pocos ficheros .bsa muy grandes en vez de ir a buscarlos a directorios individuales (como los directorios Meshes, Textures, Sound, etc.) El juego original y los mods oficiales usan estos ficheros .bsa (que son las iniciales de Bethesda Softworks Archive). Los ficheros .bsa están organizados internamente exactamente igual que tu directorio "Data".

Aunque los mods hechos por los fans están empezando a usar ficheros .bsa más a emnudo, la mayor parte de los mods aún colocan ficheros individuales de mallas (meshes), texturas, etc en subdirectorios de tu directorio "Data". Esto no es ningún problema para nuevos objetos añadidos por un mod, pero puede serlo para algunos mods que reemplazan cosas del juego original. Por ejemplo, algunos de los tipos de mods más populares son "mods que reemplazan texturas de las armaduras" y "mods que reemplazan texturas del terreno" que mejoran la apariencia del juego al reemplazar las texturas originales.

Normalmente, esto no es un problema desde el momento en que Oblivion está diseñado para cargar automáticamente cualquier malla (mesh), textura, etc. que encuentre en tu directorio Data, siempre que la fecha de modificación en cada uno de estos ficheros sea más reciente que la fecha de modificación del original en los ficheros .bsa. Ya que los ficheros .bsa son más antiguos, los objetos son reemplazados por cualquier objeto más nuevo que tenga el mismo nombre y que exista en tu directorio Data.

En algunos casos, sin embargo, esto no funciona correctamente. Ahora parece casi seguro que esto está causado por un bug en el sistema de ArchiveInvalidation de Oblivion. Después de más de un año y varios parches oficiales, parece improbable que Bethesda vaya a corregir alguna vez este bug. Esto significa que tendrás que usar uno de los varios métodos que evitan el problema si quieres intalar algún mod que reemplace objetos del juego original.

Más detalles sobre este tema, así como los resultados de pruebas extensas para los problemas generales del ArchiveInvalidation, se pueden encontrar en el artículo ArchiveInvalidation Explicado.

Cada uno de los métodos que evitan el problema tiene ventajas y desventajas. Los primeros dos métodos de la lista a continuación -- BSA-alteration y BSA-redirection -- son las dos únicas soluciones recomendadas. Los dos últimos métodos -- BSA-invalidation y BSA-extraction -- tienen unos inconvenientes tan serios que no son soluciones recomendadas. Aquí está la lísta de los métodos junto con una descripción de lo que implica cada uno de ellos:

  • BSA-alteration: Esta fue la primera solución real al problema. Su uso está muy extendido, es muy fiable, relativamente simple, y la mayoría de los usuarios de mods de Oblivion están a estas alturas familiarizados con su uso. Las desventajas son que debes usar una de las varias herramientas externas (esto no es un gran problema ya que probablemente necesitarás alguna de estas herramientas de todas formas), debes actualizar los cambios en los BSA después de instalar o eliminar cualquier mod que reemplace objetos del original (aunque la mayoría de las herramientas hacen esto de forma automática), y debes recordar quitar todos los cambios hechos a los BSA antes de aplicar cualquiera de los parches oficiales de Bethesda.
  • BSA-redirection: Esta es una solución nueva descubierta muy recientemente. Aunque todavía su uso no está muy extendido, este método tiene ventajas que probablemente lo harán muy popular en poco tiempo. La gran ventaja de este método es que no requiere ninguna herramienta externa (aunque requiere que instales algunos ficheros y quizás quieras usar una herramienta que te ayude a configurarlos) y que una vez configurado puedes prácticamente olvidarte de ello (no se requiere ninguna intervención después de añadir o eliminar mods que reemplacen objetos).
  • BSA-invalidation: Esta fue la primera solucion que se descrubrió, y como resultado fue el método más usado durante largo tiempo. Sin embargo, tiene limitaciones y problemas graves y ya casi nunca se usa precisamente por este motivo. Desafortunadamente, muchos mods antiguos todavía recomiendan esta solución, así que muchos usuarios se ven forzados a creer que se trata de una buena idea. De hecho, es una idea terrible en la mayoría de las circunstancias y la única forma de hacer que funcione de forma fiable es usar a la vez el método BSA-extraction (explicado más adelante). Deberías evitar este método todo lo que sea posible.
  • BSA-extraction: Esta solución funciona bien para los creadores de mods (que a menudo necesitan tener los ficheros originales extraídos de los BSA, de cualquier forma). Sin embargo, tiene desventajas importantes para los jugadores de mods y por este motivo no se explica en gran detalle aquí.

A continuación, examinaremos estos métodos un poco más en detalle.


BSA-alteration

BSA-alteration requiere Wrye Bash (versión 0.60 o superior) o uno de los excelentes programas de utilidades de Timeslip: Oblivion Mod Manager (OBMM versión 0.7.10 o superior) o BSA Patcher. Lo que Wrye Bash, OBMM y BSA Patcher hacen es pasar de largo del problema del ArchiveInvalidation y hacer que Oblivion piense que nunca tuvo una copia de las texturas que estás reemplazando.

En otras palabras, estas utilidades editan tu fichero BSA de texturas de forma que Oblivion no pueda encontrar las versiones originales de los ficheros de texturas que hayas reemplazado, forzando así al juego a cargar los ficheros del mod en vez de los originales. Sin entrar en demasiados tecnicismos, esto funciona muy parecido a coger un libro y borrar algunas de las entradas del índice de forma que esos capítulos no se puedan encontrar ya, incluso aunque los capítulos todavía estén ahí -- permitiendo de esta forma que el proceso pueda ser revertido más tarde restaurando el índice a su estado original.

Este método de invalidación fue probado inicialmente por el "Equipo de investigación del ArchiveInvalidation explicado" (ArchiveInvalidation Explained Research Team) y ha sido adoptado ya como la solución estandard de facto por la comunidad de mods de Oblivion. Ha probado ser extremadamente estable, pero aún así deberías hacer una copia de seguridad de tus ficheros BSA si tienes espacio en el disco duro (o una grabadora de DVDs) por seacaso algo va mal (como el que sin querer intentes ejecutar a la vez OBMM y BSA PAtcher sobre tus ficheros BSA, lo que se traduciría en un fichero corrupto).

OBMM y BSA Patcher mantienen la traza de qué ficheros han sido renombrados en tus BSAs y proporcionan una función "Remove BSA edits" para devolver a su forma original los cambios que hayas hecho a tus BSA.


  • Wrye Bash

Descargar Wrye Bash.

Wrye Bash tiene una pestaña llamada "Replacers" que te permite añadir o quitar fácilmente mods que reemplacen texturas. Mantiene la trazabilidad de qué ficheros han sido renombrados en el fichero BSA de texturas y proporciona un botón "Restore" que te permite deshacer cualquier cambio que haya hecho al BSA (si no te gustan los resultados por cualquier motivo). Puedes usar la pastaña "Replacers" de formas diferentes:

  • Actualización manual: Haz click en el botón "Update" después de añadir o quitar mods que reemplacen texturas. Esto funciona también para cualquiera de los mods que hayas instalado manualmente o utilizando otro programa (como OBMM).
  • Actualización automática: Marca el checkbox "Automátic". El fichero BSA de texturas se actualizará automáticamente cada vez que añadas o quites un mod que reemplace texturas. Sólo funciona para los mods de texturas instalados o desinstalados utilizando la pestaña "Replacers".

Probablemente deberías hacer una copia de seguridad de tus ficheros BSA si tienes suficiente espacio en disco (o grabadora de DVD) por seacaso, pero hasta el momento nadie ha comentado que hayan habido problemas de corrupción de los ficheros.

Wrye Bash requiere Python 2.5 y wxPython 2.8.0.1 ANSI para funcionar.

Asumiendo que ya tengas instalado Wrye Bash versión 0.61 o superior, y que hayas instalado ya uno o más mods que reemplacen texturas, los pasos que has de seguir son estos:

  1. Inicia Wrye Bash.
  2. Haz click en la pestaña "Replacers".
  3. Haz click en el botón "Update" bajo "Archive invalidation".
  4. Cierra Wrye Bash

Ten en cuenta que Wrye Bash chequea que no tengas cambios activos usando el método BSA-alteration con otra herramienta como OBMM o BSA Patcher, antes de dejarte usar esta funcionalidad.


  • Oblivion Mod Manager

Descargar Oblivion Mod Manager.

Asumiendo que ya tienes la versión 0.7.10 de OBMM o superior, y que ya has instalado/activado algún mod, los pasos detallados para hacer esto en OBMM son los siguientes:

  1. Inicia OBMM.
  2. Haz click en el botón "Utilities".
  3. Selecciona la opción "Archive invalidation".
  4. Selecciona la opción "BSA-alteration" (llamado "Directly Edit BSAs" en versiones anteriores).
  5. Marca la caja para actualizar automáticamente al salir (autoupdate on exit) o haz click en el botón "Update now".
  6. Haz click en la X roja en la esquina superior derecha de la pantalla de Archive invalidation para cerrarla.
  7. Haz click en el botón "Launch Oblivion".
  8. ¡Juega!

Si no has marcado la caja para actualizar automáticamente al salir, deberás repetir este proceso cada vez que acabes de instalar o activar algún mod nuevo. Necesitas hacer esto sólo una vez después de haber acabado de instalar todos los mods que reempacen texturas con los que quieras jugar. No tienes que volver a preocuparte de esto hasta que instales algún otro mod que reemplace texturas.

Las últimas versiones de OBMM (0.7.11 o superior) proporcionan muchas opciones nuevas para a función "Directly Edit BSAs". Las opciones por defecto pueden estar bien, pero necesitas como mínimo asegurarte de marcar la caja "Generate archiveinvalidation entries on hash collision", ya que es crítico que esta opción esté activada.

Aquí está la configuración ideal de OBMM (en versión 0.7.11 o superior):

OBMM.jpg

Usando esta configuración, OBMM lo hará todo por tí.

Como se ha indicado anteriormente, es una decisión completamente tuya si quieres usar "autoupdate on exit" (marcando la caja correspondiente para que cada vez que salgas se actualicen los cambios) o el botón "Update now" (para que los cambios se actualicen en el momento en que apretas el botón) o los dos. Yo encuentro que al tener muchos mods que reempazan texturas instalados, la opción "autoupdate on exit" tiende a provocar un retraso molesto al sair de OBMM o al usar el botón "Launch Oblivion". Como tengo el hábito de usar el botón "Launch Oblivion" en vez de iniciar Oblivion con el programa original, y no instalo mods nuevos tan a menudo como inicio Oblivion, he decidido evitar usar la opción "autoupdate on exit" y en vez de eo usar siempre el botón "Update now" después de instalar un nuevo mod.

Si más adelante desinstalas/desactivas algunos mods, necesitarás usar la opción "Remove BSA edits". Sigue estos pasos:

  1. Inicia OBMM.
  2. Haz click en el botón "Utilities".
  3. Selecciona la opción "Archive invalidation".
  4. Haz click en el botón "Remove BSA edits".
  5. Cierra OBMM
  6. Borra los ficheros de texturas que quieras eliminar
  7. Inicia OBMM
  8. Haz click en el botón "Utilities".
  9. Selecciona la opción "Archive invalidation".
  10. Selecciona la opción "BSA-alteration" (llamado "Directly Edit BSAs" en versiones anteriores).
  11. y el resto de pasos ya los conoces.

Si usas .omods, deberías saltarte los pasos del 5 al 7 y simplemente desactivar (botón "Deactivate") el fichero .omod en su lugar.


  • BSA Patcher

Descargar BSA Patcher.

Al contrario que OBMM, BSA Patcher es una aplicación de comandos en línea, aunque puedes lanzarla haciendo doble click sobre el ejecutable. BSA Patcher no incluye tantas opciones de configuración como OBMM, pero consigue realizar las mismas tareas y sólo requiere .NET 1.1, lo que significa que funcionará para cualquiera que no quiera o no pueda ejecutar .NET 2.0. También funciona con mono, una versión de código abierto de .NET 1.1.

La última versión de BSA Patcher (en el momento de escribir esto) usa el código de la versión 0.7.10 de OBMM para realizar el BSA-alteration y, como OBMM, generará automáricamente un fichero ArchiveInvalidation.txt por tí que contendrá sólo las txturas que no han podido ser renombradas con seguridad en tus ficheros BSA. Incluye soporte para varias opciones de línea de comando, pero puedes ignorarlas sin problemas.

Para usarlo, pon el fichero BSAPatch.exe en tu directorio \Oblivion\Data\ y haz doble click en él una vez para renombrar los ficheros en tus BSA. Ejecútalo otra vez para restaurarlos a sus nomrbes originales.

NOTA: Si usas OBMM o BSA Patcher, no deberías alterar manualmente tu fichero ArchiveInvalidation.txt. Deja que uno de estos programas lo hagan por tí. No se recomienda ninguna otra solución. Nunca uses OBMM y BSA Patcher al mismo tiempo.


Versiones antiguas de BSA Patcher

Si tienes una versión antigua de BSA Patcher, asegúrate de tener al menos la versión basada en el código de OBMM 0.7.9. Aún así deberías probablemente hacer una copia de seguridad de tus ficheros BSA antes de ejecutarlo, por seacaso. Ejecútalo una vez para renombrar los ficheros en tus BSA y ejecútalo otra vez para restaurarlos a sus nombres originales.

Si no estás seguro de que va todo esto, no tienes todavía ningún mod instalado, o sólo necesitas más información sobre como usar mods en Oblivion, por favor, lee Preguntas frecuentes sobre mods para instrucciones más generales.

Para más información sobre el ArchiveInvalidation, lee ArchiveInvalidation Explicado. Los resultados de nuestras pruebas están resumidas limpiamente allí.


Actualización

Las versiones 0.7.10 y superiores de OBMM corrigen un error de versiones anteriores en el que varios ficheros con nombres muy parecidos en el mismo directorio (como castleintcolumndetail02.dds, castleintcolumndetail03.dds, y castleintcolumndetail04.dds) podían acabar teniendo sus texturas mezcladas si un mod reemplazaba sólo uno de estos ficheros. OBMM genera ahora un fichero ArchiveInvalidation sólo para las texturas que no pueden ser renombradas.

Esta funcionalidad está ahora también incluída en BSA Patcher, así que no tienes que crear tu propio fichero ArchiveInvalidation.txt a mano para esas texturas problemáticas.

¡Ves y descárgate las actualizaciones de los links de arriba! NOTA: Si usabas antes la versión 0.7.8 para modificar los BSAs, debes restaurarlos antes con la versión 0.7.8 y luego instalar la versión 0.7.10 (o superior). Si olvidas hacer esto y a continuación reemplazas tus BSAs con copias de seguridad, deberás borrar el fichero BSAEdits en tu directorio Oblivion\obmm para que funcione correctamente otra vez.


Ejemplo de uso de OBMM/BSAPatcher

El siguiente ejemplo asume que estás usando OBMM 0.7.10 junto a los mods "Parallax Cities 1.2" (las tres partes) and "LBM Weathered Direction Signs 1.3".

Después de hacer click en BSA-alteration (o en "Directly Edit BSAs" en versiones anteriores) y luego en el botón "Update Now", aparece un mensaje en OBMM informando que ha cambiado 821 entradas en 3 ficheros BSA y crea un fichero ArchiveInvalidation.txt que contiene sólo tres entradas para las texturas:

  textures/architecture/castleinterior/castleintcolumndetail03.dds
  textures/architecture/skingrad/skingradstone06.dds
  textures/architecture/bravil/woodplanks02.dds

Estas tres entradas son las únicas texturas que no han podido ser renombradas con de forma segura en los BSAs, y por eso se invalidan aquí.


BSA-redirection

Este método funciona engañando al motor del juego de Oblivion para que use su método de ArchiveInvalidation (que contiene bugs) en un fichero BSA incorrecto. Haciendo esto, permite que todas las texturas del fichero BSA principal sean reemplazadas de forma fiable por cualquier fichero más reciente que esté en tu directorio Textures.

En el fichero Oblicion.ini, hay una entrada llamada SArchiveList. En ella están listados todos los ficheros BSA estandard. Normalmente tiene esta apariencia:

SArchiveList=Oblivion - Meshes.bsa, Oblivion - Textures - Compressed.bsa, Oblivion - Sounds.bsa,
Oblivion - Voices1.bsa, Oblivion - Voices2.bsa, Oblivion - Misc.bsa 

Cambiando la lista para incluir otro fichero BSA que contenga como mínimo una textura, puedes engañar al motor del juego para que procese con su método de ArchiveInvalidation ese fichero BSA vacío (DUMMYFILE.bsa) en vez del fichero real de texturas BSA (que se llama Oblivion-Textures-Compressed.bsa). Por lo tanto, la entrada SArchiveList modificada debería tener la siguiente apariencia:

SArchiveList=DUMMYFILE.bsa, Oblivion - Meshes.bsa, Oblivion - Textures - Compressed.bsa, 
Oblivion - Sounds.bsa, Oblivion - Voices1.bsa, Oblivion - Voices2.bsa, Oblivion - Misc.bsa 

Para hacer esto, necesitas o bien usar un fichero BSA que venga con otro mod para que sea tu DUMMYFILE.bsa (cualquier fichero BSA que contenga al menos una textura servirá), o crearlo tú mismo usando una herramienta como BSA Commander (sólo tienes que poner una textura en este BSA que crees), o instalar un mod diseñado específicamente para hacer esto como ArchiveInvalidation Invalidated!


Otras soluciones

Si no usas ni BSA-alteration ni BSA-redirection por algún motivo, entonces, la única forma de convencer a Oblivion para que cargue las texturas problemáticas de los directorios individuales en vez de cargarlas de los ficheros .bsa es forzarlo a hacerlo así creando un fichero especial llamado (lo has adivinado) "ArchiveInvalidation.txt".

El fichero ArchiveInvalidation.txt lista todas las direcciones relativas (desde el directorio "Data") de los ficheros de texturas que quieres que reemplacen a los que vienen por defecto en el juego.

Como resultado de pruebas intensivas cuyos resultados se han ido reportando en los hilos sobre Archive Invalidation explicado, ahora tenemos información muy precisa sobre como funciona ArchiveInvalidation y sobre como falla. Es suficiente con decir que puede llegar a ser extremadamente complicado.

Mi recomendación actual, basada en la investigación mencionada anteriormente, es que el fichero ArchiveInvalidation.txt debería sólo listar las texturas DDS del juego original que están siendo reemplazadas por los ficheros individuales de tu directorio Data. En otras palabras, esto significa que debería contener sólo entradas para los mods que reemplazan texturas. Ni mallas (meshes), ni sonidos (sounds), ni voces (voices) deberían estar listados.

Conviene que sepas, sin embargo, que muchos de los métodos antiguos recomendaban listar TODOS tus ficheros de mod de mehes/textures/etc en el fichero ArchiveInvalidation.txt, independientemente de si reemplazaban algo del juego original o no.

Si usas algún mod que reemplace texturas, hay una alta probabilidad de que necesites un fichero ArchiveInvalidation.txt que contenga todos estos cambios (si no usas la funcionalidad BSA-alteration de OBMM). Sin él, hay posibilidad de que las texturas por defecto de Bethesda sigan cargándose en el juego. También, si tienes entradas incorrectas en tu fichero ArchiveInvalidation.txt, o incluso en algunos casos, aunque tu fichero ArchiveInvalidation.txt sea perfectamente correcto, puedes ver objetos en el juego de color púrpura o invisibles.

Dadas todas estas advertencias, si todavía quieres intentar usar un fichero ArchiveInvalidation.txt, hay varias herramientas creadas por los fans que generarán estos listados por tí automáticamente.

  • ElChE's Oblivion Automatic Content Validator 1.0.2 (también llamado "Automatic Content Validator") crea un fichero ArchiveInvalidation.txt automáticamente por tí, y además hace algunas otras cosas muy útiles como asegurarse de que todas tus mallas (meshes) tienen una dirección válida para las texturas. Asegúrate de usar la versión 1.0.2 o superior porque añade la opción de generar listas sólo para los ficheros que reemplazan cosas del juego original. Puede ser que tengas que eliminar manualmente las entradas correspondientes a meshes que la herramienta haya incluido en la lista.
  • Oblivion Mod Manager que ya hemos mencionado anteriormente, tiene también un conjunto excelente de opciones para crear automáticamente el fichero ArchiveInvalidation.txt. Este proceso se ejecuta automáticamente cada vez que sales de OBMM o que usas OBMM para abrir Oblivion. Asegúrate de usar la versión 0.7.10 o superior.

Si prefieres crear un fichero ArchiveInvalidation.txt a mano, también funcionará bien, pero puedes adivinar que pronto se convertirá en un problema importante mantener toda la lista de ficheros si pruebas mods que reemplacen texturas muy a menudo.

Si vas a crearlo a mano, esto es lo que has de hacer.

Crea un fichero de texto llamado "ArchiveInvalidation.txt" en tu directorio principal de Oblivion. Este no es el directorio "Data" sino un nivel por encima de él, en el mismo directorio en el que están OblivionLauncher.exe y Oblivion.exe. El motivo de colocarlo aquí es principalmente evitar que lo sobreescribas accidentalmente al instalar un nuevo mod.

(Puedes poner el fichero ArchiveInvalidation.txt en tu directorio "Data" si quieres. También funcionará allí, pero ten cuidado con sobreescribirlo sin querer al instalar mods).

Para poner un ejemplo, digamos que tienes dos mods que reemplazan texturas, uno que reemplaza la textura de la coraza daédrica (daedric cuirass) y otro que reemplaza la textura de los escudos de cristal (glass shields). Tu fichero ArchiveInvalidation.txt debería ser parecido a esto:

textures/armor/Daedric/cuirass.dds
textures/armor/glass/shield.dds

Ten en cuenta que no es necesario que las texturas cuyos nombres acaban en "_g.dds" y "_n.dds" sena listadas. Otros ficheros DDS que no es necesario que sean listados son los que están en el directorio "Menu" y en los directorios "Icon".

Si tu mod que reemplaza texturas venía empaquetado con un fichero ArchiveInvalidation.txt, puedes copiar y pegar los contenidos de las líneas de ese fichero en el tuyo. Si haces esto, ten cuidado de no sobreescribir sin querer cualquier línea que hayas añadido antes para otros mods que reemplacen texturas.

Bastante gente dice usar un ArchiveInvalidation.txt "universal" o "global". Sin embargo, pruebas intensivas por gente muy numerosa han determinado que esta aproximación no funciona en absoluto. Es lo mismo que no tener ningún fichero ArchiveInvalidation.txt. Si alguien ofrece consejo diciendo que deberías usar un fichero como este:

meshes/ \s
textures/ \s
sounds/ \s

No lo creas. Es una gran leyenda urbana, pero no funciona.


Recursos para creadores de mods

He publicado un recurso para creadores de mods que contiene ejemplos de instrucciones para el ArchiveInvalidation que los creadores de mods pueden copiar y pegar en los ficheros léeme que vayan a poner en sus mods. Está un poco desactualizado ahora ya que no incluye todavía instrucciones para usar Wrye Bash o BSA-redirection, pero lo puedes encontrar aquí.


ArchiveInvalidation Explicado

Preámbulo

Esto es una adaptación de mi hilo en los foros oficiales ESF: ArchiveInvalidation Explained (2). Desafortunadamente, al igual que ha pasado con todos los hilos anteriores en los foros ESF sobre este tema, este hilo ahora ha expirado y ha sido purgado del foro. El resumen pervive aquí.


Introducción

Hay una bestia terrible provocando destrucciones y caos en masa en la comunidad de los mods. Se llama ArchiveInvalidation. El propósito de nuestra misión aquí era matar a esta criatura horrenda e impedir que se reprodujera.

Este objetivo ha sido ya cumplido, pero los historiadores (y unos pocos más, quizás) pueden todavía preguntarse ¿De dónde vino esta bestia? ¿Qué la impulsó a salir de su cueva húmeda e irrumpir en nuestra pacífica comunidad? Las respuestas están en este documento y en los hilos de discusión relacionados.

Los problemas con el ArchiveInvalidation descritos aquí la mayor parte de las veces aparecen ahora para gente que usa más de un mod que reemplace texturas de armaduras, pero pueden aparecer en cualquier parte en que Oblivion use ficheros con nombres comunes como "boots.dds" (botas) para más de un conjunto de cosas. Si no has experimentado ningún problema todavía, es debido probablemente a que tu configuración no responde a estos criterios.

Las pruebas extensivas que se han llevado a cabo por múltiples usuarios y que han sido reportadas en estos hilos llevan a la clara conclusión de que Bethesda probablemente nunca pretendió que alguien tuviese que usar el ArchiveInvalidation en primer lugar. La vasta mayoría de texturas parecen cargarse correctamente desde los directorios "Data" incluso sin usar ningún fichero de ArchiveInvalidation, lo que explica porqué tantos usuarios pueden llegar a creer que un simple fichero de ArchiveInvalidation con tres líneas (llamado global, universal o genérico), ha resuelto todos sus problemas, cuando en realidad se ha probado que no tiene ningún efecto en ningún caso (tener un fichero así es lo mismo que no tener ningún fichero de ArchiveInvalidation).

De hecho, estamos diciendo que la única razón por la que es necesario usar un ArchiveInvalidation es debido a un bug en el juego que ocasiona que algunas de las texturas que reemplazan a las del juego original no se carguen, mientras que otras se cargan perfectamente.

Basado sobre todo en las contribuciones de Malifrax, hemos aislado estos problemas a unos nombres de directorios comunes en concreto y quizás incluso a unos ficheros NIF (meshes) en concreto, que parece que tienen una estructura diferente a la de los que cargan las texturas correctamente.

Date cuenta de que no necesitas leer tofo esto si estás usando OBMM versión 0.7.8 o superior y has seleccionado la opción "BSA-alteration" (o "Directly Edit BSAs" en versiones antiguas). El atajo de Timeslip evita totalmente la necesidad de un ArchiveInvalidation en nuestras pruebas.

Si, por otra parte, tienes intención de usar ArchiveInvalidarion, o simplemente quieres entender que ha llevado a medidas tan drásticas como la solución de Timeslip, entonces necesitas leer esto.

Esperamos que Bethesda lance un parche para el bug de las texturas en algún momento y todo esto pase a ser una rara nota a pie de página en la historia de la vida de Oblivion. Hasta ese momento, sigue leyendo ...


Resultados de las pruebas de ArchiveInvalidation

1) ArchiveInvalidation.txt (AI.txt) sólo es necesario para tecturas que reemplacen las del juego original. También, a menudo también se requiere para reemplazar texturas que son especificadas desde dentro de una malla (mesh, fichero NIF) en vez de especificarse en el CS (las texturas de iconos y terreno, por ejemplo, normalmente se cargan bien sin ser referenciadas en el fichero AI.txt).

2) Los métodos de ArchiveInvalidation universales/globales/genéricos no funcionan. Punto. Fin de la discusión.

3) Las mallas (mesh) que reemplazan a las del juego, se cargarán independientemente de que estén referenciadas o no en tu fichero ArchiveInvalidation.txt (AI.txt), así que no es necesario que listes en él ningún fichero .NIF. Si los listas, intenta listar sólo las mallas (meshes) específicas que te estén dando problemas, y sé consciente de las ramificaciones, tal como se describen en los puntos 4 y 5 a continuación.

4) Una única entrada de un nombre de fichero común como "boots.dds" en AI.txt invalidará todos los caminos (paths) que contengan un fichero "boots.dds" que exista tanto en el BSA como en tu directorio Data. Hará esto independientemente de que esos caminos (paths) de tu directorio Data contengan realmente un fichero "boots.dds" o no e independientemente de si tienes una entrada en tu fichero AI.txt para ese camino (path). *

5) Listar un camino (path) en tu fichero AI.txt tiene el mismo efecto que listar texturas individuales, en el sentido de que provoca que todos los objetos en ese camino (path) sean invalidados. Sin embargo, una vez has listado un directorio de esta forma, Oblivion invalidará automáticamente cualquier instancia posterior de cualquier nombre común de fichero que se encuente en ese primer directorio.

Si todo esto suena realmente confuso, no eres el único que lo piensa. No es fácil de entender, ni siquiera para expertos en informática, en parte porque es una forma tan rara de haecr las cosas que parece en muchos casos un bug en el código de invalidación que Bethesda ha implementado. Quizás se trate de un bug, quizás fue diseñado así, no tenemos forma de averigüarlo.

* Todo el crédito por descubrir esto es para Wonder Dog.


¿Cómo hago uno?

Se pueden encontrar las instrucciones en Preguntas frecuentes sobre los Mods.

Una vez hayas empezado, puedes listar o bien sólo los nombres de los ficheros individuales, como "boots.dds", uno por línea, o listar caminos (paths) de directorios enteros, uno por línea, así:

 textures/armor/Iron/ \s
 textures/armor/glass/ \s

Al final, creo que la discusión sobre qué aproximación es mejor - listar los ficheros sin ningín camino (path) o listar sólo los caminos (paths) - probablemente no nos llevará a ninguna parte, ya que ambos métodos son altamente imprecisos y causan errores similares. Elije uno y mantenlo o usa una mezcla de las dos aproximaciones. No tenemos suficientes datos todavía para hacer una recomendación en un sentido u otro.


¿Y ahora qué?

Esta situación es terrible de cualquier forma en que la mires. Puedes extraer tus BSA de texturas en tu directorio Data. Esto resolverá la mayoría de los problemas, pero es realmente una solución terrible. Si haces esto, ten cuidado de no sobreescribir todos los ficheros de mods que tengas ya instalados. Estás avisado.

Probablemente la única aproximación razonable a medio camino para incluso empezar a tratar este problema es que una herramienta como ACV, OBMM o Wrye Bash comprueben que todos los nombres de ficheros comunes reemplazado existen en todos los caminos (paths) reemplazados y que te avisen si este no es el caso.

Creo que lo mejor que podemos esperar es una combinación de estas aproximaciones.

1) Los creadores de mods que creen texturas que remplacen cosas con nombres comunes en los BSA tienen que empaquetar todos los ficheros relacionados con su mod, tal como muchos ya están haciendo; si no lo hacen, entonces sus mods quedarán sujetos a advertencias o bloqueos por parte de utilidades como OBMM y ACV.

Esto sólo aplica si estás haciendo una textura que reemplace a objetos del juego y que afecte a ficheros con nombres comunes como "boots.dds", "cuiras.dds", etc. En este caso, debes empaquetar todas las texturas originales que no has cambiado en el directorio donde residen las texturas, como "tectures|armor\iron", junto a las que has cambiado. De otra forma, las que no has cambiado en ese directorio se romperán en el sistema del usuario.

Hemos visto este caso una y otra vez con creadores de mods lanzando una versión 1.0 de un mod que reemplaza texturas y que sólo incluye los ficheros que han modificado, y luego (después de verse ahogados por montones de correos de odio) tener que lanzar una versión 1.1 que incluye todos los objetos de ese conjunto, independientemente de si habían modificado los ficheros o no.

Otra solución para los creadores de mods sería evitar crear mods que sólo reemplacen texturas al máximo posible. Puedes conseguir el mismo resultado en la mayoría de los casos alterando las referencias de las texturas en una malla (mesh) de un objeto usando NiFSkope, de forma que apunte a una estructura de directorios nueva con ficheros de texturas que no usan los mismos nombres de fichero comunes. Desde el momento en que las mallas (meshes) se cargan automáticamente sin ninguna necesidad de entradas en el fichero AI.txt, esto evita el problema por completo.

2) Utilidades como OBMM pueden advertir a los usuarios antes de que instalen un mod de que puede causar problemas, suponiendo que el usuario usa el formato OMOD con todas sus ventajas; entonces, el usuario puede decidir si quiere ignorar la advertencia o parar el proceso de instalación.

3) Utilidades como ACV pueden advertir a los usuarios después de que hayan instalado un mod, de que tienen probabilidades de tener problemas con algunos ficheros (de la misma forma que ya lo hace para las mallas); el usuario puede entonces decidir si quiere ignorar la advertencia o retroceder y desisntalar el mod.

4) Utilidades como Wrye Bash pueden propircionar alguna combinación de los puntos 2) y 3), quizás pensando en usuarios más avanzados.


Detalles técnicos

Los problemas del ArchiveInvalidation descritos aquí están relacionados con la forma en la que Oblivion invalida entradas en las tablas hash de los BSA. En el Oblivion.ini estas tablas se llaman:

- DirectoryStringTable
- FilenameStringTable

Una "tabla hash" es un método muy común de mejorar el rendimiento cuando tienes un montón de cosas de las que seguir la pista. Una estructura de directorios llena de ficheros es el candidato perfecto para esta técnica.

Desafortunadamente, las turinas de invalidación de Oblivion no parecen ser muy precisas acerca de como marcan a un fichero que necesita ser reemplazado. Parece que hay una "desconexión" en la intersección entre estas dos tablas que causa que un fichero que sea invalidado en un camino (path) también quede invalidado en todos los otros caminos (paths) en el que exista, resultando en "colisiones" en los índices que provocan que Oblivion, equivocadamente, crea que una textura no deba ser cargada de un BSA.

Aquí está mi primer intento de explicar de forma simplificada como funciona esto. Desafortunadamente, no puedo encontrar una forma de hacer una explicación más simple que esta. Si tienes alguna idea de como simplificar o aclarar esta explicación, por favor postéala o mándame un privado.

Las tablas FilenameStringTable (tabla con los nombres de los ficheros) y DirectoryStringTable (tabla con los caminos-paths de los directotios) se inicializan con todas las texturas del fichero BSA, así que todos los caminos (paths) y nombres de las texturas existentes por defecto están indexadas en esas tablas hash.

Un pequeño ejemplo de estos dos índices podría se algo como esto:

 - FilenameStringTable = shield.dds, cuirass.dds, greaves.dds, greaves.dds, helm.dds
 - DirectoryStringTable = textures/armor/glass/, textures/armor/iron/

donde los objetos en verde residen en los BSA.

Si instalo una textura que reemplace, digamos, todas las armaduras de cristal (glass), con entradas en el fichero AI.txt, entonces, las entradas en las tablas hash para esas texturas quedan marcadas como reempleazadas por ficheros en los directorios Data. Esto significa que los objetos estarán ahora invalidados, es decir, marcados como objetos que estarán en el directorio Data en vez de en los BSA, así que ahora los índices serán algo como esto:

 - FilenameStringTable = shield.dds, cuirass.dds, greaves.dds, greaves.dds, helm.dds
 - DirectoryStringTable = textures/armor/glass/, textures/armor/iron/

donde los objetos en rojo y tachados han sido invalidados, pero los objetos en verde continúan residiendo en los BSA.

Si estás siguiendo algo de esto hasta aquí, probablemente ya has empezado a ver donde aparecerán los problemas, ya que todos los nombres de ficheros comunes compartidos por los dos conjuntos de armaduras han sido invalidados en la tabla FilenameStringTable sólamente porque queríamos reemplazarlos para la armadura de cristal.

Ahora, si quiero reemplazar también las texturas sólo para la coraza de hierro (iron cuirass) voy a tener problemas porque las entradas en la tabla hash para todos los nombres de ficheros comunes en los directorios de la armadura de hierro, incluyendo cuirass.dds, ya han sido invalidados (es decir, marcados como existentes en el directorio Data en vez de en el BSA) y ahora el índice de la tabla hash tendrá esta apariencia:

 - FilenameStringTable = shield.dds, cuirass.dds, greaves.dds, greaves.dds, helm.dds
 - DirectoryStringTable = textures/armor/glass/, textures/armor/iron/

donde todo en los dos conjuntos de armaduras ha sido invalidado.

Como el camino (path) "textures/armor/iron/" está ahora marcado como existente en el directorio Dara, y la tabla hash ya sabe que ese camino está ligado a un conjunto de ficheros que incluye shield.dds, cuirass.dds, greaves.dds, gauntlet.dds, y helm.dds, entonces, el índice hash esperará encontrar todos esos nombres de ficheros en los directorios Dara incluso aunque yo sólo quería reemplazar la coraza de hierro (cuirass).

De hecho, el problema es incluso pero que esto, porque Oblivion reconoce inmediatamente el nuevo directorio textures\armor\iron\ tan pronto como lo añades a tu directorio Data. Ni siquiera necesita estar listado en tu fichero AI.txt porque Oblivion escanea automáticamente tus directorios Data y reconoce ese directorio como uno de los ficheros BSA que contiene nombres de ficheros comunes que ya han sido invalidados.


Herramientas

En última instancia, la única solución realmente buena es usar BSA-alteration o BSA-redirection, pero si realmente quieres comprobarlo por tí mismo entonces estas herramientas te ayudarán a generar un fichero ArchiveInvalidation.txt.

Usa la funcionalidad "Smart Check" (en la última versión ignora automáticamente las mallas (meshes); en versiones previas, abre tu fichero AI una vez hecho y borra las mallas (meshes) a mano).

No he probado la última versión, pero Timeslio dice que ha añadido nuevas opciones para el AI.txt en la versión 0.7.6: "Te permite escoger exactamente que tipos de fichero incluir, y hay opciones para ignora ficheros que no estén en los BSA, normal maps, y ficheros con extensiones incorrectas. Siguiendo la recomendación de MadBat, también borra directorios vacíos del directorio Data. Las opciones por defecto son incluir sólo txturas, y sólo las que ya están en tu fichero BSA. Espero que esto haga a la mayoría de la gente feliz". (en versiones anteriores, usa la opción "DDS textures").

  • Wrye Bash también inlcuye ahora una funcionalidad para generar un fichero AI.txt, pero no la he probado todavía.


Lecturas avanzadas

Preguntas frecuentes sobre los Mods.

Hilo original: ArchiveInvalidation method tests Pruebas de los métodos de ArchiveInvalidation (ahora ha expirado y ha sido purgado de los foros).


Créditos

Traducción del artículo original de LLama and none


Herramientas personales
Contáctanos
DLAN: Nuestras Traducciones | Otras Traducciones | Mods y modding | Revisiones y Guías | Noticias | Videojuegos
Arte | Literatura | Rol y Rol por foro e IRC | Colabora: Army | Foro | Chat | Blogs Livejournal | Mapa de la Web