1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-05 15:40:10 +00:00

93 Commits

Author SHA1 Message Date
Evil Eye
f41e46db64 Replace empty NPC class with fallback 2022-06-06 10:59:26 +02:00
elsid
3affe9913f
Limit the number of simultaneously open not actively used content files
Use LRU cache for ESMReaders. When cache capacity is reached close least
recently used ESMReader. Remember the file name if a reader was open. Once the
reader requested again open the file if there is stored name for it. Put
released ESMReader to the back of the free items list. Close ESMReader's from
the front of the free items list.

Cached item can be used only by one client at the same time. If the same item is
requested twice exception is thrown. This should never happen in practice. If
this happens need to fix the client logic.

It's allowed to go over the capacity limit when requesting different readers.
Ideally this should never happen but there will be system error anyway
signalizing about too many open files. Need to fix client logic in this case.

All places that were using a vector of ESMReaders now using the cache. Cache is
local for each use case and there is no need for a thread safety.
2022-06-03 01:29:03 +02:00
Evil Eye
61ea678a96 Implement ignored records 2022-04-16 16:28:39 +02:00
elsid
5156ee94be
Store static id key in lower case 2022-04-08 01:22:48 +02:00
Bret Curtis
74e7cfc023 remove unused includes: part1
remove unused imports: part2

revert one tidy we will keep for c++20
2022-01-23 17:30:25 +01:00
Bret Curtis
d1fb854521 move most of the files from esm to esm3, keep common code in esm; this is make space for a future with esm4
esm typo

