The code in bullet_nif_loader was modifing the loaded NIF file as part of
processing. Currently this is OK since the NIF file will be thrown away
immediately, but it causes problems when trying to share loaded NIF files.
I think it's safe to assume all text keys are treated in a case-insensitive
manner. So far the only known NiTextKeyExtraData records are for animation
keys, which effectively are.
Replaced old file index with a simple map. The map works by storing the
file's relative path with path seperators normalized, and in lower case if
not in strict mode. Incoming searches are normalized in the same way then
the name is searched in the map. The value in the map is the original full
path to the file which is then used to created a ConstrainedDataStream. In
addition to changing the index, the commonly used Archive methods are
implemented so that they don't fall back on the default FileSystemArchive
implementations.
moved the ConstrainedDataStream into its own source file and changed
BSAFile to use it though the exposed factory function. This is in
preperation foreimplementing it based on feedback from profiling that
(at least on windows) the C++ iostreams library is quite slow.
ResourceGroupManager::resourceExistsInAnyGroup is slow (at least on
windows) if the tested path does not exist, but is fast if it does (due
to finding it in the index). This change tries the '.dds' version of the
name first, and reverts to the original if the '.dds' version was not
found.
- Add preliminary support for loading some unique fields appearing only in savegames
- Add a few lines required for supporting respawning references. Incomplete.
Changed a block of code that was performing a series of string
concatenations to use an ostringstream instead. This allowed the removal
of calls to std::to_string (not C++03 compliant) and fixes an compile
error in MSVC 2010 (ambigous overload when calling std::to_string).
The 'fixing' for so-called dirty GMSTs does not work properly in its
current state anyway, so it should be removed. Fixing the 'GMST fixing'
might not be possible, because whether or not a GMST is 'dirty' depends
on the language version of MW. Therefore different 'fixing' algorithms
would be required for the different MW localisations, and I do not see
a good reason why GMST values should be hard-coded in the GMST load
procedure. In my opinion, it only clutters the code.
Last but not least, I believe that it is not the task of the engine to
clean ESM files from dirty entries. That is a job for the modders, who
should only release clean ESM/ESP files in the first place. The engine
should not need to worry about whether a file is 'dirty' or not.
That is why I believe a feature for cleaning ESM/ESP files shall not be
part of the engine.
- Try to reimplement multiple esX files dropping references in the same file.
NOTE: None of these features works. Maybe the code itself does not build. Anyway, after 12 hours of hacking, I am just tired and want to get a snapshot of the code out.
Conflicts:
apps/openmw/mwrender/terrain.cpp
apps/openmw/mwworld/cells.cpp
apps/openmw/mwworld/cells.hpp
apps/openmw/mwworld/cellstore.cpp
apps/openmw/mwworld/cellstore.hpp
apps/openmw/mwworld/containerstore.cpp
apps/openmw/mwworld/localscripts.cpp
apps/openmw/mwworld/scene.cpp
apps/openmw/mwworld/worldimp.cpp
apps/openmw/mwworld/worldimp.hpp
components/esm_store/reclists.hpp
components/esm_store/store.cpp
extern/shiny
- Re-implement some patches that were broken by the removal of reclists.hpp and store.cpp/.hpp.
- NOTE: Not everything works as before, I'll have to test some more stuff before we are back to where we were.
- Change CellRefList::list from list<> to map<int,> so we can identify live references by their Refnumber.
- Introduce ContainerRefList, a clone of the original CellRefList. It is now used for containers, which do not track Refnumbers.
- Many small tweaks so that the new CellRefList does not conflict with existing code.