There is no change in behaviour since we were using the C locale.
The locale-aware tolower is much slower than the locale-unaware one. At least on Linux/GCC it calls dynamic_cast's, and is overall slower by an order of magnitude.
ESM::Cell::getCellId() was allocating a string on every call. This caused functions dealing with cellIds to be unnecessarily expensive.
For example, World::moveObject spent almost as much time comparing CellIds as it did updating Bullet's AABB after the move. OpGetDistance was by far the most expensive script instruction because it has to compare cellIds.
The total cost of getCellId() relative to the frame loop was about 0.3%.
the user settings.cfg file. Add a helpful header to the top of new
settings.cfg files. Remove old code involve whitespace management
that didn't work correctly anayway, and doesn't matter since we're not
adding comments to the file. Remove "automatically generated"
comments.
comments to persist, ordering of settings to be retained, additional
reporting of changed settings, preservation of the settings.cfg
timestamp when no changes are made, and foundational changes for
possible future features. Due to poor interaction with the
openmw-launcher settings code, the launcher will still discard all of
these benefits.
Seems wrong to me, but MW appears to do it that way. Without this fix, the light_de_candle_08_64 from http://www.nexusmods.com/morrowind/mods/41654/ has flame particles in the wrong spot.
This never existed in vanilla MW in the first place. The reason we got confused was because of a strange behaviour where the order of applying rotations changes as soon as a script touches the object's rotation.