Oblivion:Oblivion, Mods & Linux
This page gives important information on installing new Mods (plugins) for your Oblivion game.
The most important thing to remember about installing a new mod for your game is that the Linux filesystem is case-sensitive and Windows is not. This means that if you use a Linux tool to unpack an archive of a new mod into your Data directory, you run the risk of creating paths that will shadow each other, and your game will misbehave, probably very badly. For example, one archive might contain the directory "Meshes/" and another might contain "meshes/". When both are unpacked in your Data directory, you'll end up with both directories under Data, but Windows programs will only be able to access one of them, the other will be shadowed and inaccessible. Fixing this situation by hand is time-consuming and error-prone.
The simple solution is to use a Windows program to unpack archives of your mods.
One solution is to just unpack and then convert paths to lowercase, like with mvcase. It is pretty experimental way to do it and requests one to know what she has installed; tools like wrye bash can’t track these duplicate files correctly. It also seems that Wrye Bash is itself case sensitive...
The rest of this page covers some tips for using Windows programs to install your mods.
Basically, download any windows unarchiver program. I use 7-zip (http://www.7-zip.org/), or peazip (http://peazip.sourceforge.net/) which are both freeware, install it as you would any normal wine program under the same WINEPREFIX as your oblivion: e.g. something like:
Now you can use your Windows archive tool, NOT any Linux based archive unpacking tool, and all case-sensitive issues go away as these tools run under wine and perform their duties without respect to case sensitivity.
1) Write a wrapper script for the windows version of 7-zip:
#!/bin/bash # run windows 7z.exe from where it is installed, the following shows the default wine $WINEPREFIX/drive_c/Program\ Files/7-Zip/7z.exe "$@"
Put that in a file, call it "win7z", make it executable with "chmod +x win7z", put win7z in your $PATH, and now you can run the windows version of 7-zip from the command line, very easy.
2) Before unpacking, look in the archive first:
win7z l arc.7z
If the mod has some top level directory like "MyMod 1.0/Data/Meshes/...", then you have 2 options, use symlinks or repack the archive, after which you can just unpack directly in the Oblivion/Data/ directory. To use symlinks in this case, cd to Oblivion/Data and type:
ln -s . "MyMod 1.0" ; ln -s . Data
Now if you unpack the archive in Oblivion/Data, the files will go in the right place. If that isn't to your liking, then unpack the archive in a temporary directory, cd into its Data directory, create a new archive of the files there, and the new repacked archive will unpack in Oblivion/Data flawlessly.
3) Alternatively, since Wine supports the "xcopy" command, you can extract the archive to a temporary directory, then use the command:
wine xcopy source target /s /y
where "source" is the source directory you want to copy and "target" is the directory you want to copy to. The "/s" means do a recursive copy, and "/y" means assume "yes", instead of asking you if you want to overwrite the destination files. This copy will be safe as it is not sensitive to case.
4) If you have used Linux based commands to install files into Oblivion/Data, you may very well have introduced problems, as Linux filesystem is case-sensitive while Windows is not. (Thus Meshes/ and meshes/ could both exist under Linux, and this would definitely cause problems. To find out if you have any problems with files that would shadow each other under Windows, use the following shell script:
#!/bin/bash # Execute this script in the Oblivion/Data directory. echo "checking for directory conflicts in Data ..." find . -type d | tr A-Z a-z | sort | uniq -c | sort -nr | grep -v '^ *1 ' echo "checking for filename conflicts in Data ..." find . -type f | tr A-Z a-z | sort | uniq -c | sort -nr | grep -v '^ *1 ' echo "Done"
This will list any files that will conflict due to having more that one instance (e.g. Meshes/ and meshes/).