We took some time this year to overhaul, simplify and awesomify our web presence and infrastructure.
Ten years using WordPress and still kicking! But it was time to clean up the dust a bit.
First of all, we removed unnecessary plugins like akismet and its friends to only keep:
our Cloudflare integration, since our server is not super powerful and we’ve been slashdot’ed before. So better safe than sorry. Also, no need to fetch your pitchforks if you’re using Tor or a VPN: we configured Cloudflare to not annoy you, so it’s only used as a CDN/cache.
Polylang, since WordPress doesn’t support internationalization by default and some of our blogposts are translated into a couple of languages.
Jetpack because our posts are written in Markdown.
Moreover, since more and more people are browsing the web via their phones, we are more than happy that vtastek took the time to make the blog responsive, so that it looks great on mobile as well!
On the backend side, we cleaned the database up by removing comments (which had been turned off years ago), post revisions, unnecessary users, and much more, reducing the size of our database by 60%.
All those small changes lead to a significant improvement of loading times: from around 9 seconds to 1 second!
Our plan for the future is to move away from WordPress to take advantage of GitLab Pages to run a static website instead. Any help to make this happen is more than welcome!
We’ve been using phpBB for the forums even before we had our blog, and it’s been working great. So not a lot has changed on this side except that we upgraded it to the latest available major version, granting us a minor performance boost and improved security. We also switched to MySQL for the search engine which reduces the database table and makes the search not only better but also faster. Moreover, we stepped up our anti-spam game: the forum should be kept tidy now with less human intervention necessary, and we’re now reporting spammers to Stop Forum Spam.
We’ve long been using MediaWiki (the same wiki software used by Wikipedia itself!) to document everything, along with a plugin to bridge accounts between the forum and the wiki. Now that OpenMW is slowly reaching feature parity with Morrowind’s original engine, most of the information on the wiki is no longer being updated. So we made our wiki read-only and available at old-wiki.openmw.org and moved the content to GitLab’s wiki, reducing the maintenance cost of our MediaWiki. Switching our old wiki to read-only allowed us to disable a ton of features. It also allowed us to make use of aggressive caching which significantly improves its performances and makes it way less taxing resource-wise.
We’ve set up a status page at openmw.org/status, thanks to UptimeRobot, to monitor all of our services and to get notified in case one of them goes down. Also, since this information is available to everyone, you can check for yourself if "openmw.org is down for everyone, or is it just me"? This uncovered an issue with our backup system: in the middle of the night (European time) our backups are kicking in, and were doing some heavy compression operations which result in a massive slowdown of the website, generating timeouts. We lowered the process priority of the backups, which fixed the issue and appeased our monitoring.
Our nginx config was overhauled and factorized to make our services’ configurations more uniform: same modern TLS parameters, usage of http2, same Cloudflare configuration, more efficient serving of big files for downloads.openmw.org, etc.
We ran OptiPNG and jpegoptim on icons/media to drastically reduce the size of images and, thus, our bandwidth consumption.
Our database engine, MariaDB, was tuned for performance as well as cleaned up: we purged old data, and optimized the rest.
Since we’re in 2021, all of our domains are now fully accessible over IPv6.
Automatic updates have been enabled via UnattendedUpgrades, so that our beloved sysadmin crew don’t have to waste time on mundane tasks and can sleep better at night knowing that security upgrades are installed as soon as they become available.
Finally, speaking of the sysadmin crew: we took steps to increase the bus factor, bringing nice side effects like increased motivation (it’s always funnier to do things with friends) and reduced burnout risks.
While there have been several huge announcements we’ve wanted to share with you lately, we decided to wait with these news until after the release of OpenMW 0.47.0 to avoid stealing too much of the hype. Sorry for that, but we hope you understand. Now, without further ado, let’s dig in!
Lua is merged
Let’s just begin with, arguably, the biggest one. Petr Mikheev worked really hard on this huge contribution, and the extensive code reviews and feedback from the rest of the team were fantastic. The result is that the basic framework for OpenMW’s future scripting language, Lua, was merged into master a few months ago. This in itself doesn’t actually do much for the end user, but modders can already explore its functions. The real power, however, will be unleashed once gameplay mechanics, user interfaces, various graphical features and other exciting things are controllable through Lua scripts, in what we often refer to as the “de-hardcoding” of OpenMW. Some of this is currently being worked on, or even has already been merged, like Urm’s basic framework for a Lua-controlled GUI and Mikheev’s Lua-controlled camera and raycasting.
One important clarification needs to be made, though: OpenMW-Lua will not be compatible with MWSE-Lua, the 3rd-party scripting extender for Morrowind.exe. We aim to make our scripting engine at least as powerful as MWSE-Lua, but since MWSE-Lua is being developed for a different game engine, mods made for it will unfortunately not be compatible with OpenMW. Current MWSE-Lua mods will therefore have to be rewritten, or at least refactored, to be able to function in OpenMW.
And again, to make it perfectly clear: the implementation of Lua in OpenMW is still in its initial stage and will become more powerful as time goes by.
We will discuss Lua more in future blog posts.
Soft particles and sky shaders
If you are like most people, you might feel a bit annoyed by the fact that particles from things like fire look so obviously flat when looking at the source of the flame. Cody Glassman fixed this by implementing soft particles. There’s a video example in the merge request, and the difference is huge.
Cody also recently got his sky shader branch merged into OpenMW master. This is a feature that has been requested for quite a while now by people wanting to do great looking shaders for OpenMW. And now that the sky shaders are here, people like vtastek will be able to play around with the look of the sky, for example making the sky blend a lot better with the fog.
Navmesh disk cache
One exclusive feature OpenMW has is the automatic and dynamic generation of navigation meshes which greatly enhances the AI’s pathfinding. Basically, OpenMW creates a map of the currently active game world that tells the AI where the terrain is walkable and where it is not, preventing situations where NPCs walk straight into walls or jump down cliffs. The creation of this map is done at runtime in a separate thread, so most modern multi-core computers won’t notice any significant performance loss because of this. For people with weaker computers or mobile devices, however, loading times can be significantly longer. Because of this, elsid is working on a feature that will store the navigation meshes in files once they have been created, making the generation of them only necessary once.
Zoomable world map
Ever wanted to be able to zoom in and out on the world map? See more of the world at the same time? Or less of it, with more detail? Now you can, thanks to Cédric Mocquillon’s new feature that allows for different zoom levels of the map, including automatically merged map markers when zooming far out and a smooth transition between local and world map when zooming in. Simple yet so effective and a very nice addition to the engine.
Raindrops keep falling on my head…
…and into the water too. Let’s face it, OpenMW’s raindrop ripples look pretty terrible. Or rather, they were looking pretty terrible, since wareya took the matter in his own hands by making an actual good-looking raindrop ripple effect. You can see how they look using a nightly version or visiting the merge request’s GitLab page. Neat, right?
No more adding mod directories in the openmw.cfg file
Well, unless you want to of course. Anyway, Frederic Chardon has had this merge request up for a very long time, but after a lot of discussion regarding its design, it seems we will finally see it merged soon. This means that you will soon be able to add and remove data directories directly in the OpenMW launcher. Finally!
Magic effects are reworked
Evil Eye has been working relentlessly on OpenMW, and a truckload of MRs merged lately have been his work. One of his bigger projects has been the rework of magic effects. For most people, this probably won’t be very noticeable since there are mostly under-the-hood changes, but quite a few differences to Morrowind’s original engine have been solved thanks to this huge task of his. Check out the merge request here. If you’re a Morrowind purist that has been annoyed with OpenMW handling certain magic effects differently compared to the original, you’ll like this one a lot.
That’s about it. Or really, it’s far from it, but we’ll have to round off this blog post somewhere. Thank you so much for sticking around with us through all these years. We’ll see you again another time!
Another year of busy and fruitful development lies behind us — and the OpenMW team is proud to announce the release of version 0.47.0 of our open-source engine! Grab it from our Downloads Page for all supported operating systems.
With over 180 solved issues and a plethora of new features, this release is on par with the enormous 0.46.0 release we had last year. Brace yourself for object paging which allows OpenMW to finally display distant statics, proper support for groundcover mods, an improved lighting system, more efficient and robust physics, the new, optional over-the-shoulder camera, and much, much more!
In addition, countless bugs have been solved — both for the vanilla game and for a variety of mods to ensure even better mod compatibility in the new version.
On macOS, launching OpenMW from OpenMW-CS requires ‘OpenMW.app’ and ‘OpenMW-CS.app’ to be siblings
Lighting of spellcasting particles looks dull
Pathfinding during the “Tribunal” expansion quest “Infidelities” is broken and the journal may not get updated because Taren Andoren hasn’t yet reached his target spot; as a workaround, waiting for one hour will allow Taren to reach his target spot and the journal to be correctly updated
Performance of enchanted ranged weapons (e.g., darts) isn’t as good as other projectiles’ performance
New Engine Features:
[#5524] Failed scripts are flagged as ‘inactive’ and ignored rather than being removed — until the game is reloaded or restarted
[#5580] An NPC’s service refusal (e.g., for training, trading, or enchanting) can be filtered by service type to allow more complex NPC reactions instead of the vanilla “all or nothing” behaviour
[#5642] Arrows can be attached to an actor’s skeleton instead of the bow mesh to allow implementing left-handed bows and actor-dependent shooting animations
[#5813] Improved handling of groundcover mods via grass instancing
[#4899] Alpha-to-coverage anti-aliasing — this improves the look of alpha-tested objects, e.g., foliage from “Morrowind Optimization Patch”
[#4977] Show default icon if an item’s icon is not found
[#2404] Levelled lists can be placed in containers
[#2798] Base records are mutable, i.e., modifying an instance of a base record (e.g., a guard NPC) will now affect all instances sharing the same base record (e.g., all other clones of that guard NPC)
[#5730] Add option to support graphic herbalism to ‘Advanced’ tab in the launcher
[#5771] ‘ori’ console command displays the mesh’s data source as well as whether the x-prefixed version is used
Proper underwater shadows when refraction is enabled; disabled if ‘refraction scale’ setting is not 1.0 [additions by AnyOldName3 and madsbuvi]
[#2386] Optional: Render distant static objects via object paging, i.e., by merging objects which are close to each other; ON by default but ‘Distant land’ needs to be enabled [corrections and polishing by psi29a]
[#2386] Optional: Object paging in active cells (3×3 grid around player character); ON by default [corrections and polishing by psi29a]
[#5362] Dialogue for splitting item stacks displays the name of the trapped soul for stacks of soul gems
[#3171] Instance drag selection with the following modes: ‘centred cube’, ‘cube corner to corner’, ‘centred sphere’
[#3171] Configurable actions for instance drag selection: ‘select only’, ‘add to selection’, ‘remove from selection’, ‘invert selection’
Engine Bug Fixes:
[#3714] Resolved conflicts between ‘SpellState’ and ‘MagicEffects’ functionality of the engine
[#3789] Fixed a crash which could occur when updating active magic effects
[#4021] Attributes and skills are now stored as floating-point values
[#4623] Improved implementation of the Corprus disease
[#5108] Prevent save-game bloating by using an appropriate fog texture format
[#5165] Active spell effects now use real-time updates instead of timestamps to avoid problems with time scale and scripted daytime changes
[#5387] ‘Move’ and ‘MoveWorld’ commands now correctly update the moved object’s cell
[#5499] Game logic for rank advancement now properly considers the two favoured skills of a faction
[#5502] Dead zone of analogue sticks can now be configured in the ‘openmw.cfg’ file
[#5619] Key presses are now ignored during savegame loading
[#5975] Controllers for “sheath” meshes (used by weapon sheathing mods) are now disabled to prevent, e.g., accidentally playing shooting animations for bows in “HQ Arsenal” mod
[#6043] An NPC’s ‘shield’ animation is now cancelled when a light source is equipped instead of a shield
[#6047] In-game mouse bindings can no longer be triggered when controls are disabled, e.g., when loading a savegame
[#2069] ‘NiFlipControllers’ now only affect the base texture which, e.g., solves issues with the fireflies in the “Fireflies Invade Morrowind” mod
[#2976] Fixed issues with the priority of OpenMW’s local and global config files
[#4631] GPUs which don’t support an anti-aliasing value of 16 now always fall back to a lower value if ’16’ is set in the settings
[#5391] Bodies from “Races Redone” mod are now correctly shown on the inventory’s paper doll
[#5688] Water shader no longer breaks in interior cells when indoor shadows are disabled
[#5906] Sun-glare effect now works with ‘Mesa’ drivers and AMD GPUs
[#2311] Targeting non-unique actors in scripts is now supported
[#2473] Selling respawning items to vendors now increases the amount that respawns
[#3862] Random contents of containers are now determined in a similar way as in the original engine
[#3929] Random loot in a container no longer respawns when the player character takes the loot and trades with the container’s owner afterwards
[#4039] Followers no longer form a train of actors but rather follow their leader at the same distance
[#4055] If a script is running as a global script, newly triggered local instances of that script will now be initialised with the global script’s variable state
[#5300] NPCs carrying torches now switch to using a shield when they enter combat [inspired by Capostrophic’s work]
[#5423] Bigger creature followers — e.g., Guars — no longer bump into their leader
[#5469] Scripted rotations or displacements of large objects no longer reset the local map’s fog of war
[#5661] Region sounds now use fallback values to determine the minimum and maximum time between sounds
[#5661] There now is a chance to play no region sound at all if the sum of all sound chances for the current region is below 100 %
[#5687] Bound items covering the same equipment slot no longer freeze the game if they expire at the same time, e.g., while resting
[#5835] Scripts can now set AI values (‘AI Hello’, ‘AI Alarm’, ‘AI Fight’, ‘AI Flee’) to negative numbers
[#5836] Dialogue conditions containing negative AI values now work
[#5838] Teleport doors to non-existent wilderness cells no longer break the local map
[#5840] NPCs being hit due to attacking an enemy with an active ‘fire/frost/shock shield’ effect now trigger the corresponding damage sound effect
[#5841] Free spells can now be cast even if the caster has no magicka left
[#5871] Users with Russian keyboard layout can now use ‘Ё’ in input fields without opening the console
[#5912] ‘Summon’ effects that failed to summon anything are no longer removed
[#5923] Clicking on blank spaces in the journal can no longer open topics on the next page
[#5934] Morrowind legacy madness: The item count in ‘AddItem’ commands is now transformed into an unsigned value, i.e., negative numbers will overflow and result in a positive number of items being added
[#5991] Scripts can now open books and scrolls in the inventory
[#6007] Corrupt video files no longer crash the game
[#6016] Sneaking or jumping NPCs no longer stop and turn to greet the player character
[#4774] Guards no longer ignore attacks of invisible player characters but rather initiate dialogue and flee if the player resists being arrested
[#5358] Initiating dialogue with another actor without closing the dialogue window no longer clears the dialogue history in order to allow, e.g., emulation of three-way dialogue via ‘ForceGreeting’ command
[#5363] ‘Auto Calc’ flag for enchantments is now properly treated as flag in OpenMW-CS and in OpenMW’s ‘esmtool’
[#5364] Scripts which try to start a non-existent global script now skip that step and continue execution instead of breaking
[#5367] Selecting already equipped spells or magic items via hotkey no longer triggers the ‘equip’ sound to play
[#5369] ‘Scale’ argument in levelled creature lists is now considered when spawning creatures from such lists
[#5370] Morrowind legacy madness II: Using a key on a trapped door/container now only disarms the trap if the door/container is actually locked
[#5397] NPC greetings are now properly reset when leaving and re-entering an area
[#5403] Visual spell effects affecting an actor now also play during that actor’s death animation
[#5415] Environment maps now properly work for equipped items, e.g., those of the “HiRez Armors” mod
[#5416] Junk non-node root records in NIF meshes are now handled more gracefully to allow certain modded assets to be loaded
[#5424] Creatures now head-track the player character
[#5425] Magic effects which are not applied once now have a minimum duration of 1 second
[#5427] ‘GetDistance’ function no longer stops script execution when there is no object found for the given ID
[#5427] ‘GetDistance’ function and the engine’s object search now log improved warning messages regarding missing objects of a given ID
[#5435] Enemy attacks can now hit the player character when collision is disabled
[#5441] Fixed the priority of certain animations to allow enemies to push the player character in first-person view if the player just holds the attack button
[#5451] Magic projectiles now instantly disappear when their caster vanishes or dies
[#5452] Auto-walking is no longer included in savegames, i.e., the player character will stand still again after loading
[#5484] Items with a base value of 0 can no longer be sold for 1 gold
[#5485] Successful intimidation attempts now always increase an NPC’s disposition by at least a minimum margin
[#5490] Hits to the ‘left carry’ slot are now redistributed to the ‘left pauldron’ slot or the ‘cuirass’ slot if the actor has no shield equipped
[#5525] Case-insensitive search in the inventory window now also works for non-ASCII characters
[#5603] When switching to constant-effect enchanting in the enchantment window, all effect ranges are now reset to ‘self’ if possible and incompatible effects are removed
[#5604] OpenMW’s NIF loaders can now correctly handle NIF files with multiple root nodes
[#5611] Repair hammers with 0 uses can now be used only once before they break, while lockpicks and probes with 0 uses do nothing at all — thanks, Bethesda!
[#5622] Fixed the priority of the main-menu window to prevent the in-game console from becoming unresponsive
[#5627] Book parser now considers images and formatting tags after the last ‘end of line’ tag to correctly display certain in-game books and scrolls added by mods
[#5633] Negative spell effects received before switching to god mode no longer continue to harm the player character
[#5644] Active summon effects on the player character no longer cause crashes during game initialisation
[#5656] Characters no longer use the standing animation when blocking attacks in sneak mode
[#5695] Actors casting a target spell at themselves via script now aim for their feet rather than casting the spell in their current target’s direction
[#5706] AI sequences — e.g., for patrolling NPCs — no longer stop looping when a savegame is reloaded
[#5758] Paralysed actors who are underwater now float to the surface
[#5758] Levitating actors who get paralysed now fall to the ground
[#5869] Guards now only initiate the arrest dialogue if the player character is in line of sight
[#5877] Transparency of magic-effect icons is now properly reset to prevent “empty” icons from appearing in certain situations
[#5902] ‘NiZBufferProperty’ now handles ‘depth test’ flag
[#5995] UV offset in ‘NiUVController’ — which is used in vanilla Morrowind to simulate liquid movement — is now properly calculated
[#5101] Hostile followers no longer follow the player character through teleport doors or when they use travel services
[#5422] The player character no longer loses all spells if resurrected via the ‘resurrect’ console command
[#4764] Synchronise main thread and rendering thread to avoid errors with particles, e.g., in the water-ripple effect
[#5479] Fixed an issue with pathfinding that led to NPCs standing rooted to the ground instead of wandering about
[#5507] Sound volume settings are now always restricted to the range [0.0, 1.0] and are no longer potentially unclamped in response to in-game volume changes.
[#5531] Fleeing actors are now correctly rotated which, e.g., prevents cliff racers from diving underwater when fleeing
[#5914] ‘Navigator’ now builds “limited” paths for actors with far-away destinations to ensure pathfinding even over greater distances (outside the navigation mesh)
[#6294] Fixed a crash caused by an empty path grid
[#3372] Magic bolts and projectiles now always collide with moving targets
[#4083] Doors now mimic vanilla Morrowind’s behaviour when colliding with an actor during their open/close animation [partially fixed by elsid]
[#5472] Zero-lifetime particles are now handled properly and a related potential zero division in ‘NiParticleColorModifier’ that caused crashes on non-PC platforms, e.g., when using Melchior Dahrk’s “Mistify” mod, has been fixed
[#5548] ‘ClearInfoActor’ script function now removes the correct topic from an actor
[#5739] Saving and reloading the savegame prior to hitting the ground no longer prevents fall damage
[#5899] Exiting the game without having closed all modal windows no longer leads to a crash
[#6028] NIF particle systems now properly inherit the particle count from their ‘NiParticleData’ record which, e.g., solves issues with the “I Lava Good Mesh Replacer” mod
[#5588] Clicking on an empty journal page no longer triggers topic entries to show
[#5539] Resizing of the game window no longer breaks when switching from lower resolution to full-screen resolution
[#1952, #3676] ‘NiParticleColorModifier’ in NIF files is now properly handled which solves issues regarding particle effects, e.g., smoke and fire
[#5557] Moving diagonally using a controller’s analogue stick no longer results in slower movement speed compared to keyboard input
[#5821] OpenMW now properly keeps track of NPCs which were added by a mod and moved to another cell, even if the mod’s load-order position is changed
[#5680] Actors now properly aim magic projectiles which, e.g., prevents bull netches from shooting over the player character’s head
[#5800] Equipping a constant-effect ring no longer unequips a cast-on-use ring which is currently selected in the spell window
[#1901] Actors’ collision behaviour now more closely replicates vanilla Morrowind’s behaviour
[#3137] Walking into a wall no longer prevents the player character from jumping
[#4247] Actors can now walk up certain steep stairs thanks to the usage of AABB (“axis-aligned bounding box”) collision shapes
[#4447] Switching to AABB collision shapes also prevents the player character from looking through certain walls
[#4465] Overlapping collision shapes no longer cause NPCs to twitch
[#4476] Player character no longer floats in the air during scenic travel in abot’s “Gondoliers” mod
[#4568] Actors can no longer push each other out of level boundaries when there are too many of them in one spot
[#5431] Prevent physics death spirals in scenes with a huge amount of actors
[#5681] Player characters now properly collide with wooden bridges instead of getting stuck or passing through them
Editor Bug Fixes:
[#1662] OpenMW-CS no longer crashes if there are non-ASCII characters in a file path or in a configuration path
[#5473] Cell borders are now properly redrawn when undoing/redoing changes made to the terrain
[#6022] Terrain selection grid is now properly redrawn when undoing/redoing changes made to the terrain
[#6023] Objects no longer block terrain selection in ‘terrain land editing’ mode
[#6035] Circle brush no longer selects terrain vertices outside its perimeter
[#6036] Brushes no longer ignore vertices at NE and SW corners of a cell
[#5400] Verifier no longer checks for alleged ‘race’ entries in non-skin body parts
[#5731] Skirts worn by NPCs are now properly displayed in 3D view
[#4357] Sorting in ‘Journal Infos’ and ‘Topic Infos’ tables is now disabled; you may adjust the order of records manually
[#4363] Clone function for ‘Journal Infos’ and ‘Topic Infos’ records now allows you to edit the new record’s ‘ID’ respectively
[#5675] Object instances are now loaded and saved with the correct master index to prevent overwritten objects from appearing in game
[#5703] OpenMW-CS will no longer flicker and crash on XFCE desktop environments
[#5713] OpenMW-CS now properly renders ‘Collada’ models
[#6235] OpenMW-CS no longer crashes when changes to the terrain height are undone and then redone
[#5384] Deleting an instance in 3D view now correctly updates all active 3D views
[#5026] Prevent data races with ‘rain intensity uniforms’
[#5480] Drop Qt4 support in favour of Qt 5.12 or later
[#4765] Avoid binding an OSG array from multiple threads in OpenMW’s ‘ChunkManager’
[#5551] Windows: OpenMW no longer forces a reboot during installation
Finally, after much hard work to get all the cool new features ready for release, we have our first round of Release Candidates, or “RC” for short. RCs are simply release binaries for testing, to make sure everything is in order for a release. That’s right, testing! So we would be very grateful if you would download an RC for your OS of choice, test it a bit to see if it works without any issues and report any findings you make to our Gitlab issue tracker. Please make sure to check first that whatever you find is not on the tracker already.
Thank you and we’ll see you again on the day of the release!
Starting with version 0.13.0, each and every main release of our engine has been accompanied by a release commentary. For me and many others, the release videos have always been something to look forward to, a strangely satisfying means to highlight OpenMW’s progress throughout the ages — and a great opportunity to mess around with our beloved Fargoth!
Our channel has now reached 10,000 subscribers, a truly gigantic number for such a niche project like OpenMW. A huge thank-you to all of you for your continuous support! Rest assured, though, that we are not reaching for the stars here and that we will still concentrate on publishing release commentaries in the future instead of featuring puppies or kittens. But a little celebration seems to be appropriate, which is why I present you with an updated version of our 2013 video “A Visual History of Changes to OpenMW”! Sit back, relax, and have fun. — And thanks again for your support!