OpenMW is an open-source open-world RPG game engine that supports playing Morrowind. Main repo and issue tracker can be found here: https://gitlab.com/OpenMW/openmw/
After almost 3 years of development, we’re thrilled to release OpenMW version 0.49.0—our largest and most ambitious update yet!
This new release brings a hefty number of additions to our Lua scripting API, further polish to every single area of the engine—animations and lighting in particular—and it is the first one that goes beyond Morrowind! Be sure to read below for the full list of changes.
Known Issues
On macOS, launching OpenMW from OpenMW-CS requires ‘OpenMW.app’ and ‘OpenMW-CS.app’ to be siblings
[#7511] On Windows, a freeze may be reported if engine startup takes too long; ignoring the message is usually harmless as it should eventually disappear, but if it doesn't, share the freeze dump with us
[#8012] Combat music does not start during pause (e.g., during the dialogue that is scripted to start combat)
[#8233] Hardware antialiasing may cause driver timeouts on AMD GPUs of the RX 6000 and 7000 series; this is a driver bug AMD is yet to address
[#8345] OpenMW-CS might crash randomly on Linux and macOS during global search or saving; this is possibly a bug in Qt 6
[#8464] Shader rendering is tinted red on Apple Silicon; enable per-pixel lighting to prevent that
Removed Features
[#6624] Support for pre-0.45.0 saved games. Saves made in 0.45.0 up to 0.49.0 RC remain compatible. Use 0.48.0 to convert older saves
[#7394] Virtual filesystem case-sensitivity support
[#7758] Water-walking actors now properly consider their ability when pathfinding over water
[#7959] NPC in-world book activations are handled as player book activations
[#8132] Actors no longer face the player for greetings they won't deliver
Absorb Skill/Attribute effects, like Drain and Damage effects, are no longer used when the relevant stat is zero and are prioritised based on how important the relevant stat is
Alternate bound weapon spells aren't cast if a bound weapon is already in use
Bound weapon spell priority takes weapon skill and ammunition into account
Combat taunts are suppressed for On Self and On Touch spellcasting
Escort packages terminate immediately when no destination is provided
Wander AI properly supports crossing cell boundaries
Weapon enchantments no longer receive spell priority multipliers when rated as weapons
Animations
New Features
[#6009] Animation blending: optional, moddable animation transition smoothing for both NIF and Collada files
[#6823] Animation layering support for Collada files (previously erroneously attributed to 0.48.0)
Fixes
[#4127] Segments of attack wind-up and release are played continuously and are thus less choppy
[#4610] Weapons can no longer be unequipped during an attack, which ensures bound weapons appear after spellcasting animation ends
[#4742] Finished scripted animations no longer cause the same animations played afterwards as non-scripted animations to get stuck
[#4743] Scripted animations that can't loop are no longer automatically disabled
[#4822] Individual NPC body parts can have their own animations
[#5062] Accumulated animation movement is no longer discarded in favour of manual movement
This makes movement match Morrowind more closely, e.g. third-person camera sways for beast race characters
[#5066] Playing an ongoing scripted animation group with a script no longer restarts it
[#5371] Animations are no longer enabled for x prefix NIF files without their own x prefix NIF files when they are used as models
[#6723] Collada files support head tracking and turn to movement direction and smooth movement options
[#6992] Crossbow reloading animation is played on the entire body again
[#6993] Shooting the last round of ammunition is no longer interrupted abruptly
[#7042] Unexpected hit triggers are no longer processed – this stops some weapon animations from applying damage multiple times
[#7611] Manual movement mode is no longer stuck after turning or jumping – this prevents idle sliding
[#7636] Scripted animations persist through view mode changes
[#7637] Scripted animations always restrict movement
[#7129] Restored non-adaptive vsync option, which, unlike adaptive vsync, is not disabled when the frame rate gets too low
[#7180] Water shader normal map is now overridable
[#7292] Support for Rain Ripples and Snow Ripples Morrowind.ini settings, which control the visibility of ripples emitted by precipitation
[#7318] You can now opt out of terrain-occluded water culling
[#7792] Support for Timescale Clouds Morrowind.ini setting, which links cloud movement speed to game time scaling
[#7795] Support for MaxNumberRipples Morrowind.ini setting, which controls water ripple quantity for non-shader water
[#7932] Two-channel normal map support
This allows BC5-compressed normal maps to be used that come with improved quality and memory efficiency on compatible hardware
Note to third-party maintainers: RGTC-compressed DDS support is exclusive to our OpenSceneGraph fork
Water shader sunlight scattering and wobbly shores are now optional
Weapon and shield sheathing support for Collada models
Fixes
[#3842] The first rather than the last instance of every bone found in an object's subgraph is used for skinning
[#4898, #7585] Sunlight direction in exterior and interior cells now matches Morrowind, which improves accuracy and hides some vanilla asset lighting seam issues
Indoor shadows continue to align with the sunlight and might look more conspicuous
[#5280] Non-skinned geometry is no longer included in skinned body parts
[#6190] Sunlight ("moonlight") specularity is no longer disabled for objects and terrain during nighttime
[#6190] Water specularity is no longer subdued harshly during the morning and the evening
[#6240] The same texture file can now be reused for different texture types without them getting confused on enchanted items
[#6657] Diffuse-specular terrain textures (or any terrain textures with an alpha channel) are no longer considered "transparent" by distant terrain (or any non-shader terrain rendering)
[#6665] Creatures should no longer be inappropriately rescaled by turn to movement direction setting
[#7040] Geometry rendered at the same depth as previously rendered geometry is drawn over it, which is important for some modded assets
[#7051] Object paging no longer separates animated Collada models from their collision shapes
[#7102] Shadow maps no longer take up texture slots used for normal textures
[#7229] If the error marker provided by content fails to load, the engine will fall back to the built-in error marker instead of crashing
[#7298] When projectiles hit water, their hit position is now used instead of their current position to emit water ripples, which should prevent ripple rendering issues
[#7309] Sunlight scattering accounts for sun visibility
[#7322] Shadows are properly applied to groundcover when the shadow scene bound calculation method is primitives
[#7353] Fixed a crash when normal maps are assigned to geometry with no UV
[#7505] Terrain samples used to generate distant terrain are now allowed to cover an area larger than a cell
[#7535] Bookart images can be used as regular object textures and vice versa
[#7557] Terrain preloading should no longer attempt to generate and cache terrain that is not going to be used
[#7633] Legacy groundcover now only attempts to instance normal geometry
[#7696] Fixed a potential freeze during distant terrain texture generation
[#7737] Rendering debug stats are now reported for loading screen frames
[#7931] Individual light contribution is no longer capped
[#7931] Light selection is now view-independent, significantly reducing pop-in
[#7931] You can now opt out of the early light cutoff. Classic falloff is more accurate to Morrowind but also more prone to seams/pop-in, especially when active grid paging is enabled
[#8002] Light sources held by creatures properly emit light
[#8172] Generating extremely complex path grid geometry for TogglePathGrid or OpenMW-CS views no longer causes a crash
[#8439] Fixed a variety of crashes when a creature doesn't have a model
[#8462] Fixed crashes when the window is resized or a setting is changed on macOS builds using SDL 2.24.0 or newer
Fixed blizzard wind and particle effect direction mismatch
Herbalism switch nodes no longer change state when a compatible container is reloaded and herbalism switch node support is disabled
Skinned models properly support switch node-based harvesting
Water will no longer sometimes turn invisible due to interior water level changes
Water waves are no longer flipped whenever you change water settings
NIF Format
New Features
[#5173] NiFogProperty support. It is a property often used to disable fogging for parts of the model
[#6945] S3TC-compressed and BGR format NiPixelData embedded image support
[#7634] NiParticleBomb support. It is a particle effect used to simulate explosions
Fixes
[#6550] Environment maps are assigned to the affected node's immediate children to ensure certain armour meshes can properly use them
[#7380] NiZBufferProperty can really disable depth testing this time
[#7763] Extra data flags are no longer handled for nested nodes
[#7780] Non-ASCII NIF strings are properly handled
[#8231] NiCollisionSwitch nodes should no longer be accidentally optimised out by active grid object paging or in general
Physics
Fixes
[#6027] Collision shapes are no longer merged for the entire object and are generated in a more optimal way
This improves the performance of very complex meshes and prevents breakage when objects have more than 21 thousand triangles
[#7009] Falling actors no longer teleport to the ground without taking any damage when their cell is reloaded
[#7077] Empty Collada collision shapes no longer cause a crash
[#7763] Collision shapes track the scale of animated nodes
[#7763] Bounding box nodes are detected based on the node name rather than unused flags
[#7763] Detected bounding boxes no longer override non-actor collision shapes
[#7950] Fixed a potential crash when an object is removed from the scene in the middle of physics simulation
[#8048] Invalid extent bounding boxes are replaced with autogenerated bounding boxes
Post-Processing
New Features
Dropdown menus as shader setting control type
API version shader uniform
Frame number shader uniform
Sky and ambient colour shader uniforms
Render targets can be persistent across frames, which allows temporal effect support
Fixes
[#7145, #7146, #7202] Fixed various problems with exposed normals
[#7168] Average luminance is now based on a rescaled power-of-two resolution render target, which gives more accurate results
[#7354] Disabling post-processing in-game will no longer cause a crash when reverse Z depth buffer and soft particles are disabled
[#7364] Post-processing is reflected in saved game previews
[#7487] Shader compilation errors caused by intentionally unsupported Clamp wrap mode are more informative
[#7587] Invalid dynamic shader entries should no longer cause crashes upon reloading the game
[#7652] Inactive post-processing shaders are now sorted alphabetically
[#7679] Average luminance is no longer hard reset every time you configure a shader that uses it
[#8295] Fixed a crash when the post-processing chain refers to an existing shader file in a different case
[#8295] Fixed a crash when the post-processing chain includes an existing shader file nested into a subdirectory of the shaders directory (which is going to be unusable)
[#8465] Fixed broken rendering on macOS when hardware antialiasing is enabled
GLSL versions above 1.20 are properly requested on setups that don't support UBO rendering (such as macOS)
GLSL versions above 3.30 are no longer handled as legacy versions
Sun uniforms are properly set when you enter interiors
Scripting: mwscript
New Features
[#6983] Get/Set/ModPCVisionBonus functions, which interact with the base value of the Night-Eye magic effect
[#7058] TestModels (T3D) instruction, which is used for testing the loading of every single model used by your game content
[#7194] OutputRefInfo (ORI) debug instruction now also prints the object's currently bound textures. Missing textures are not bound
[#7609] AllowWerewolfForceGreeting variable, which controls whether 'ForceGreeting' works if the player is in werewolf form
[#7625] AddItem, RemoveItem, StartScript, StopScript and AddTopic provide more helpful warnings if the relevant records are not available
Fixes
[#3846] Unquoted string arguments that start with a period or a minus are supported in more cases
[#4289] Disabling objects that have no placed instances is now allowed
[#4816] GetWeaponDrawn starts returning 1 when the weapon is attached, rather than the moment you enter combat stance
[#4996] Redundant function arguments are ignored in a generalised way (but not yet ignored in expressions)
[#6716] Comparison operator parsing is more restrictive in terms of white space and less restrictive in terms of allowed special characters
This means combinations such as >!<<= and > = are now parsed as greater-than
[#6807] Special characters at the start of the line are ignored
[#6987] Set/ModBlindness instructions, which interact with the base value of Blind magic effect, no longer have a visual effect
[#7053] Collision detection functions such as GetCollidingPC work properly again
[#7084] Resurrect and levelled creature respawn now recognise if the relevant base records have changed and use the updated records
[#7148] Significantly improved script execution performance due to optimised string literal lookup
[#7416] ModPCCrimeLevel can clear crimes and can no longer make the bounty negative
[#7770] Various script functions and instructions that work with actor stats such as GetMagicka and AddSpell can now be used on objects (to no effect)
[#7770] GetItemCount can now run on objects without an inventory
[#7770] GetItemCount and GetSoundPlaying will return 0 instead of interrupting script execution when they have no instance to run on
[#7943] Add/RemoveSoulGem and Drop instructions now work on creatures that cannot equip items
[#8097] GetEffect can detect active effects that have 0 magnitude
DisablePlayerControls no longer disables controller camera movement while DisablePlayerLooking now does
GetHealthGetRatio now returns a ratio of 1 for actors that have a maximum health of 0
OutputRefInfo (ORI) command can be used in its unabbreviated form
SetAngle alternative ZYX rotation order axes are ordered properly
--script-all-dialogue option no longer attempts to compile dialogue result scripts for actors that do not use the relevant responses
Scripting: OpenMW-Lua
For a full overview of the current state of OpenMW-Lua beyond the limits of the comprehensive yet brief list below, please consult the scripting API reference.
[#7554] Shoulder buttons of controllers can now be used to navigate menus
[#7923] Nameless higher ranks are no longer shown in faction tooltips
[#7971] Time Played is now displayed in a more intuitive format and is no longer behind a setting
F10 window dimensions and position are now preserved across sessions
System-scaled high-DPI support
Localisation files can refer to string game settings
Various lines used in the main menu, loading screens, saved game dialogue and settings window, as well as disabled post-processing and screenshot notifications are now exposed to YAML localisation
Fixes
[#4710] Fixed focus tooltip position for partially offscreen objects
[#5870] Selected object is reset in the console if it turns unavailable
[#6222] Global map cell size is capped at 50 pixels as excessive cell size can cause problems
[#6427] Actor health bar is kept visible when damage is dealt continuously
[#6661] Saved games that do not have a valid preview image no longer cause crashes or break the saved game dialogue
[#6758] The Settings window is now rendered over the main menu and its video
[#6985] Built-in Mystic Cards font now aligns non-punctuation characters by width and includes Latin letters with diacritics
[#6973] Training time advancement now happens after the screen fades out
[#7013] The local map should no longer become corrupted due to object movement affecting interior cell bounds
[#7065] Big versions of magic effect icons now support forward slash-separated paths
[#7087] Resolution changes are disabled for windowed full-screen mode
[#7088] Deleting the last saved game of the only remaining character resets the character drop-down menu
[#7131] Shader uniform edit widget no longer defines an invalid padding property
[#7307, #7698] Names of attribute/skill effects no longer specify whether they affect an attribute or a skill
[#7459] It is now guaranteed only one item stack can be dragged at a time
[#7475] Equipping constant effect items properly updates active effect icons in the spell window
[#7531] Bitmap font Windows-1252 character substitutions are now accurate to the original game
[#7582] Skills should now always be displayed in the correct specialisation column of the custom class creation dialogue
[#7603] Scripts menu visible area is properly resized when page contents are updated
[#7617] Death save loading prompt now lets you load the last save you've saved or loaded like in Morrowind rather than the most recent save overall
[#7619] User marker text is now shortened on the global map like in Morrowind
[#7623] Full help text has been moved below the rest of the item tooltip
[#7642] Items are now sorted alphabetically in repair and recharge dialogues
[#7665] The alchemy menu allows picking and deselecting the apparatuses
[#7832] Fortify Maximum Magicka effect magnitude is no longer shown for ingredients
[#7875, #7914] UI windows can no longer be moved out of the visible area and are no longer snapped to the edge of the screen
[#7908] Shown key names no longer depend on their name in the currently used keyboard layout
[#8005] F3 profiler lines are now generally ordered chronologically
[#8364] The dialogue menu scrollbar no longer crashes the game upon use when the text area is exactly 1 pixel longer than the scroll area
[#8378] Partial bitmap font textures no longer prevent the game from running
[#8378] Bitmap font kerning is now accurate to the original game
[#8378] Non-breaking space glyph is always rendered in dialogue and books
[#8576] Fixed a potential crash on exit when a container with scripted items is open
English in-game text specific to OpenMW uses title case where applicable to improve stylistic consistency with Morrowind's lines
Displayed region names are substituted with their IDs if they are unavailable
Topic colouring is no longer temporarily reset if you talk to a creature after talking to an NPC or vice versa
Topic colouring reacts to mouse focus
Saved game loading interruption should no longer cause UI issues
User-defined nearest-neighbour filtering can now be properly changed to bilinear/trilinear in the settings window
Launcher and Wizard
Building the Qt tools and the editor under Qt 6 is now supported (#6491) and our first-party packages use Qt 6. Building under Qt 5.15 is still possible but it is deprecated due to its standard support ending.
Reference snapping: you can now pick a snap target for the instances you move (see documentation)
Instance cloning: Shift-C duplicates the selected object instances
Magic effect projectile speed can now be edited (admittedly, it does not currently affect anything in-game)
Spell, potion, and ingredient effect verification
Object instance verifier reports duplicate RefNums, which are known to sometimes happen and cause problems
Tab cycles the camera mode
Ctrl-<number> shortcuts create groups of selected instances that can be re-selected using <number> shortcuts
G, V and R shortcuts toggle move/scale/rotate submodes
Space resets the current selection
H temporarily hides the selected instances (Alt-H makes them visible)
UX Improvements
[#7160] Topic response text column has been moved closer to the left
[#7953] Icons are now scalable and support using colours from alternative colour schemes
Tables and the script editor also react better to rescaling and alternative colour schemes
[#8141] The four instance snap-down modes have been combined into the most useful one (originally Drop to Collision Separately)
Improved Preferences window and operation progress bar layout
Left Click was swapped with Middle Click in default selection, navigation and Open action shortcuts
Fixes
[#5859] User openmw-cs.cfg no longer claims that it is settings.cfg
[#6939] Table subview columns are automatically resized based on their contents
[#7447] Fixed a crash when a cell of a different type is dragged into the scene view
[#7707] Terrain flags are properly handled and saved, ensuring exported terrain Morrowind/Construction Set compatibility
[#7721] Any printable character is allowed to be used in created record IDs, like commas and apostrophes often used in cell IDs
[#7753] NPCs in the scene view are scaled based on their height and weight
[#7765] Fixed stability problems of undoing/redoing the changes of the Touch command introduced in 0.48.0
[#7785] Affected skills and attributes are reset if a spell effect that cannot affect the relevant stat is assigned
[#7841] Cell water height is no longer saved unless explicitly changed or originally included in the record
[#7861] Dialogue type is now copied to topic response records to improve compatibility with tools that expect it to be there
[#7887] Script bytecode size reported by the script is recalculated based on the actual provided bytecode, preventing crashes during saving
[#7896] Parent file indices are now resolved and saved correctly, preventing some issues when multiple files modify the same object instance
[#7898] Object instance scale is clamped to [0.5; 2.0] range to mirror engine behaviour
[#7901] Unusable teleport data is no longer shown when you are not working with a teleport door
[#8181] Generated topic response ID format has been changed to improve saved topic response compatibility with Morrowind/Construction Set
[#8299] Fixed a crash when smoothing terrain at the border with an undefined cell
Follow and Escort package duration is no longer handled as Wander package duration and no longer corrupts the package when edited
NPC verifier no longer complains about attributes set to 0
Object instance verifier now recognises body part records as valid objects
Regions can be dragged from their table to the region map
Sound generator records are now saved after creature records so that their creature references can work properly in Morrowind/Construction Set
Topic response records are now saved after quest records so that their quest filter conditions can work properly in Morrowind/Construction Set
Training service can no longer be enabled for creatures since they do not have skills and cannot provide training
Wander package idle chance columns are now numbered correctly
Water is displayed using a different brush on the region map
The Elder Scrolls IV and Beyond
Leveraging community research, we’ve begun prototyping support for Oblivion (2006), Skyrim, Fallout 3, Fallout: New Vegas and Fallout 4, games based on later revisions of Bethesda's open-world game engine. Their game files can be enabled as "mods" for Morrowind or the OpenMW Example Suite in the launcher. The console can then be used to teleport to their locations. Early support includes very basic "walking simulator" functionality.
Extended NIF support currently requires the load unsupported nif files setting to be added to the [Models] section of settings.cfg and set to true. OpenMW-CS does not currently support newer NIF formats or loading TES4 format content files.
Archives
[#7292] BA2 reading support; 0.49.0 can read Fallout 4, Fallout 4 next-gen update and Fallout 76 BA2s
Significant optimisations to compressed BSA loading
ESM and Scene
Initial engine integration of the TES4 ESM file format reader: world loading and terrain heightmap rendering
Various objects are loaded into the scene: statics, light sources, items, doors, containers, flora, etc.
Initial NPC rendering; currently very primitive and exclusive to Oblivion, 2011 Skyrim and Fallout 4
Basic book reading and door interaction mechanics
NIF and Rendering
Complete parsing of all official NIF files from Oblivion, Skyrim, and Fallout 3/NV/4/76 based on the research by NifTools contributors and ousnius
Basic textured geometry rendering support for the official files: includes diffuse mapping, normal mapping, glow mapping and Oblivion diffuse parallax mapping, as well as soft effect and refraction flag support and [#7777] basic support for shader material files used in Fallout 4 and 76