Jump to content

Photo

BSA Behavior Question


  • Please log in to reply
5 replies to this topic

#1
DemiseOfLogic

DemiseOfLogic

    Newbie

  • Premium Member
  • 11 posts
Basically, my question is: which files are loaded if two files of the same path exist is separate BSA archives?

Scenario

I downloaded the Qarl Texture Pack 3 and created an omod file: to easily install and uninstall.
This all works fine.

However, I want to be able to easily activate and deactivate the package without the massive decompression time. Further, the single BSA file should reduce loading time by decreasing the disk seeks required. Additionally, all those meshes and textures create a cluttered data directory.

So...

I created a BSA file using OMM named:
QarlTexturePack.bsa

Then, I created a dummy plugin named:
QarlTexturePack.esp

Now, from what I have read, the BSA file should load when the ESP is active. Also, since the BSA modification time is greater than the Oblivion BSA files, the packed files should take precedence.

However, the replacement textures do not load. I am suffering a gross conceptual error or is my implementation flawed in some way?

#2
TheTerminator2004

TheTerminator2004

    Master of the fishystick

  • Members
  • PipPipPipPip
  • 1,273 posts
You know, this is actually a very good question, I'd quite like to know the answer to this as well.

First of all, have you listed your bsa file in oblivion.ini (there's a line where all the bsa files the game should load are listed, I think, though I may be wrong)?

If you have, then I'd have assumed that the ones with the latest date would come first, but I could be wrong... I think I'll go and do a bit of research, see what I can find out :)

EDIT: OK, I've had a look on the UESP wiki, it didn't have any useful information, but it did mention several experts in this particular field: GhostWheel, Rick, Timeslip, Vasiliy, so you could try talking to them.

ON the CS wiki, I did find something which isn't related to the order files are loaded, but might be the reason for your problem, on the Creating your own BSA Files page:

There might be a problem with your textures not showing up in game. After a bit of research I figured out that in the .nif file, the texture property's path shouldn't have any "/", but instead "\". If you're having problems with your texture, after putting everything in a .bsa, after you check to make sure your tree is set up right, make sure you used "\" in the .nif file. You can fix this by using NIFSkope to edit each one by hand or use TES4Files and have it fix all of them in one shot.


Hopefully I've helped somewhat :)

#3
DemiseOfLogic

DemiseOfLogic

    Newbie

  • Premium Member
  • 11 posts
Thank for the input Terminator.

I have done some experimentation and the results are:

It appears that regardless on the order in the oblivion.ini, the BSA files are preferred by lower offset number in the archive's index.

I created a BSA file with just the mesh and textures for one of the sewer doors. When this BSA was placed in the ini, the object was successfully replaced. However, when I created the full replacement BSA, only select textures, a wall here, a rock there, were replaced.

This behavior is of course undesired; so I have implemented a work-around. I will post this to the topic shortly.

#4
DemiseOfLogic

DemiseOfLogic

    Newbie

  • Premium Member
  • 11 posts
Disclaimer for those happening to read this post

Firstly, any performance increase provided by this method is theoretical and not tested. This procedure is time consuming; I am mostly doing it to remove clutter from the Data directory and provide a relative fast way to switch massive texture replacements on and off.

Secondly, this is not a through guide -- I dislike writing technical documentation. I assume a familiarity with tools and methods.


Creating the replacement meshes BSA

1) Using bsacmd GUI, extract the "Oblivion - Meshes.bsa" to it's default, the "in" directory.

2) Now, overwrite the meshes with the desired replacements, in the correct order. I used Qarl's Texture Pack 3.

3) Open the command line and cd the bsacmd program directory.

4) Execute the following:
bsacmd.exe -pack in "QTP3 - Meshes.bsa" -af=783 -ff=41

5) Delete anything in the "in" directory.

Creating the replacement textures BSA

1) Using bsacmd GUI, extract the "Oblivion - Textures - Compressed.bsa" to it's default, the "in" directory.

2) Now, overwrite the textures with the desired replacements, in the correct order. I used Qarl's Texture Pack 3, Bob Markinson's QTP3 Reduced Lite and Regular.

