Bug #3977: Non-ASCII characters in object ID's are not supported
Bug #3977: Non-ASCII characters in object ID's are not supported
Bug #4009: Launcher does not show data files on the first run after installing
Bug #4009: Launcher does not show data files on the first run after installing
Bug #4077: Enchanted items are not recharged if they are not in the player's inventory
Bug #4077: Enchanted items are not recharged if they are not in the player's inventory
Bug #4141: PCSkipEquip isn't set to 1 when reading books/scrolls
Bug #4202: Open .omwaddon files without needing toopen openmw-cs first
Bug #4202: Open .omwaddon files without needing toopen openmw-cs first
Bug #4240: Ash storm origin coordinates and hand shielding animation behavior are incorrect
Bug #4240: Ash storm origin coordinates and hand shielding animation behavior are incorrect
Bug #4262: Rain settings are hardcoded
Bug #4262: Rain settings are hardcoded
@ -36,6 +37,8 @@
Bug #4411: Reloading a saved game while falling prevents damage in some cases
Bug #4411: Reloading a saved game while falling prevents damage in some cases
Bug #4449: Value returned by GetWindSpeed is incorrect
Bug #4449: Value returned by GetWindSpeed is incorrect
Bug #4456: AiActivate should not be cancelled after target activation
Bug #4456: AiActivate should not be cancelled after target activation
Bug #4493: If the setup doesn't find what it is expecting, it fails silently and displays the requester again instead of letting the user know what wasn't found.
Bug #4523: "player->ModCurrentFatigue -0.001" in global script does not cause the running player to fall
Bug #4540: Rain delay when exiting water
Bug #4540: Rain delay when exiting water
Bug #4594: Actors without AI packages don't use Hello dialogue
Bug #4594: Actors without AI packages don't use Hello dialogue
Bug #4598: Script parser does not support non-ASCII characters
Bug #4598: Script parser does not support non-ASCII characters
// Make it fast! A DYNAMIC query geometry means we can't break frame until the flare is rendered (which is rendered after all the other geometry,
// Make it fast! A DYNAMIC query geometry means we can't break frame until the flare is rendered (which is rendered after all the other geometry,
// so that would be pretty bad). STATIC should be safe, since our node's local bounds are static, thus computeBounds() which modifies the queryGeometry
// so that would be pretty bad). STATIC should be safe, since our node's local bounds are static, thus computeBounds() which modifies the queryGeometry
// is only called once.
// is only called once.
// Note the debug geometry setDebugDisplay(true) is always DYNAMIC and that can't be changed, not a big deal.
// Note the debug geometry setDebugDisplay(true) is always DYNAMIC and that can't be changed, not a big deal.
msgBox.setText(QObject::tr("Select a valid %1 installation media.<br><b>Hint</b>: make sure that it contains at least one <b>.cab</b> file.").arg(name));
This page has general information and tutorials on how normalmapping works in OpenMW and how you can make mods using
This page has general information and tutorials on how normal-mapping works in OpenMW and how you can make mods using
the old fake normal mapping technique (such as `Netch Bump mapped`_ and `Hlaalu Bump mapped`_, and maybe the most
the old environment-mapped bump-mapping technique (such as `Netch Bump mapped`_ and `Hlaalu Bump mapped`_, and maybe the most
(in)famous one to give shiny rocks in OpenMW, the mod `On the Rocks`_!, featured in MGSO and Morrowind Rebirth) work in OpenMW.
(in)famous one to previously give shiny rocks in OpenMW, the mod `On the Rocks`_!, featured in MGSO and Morrowind Rebirth) work better in OpenMW.
*Note:* The conversion made in the `Converting Apel's Various Things - Sacks`_-part of this tutorial require the use of the application NifSkope_.
*Note:* The conversion made in the `Converting Apel's Various Things - Sacks`_-part of this tutorial require the use of the application NifSkope_.
*Another note:* I will use the terms bump mapping and normal mapping simultaneously.
*Another note:* I will use the terms bump-mapping and normal-mapping simultaneously.
Normal mapping is one form of bump mapping. In other words, normal mapping is bump mapping,
Normal-mapping is one form of bump-mapping. In other words, normal-mapping is bump-mapping,
but bump mapping isn't necessarily normal mapping.
but bump-mapping isn't necessarily normal-mapping.
There are several techniques for bump mapping, and normal mapping is the most common one today.
There are several techniques for bump-mapping, and normal-mapping is the most common one today.
So let's get on with it.
So let's get on with it.
Normal Mapping in OpenMW
OpenMW normal-mapping
************************
************************
Normalmapping in OpenMW works in a very simple way: The engine just looks for a texture with a *_n.dds* suffix,
Normal-mapping in OpenMW works in a very simple way: The engine just looks for a texture with a *_n.dds* suffix,
and you're done.
and you're done.
So to expand on this a bit, let's take a look at how a model seeks for textures.
So to expand on this a bit, let's take a look at how a model looks up textures.
Let us assume we have the model *example.nif*. In this model file,
Let us assume we have the model *example.nif*. In this model file,
there should be a tag (NiSourceTexture) that states what texture it should use and where to find it. Typically,
there should be a tag (NiTexturingProperty) that states what textures it should use and where to find them. Typically,
it will point to something like *exampletexture_01.dds*. This texture is supposed to be located directly in the
the model's base (diffuse) texture reference will point to something named like *exampletexture_01.dds*. This texture is supposed to be located directly in the
Textures folder since it does not state anything else. If the model is a custom made one, modders tend to group
Textures folder since it does not state anything else.
their textures in separate folders, just to easily keep track of them.
Modders tend to group textures for custom-made models in dedicated folders to keep track of them easily,
It might be something like *./Textures/moddername/exampletexture_02.dds*.
so it might be something like *./Textures/moddername/exampletexture_02.dds*.
When OpenMW finally adds normal mapping, it simply takes the NiSourceTexture file path, e.g.,
OpenMW will pick the diffuse map file path from the mesh, e.g.
*exampletexture_01.dds*, and looks for a *exampletexture_01_n.dds*. If it can't find this file, no normal mapping is added.
*exampletexture_01.dds*, and look up a texture named *exampletexture_01_n.dds*.
If it *does* find this file, the model will use this texture as a normal map. Simple.
That file will be the normal map if it's present. Simple.
Activating normalmapping shaders in OpenMW
Activating normal-mapping shaders in OpenMW
*******************************************
*******************************************
Before normal (and specular and parallax) maps will show up in OpenMW, you'll need to activate them in the
Before normal (and specular and parallax) maps can show up in OpenMW, their auto-detection needs to be turned on in
settings.cfg_-file. Add these rows where it would make sense:
settings.cfg_-file. Add these rows where it would make sense:
::
::
@ -64,66 +64,51 @@ settings.cfg_-file. Add these rows where it would make sense:
auto use object normal maps = true
auto use object normal maps = true
auto use terrain normal maps = true
auto use terrain normal maps = true
And while we're at it, why not activate specular maps too just for the sake of it?
::
auto use object specular maps = true
auto use object specular maps = true
auto use terrain specular maps = true
auto use terrain specular maps = true
Lastly, if you want really nice lights in OpenMW, add these rows:
See OpenMW's wiki page about `texture modding`_ to read more about it.
::
force shaders = true
clamp lighting = false
See OpenMW's wiki page about `texture modding`_ to read further about this.
Normal mapping in Morrowind with Morrowind Code Patch
So, let's say you've found out that PeterBitt_ makes awesome models and textures featuring physically based rendering
So, let's say you've found out that PeterBitt_ makes awesome models and textures featuring physically based rendering
(PBR) and normal maps. Let's say that you tried to run his `PBR Scamp Replacer`_ in OpenMW and that you were greatly
(PBR) and normal maps. Let's say that you tried to run his `PBR Scamp Replacer`_ in OpenMW and that you were greatly
disappointed when the normal map didn't seem to work. Lastly, let's say you came here, looking for some answers.
disappointed when the normal map didn't seem to work. Lastly, let's say you came here, looking for some answers.
Am I right? Great. Because you've come to the right place!
Am I right? Great. Because you've come to the right place!
*A quick note before we begin*: Please note that you can only use the normal map texture and not the rest of the materials,
*A quick note before we begin*: Please note that you can only use the normal map texture and not the rest of the materials,
since PBR isn't implemented in OpenMW yet. Sometimes PBR textures can look dull without all of the texture files,
since PBR isn't implemented in OpenMW yet. Sometimes PBR textures can look dull without all of the texture files,
so have that in mind.
so have that in mind.
Tutorial - MGE
Tutorial - MGE
**************
**************
In this tutorial, I will use PeterBitt's `PBR Scamp Replacer`_ as an example,
In this tutorial, I will use PeterBitt's `PBR Scamp Replacer`_ as an example,
but any mod featuring PBR that requires the PBR version of MGE will do,
but any mod featuring PBR that requires the PBR version of MGE will do,
provided it also includes a normal map (which it probably does).
provided it also includes a normal map (which it probably does).
So, follow these steps:
So, follow these steps:
@ -163,67 +148,67 @@ So, follow these steps:
#. Rename your newly extracted file (``tx_Scamp_normals.dds``) to ``tx_Scamp_n.dds`` (which is exactly the same name as the diffuse texture file, except for the added *_n* suffix before the filename extention).
#. Rename your newly extracted file (``tx_Scamp_normals.dds``) to ``tx_Scamp_n.dds`` (which is exactly the same name as the diffuse texture file, except for the added *_n* suffix before the filename extention).
#. You're actually done!
#. You're actually done!
So as you might notice, converting these mods is very simple and takes just a couple of minutes.
So as you might notice, converting these mods is very simple and takes just a couple of minutes.
It's more or less just a matter of renaming and moving a few files.
It's more or less just a matter of renaming and moving a few files.
I totally recommend you to also try this on PeterBitt's Nix Hound replacer and Flash3113's various replacers.
I totally recommend you to also try this on PeterBitt's Nix Hound replacer and Flash3113's various replacers.
It should be the same principle to get those to work.
It should be the same principle to get those to work.
And let's hope that some one implements PBR shaders to OpenMW too,
And let's hope that some one implements PBR shaders to OpenMW too,
so that we can use all the material files of these mods in the future.
so that we can use all the material files of these mods in the future.
Converting Lougian's Hlaalu Bump mapped
Converting Lougian's Hlaalu Bump mapped
---------------------------------------
---------------------------------------
**Mod made for MCP's fake bump function, without custom models**
**Mod made for Morrowind's bump-mapping, without custom models**
Converting textures made for the Morrowind Code Patch (MCP) fake bump mapping can be really easy or a real pain,
Converting normal maps made for the Morrowind's bump-mapping can be really easy or a real pain,
depending on a few circumstances. In this tutorial, we will look at a very easy,
depending on a few circumstances. In this tutorial, we will look at a very easy,
although in some cases a bit time-consuming, example.
although in some cases a bit time-consuming, example.
Tutorial - MCP, Part 1
Tutorial - Morrowind, Part 1
**********************
**********************
We will be converting a quite popular texture replacer of the Hlaalu architecture, namely Lougian's `Hlaalu Bump mapped`_.
We will be converting a quite popular texture replacer of the Hlaalu architecture, namely Lougian's `Hlaalu Bump mapped`_.
Since this is just a texture pack and not a model replacer,
Since this is just a texture pack and not a model replacer,
we can convert the mod in a few minutes by just renaming a few dozen files and by *not* extracting the included model
we can convert the mod in a few minutes by just renaming a few dozen files and by *not* extracting the included model
(``.nif``) files when installing the mod.
(``.nif``) files when installing the mod.
#. Download Lougian's `Hlaalu Bump mapped`_.
#. Download Lougian's `Hlaalu Bump mapped`_.
#. Install the mod by extracting the ``./Textures`` folder to a data folder the way you usually install mods (**Pro tip**: Install using OpenMW's `Multiple data folders`_ function!).
#. Install the mod by extracting the ``./Textures`` folder to a data folder the way you usually install mods (**Pro tip**: Install using OpenMW's `Multiple data folders`_ function!).
- Again, yes, *only* the ``./Textures`` folder. Do *not* extract the Meshes folder. They are only there to make the MCP hack work, which is not of any interest to us.
- Again, yes, *only* the ``./Textures`` folder. Do not extract the Meshes folder. They are there to make Morrowind bump-mapping work.
#. Go to your new texture folder. If you installed the mod like I recommended, you won't have any trouble finding the files. If you instead placed all your files in Morrowinds main Data Files folder (sigh), you need to check with the mod's .rar file to see what files you should look for. Because you'll be scrolling through a lot of files.
#. Go to your new texture folder. If you installed the mod like I recommended, you won't have any trouble finding the files. If you instead placed all your files in Morrowinds main Data Files folder (sigh), you need to check with the mod's .rar file to see what files you should look for. Because you'll be scrolling through a lot of files.
#. Find all the textures related to the texture pack in the Textures folder and take note of all the ones that ends with a *_nm.dds*.
#. Find all the textures related to the texture pack in the Textures folder and take note of all the ones that ends with a *_nm.dds*.
#. The *_nm.dds* files are normal map files. OpenMW's standard format is to have the normal maps with a *_n.dds* instead. Rename all the normal map textures to only have a *_n.dds* instead of the *_nm.dds*.
#. The *_nm.dds* files are normal map files. OpenMW's standard format is to have the normal maps with a *_n.dds* instead. Rename all the normal map textures to only have a *_n.dds* instead of the *_nm.dds*.
- As a nice bonus to this tutorial, this pack actually included one specularity texture too. We should use it of course. It's the one called "``tx_glass_amber_02_reflection.dds``". For OpenMW to recognize this file and use it as a specular map, you need to change the *_reflection.dds* part to *_spec.dds*, resulting in the name ``tx_glass_amber_01_spec.dds``.
- As a nice bonus to this tutorial, this pack actually included one specularity texture too. We should use it of course. It's the one called "``tx_glass_amber_02_reflection.dds``". For OpenMW to recognize this file and use it as a specular map, you need to change the *_reflection.dds* part to *_spec.dds*, resulting in the name ``tx_glass_amber_01_spec.dds``.
#. That should be it. Really simple, but I do know that it takes a few minutes to rename all those files.
#. That should be it. Really simple, but I do know that it takes a few minutes to rename all those files.
Now – if the mod you want to change includes custom made models it gets a bit more complicated I'm afraid.
Now – if the mod you want to change includes custom made models it gets a bit more complicated I'm afraid.
But that is for the next tutorial.
But that is for the next tutorial.
Converting Apel's Various Things - Sacks
Converting Apel's Various Things - Sacks
----------------------------------------
----------------------------------------
**Mod made for MCP's fake bump function, with custom models**
**Mod made for Morrowind bump-mapping, with custom models**
In part one of this tutorial, we converted a mod that only included modified Morrowind model (``.nif``)
In part one of this tutorial, we converted a mod that only included modified Morrowind model (``.nif``)
files so that the normal maps could be loaded in Morrowind with MCP.
files so that the bump maps could be loaded as normal maps.
We ignored those model files since they are not needed with OpenMW. In this tutorial however,
We ignored those model files since they are not needed with OpenMW. In this tutorial however,
we will convert a mod that includes new, custommade models. In other words, we cannot just ignore those files this time.
we will convert a mod that includes new, custom-made models. In other words, we cannot just ignore those files this time.
Tutorial - MCP, Part 2
Tutorial - Morrowind, Part 2
**********************
**********************
The sacks included in Apel's `Various Things - Sacks`_ come in two versions –Without bump mapping, and with bump mapping.
The sacks included in Apel's `Various Things - Sacks`_ come in two versions –without bump-mapping, and with bump-mapping.
Since we want the glory of normalmapping in our OpenMW setup, we will go with the bump-mapped version.
Since we want the glory of normal-mapping in our OpenMW setup, we will go with the bump-mapped version.
#. Start by downloading Apel's `Various Things - Sacks`_ from Nexus.
#. Start by downloading Apel's `Various Things - Sacks`_ from Nexus.
#. Once downloaded, install it the way you'd normally install your mods (**Pro tip**: Install using OpenMW's `Multiple data folders`_ function!).
#. Once downloaded, install it the way you'd normally install your mods (**Pro tip**: Install using OpenMW's `Multiple data folders`_ function!).
#. Now, if you ran the mod right away, your sacks will be made out of lead_. This is because the normal map is loaded as an environment map which MCP fixes so that it looks less shiny. We don't use MCP, so therefore, it looks kind of like the shack was made out of lead.
#. Now, if you ran the mod right away, your sacks may look... wetter than expected. This is because the mod assumes you have the MCP feature which makes the sacks less shiny enabled. You can have its equivalent enabled to make the sacks look like in Morrowind with MCP, or you may proceed on the tutorial.
#. We need to fix this by removing some tags in the model files. You need to download NifSkope_ for this, which, again, only have binaries available for Windows.
#. We need to fix this by removing some tags in the model files. You need to download NifSkope_ for this, which, again, only have binaries available for Windows.
#. Go the place where you installed the mod and go to ``./Meshes/o/`` to find the model files.
#. Go the place where you installed the mod and go to ``./Meshes/o/`` to find the model files.
- If you installed the mod like I suggested, finding the files will be easy as a pie, but if you installed it by dropping everything into your main Morrowind Data Files folder, then you'll have to scroll a lot to find them. Check the mod's zip file for the file names of the models if this is the case. The same thing applies to when fixing the textures.
- If you installed the mod like I suggested, finding the files will be easy as a pie, but if you installed it by dropping everything into your main Morrowind Data Files folder, then you'll have to scroll a lot to find them. Check the mod's zip file for the file names of the models if this is the case. The same thing applies to when fixing the textures.
@ -232,14 +217,14 @@ Since we want the glory of normal mapping in our OpenMW setup, we will go with t
- NiSourceTexture with the value that appears to be a normal map file, in this mod, they have the suffix *_nm.dds*.
- NiSourceTexture with the value that appears to be a normal map file, in this mod, they have the suffix *_nm.dds*.
#. Remove all these tags by selecting them one at a time and press right click>Block>Remove Branch. (Ctrl-Del)
#. Remove all these tags by selecting them one at a time and press right click>Block>Remove Branch. (Ctrl-Del)
#. Repeat this on all the affected models.
#. Repeat this on all the affected models.
#. If you launch OpenMW now, you'll `no longer have shiny models`_. But one thing is missing. Can you see it? It's actually hard to spot on still pictures, but we have no normal maps here.
#. If you launch OpenMW now, you'll `no longer have wet models`_. But one thing is missing. Can you see it? It's actually hard to spot on still pictures, but we have no normal maps here.
#. Now, go back to the root of where you installed the mod. Now go to ``./Textures/`` and you'll find the texture files in question.
#. Now, go back to the root of where you installed the mod. Now go to ``./Textures/`` and you'll find the texture files in question.
#. OpenMW detects normal maps if they have the same name as the base diffuse texture, but with a *_n.dds* suffix. In this mod, the normal maps has a suffix of *_nm.dds*. Change all the files that ends with *_nm.dds* to instead end with *_n.dds*.
#. OpenMW detects normal maps if they have the same name as the base diffuse texture, but with a *_n.dds* suffix. In this mod, the normal maps has a suffix of *_nm.dds*. Change all the files that ends with *_nm.dds* to instead end with *_n.dds*.
#. Finally, `we are done`_!
#. Finally, `we are done`_!
Since these models have one or two textures applied to them, the fix was not that time-consuming. The process continues to work for more complex models that use more textures, but looking through each category for texture effects and normal mapped textures rapidly becomes tedious. Luckily, NifSkope provides a feature to do the same automatically.
Since these models have one or two textures applied to them, the fix was not that time-consuming. The process continues to work for more complex models that use more textures, but looking through each category for texture effects and normal mapped textures rapidly becomes tedious. Luckily, NifSkope provides a feature to do the same automatically.
Rightclick in NifSkope to access the *Spells* dropdown menu, also available via the top bar, hover over the *Blocks* section, and `choose the action to Remove by ID`_. You can then input the RegEx expression ``^NiTextureEffect`` (directing it to remove any block whose name starts with "NiTextureEffect") to automatically remove all texture effect blocks within the NIF. This also has the helpful side effect of listing `all the blocks within the NIF in the bottom section`_, allowing you to additionally root out any blocks referencing *_nm.dds* textures without having to painstakingly open each category.
Right-click in NifSkope to access the *Spells* dropdown menu, also available via the top bar, hover over the *Blocks* section, and `choose the action to Remove by ID`_. You can then input the RegEx expression ``^NiTextureEffect`` (directing it to remove any block whose name starts with "NiTextureEffect") to automatically remove all texture effect blocks within the NIF. This also has the helpful side effect of listing `all the blocks within the NIF in the bottom section`_, allowing you to additionally root out any blocks referencing *_nm.dds* textures without having to painstakingly open each category.