openmw issueshttps://gitlab.com/OpenMW/openmw/-/issues2024-01-03T20:38:35Zhttps://gitlab.com/OpenMW/openmw/-/issues/7085Support automatic load ordering in the launcher2024-01-03T20:38:35ZelsidSupport automatic load ordering in the launcherSince all mods declare their dependencies it should be possible to automatically sort them using [topological sorting](https://en.wikipedia.org/wiki/Topological_sorting). There might be some caveats for conflicting mods. [mlox](https://g...Since all mods declare their dependencies it should be possible to automatically sort them using [topological sorting](https://en.wikipedia.org/wiki/Topological_sorting). There might be some caveats for conflicting mods. [mlox](https://github.com/rfuzzo/mlox) supports this by having a [configuration](https://github.com/DanaePlays/mlox-rules).
OpenMW launcher could initally have support for simple cases by having a button to sort content files (or fix present loading order issues). Manual order should also be supported.
Also we could look into importing existing mlox configurations for complex cases.https://gitlab.com/OpenMW/openmw/-/issues/7073Cope with `settings.cfg` and `openmw.cfg` being edited while applications are...2024-02-07T02:21:54ZAnyOldName3Cope with `settings.cfg` and `openmw.cfg` being edited while applications are openApparently, users expect applications to cope with their config files being edited under them these days - we have *loads* of support requests about config entries reappearing, and this is the only way it could be happening as we don't s...Apparently, users expect applications to cope with their config files being edited under them these days - we have *loads* of support requests about config entries reappearing, and this is the only way it could be happening as we don't save them anywhere else. It's bad for UX if things people expect to happen don't.https://gitlab.com/OpenMW/openmw/-/issues/7067Make TCL work on Non-playable characters2022-12-26T11:38:47ZAbdu SharifMake TCL work on Non-playable charactersTCL can only work on the player character in OpenMW.
Morrowind: TCL works globally, this would be very prone to causing issues and may have unintended results, OpenMW doesn't have a fall fail-safe either.
Later games: apparently the co...TCL can only work on the player character in OpenMW.
Morrowind: TCL works globally, this would be very prone to causing issues and may have unintended results, OpenMW doesn't have a fall fail-safe either.
Later games: apparently the command can target NPCs, for example in Skyrim:
UESP: "Essentially, you can fly. Point in a direction and move wherever you want. You can also move through buildings and even the landscape. This command is targeted; if no actor is selected it will turn off collision for the player while keeping other actors stuck in place. It is possible to deselect any target reference by double clicking the same object or area in the landscape, which will cause "tcl" to default itself to target the player."
Aside from how complicated it is in Skyrim (and that we already have ToggleAI), there's still a benefit to having this command work on Targets (like followers) since it allows to unstuck them and can also make them move in the upwards or downwards direction (what allows to change their elevation and get them out of places they can't avoid unless they jump).https://gitlab.com/OpenMW/openmw/-/issues/7066Multisampled Post-Processing (MSAA)2022-12-22T00:09:46ZAnyOldName3Multisampled Post-Processing (MSAA)Currently, post-process shaders force a multisampled framebuffer to be resolved (converted to a single value per pixel by blending the samples together based on their coverage). For things like fog, this means there's only a single depth...Currently, post-process shaders force a multisampled framebuffer to be resolved (converted to a single value per pixel by blending the samples together based on their coverage). For things like fog, this means there's only a single depth value available, and so fog changes sharply from pixel to pixel, removing nearly all the benefit of multisampling.
There are two kinds of mutlisampling-aware post-processing possible:
## Custom resolve
Instead of having fixed-function hardware do the resolve, it's possible to have a single post-process shader see the multisampled FBO as a multisampled texture and output to a regular FBO. Normally this is used for things like fancy antialiasing that combines a post technique with the extra samples to get better results for less work, but it could instead resolve the fog problem. Irritatingly, it can't do both unless someone writes a monolithic post pass that applies all the effects together, which would be nightmarish.
## Supersampled post-processing
If you have a custom resolve pass copy the data from a mutlisampled texture into a much higher-resolution single-sampled one, you can avoid discarding any data, and then can do regular post-processing on the bigger textures before finally downsampling to the display resolution. However, you'll have a majority of pixels that are identical to all their neighbours as they came from a pixel in the original FBO that only had one sample with any coverage, and that means the later post passes need to do duplicate work. Also, depending on how the hardware implements multisampled FBOs and textures, it might eat more VRAM and bandwidth.
## True multisampled post-processing
GL4 capable hardware can run compute shaders, and one of the things a compute shader can do that other shaders can't is arbitrary writes to images. That means a compute shader can run a post pass once on each of the samples with coverage, output the results to samples in a new multisampled texture, and copy across the coverage mask.
## So...
Implementing support for custom resolve shaders should be pretty simple as *nearly* everything's exactly the same as we've got already, except we make the last pass texture a `GL_TEXTURE_2D_MULTISAMPLE` instead of a `GL_TEXURE_2D`, and then OSG won't resolve it for us. It's not hugely helpful on its own, but will be useful for things like SMAAS2X.
Implementing the compute-shader-based approach would be nice, so unless we think of something clever, that's what I'd count as this feature request being fulfilled.
Despite working on older hardware, I'd not bother with the supersampling-based approach as I expect nearly all hardware that can't handle compute shaders to also be so old and slow that it can't handle high-quality rendering anyway.https://gitlab.com/OpenMW/openmw/-/issues/7065Using the same image for large and small spell icons.2023-02-10T18:30:53ZMatjaž LamutUsing the same image for large and small spell icons.The way OpenMW finds and uses spell icons in the UI is tailored strictly to how Morrowind names and organizes its icons. The small icon is first assigned in OpenMW-CS to a magic effect. The large icon then needs to be another image with ...The way OpenMW finds and uses spell icons in the UI is tailored strictly to how Morrowind names and organizes its icons. The small icon is first assigned in OpenMW-CS to a magic effect. The large icon then needs to be another image with a `b_` prefix in its name. This works for Morrowind, but not when icons are in subfolders or when wanting to use a single image for the small and large occurence in the UI.
Let's consider the following example:
![spell_small_big_icons](/uploads/a87fbfe655ef24ba76f20414d7472f15/spell_small_big_icons.webp)
The small icon is assigned in OpenMW-CS to the corresponding magic effect record and then shows in the UI.
The icon field takes the path `magic/alteration/shield.dds`
But to get the large icon to show (and not a pink missing texture) there needs to be another image file with a path `b_magic/alteration/shield.dds`
The proposal is to change this system when it doesn't find a large icon, to fallback to the one assigned through OpenMW-CS.
Related code gitlab.com/OpenMW/openmw/-/blob/master/apps/openmw/mwgui/hud.cpp#L421https://gitlab.com/OpenMW/openmw/-/issues/7058Implement TestModels (T3D) console command2022-12-27T00:41:40Zhemaris-trImplement TestModels (T3D) console commandOpenMW already implements the `TestCells` and `TestInteriorCells` console commands from Morrowind.exe, but not the `TestModels` command. The cell test commands are already very useful for modmakers, particularly large projects with lots ...OpenMW already implements the `TestCells` and `TestInteriorCells` console commands from Morrowind.exe, but not the `TestModels` command. The cell test commands are already very useful for modmakers, particularly large projects with lots of game assets and IDs to keep track of. I think that the `TestModels` command would also be useful.
According to Hrnchamd, this is what `TestModels` does in Morrowind.exe:
> It checks if the model file exists for all objects. There are checks for model file existence, and scans the nif for NiRawImageData, but doesn't actually use the NIF loader. That means it detects missing files but not invalid NIFs.
Simply reporting a list of missing meshes, as described, would be very helpful. But I certainly would not complain if OpenMW had an implementation of `TestModels` which actually did load and check every nif. At present I am only able to find out (using `TestCells` and `TestInteriorCells`) about issues like out of bounds UVs or improperly attached RootCollisionNodes for meshes with existing cell references.openmw-0.49Evil EyeEvil Eyehttps://gitlab.com/OpenMW/openmw/-/issues/7055Memory usage, garbage collecting, and unloading inactive cells2023-11-05T11:16:22ZPetr MikheevMemory usage, garbage collecting, and unloading inactive cells**Current state**
- Right after starting/loading a game only the active cell is loaded to RAM. During the game the engine loads to RAM the cells that are close to the player. There is no mechanism for unloading cells, so RAM usage monot...**Current state**
- Right after starting/loading a game only the active cell is loaded to RAM. During the game the engine loads to RAM the cells that are close to the player. There is no mechanism for unloading cells, so RAM usage monotonically increases until the game is restarted/reloaded.
- Removing an item simply sets `count` to 0 without removing its `LiveCellRef`.
**Problems**
- OpenMW can crash with "not enough memory" if too many cells were visited in one game session (can be illustrated by an mwscript that teleports the player to every interior cell one by one).
- Repeatedly adding and removing something to/from a container can cause unlimited memory usage increase even if only a single item exists at a time. It is quite bad for some scripting use cases.
- In multiplayer both problems will become even bigger because several players can visit more cells at a time, and restarting the server to unload inactive cells is inconvenient (not applicable to the current state of tes3mp because now tes3mp server doesn't work with mwworld at all).
**Goal**
We need a mechanism to unload inactive cells and free deleted instances.
The main difficulty is that `MWWorld::Ptr` holds raw pointer to `LiveCellRef` and if the `LiveCellRef` was removed but the Ptr is still stored somewhere, every access to it can cause a segfault.
**Proposal**
LuaManager already has a mechanism to work with instances that may become unavailable.
It consists of
- `MWLua::ObjectRegistry` - a mapping `ESM::RefNum` -> `MWWorld::Ptr` for all active Ptrs. For instances without RefNum it adds a generated one. So `RefNum` is a unique identifier.
- `MWLua::Object` - a wrapper around `MWWorld::Ptr` that can update the Ptr (using ObjectRegistry) if the corresponding `LiveCellRef` was unloaded, loaded again, or moved to another cell or container.
It looks reasonable to detach this mechanism from Lua and use it in every place where we store Ptrs between frames.
I propose to add a new class `MWWorld::WorldModel` that combines `MWLua::WorldView`, `MWLua::ObjectRegistry`, `MWWorld::Cells`.
`WorldModel` should:
- Have memory ownership of all `CellStore` and `ContainerStore`.
- Handle requests to load something to memory.
- Handle requests to add/remove instances to cells/containers or move something from one cell to another.
- Make decisions on which cells to unload from memory if a memory budget is exhausted.
- Manage the global mapping `ESM::RefNum` -> `MWWorld::Ptr` for all instances loaded to RAM.
- (in more distant future) Manage sqlite database to search through all (including those that are not in memory) instances.
`WorldModel` shouldn't do anything outside its responsibility. In particular:
- It shouldn't have any game logic.
- It shouldn't interact with rendering.
- It shouldn't modify `ESMStore`. Managing instances is a huge task on its own, better have it separated from managing records.
**Detailed plan**
1) [Done !2498, !2535] Rename `MWWorld::Cells` -> `MWWorld::WorldModel`; Make `WorldModel` and `MWWorld::Scene` to be accessible through `Environment`.
2) [!2549] Merge `MWLua::ObjectRegistry` into `MWWorld::WorldModel`.
3) [!2803] Extract non-lua-related part of `MWLua::Object` to apps/mwworld and call it `MWWorld::SafePtr`. It is a wrapper around `MWWorld::Ptr` that updates the Ptr if the LiveCellRef it refers to was moved to another cell or unloaded from memory.
4) Change how the mapping `ESM::RefNum` -> `MWWorld::Ptr` is populated. Currently it is updated when Ptr is added to the scene, instead of it we need to update it immediately when something is added to a cell of container.
5) Switch from `Ptr` to `SafePtr` all usages of everything that can be potentially unloaded.
6) Implement unloading inactive cells.Petr MikheevPetr Mikheevhttps://gitlab.com/OpenMW/openmw/-/issues/7050Normal map/Specularity fading2022-12-04T18:13:29ZAbdu SharifNormal map/Specularity fadingHeavily modded setups in general have performance issues one way or another (because of several known reasons that are mostly on the issue tracker), and it would be nice to help improve performance for those setups as much as possible. T...Heavily modded setups in general have performance issues one way or another (because of several known reasons that are mostly on the issue tracker), and it would be nice to help improve performance for those setups as much as possible. This issue is about setups that use normal and specular...etc maps, especially since now we have mods for these that cover all the game textures and most important/used modded game content (TR/PT...etc).
We also have seen the shading scene getting popular alot recently with modding core shaders, this should be helpful for performance when using such shaders too.
(Later games also have specularity fading too).
Here's an experiment done in shaders by Sisah and what they had to say about this:
![fading_1](/uploads/b971e4c105f3e7d4f8480d80839755ef/fading_1.jpg)
![fading_2](/uploads/fc7481dea9b248dfae1bf96845f0b986/fading_2.jpg)
This was included in the messages above:
https://youtu.be/w0kaHrHyU0g
The code for anyone curious should be in Sisah's experimental OpenMW Android repo (which I won't link to, because I don't know which shader pack exactly).https://gitlab.com/OpenMW/openmw/-/issues/7046openmw-cs: request/document: better way of doing door links.2024-03-26T06:28:29Zsjekopenmw-cs: request/document: better way of doing door links.- on 0.48 RC2 and 66e14fa3bd
- Both openmw and tes-cs have their issues altho tes-cs is more intuitive
- for the wanted approach don't know but some hydrid could be done.
biggest point might be getting the coordinates in user friendl...- on 0.48 RC2 and 66e14fa3bd
- Both openmw and tes-cs have their issues altho tes-cs is more intuitive
- for the wanted approach don't know but some hydrid could be done.
biggest point might be getting the coordinates in user friendly way and jump between the both destinations. for example in tes-cs both directions are separate entities.
**Current sitution**:
For the purposes of this report/document exterior to interior direction is first examined.
**Openmw CS way**
1. open an exterior from the cell table and find or place a door.
2. open it's edit (shift + LMB) and find the teleport checkbox (check it) and the cell field below it.
3. write the destination cell’s name activating the dropdown list or fetch from the cell table.
4. you can view the chosen cell via
- first open the edit, from RMB click dropdown menu on cell's name.
Then in the edit screen you can use the half green “open the scene view..” button on the bottom to open the destination cell’s view.
- alternatively you can find the cell in the cell table.
5. (optional) to find the coordinates, place some object where the destination is wanted.
6. open the instance’s edit (shift + lmb)
7. manually copy / place the wanted coordinates to extrerior's door teleport coordinates.
- making the link can be made easier by opening the destinations side by side and copy pasting the coordinates.
![Open_cs_door_link_making](/uploads/d2b6949766d0c107f340308f4802a92a/Open_cs_door_link_making.JPG)
order from interior to exterior is the same with one exception.
- you need to find the exterior coordinates manually as the cell's x, y coordinates aren't given. Only their record name is used which is on majority empty and they cannot be chosen from the dropdown menu. this is also true for exterior cells with a name.
**Tes-CS way**
- This is more straightforward. altho have it’s details too.
1. You can place the door to the cell from it’s table and open it with a double click.
2. On the record, the checkbox for teleport and cell field are on the right.
The destination can be chosen after the teleport is checked.
3. the destination is chosen from the dropdown list.
- only first letter can be written
- exteriors are shown with either "cell-" or "region (x, y)"
4. For choosing the teleport coordinates the "select marker" button teleports you to the destination cell.
![tes_cs_door](/uploads/730cd79d59d64bcadb442be7a71d83a7/tes_cs_door.JPG)
- this will also automatically make a new doormarker to where view is started. in the test, at the door.
- the marker and door are coupled initially so coordinates are already inserted.
5. for the coupling the doormarkers connection backward is blocked on doormarker
- you can tho use the select button on door’s menu to switch view back and worth while giving the doormarker selected but not in it's own edit view.
_hope this helps_https://gitlab.com/OpenMW/openmw/-/issues/7045Editor: Default class service editing2022-10-08T15:03:13ZEvil EyeEditor: Default class service editingIt should be possible to edit the default services offered by autocalculated NPCs on a class.It should be possible to edit the default services offered by autocalculated NPCs on a class.https://gitlab.com/OpenMW/openmw/-/issues/7038Prevent loading of assets in OP that are triggered by scripts2023-07-13T11:15:18Zpsi29aPrevent loading of assets in OP that are triggered by scriptsOne of the more interesting drawbacks to having OP and by extension "distant land" is that there is content that is enabled by default but then disabled by scripts when moving into the cell. This is a Morrowind specific issue, so having ...One of the more interesting drawbacks to having OP and by extension "distant land" is that there is content that is enabled by default but then disabled by scripts when moving into the cell. This is a Morrowind specific issue, so having a solution that works just for Morrowind seems applicable.
Possible solutions:
- Creating Morrowind.mwaddon that contains fixes for content issues, this is something we can ship along with OpenMW. It can contain more than just the fixes above.
- Pre-launch process that runs through all scripts to set the initial state for content.
- Some other solution?https://gitlab.com/OpenMW/openmw/-/issues/7037Warn when running as admin/root2022-10-05T15:35:12ZEvil EyeWarn when running as admin/rootMorrowind, being created before UAC, is often started with administrative privileges. The advice to "run it as admin" if something is not working is common in the community, and the advice is extended to OpenMW. OpenMW, however, should n...Morrowind, being created before UAC, is often started with administrative privileges. The advice to "run it as admin" if something is not working is common in the community, and the advice is extended to OpenMW. OpenMW, however, should not be running with elevated privileges.
I propose we add a warning pop-up to OpenMW, OpenMW-CS, and the Launcher that tells people they're doing it wrong. Similar to certain Linux applications that will tell you not to run them as root.
https://learn.microsoft.com/en-us/windows/win32/api/securitybaseapi/nf-securitybaseapi-checktokenmembership
https://linux.die.net/man/2/geteuidhttps://gitlab.com/OpenMW/openmw/-/issues/7035Editor: Automatically mark items as keys2022-09-30T10:09:39ZEvil EyeEditor: Automatically mark items as keysWhen a misc item is assigned as a key to a container or door, it should be marked as a key. Note that TESCS doesn't allow users to manually specify an item's keyness.When a misc item is assigned as a key to a container or door, it should be marked as a key. Note that TESCS doesn't allow users to manually specify an item's keyness.https://gitlab.com/OpenMW/openmw/-/issues/7032Consider logging ori data when reporting missing meshes and textures2022-12-04T12:14:28ZAnyOldName3Consider logging ori data when reporting missing meshes and texturesQuite often when users complain about missing meshes and textures, we tell them to go to the offending object, open the console, select the aberration, and run `ori` to find out the content file et cetera. When the engine's not running a...Quite often when users complain about missing meshes and textures, we tell them to go to the offending object, open the console, select the aberration, and run `ori` to find out the content file et cetera. When the engine's not running and we're diagnosing things post-mortem from the log, though, we don't have this information. After several minutes of thinking, I've yet to come up with a reason why we shouldn't include this kind of thing in the error message we log.https://gitlab.com/OpenMW/openmw/-/issues/7014Appends yaml localisation files instead of replacing when included in the vfs2022-12-23T11:38:21ZArnaud DochainAppends yaml localisation files instead of replacing when included in the vfsOtherwise it could lead to copyright problems when developing a patch mod: The current system requires to include the original localisation file (or the end user should manually edit the localisation files, or use an external tool,... wh...Otherwise it could lead to copyright problems when developing a patch mod: The current system requires to include the original localisation file (or the end user should manually edit the localisation files, or use an external tool,... which could be a hassle).
Appending the yaml files would solve the problem.
But it should be combined with another feature in the localisation system: Using the last localisation key of the file (the current system load the first).
Not sure if this feature is desired, but it separates the GMST localisation issue in two distinct parts (and also the "un mainainted" mod problem).https://gitlab.com/OpenMW/openmw/-/issues/7011Save and load inertial force for actors2023-07-13T05:20:44ZelsidSave and load inertial force for actorsThis is required to preserve actors movement as no save and loading is done. Also this will affect actors moving while player leaves the cell.
It should be a part of [ESM::CreatureStats](https://gitlab.com/OpenMW/openmw/-/blob/cd8b20439...This is required to preserve actors movement as no save and loading is done. Also this will affect actors moving while player leaves the cell.
It should be a part of [ESM::CreatureStats](https://gitlab.com/OpenMW/openmw/-/blob/cd8b20439ec707574826679a8f851546c78e294e/components/esm3/creaturestats.hpp#L24) and should be used to initialize [MWPhysics::Actor::mForce](https://gitlab.com/OpenMW/openmw/-/blob/cd8b20439ec707574826679a8f851546c78e294e/apps/openmw/mwphysics/actor.hpp#L199).
There is no such behaviour in the vanilla Morrowind so this is rather a feature than a bug.https://gitlab.com/OpenMW/openmw/-/issues/6995Localize the "show effect duration" option2022-09-08T06:54:29ZAndrei KortunovLocalize the "show effect duration" optionCurrently the duration text is hardcoded English one. Since we can localize OpenMW-specific text now, it can be dehardcoded.Currently the duration text is hardcoded English one. Since we can localize OpenMW-specific text now, it can be dehardcoded.openmw-0.49Andrei KortunovAndrei Kortunovhttps://gitlab.com/OpenMW/openmw/-/issues/6983PCVisionBonus script functions2022-09-09T11:21:35ZDuendeInexistentePCVisionBonus script functionsFairly obscure script function apparently, but I know at least [one mod](https://mw.modhistory.com/download-37-2806) that uses it. That and [another upload](https://mw.modhistory.com/download-37-583) whjich seems to be the same file in a...Fairly obscure script function apparently, but I know at least [one mod](https://mw.modhistory.com/download-37-2806) that uses it. That and [another upload](https://mw.modhistory.com/download-37-583) whjich seems to be the same file in a different page (The readme doesn't list any version differences and the filesize of the esp is the same, at least).
It's listed [in UESP](https://pt.uesp.net/wiki/Morrowind_Mod:ModStat) without any details (Other than it being undocumented) so I made a quick test in the original engine. It seems to be Night Eye sans the status effect indicator.openmw-0.49Evil EyeEvil Eyehttps://gitlab.com/OpenMW/openmw/-/issues/6980Scrollbars on widgets should be always visible2022-09-04T09:37:29ZAndrei KortunovScrollbars on widgets should be always visibleIn most of Morrowind's widgets scrollbars do not disappear when there is not much data to display, while in OpenMW they do. When scrollbars disappear, there is just unused empty space remains, so there is no real benefit from hiding them.In most of Morrowind's widgets scrollbars do not disappear when there is not much data to display, while in OpenMW they do. When scrollbars disappear, there is just unused empty space remains, so there is no real benefit from hiding them.https://gitlab.com/OpenMW/openmw/-/issues/6979Add support of loading loading and displaying LOD assets purely based on thei...2022-09-08T02:48:24Zpsi29aAdd support of loading loading and displaying LOD assets purely based on their filename extensionThis specifically targets https://gitlab.com/OpenMW/openmw/-/merge_requests/1861 which started doing the work as outlined here https://gitlab.com/OpenMW/openmw/-/merge_requests/1287#note_943489605
So while that list covered a LOT of gro...This specifically targets https://gitlab.com/OpenMW/openmw/-/merge_requests/1861 which started doing the work as outlined here https://gitlab.com/OpenMW/openmw/-/merge_requests/1287#note_943489605
So while that list covered a LOT of ground, let's start smart and focus on having the bare minimal needed for making OpenMW aware. The goal is not be refined and refer to ESM's flags, that is handled in #6978; but for the purposes of getting MGE:XE LOD working and supporting later game's assets; we have to support all their suffixes.
What should be supported:
- loading MGE:XE LOD assets based on suffixes
- loading Oblivoin LOD assets based on suffixes
- loading Skyrim LOD assets based on suffixes
- OP/AG should be in the loop here, using best guess... in AG area, the original asset is to be used; outside of AG, the LOD asset.
Note: There might be multiple level of LOD. I'm okay with just having the most simple LOD being used in the distance. If it can be handled in a 'smart' way, we can support multiple levels based on units away from the player. We can create a ticket to handle this feature if necessary as it might require use of various flags in the ESM.
Once this in place, we can build on top of it to include other things.openmw-0.49Cédric MocquillonCédric Mocquillon