esm typo
2022-01-23 17:04:48 +01:00
Bret Curtis
700bace24c do not emplace_back to our mLandTextures; instead use the heavy handed resize to be explicit about what we intend to do; resolves issue found here: https://github.com/OpenMW/openmw/pull/3220#issuecomment-964650167 2021-11-12 11:53:21 +01:00
Bo Svensson
6cf74f7041
refactors ESM::Land (#3213)
With this PR we reduce coupling, simplify code, encapsulate a variable and separate actual `ESM` data from its context.
2021-11-04 16:55:32 +01:00
Bo Svensson
4657c655b1 refactors parentFileIndices (#3211)
This PR aims to start addressing `ESM` design issues that have silenced errors we incorporated into groundcover `ESM` loading approaches.

- We move the resolution of `parentFileIndices` from `ESMStore` to `ESMReader` as suggested in a `TODO` comment.
- We improve a highly misleading comment which downplayed the significance of `parentFileIndices`.
- We document important preconditions.
- We move a user facing error message to the highest level and improve its context.
- We remove an inappropriate `setGlobalReaderList` method. We now pass this reader list into the method that requires it.
- We remove a thoroughly pointless optimisation of `Store<ESM::LandTexture>`'s construction that has unnecessarily depended on `getGlobalReaderList`.

There should be no functional changes for `master`, but this PR should remove an issue blocking PR #3208.
2021-11-03 11:07:28 +01:00
Bo Svensson
213faa6695
restores countRecords optimisations (#3210)
With this PR we restore @elsid 's optimisations of countRecords we have unintentionally discarded in PR #3197. In addition, we give it a more appropriate name and add comments concerning its peculiar background.
2021-11-02 14:46:41 +01:00
Bo Svensson
1329f22186
refactors MWWorld::Store maps (#3197)
With this PR we clean up `MWWorld::Store` maps according to the approach of PR #3184.
2021-10-30 19:27:57 +02:00
Petr Mikheev
47c89567fb Load LuaScriptsCfg from both *.omwscripts and *.omwaddon files. 2021-10-26 21:52:42 +02:00
elsid
18d3102148
Do not use union to access FIXED_STRING<4> as int
https://en.cppreference.com/w/cpp/language/union:
> It's undefined behavior to read from the member of the union that wasn't most recently written.
2021-10-17 17:16:21 +02:00
jvoisin
73c20be29a Use prefix increment for iterators in esmstore.cpp
See https://pvs-studio.com/en/docs/warnings/v803/
for the rationale.
2021-07-22 22:03:59 +02:00
Evil Eye
1e1ebb049e Workaround clang and actually erase from the vector 2021-07-13 21:18:24 +02:00
Evil Eye
86c50ece92 Improve save cleaning 2021-07-12 20:51:13 +02:00
Petr Mikheev
6db2450c90 Initial support of generated RefNums with negative mContentFile. 2021-07-09 20:03:27 +02:00
jvoisin
22153cca7b Reduce a bit the code bloat in hot paths/small functions
There is no need to bloat hot/small functions with
a ton of function calls and involving locales
for simple error messages.
2021-06-15 17:57:14 +02:00
psi29a
3d61d7ec9a Merge branch 'optimize_initial_load' into 'master'
Optimize engine initial loading time

See merge request OpenMW/openmw!867
2021-05-15 18:48:17 +00:00
jvoisin
7deb6a6ffd Use const references when possible in for loops
No need for useless copies.
2021-05-15 19:50:01 +02:00
elsid
1e2aae8095
Use stable sort+unique to collect RefIDs for ESMStore records counting
The idea is to avoid std::map lookup for each CellRef. Instead generate a
sequence of added and removed RefNums into a vector then order them by RefNum
using a stable sort that preserves relative order of elements with the same
RefNum. RefIDs are stored in a different vector to avoid std::string move ctor
calls when swapping elements while sorting. Reversed iteration over added and
removed RefNums for each unique RefNum is an equivalent to what map-based
algorithm produces. The main benefit from sorting a vector is a data locality
that means less cache misses for each access. Reduces ESMStore::countRecords
perf cycles by 25%.
2021-05-15 18:45:22 +02:00
elsid
f2188d2533
Reduce temporary allocations on ESM loading
By moving objects instead of copying when possible.
2021-05-15 18:45:21 +02:00
Andrei Kortunov
f308dde254 Clean up MSVC warnings 2021-04-17 12:14:50 +04:00
Evil Eye
cf5a93d712 Also run NPC validation for modified base records 2021-03-23 21:07:57 +01:00
Evil Eye
5e1960a76a Disallow inserting containers, creatures, and npcs from the save game not present in content files 2021-03-22 22:29:10 +01:00
Andrei Kortunov
8084a336b5 Replace zeroes and nulls by nullptrs 2020-11-29 11:14:07 +04:00
Evil Eye
7065282127 Save and load container records; fixes #5668 2020-10-29 13:55:24 +01:00
Evil Eye
6ad20ec9c7 Mutate base records when adding/removing spells 2020-07-28 08:33:28 +02:00
Evil Eye
040a92c373 implement additem/removeitem for non-unique actors 2020-07-26 11:07:18 +02:00
bzzt
d684f1a78f terrainbased objectpaging
Signed-off-by: Bret Curtis <psi29a@gmail.com>
2020-06-13 00:22:27 +02:00
Evil Eye
4d7947d27c Mutate base records when editing AI settings (#2798) 2020-06-02 21:59:37 +02:00
Bret Curtis
8c2f3ff007 clean up code; purge const_cast 2020-04-19 16:31:54 +02:00
Andrei Kortunov
3970baeb84 Fix possible usage of destroyed variable 2019-11-13 15:46:49 +04:00
Alexei Dobrohotov
dec64a7fba
Fix typos in invalid spell effect warnings, clarify them 2019-10-17 23:45:27 +03:00
Capostrophic
3aa65273c5 Signedness fixes 2019-06-18 14:47:10 +03:00
Capostrophic
d98a90194b Erase effects with invalid indices from spells (bug #5050) 2019-06-02 14:56:39 +03:00
Capostrophic
be125aa996 Add spell effect argument validation (bug #4927) 2019-04-01 16:22:24 +03:00
Capostrophic
27eb64c7f0 Clean up fallback record creation again 2019-01-02 13:49:04 +03:00
Capostrophic
4efe1bc892 Add prison marker record fallback definition (bug #4701) 2018-11-05 19:37:46 +03:00
Andrei Kortunov
5a4d0cec3a Use new logging system for game itself 2018-08-14 23:05:43 +04:00
Andrei Kortunov
49ba00a3ec Add NPC validation to esmstore (bug #2772) 2018-06-14 16:48:16 +04:00
Andrei Kortunov
1dd36329a3 Load default markers definitions (bug #4410) 2018-05-05 17:14:33 +04:00
Roman Proskuryakov
d5dfa89060 Rewrite NAME_T into FIXED_STRING. 2016-05-07 23:27:33 +03:00
scrawl
1905f0bf2d Add support for placing BodyParts in a cell (Bug #3118) 2016-01-02 01:30:06 +01:00
scrawl
cc2315a0de Minor fix 2015-12-11 16:59:13 +01:00
scrawl
b856460f86 ESMStore: fill mIds in setUp() 2015-12-11 16:55:28 +01:00
scrawl
4687c4baad Do not assert() for invalid land data in plugins (Bug #3037)
The resizing of LTEX store to the correct number of plugins was done in the load() method, but the load method won't be called if a plugin contains LAND records but doesn't contain LTEX records. For such plugins the Store<ESM::LandTexture>::search() function would then fail an assertion.
2015-11-27 21:57:15 +01:00
Stanislav Bas
c266315a35 Load/read methods in MWWorld::Store return a pair (record ID, deleted flag) 2015-07-12 15:20:22 +03:00
Stanislav Bas
2ed182b144 Update to upstream/master. Resolve merge conflicts in MWWorld::Store 2015-07-12 12:01:18 +03:00
Stanislav Bas
9301bc148e Remove NAME handling from MWWorld::ESMStore 2015-07-10 00:29:38 +03:00