3) This is the fun part, BSA files seem to suffer from a 2.1GB file size limit. So, create an "in2" directory in the bsacmd program directory and copy some of textures into it. Be careful to preserve the correct directory structure.

4) Using the same command prompt, execute:
bsacmd.exe -pack in "QTP3R - Textures1 - Regular.bsa" -af=703 -ff=2
bsacmd.exe -pack in2 "QTP3R - Textures2 - Regular.bsa" -af=703 -ff=2

5) Delete anything in the "in" and "in2" directories.

Installing the replacement BSA files
Note: the BSA names are arbitrary, pick whether you like.

1) Copy the BSA files we just created to the Oblivion data folder.

2) Backup then edit your oblivion.ini file.

3) In sArchiveList, replace:
Oblivion - Meshes.bsa, Oblivion - Textures - Compressed.bsa,
-- with --
QTP3 - Meshes.bsa, QTP3R - Textures1 - Regular.bsa, QTP3R - Textures2 - Regular.bsa,

4) Replace:
SMasterTexturesArchiveFileName1=Oblivion - Textures - Compressed.bsa
SMasterMeshesArchiveFileName=Oblivion - Meshes.bsa
-- with --
SMasterTexturesArchiveFileName2=QTP3R - Textures2 - Regular.bsa
SMasterTexturesArchiveFileName1=QTP3R - Textures1 - Regular.bsa
SMasterMeshesArchiveFileName=QTP3 - Meshes.bsa

5) Defrag, seriously.

Done

None of these changes should lead to a save-game corrupting issue. The worst result will be that Oblivion crashes at boot or is missing meshes/textures. Incidentally, this looks rather funny when it happens.

By the way, I do not recommend deleting the stock Oblivion BSA files. Not only is re-installation a pain but the CS requires them.


Thanks

Qarl -- for this great re-texturing

Bob Markinson -- for providing the means for my sub $300 video adapter to use Qarl's textures

Vasiliy -- for creating BSA Commander

dev_akm -- for the wonderful site:
http://devnull.devakm.googlepages.com/

Bethesda -- of course

#5
TheTerminator2004

TheTerminator2004

    Master of the fishystick

  • Members
  • PipPipPipPip
  • 1,273 posts
Hey, this is great! I'm definitely going to have to remember that method, thanks :)

Good to see you've solved the problem :)

#6

    Mere Morsel

  • Account closed
  • PipPipPipPipPip
  • 3,566 posts
A little more input

As you have found, if two BSAs contain the same file and path, the Oblivion game engine will randomly select between the two...

.. it has also been known to crash the game.

Which is why you can only either replace the file in the original BSA and re-pack it (you can back up your originals first if you use this method - And I know about the 2gb limit ... getting to that shortly).

Or - create new BSAs and use the archive list in the ini to specify where the game looks for its BSAs (others have used this method to spread BSAs over multiple fast Hard Drives and speed up loading .. bit of an expensive project but it works :))

Or - Just have loose replacer files in data, which so long as they are newer than the BSAs modified date will end up in game (OBMM Redate BSA function, or Wrye Bash automatic redating of BSAs).

A tool which is quite new but not too well known in Oblivion modding at the moment - BSAOpt

Have a read of the first two pages of comments, Ethatron answered a bunch I asked and after using it have found it to be a marvellous little utility. And the optimization is not BS, I repacked every one of the Oblivion, DLCs and Shivering Isles BSAs WITHOUT compression ... Not one of them went over 2gb. It may not help with some of the larger texture replacers out there trying to cram them in a BSA, but its worth a look just for the speed alone in handling BSAs.

Note also this ...

BTW if the producer of a BSA was BSA-Commander you can assume that any file which is not a DDS or a NIF has broken hashes. I analyzed the code of BSA-Commander and the hash-algorithm is AFAIS incomplete. In those cases you even have to use "Skip hash-check" and then consider BSAopt as a sanitizer. :^) Same for the header, BSA-Commander headers are half-right at best.


I had previously used OBMMextended to repack a few of my BSAs, and in those cases a few of the files within gave hash errors, after skipping the hash check and doing the repack into new BSAs with BSAOpt, the same files no longer have any problems.




Page loaded in: 0.894 seconds