github OpenMW/openmw openmw-0.48.0
OpenMW 0.48.0 Released!

15 months ago

The OpenMW team is proud to announce the release of version 0.48.0 of our open-source engine!

So what does another fruitful year of diligent work bring us this time? The two biggest improvements in this new version of OpenMW are the long-awaited post-processing shader framework and an early version of a brand-new Lua scripting API! Both of these features greatly expand what the engine can deliver in terms of visual fidelity and game logic.

As usual, we've also solved numerous problems major and minor, particularly pertaining to the newly overhauled magic system and character animations. Read the full list of changes below!

Known Issues:

  • On macOS, launching OpenMW from OpenMW-CS requires ‘OpenMW.app’ and ‘OpenMW-CS.app’ to be siblings
  • Performance of enchanted ranged weapons (e.g., darts) isn’t as good as other projectiles’ performance
  • [#7354] If reverse Z depth buffer and soft particles are off or unsupported, disabling all post-processing in-game will trigger a crash
  • Rarely, quitting the game may crash it on some setups for an unclear reason. If you encounter such an issue, please send us feedback regarding its circumstances

New Engine Features:

  • by ptmikheev, uramer and others
    • [#5996] Lua scripting API
  • by akortunov
    • [#4974] Fonts and GUI layout files are now overridable through the VFS
    • [#4975] TrueType font replacements are now included by default to avoid missing glyphs with OpenMW-specific GUI localisation
    • [#6867] GUI localisation support. Most of the previously hardcoded strings have been localised in French, German, Russian and Swedish
    • [#6925] In the character creation widget, the character's head can be rotated in the preview area using the mouse wheel, as if you scrolled the slider below it
    • [#6941] TrueType font settings can be changed in the launcher
  • by Assumeru/Evil Eye
    • [#1465, #6177] 'Repeat' flag is supported for AI package script commands.
    • [#2780] 'Help' console command, which prints OpenMW's version string and every available command
    • [#4297] The remnants of 'APPLIED_ONCE' spell effect flag have been properly implemented
    • [#4414] EXTRA SPELL spell effect expiry now triggers re-equipment
    • [#5198] Spell effect expiry is now tracked
    • [#5454] Active spell effects are cleared from actors that are removed from the scene for any reason
    • [#5489] Telekinesis also extends the activation range of activators, like in Morrowind Code Patch
    • [#6380] Commas are treated as whitespace in scripts, heavily loosening the restrictions on their use
    • [#6699] 'Ignored' ESM record flag is now respected
  • by Capo
    • [#6541] Gloss-mapping support
  • by Cédric Mocquillon
    • [#3616] Optional: You can now zoom the in-game map in and out
    • [#6248] A default error marker model is now embedded into the engine
  • by Dominique Martinet
    • [#6631] FFmpeg 5 support
  • by elsid
    • [#6189] Generated navigation meshes are now cached on your storage device
  • by Eris Caffee
    • [#2766] Wizard will warn the user if the used version of Morrowind is unrecognised and potentially too old using the known size of English Morrowind BSA
    • [#6706] The dimensions of the in-game settings window are saved and loaded
  • by fr3dz10
    • [#2858] Data directories can be set up and BSA archives can be registered through the launcher
    • [#6496] 'No Camera Collision' flag is properly implemented for NIF nodes
  • by myrix
    • [#6419] Topics will not be considered exhausted if they can produce a hyperlink to a new topic
    • [#6888] Optional: Creature damage damages armour
  • by ptmikheev
    • [#2491] The directory configuration files are read from can be specified manually, allowing you to produce portable OpenMW distributions
    • [#4595] Every object instance in the game can now be uniquely identified
    • [#6161] In-game log viewer (assigned to F10)
    • [#7434] Exponential fog
    • [#7435] Sky blending
  • by unelsson
    • [#5701] Optimised Collada model skinning
    • [#6249] Alpha testing support for Collada models
    • [#6823] Animation layering support for Collada models
  • by uramer
    • [#6557] Controller gyroscope support
  • by Vulpen
    • [#6019] Alpha-to-coverage can be toggled on through the launcher
  • by wareya
    • [#6360] Raindrop ripples have been visually revamped
  • by wazabear
    • [#4067] Post-processing shader support
    • [#5928] Time of day-dependent node switching can be disabled
    • [#6032] Support of reverse-Z depth buffer, which reduces the flickering of distant objects tremendously
    • [#6078] The depth buffer is no longer cleared before rendering first-person models
    • [#6128] Support for soft particles
    • [#6199] FBO rendering support
    • [#6443] NIF stencil buffer manipulations are supported, completing NiStencilProperty support
    • [#6534] Decal texture blending using vertex/material colours is now simulated in shader pipeline
    • [#6592] Geometry-based particle emission support
    • [#6600] NiSortAdjustNode record type support
    • [#6700] Windowed fullscreen support. In this mode, the game is played in a borderless window that matches the display resolution
  • by Wolfgang Lieff
    • [#6684] Support of NiFltAnimationNode NIF record type, which represents an animated sequence of nodes.
  • by AnyOldName3 and Capo
    • With the bump of the minimum required version of OpenSceneGraph to 3.6.5, the following older improvements of OSG are brought over to every possible build of OpenMW:
      • [#3180] Support of uncompressed colour-mapped TGA files
      • [#3668] Support of palettised DDS files

New Editor Features:

  • by cc9cii
    • [#2554] Modifying an instance in the scene widget will scroll the instances table to that instance
    • [#5737] Moved instances are properly deleted from their original cell
    • [#6017] Persistent and temporary instances are properly distinguished upon saving a file to improve compatibility with the original ESM format
    • [#6288] 'Blocked' record flag support
  • by pi03k
    • [#890] Table columns can now be hidden using a new menu or with a middle-click
  • by SaintMercury
    • [#6721] Record subviews can be opened in an exclusive window as an option
  • by unelsson
    • [#6251] Instance movement now follows the mouse cursor
  • by VidiAquam
    • [#3245] Instance editing grid and snapping

Engine Bug Fixes:

  • by akortunov
    • [#5913] Self-targeted line-of-sight checks no longer cause issues
    • [#6276] 'Deleted' flag is properly supported for groundcover instance records
    • [#6347] Scripts can now spawn levelled creatures
    • [#6519] Duration is no longer displayed for ingredient magic effects
  • by Andreas Stöckel
    • [#6129, #6131] Character doll coordinates are properly calculated for large window sizes and non-1.0 UI scaling factor
    • [#6354] Sounds that are being culled due to being too far away will fade out instead of getting cut off
    • [#6386] Fixed screen-space coordinate computations for water reflections, preventing them from becoming a pixelated mess as you get close to the water surface on some video cards
  • by andrew-app
    • [#5434] Pinned windows no longer cover the remaining breath bar
  • by anikm21
    • [#6303] Going to jail makes the player cancel their current attack and sheathe their weapon
  • by AnyOldName3
    • [#6718] Throwable weapons’ enchantments will no longer break the rendering of their target in unpredictable ways
    • [#7251] Shader rendering is properly enabled for nodes that don't have any rendering state set
  • by Assumeru/Evil Eye
    • [#1751] Birthsign abilities increase base stat values
    • [#1930] When an actor stops fighting a target, the actor’s allies stop fighting that target as well
    • [#2036] 'SetStat' and 'ModStat' group instructions behave much more like Morrowind, which allows Galsiah’s Character Development to increase stats beyond the cap of 100
    • [#3488] AI will not attempt to attack before finishing aiming
    • [#3737] If a script’s execution fails on one target, it will still run on other targets, as it could have failed due to target-specific factors
    • [#3737] 'Equip'’s behaviour of implicitly adding an item if it’s missing will no longer make the actor equip anything else
    • [#3792] Magicka is recalculated immediately after Intelligence is changed instead of doing so a frame later
    • [#3846] Scripts now support unquoted string literals that start with a hyphen
    • [#3855] AI will avoid casting identical Bound item effects
    • [#3855] AI will also avoid casting Bound Shield if it can’t make use of the shield
    • [#3867, #5318] An actor’s allies that are already in combat will not join combat with the actor’s potential new targets
    • [#3905] 'GetDistance' that has no target will still “work”, preventing a problem in Great House Dagoth
    • [#4203] Overriding an object’s inventory will close that object’s looting window, preventing issues or crashes if an actor is resurrected during looting
    • [#4376] Levelled creatures that moved out of their original cell will properly respawn in their original cell, instead of being duplicated
    • [#5054] Spellcast equip/unequip animations are supported for non-bipedal creatures
    • [#5100] Temporary disposition changes can no longer bring an actor’s disposition below zero
    • [#5120] Scripted object spawning no longer automatically inserts the object’s physics model – it will be inserted when the scene is reloaded, when the object is enabled or when any object in the scene is disabled
    • [#5207] Summoned creatures are properly cleared if their caster is removed from the scene
    • [#5377] Keyboard focus is only restored to widgets with visible parents, preventing MenuTest from messing with the console input field focus
    • [#5596] Using multiple identical Summon effects in permanent spells can summon multiple creatures of the same type like temporary spells can
    • [#5621] Restore effects can restore drained stats
    • [#5801] The order of teleportation effects in a single spell matters; the last effect will take priority
    • [#5842] Temporary disposition change from the currently active dialogue will not affect GetDisposition result for any other actor
    • [#5842] 'ForceGreeting' updates disposition change target
    • [#5842] 'SetDisposition'/'ModDisposition' applies the current temporary disposition change permanently
    • [#5863] 'GetEffect' returns 1 for teleportation spell effects only after the teleportation is complete
    • [#5937] All portable light sources are rotated by 90 degrees when they’re attached to the character, while body parts that have a BoneOffset node are not
    • [#6051] Invalid water levels are handled more gracefully
    • [#6066] Quoted keywords can be used as string literals
    • [#6087] Manually added bound items no longer conflict with bound item effects and won’t disappear when they end
    • [#6107] Fatigue recalculation after attributes are updated can properly bring its current value above the maximum, like Magicka recalculation, if necessary
    • [#6123] Scripts assigned to voiced greetings that cannot be compiled will no longer break the game: their local variables are cached, fixing problems in Traveling Merchants
    • [#6172] All weapon-wielding creatures can open doors
    • [#6184, #6255] Illusion school and Reflect effects work more like vanilla
    • [#6197] Scripted spellcasting commands will no longer stack, and instead either override the previous packages (if casting hasn’t started yet) or do nothing (if casting is in progress)
    • [#6253] Reflect effects are now multiplicative
    • [#6273] The rotation of actors that have been respawned is reset to the original rotation
    • [#6282] Fixed parsing of unquoted string literals that start with a digit
    • [#6283] 'GetCurrentAIPackage' returns -1 for non-actors and dead actors
    • [#6291] Local variables that are named the same as a script command will be used instead of that command
    • [#6302] Only enabled objects are added to the scene after teleportation
    • [#6321] On-self projectile enchantments are applied to the projectile’s target instead of the caster
    • [#6323] 'StayOutside' script variable now only blocks a follower’s teleportation from an exterior to an interior
    • [#6324] 'Rotate' script instruction always rotates the player on the Z axis regardless of the axis argument
    • [#6326] Detect Enchantment/Key effects can detect items in containers the contents of which weren’t resolved yet
    • [#6333] Werewolf stat bonuses are now considered magical in nature instead of affecting the base stats
    • [#6363] Integer arguments can be passed as string arguments and treated as names in unambiguous contexts
    • [#6376] All creatures can equip portable light sources at night
    • [#6396] Various instances of non-ASCII character handling have been made more reliable
    • [#6493] Magically unlocking owned containers and doors that have never been locked is no longer illegal
    • [#6493] However, magically unlocking owned doors that have already been unlocked is now illegal as was the case for containers
    • [#6523] Disintegrate Weapon effect is resisted by Sanctuary instead of Resist Magicka
    • [#6606] All quests with the same name are restarted when one of them is restarted
    • [#6670] Dialogue ordering matches Morrowind behaviour more closely
    • [#6682] 'HitOnMe' script function will only reset the hit object if there was a match
    • [#6717] Broken scripts should no longer cause interpreter stack corruption
    • [#6655] Creating constant effect Absorb Attribute/Skill enchantments no longer breaks the game
    • [#6730] Scripted animations will no longer prevent wandering actors from playing idle animations after the animations finish
    • [#6753] Dialogue response records without a DATA subrecord are loaded properly
    • [#6799] Class-less NPCs fall back to the default class instead of causing crashes
    • [#6913] Equipping constant effect enchanted items cancels invisibility
    • [#6923] Loading a save where a corpse was disposed no longer prevents the actor’s respawning
  • by Bo Svensson
    • [#4602] Attaching a non-skinned body part that is potentially shared between multiple instances of a model always copies it, preventing crashes with Robert’s Bodies
    • [#6142] Groundcover mods no longer override cell flags
  • by Capo
    • [#4227] Spellcasting animation will still play even if the casting fails due to insufficient Magicka
    • [#4310] Spell and enchanted item effect list is aligned left instead of centre
    • [#4374] Mouse movement events happening during a loading screen are discarded
    • [#4389] Lip animation timer source will override any other timer source in the head model, fixing the animation of head models that have Autoplay animation flag set on the root node
    • [#4744] Invisible particles are always processed to prevent visual glitches with some creature animations
    • [#5192] Base actor turning speed is about 57% faster, increased from 10 radians (~573 degrees) per second to the original value of 900 degrees per second
    • [#5453] Fixed magic effect VFX position and scale calculations to be in-line with Morrowind
    • [#5592] Fixed many instances of idle animation seemingly restarting at the wrong time
    • [#5976] An attack will cancel invisibility when it’s released, not when it’s started
    • [#5978] Actors will not talk with or look at a magically invisible player character
    • [#6049] Pre-menu video audio will play at the same time as the title music, like in Morrowind, making Arktwend intro – which has a silent audio stream which would previously prevent the title music from playing – behave as expected
    • [#6054] All quick keys actions will be delayed while an important animation is playing, not just weapon equipment
    • [#6109] Multiple videos playing at the same time will no longer crash the game
    • [#6115] 'ShowMap' script instruction will enable map markers for all locations whose names start from its argument, not just those that match the argument
    • [#6118] Creature landing sound is considered an Effect type sound, not a Footstep type sound
    • [#6154] Levitating/swimming actors will be snapped down upon teleportation into an inactive cell
    • [#6174] Clicking on the free area in spell effect creation sliders increments the values instead of shifting the sliders to an unpredictable position
    • [#6307] Actors with a Travel package will stop if they have been close enough to the destination for a bit of time like in Morrowind, preventing them from getting stuck on their destination if they can’t quite reach the final position and fixing Infidelities quest in Tribunal expansion
    • [#6327] Blocking no longer prevents movement
    • [#6343] Magic projectile velocity is affected by NPC casters’ Weight
    • [#6416] In morph geometry, morph target zero is considered to be the target geometry instead of being ignored
    • [#6417] Movement accumulation node choice now takes into account whether the animation source references either of the possible nodes
    • [#6429] Any AI script commands are no-op on non-actors instead of stopping script execution
    • [#6473] NIF strings are only parsed up to their first null terminator
    • [#6517] Empty Euler/XYZ rotation key groups are properly read
    • Alternative Euler rotation orders are now supported
    • [#6545] Actor momentums are discarded upon worldspace changes
    • [#6559] Weapon condition is consistently damaged before damage bonuses are applied
    • [#6579] OSG builds with double precision bounding sphere type are supported
    • [#6653] Console and maximised window dimensions are closer to Morrowind’s
    • [#6869] Stagger animation is cancelled when an attack animation is completed
    • [#6890] SDL input event errors are properly handled
    • [#6895] 'RemoveItem' with a negative count argument will overflow like 'AddItem' instead of stopping script execution
    • [#6896] Sounds are no longer stopped when their emitter leaves the worldspace, until the player leaves the cell
    • [#6898] Quick keys menu can be opened when a different GUI window is active
    • [#6909] Enchanted item casting aligns the first person character model to the direction of the casting for a single frame
    • [#6910] Portable light sources are no longer extinguished under water when they are not held
  • by cc9cii
    • [#3246] Various actor stats potentially not included in converted ESS files will be loaded from the ESM file, preventing actors from being dead for no apparent reason
    • [#6067] Moved instances can now be loaded from any point in the instances list of a cell record
  • by elsid
    • [#5508] Binaries that don’t depend on Qt won’t be linked to Qt
    • [#5858] Giant objects no longer cause the navigation meshes to be generated based on everything within such objects’ bounds
    • [#6143] Screenshot capturing no longer freezes the game while it’s in progress
    • [#6143] Optional: Screenshot saved message can be shown again
    • [#6256] Enabling shadows should no longer cause a crash on exit with a statically linked OSG
    • [#6711] Log time always matches the real time
    • [#6849] The textures of textured buttons are properly scaled if their height is not a multiple of the original height
    • [#6860] Actors may no longer try to evade an obstacle when there isn’t an obstacle due to their destination position changing
    • [#6937] Wander package destination can no longer be outside of the Wander radius, fixing 'Divided by Nix Hounds' quest
    • [#7008] Reserved node name list handling is now thread-safe
    • [#7121] Making the game time settings invalid will no longer cause instability
  • by Eris Caffee
    • [#5279] Console text selection no longer breaks auto-scrolling
    • [#6667] Pressing Escape during waiting properly cleans up the wait dialogue
  • by Kindi
    • [#6191] Encumbrance messagebox works more like in Morrowind, with only one message appearing at a time and with the semi-broken delay removed
    • [#6258] Changing the offered price in the barter window may no longer cause the UI to confuse the seller and the buyer
    • [#6322] Barter offer price is properly reset when no items are getting exchanged
    • [#6358] 'ChangeWeather' script instruction will report a warning if the used region doesn’t exist
    • [#6433] Items assigned to quick keys are updated when their quick key is activated in case they become unavailable to prevent them from becoming unavailable until the quick keys menu is reopened
    • [#6451] Weapons summoned by Cast When Used enchantments will have their name set in the HUD properly
  • by Léo Peltier
    • [#5483] Spells that have 'Autocalc' flag set have their cost calculated automatically
  • by myrix
    • [#6901] Equip instruction prefers equipping filled soul gems
    • [#6901] Trying to use an empty soul gem shows a message
  • by NeveHanter
    • [#6133] The player’s allies no longer react to the crimes the player commits
  • by Nuri
    • [#6165] Paralysis, knockout and death prevent the player from picking up items from the ground through the inventory window
  • by psi29a
    • [#4175] OSGoS: Double precision transformation matrix type is used by default again, preventing objects far from the world origin from vibrating
    • [#4526] Bumping the minimum required OSG version to 3.6.5 prevents crashes when out-of-bounds UV sets are used for multitexturing
    • [#5379] Loaded actors are no longer snapped down until all objects in the scene are loaded
    • [#5766] Fixed an object paging culling issue, preventing some objects in the active grid from disappearing
  • by Simon Meulenbeek
    • [#6037] The choice of the content language in the launcher properly replaces the previous choice
  • by Skeevert
    • [#6101] Disarming trapped unlocked owned objects is considered illegal
  • by Tetramir
    • [#6289] Keyword highlighting no longer assumes all the text is ASCII
    • [#6395] Long in-game setting tab titles will cause the window’s minimum size to be recalculated
  • by unelsson
    • [#6680] Objects with malformed root nodes should no longer cause memory corruption
  • by uramer
    • [#6395] Left and right arrow skins were added to tab control widget, allowing you to scroll in-game settings tabs if their titles get too long
  • by wazabear
    • [#4949] Spell VFX now have a white light attached like in Morrowind, fixing the dullness of some VFX when shaders are used
    • [#5088] During weather transitions, sky rotation is separate for each weather
    • [#5394] Windows Aero snap works properly with a borderless window
    • [#5989] Simple water respects texture filtering settings
    • [#6168] Weather particles will no longer briefly disappear at the beginning of their animation
    • [#6389] Maximum light distance setting now affects water reflections
    • [#6544] Physics interpolation no longer causes objects to vibrate while the camera is still
    • [#6697] Per-vertex lighting clamping works properly again
    • [#6794] When 'AttachLight' node is missing, light sources are attached to the mesh origin instead of the centre of the object’s bounds

Editor Bug Fixes:

  • by Capo
    • [#6705] Improved nested table column naming for levelled list subviews
  • by cc9cii
    • [#3514] Moved instances should no longer disappear for no reason
  • by unelsson
    • [#4700] Undo command implementation should be more reliable
    • [#5788] Fixed various problems with the parsing of land texture indices
    • [#6285] Optimised terrain editing and selection

Miscellaneous:

  • by psi29a
    • [#5534] As mentioned, the minimum required version of OpenSceneGraph has been bumped from to 3.6.5 and the support for OpenSceneGraph 3.4 has been dropped
  • by SaintMercury
    • [#6435] Visual Studio 2022 support has been added
  • by wazabear
    • [#6161, #6162] Sky and GUI can now be rendered using shaders

Don't miss a new openmw release

NewReleases is sending notifications on new releases.