Daggerfall Unity 0.13 Rendering Update – Part 2

Our rendering update and review continues with 0.13.2 now available on Releases page. This release fixes bugs, expands capabilities of new shaders, and helps mods reach compatibility with 0.13. Let’s unpack everything new in this release.

Expanded Default Shaders

0.13 introduced new default shaders, the small programs which tell your GPU how to render objects and materials. These new shaders better reproduce classic’s colours and flat albedo look without all the unwanted specular shine that comes with Unity’s Standard shader, but did not support a PBR workflow by design. While this was suitable for classic textures, and mod authors could still use custom PBR materials in their .dfmod, any loose texture mods had less support than before.

From 0.13.2, default shaders now support albedo+normal+parallax+metallic maps, allowing loose texture mods to have an optional PBR workflow just by dropping the right textures into a folder. We also fixed several problems loading these optional maps in asset pipeline and extended this PBR support to terrain tilemap shader.

A good example of this kind of mod is Vanilla Normal Mapped which adds normal+parallax+metallic maps to complement classic colour textures. Screenshots below compare standard DFU textures and boosted by Vanilla Normal Mapped mod in 0.13.2.

These new capabilities in default shaders allow mods to intentionally reintroduce specular based on their materials, while still avoiding unwanted specular when using classic textures only. The big advantage of rolling our own shaders is more control over the rendering process.

Dungeon Water

Without proper alpha blending at the time, DOS Daggerfall used a stippling effect for water surface (a kind of black pixely noise) and a bright blue fog effect when submerged.

Daggerfall Unity improves water surface with a dark water plane and slime highlights, invoking murky and stagnant water suitable for dungeons. But when you submerge, we used the same bright blue fog effect underwater. After listening to feedback, we’ve changed the submerged effect to use a dark blue-green slime colour to better match water surface.

In case you want something different, we’ve also exposed the underwater fog to modders. See this topic for details on how to set underwater fog colour/density and some tips on updating surface plane as well.

Shout-out to King of Worms for his persistence around tweaking dungeon water and driving this change.

Increased Torch Brightness

On the subject of feedback, we heard several times the brightness of default and item-based torch were retuned improperly and looked too dark. We’ve now increased brightness of both default and item-based torch, and decoupled how these are handled so they can be tuned independently in future. Screenshot below compares local torch brightness when using a lantern with item-based torch in 0.13.0 vs. 0.13.2. You’ll note that 0.13.2 is brighter and more comparable to lantern in 0.12.

In addition to torch brightness, we also heard that retro rendering mode is too dark and tends to crush colours towards black. This kicked off a review into better matching classic’s brightness, particularly in retro mode rendering. During this review, we noted classic dungeons are very bright near player then ramp down to near black based on distance from camera. Because Daggerfall Unity’s retro mode uses naturalistic lighting and selects palette colours in a post-process, it does not properly capture this effect.

The solution was to introduce a new effect called ColorBoost to default shaders which juices up colours local to player and ramps down over a short distance. This better matches brightness contrast seen in classic, and will help players tune dungeons and nights to properly select brighter colours in retro mode local to player. ColorBoost is not a lighting effect, rather it scales albedo near camera so that brighter colours will be selected in post-process. ColorBoost will be available from 0.13.3 with or without retro mode enabled, but its primary purpose will be to select better colours in retro mode. You can see a preview of it in this tweet.

Terrain Mod Compatibility

We’ve worked with authors of popular terrain mods to help overcome compatibility problems and get their mods working in 0.13. This required updates to both mods and core. We’re pleased to announce that Enhanced Sky, Distant Terrain, and Eroded and Enhanced Terrain are now compatible with 0.13.2+. Mod authors should have compatible mods released soon now 0.13.2 is available.

General Improvements & Fixes

We’ve made several minor performance improvements and fixes under the hood. To summarise these quickly:

  • Retro-sized textures are no longer compressed automatically, as this destroyed appearance of small-sized texture replacements. The threshold for retro-sized textures is < 256 pixels wide and high. (Interkarma/TheLacus)
  • Fixed internal crash when loading compressed normal maps.
  • Fixed loading non-colour maps as linear.
  • Refactored loose texture asset loading to fix some minor bugs and clean up code.
  • Fixed errors in terrain tilemap shader and cleaned up shader code.
  • Fixed excess draw calls when rotating interior automap, a large performance improvement to automap (spotted by King of Worms).
  • Fix out-of-range error in FormulaHelper.CalculateCastingCost (KABoissonneault)

Effect Settings / Post Processing Tuning

There’s a new in-game UI under the pause menu chevron called Effect Settings.

This UI allows you to customise post processing effects while game is running. As Daggerfall Unity now embeds PostProcessing v2 (PPv2) stack, the mod which previously customized these settings is no longer compatible. Rather than update mod, we’ve integrated these settings straight into the core game!

All post processing effects are disabled by default. Once you access the above menu, you’ll be able to enable and tune Antialiasing, Ambient Occlusion, Bloom, Motion Blur, Vignette, Depth of Field, and toggle Dither while seeing your changes at runtime. Screenshots below of first three settings pages.

These settings have been expanded to include new settings available in PPv2 that were not available in older releases.

The Effect Settings window is also expandable, so mods can introduce new post processing or other effects, then plug their config page into this UI. This will be where ColorBoost is homed once that feature goes live in 0.13.3.

Post processing is very much a matter of personal taste and you should be able to dial in an effect to your liking. You might use these effects in your game or just to take screenshots. With effects like Vignette and Depth of Field, you can create more stylized screenshots like below.

The choice is yours how you want to use these effects. You can leave them disabled, enhance game by degrees, or pile on a bit of everything for photography purposes.

Conclusion

With all the tweaks and fixes in this release, along with increasing mod compatibility, Daggerfall Unity 0.13 is almost ready to lose the Preview tag and go back to stable beta releases.

As of now, 0.13.2 represents a close-to-final state for rendering in Daggerfall Unity. All the challenging and breaking changes are now behind us. Modders can release compatibility updates for 0.13.2+ and be confident their mods will remain compatible with 1.0 as no further rendering changes are scheduled.

Looking at a timeframe for 1.0, this will now most likely be early 2022. End of year is fast approaching and we still have lots to do. Once rendering is closed out, we’ll move on to Localization improvements and general bugfix. We’ll call 1.0 when happy with overall state and stability of game.

Thank you for reading, and for playing Daggerfall Unity!

Daggerfall Unity 0.13 Rendering Update

There are some long-standing items on Daggerfall Unity’s Roadmap that have at last found their way into the game. These changes relate to visual rendering of classic textures in Unity engine and how they interact with lighting. There’s also a long-overdue update to the postprocessing stack. To summarise everything before getting into details, these changes are:

  • New default shaders for classic textures
  • Switch rendering from Gamma to Linear colour space
  • Lighting review
  • Update postprocessing stack

New Default Shaders

You might have noticed the visuals in DFU have a kind of silvery “shine” on top, and some textures tend to wash out easily under certain lighting conditions. Examples are objects that emit light, such as lanterns, and naturally bright textures like snowy terrain at midday. Even when using retro rendering with palletization, deep blacks will tend to shift value towards lighter greys.

The reason for this is somewhat technical. A concise version is that modern engines like Unity use something called Physically Based Rendering (PBR) which attempts to simulate the physical properties of a material and how it interacts with light. However, old games like Daggerfall predate physical material properties such as normal maps, smoothness maps, etc. and instead have only basic colour information in a single texture. When attempting to render these simple textures in a PBR engine without any other material properties, they are perfectly smooth and will reflect light in unsatisfying ways. This can give objects a shiny kind of look, as if made from plastic or dull metal.

In fixing this, the goal was to correct lighting incongruity while using classic textures and still allow mods like DREAM to use PBR materials. It was also necessary for these different materials to work together in the same scene with any combination of classic and modded materials. This presented some challenges that were eventually overcome with the help of new shaders and several updates to material pipeline.

The best way to see the difference is to compare a scene in 0.12 and 0.13. Pay close attention to the dark areas of the rat while adjusting slider. You’ll notice in 0.12 screenshot the rat has a uniform specular shine that is removed in 0.13. You’ll see the same across the entire scene, although most obvious in darker textures.

To fix this specular shine required new shaders better suited to Daggerfall’s classic textures. These new shaders lean fully into the retro textures and use simple Lambertian reflectance like older games of the time. This leads to better colour sampling under most lighting conditions and fixes brighter areas from becoming overbright. For example, the lantern and Fire Daedra wash out to bright yellows in 0.12 using PBR shaders but show their true colours in 0.13.

While relatively basic, the new shaders still support Normal maps and Emission maps, and conditional compilation. They are more lightweight than Unity’s Standard shader and will perform slightly better on lower-end computers running without mods.

Gamma to Linear Colour Space

The next change was switching from Gamma to Linear colour space. This is another technical subject, but in short it relates to how colours are added and multiplied. Linear colour space leads to more accurate results with improved lighting falloff and softer shadows. The results can be subtle in unmodded DFU, but the combination of new materials and linear lighting uplifts every scene with deeper colours and improved contrast while eliminating bloom and flat specular shine.

With the change to Linear colour space, modded materials now have a chance to look their best at all times with more accurate colours and no unwanted bright spots near lights. Of course, all these changes also require lighting to be reviewed and materials tweaked so they still look good. This leads into the next item on the list.

Lighting Review

Linear colour space blends and lights differently than Gamma. Lights appear to have a larger radius and is more defined on edges. This is more accurate overall, but also different if you’ve become accustomed to Gamma lighting. As a result, all the light sources in the game need to be tuned so they aren’t too bright and still resemble the game as it was.

In general, dungeons will appear a bit darker from 0.13. The combination of new shaders, Linear colour space, and lighting review result in darker colours becoming more prominent. You can really see the flat silvery shine over everything in below screenshot when comparing 0.12 to 0.13. The dark parts of brick textures stay dark rather than shifting value towards lighter greys.

Towns are still nicely lit oases, with Linear’s different light falloff visible against sides of buildings in below screenshot. But the removal of flat specular shine means night-time scenes have better overall contrast between light and dark areas.

Daytime scenes will light much the same as there’s only a single directional light source (the sun). The change to Linear with new shaders also resolves the problem of terrain textures looking over-bright under a midday sun. Finally, the daytime light curve was adjusted to provide a longer plateau of sunlight around 10am-3pm.

Update Postprocessing Stack

For some years now, Daggerfall Unity has continued to use an older embedded postprocessing stack. This has now been removed and replaced with current Post Processing 3.1.1 via Unity’s package manager. This updates deferred fog and postprocess capabilities to be in line with current engine. It also required some minor code changes and retuning fog as some parts of the old Post Processing library have been deprecated.

Fog is roughly the same, other than being a bit thicker towards limits of view distance. Compare the distant trees and buildings in below winter scene.

Preview Release and Mods

Daggerfall Unity 0.13 will be available as a Preview release soon. Due to all the changes across asset pipeline, colour space, default materials, and postprocess stack, you should expect some mods that work under 0.12 not to work in 0.13. Mods that include new materials and shaders will be most affected. Any non-graphical mods, or those which only change game settings, should be unaffected or only need minor tuning.

It could take several weeks for mod authors to update their mods to be compatible. If you don’t want to help test 0.13 and provide feedback to developers and modders, you can happily stay on 0.12 until 0.13 release is out of preview. You can also run 0.12 and 0.13 side-by-side by unzipping releases to different folders and running different mod loadouts. Other than changes outlined above, the 0.13 release is identical in terms of gameplay and patch level to 0.12.

Looking to the future, this represents the last major change to Daggerfall Unity leading up to 1.0. Bug fix and general refinement will resume once 0.13 is considered stable.

Thank you for reading! I hope you decide to try out Daggerfall Unity 0.13 preview to help test mods and provide feedback.

Retiring Live Builds Page

Future Releases

For the last few versions, patch notes and downloads have been mirrored to our GitHub Releases page. Starting from upcoming July builds, our Releases page will be the official site to find new builds of Daggerfall Unity. Live Builds will be retired and redirect to Releases.

This comes with a few advantages. Patch notes, source, and downloads for each release now all live together in one place, and a longer release history can be maintained. Whereas Live Builds would only keep last two or three builds, Releases can retain all new versions going forwards. It also means new releases can be curated by other developers as future stewardship of Daggerfall Unity broadens beyond myself.

This is part of a strategy to make GitHub the primary Daggerfall Unity site in time for 1.0 release. As a project that has now been worked on by over 50 people across 5+ years, it doesn’t make sense for a personal blog site to be the centre of such an endeavour. I’ll have more to share about this as 1.0 approaches later in 2021.

Development History

Daggerfall Workshop started as a personal blog site outlining my journey creating exploring tools for Daggerfall. Since Daggerfall Unity reached classic parity in 2019, most of the posts here have been patch notes in bullet format. But if you look back over posts from a few years ago, there were more interesting and technical updates as the energy of development was in full swing.

My sentiment is the basic patch notes are starting to bury more interesting posts from DFU’s long development history. Rather than continue this trend, I’d like Daggerfall Workshop to stand as a journal of one person’s mad obsession gradually leading into a rather astounding fan remake that has since outgrown the person who started it.

Back to Its Roots

I’ll still post major news and events here on the Workshop, and I might even use it as a personal devblog again someday. There’s a future coming for Daggerfall Unity that doesn’t need me to manage every release and review every line of code. In that future, I’m just one more person who loves this game. I might at last have some time just to play for fun and build mods of my own on the side.

And someday after 1.0, once I’ve had time to decompress and organise my thoughts, I’d love write a detailed postmortem of Daggerfall Unity’s development. This would be a fitting capstone to the Workshop after more than 20 years of tinkering on this unique game.

Daggerfall Unity Beta 0.11.4

Daggerfall Unity Beta 0.11.4 is now available for download on Live Builds and Releases page. This is a heavy bug-fix build with some new mod support.

As always, a big thank you to everyone adding new code, fixing bugs, and helping test. You all help make each release the best it can be.

General Fixes & Improvements

KABoissonneault

  • Added the ability for mods to specify an item type as “noRepairs”
  • Modding the character sheet’s Skills dialog UI mod system
  • Fix: Show biography skill bonuses during character creation
  • Added two event handlers for loot spawning
  • Added “weather”, “season”, and “climate” quest trigger conditions
  • Added new time-related text macros
  • Expose the SpellMaker and its subwindows to mods UI
  • Added “resistance” formula overrides.

Ferital

  • Cache RMB blocks
  • Add %mn and %fn macros support to TalkManagerMCP
  • Change NPC knowledge in Talk Manager to match classic
  • Fix automap update not triggering on some occasions
  • Add a runtime method to fix invalid RDB blocks
  • Use classic hack to fix Orsinium overlapping blocks

Pango

  • Resynchronize vital indicators after toggling large HUD bug
  • Quest and enchanted items exclusions wip
  • Fix Castle Wayrest backroom door messages not showing up (issue #1974)
  • Stack identical books together (enhancement)
  • Immediately interrupt resting if you die
  • Prevent levitating and swimming diagonally from being 40% faster bug
  • Don’t reset lastSpell when using magic missile items bug
  • Use monotonic screenshot filenames
  • Preserve rumors line breaks on bulletin boards

Jefetienne

  • Add Large HUD offset logic to FPSSpellCasting like in FPSWeapon

l3lessed

  • SpeedChanger Updates

Hazelnut

  • Allow water tile conversion to be handled by terrain texture mods
  • fix warning on trade window
  • Add new promptmulti action for 2-4 button message boxes in quests
  • Add OnItemHover to inventory window for mods
  • Open up spell book for mods
  • Fix typo in DFU macro %pg1 bug
  • Reset ship ownership on new game start bug
  • Enable player torch shadows based on spell shadows setting
  • Re-fix riding sprint in mods bug
  • Refactor guild service window UI mod system
  • Add formula for bank loans

XJDHDR

  • Fixed ArgumentOutOfRangeException on loading game with new dungeon models
  • Extra features for the CustomDoor script

Jay_H

  • U0C00Y00 Fix

TheLacus

  • Create ITerrainMaterialProvider and allow overriding by mods
  • Add “Create > C# Mod Script” menu for quickly adding new mod script

Interkarma

  • Add back Rigidbody to PlayerAdvanced
  • Refill player vitals after banishment
  • Prevent Seducer stunlock during transformation
  • Fix out of work exception
  • Use questor billboard when moved by their own quests
  • Handle removal of magic items broken via combat hits
  • Visibly show effect of Drain Speed on enemies
  • Fix equipped “item used do” quest action handling and more
  • Fix multiple “teleport pc” into dungeon desync from world
  • Change Sx977 PlaySound usage
  • PlaySound now counts times sound is played
  • Fix ending condition for Lysandus’ Revenge
  • Add “print_quests” console command
  • Fix exiting non ground-level doors at higher terrain altitudes
  • Unlock Castle Daggerfall doors after teleporting inside
  • Console font fixes
  • Exclude Mantellan Crux “BOX” as crushing hazard
  • Fix custom region overlay on travel map
  • Do not process exhaustion event if player already dead
  • Store lastKeyCode during EventType.KeyDown handling
  • Force weather update after teleporting to different climate
  • Don’t import classis rumours in Save Explorer

Daggerfall Unity Beta 0.11.3

Daggerfall Unity 0.11.3 is now available on Live Builds page. This is another general bug-fix release with some updates to mod system.

Starting from this release, I’m attaching zipped builds along with patch notes to Releases page on GitHub. This will eventually become a longer-term archive for older builds even after they’re cleaned up from Live Builds page. If there’s enough demand, I can work through attaching older builds to previous releases on this page.

Now that I’m finally caught up with code review, I’ll be able to get back into the localization tutorial series. This series was pending some fixes rolled out in 0.11.2 and 0.11.3, so please be sure to update before the next article in series is published.

Quest Debugger Input Changes

The quest debugger has a few changes to input settings. These changes are to prevent accidentally opening debugger during normal play, free up the Tab key for other uses, and to make shortcuts easier on non-US keyboards. For example, the square bracket keys [ and ] are not so easy to use on AZERTY keyboards.

If you are not a quest author or don’t care about quest debugger, you can ignore these changes.

  • Quest debugger is now disabled by default. Must edit EnableQuestDebugger=True in settings.ini to activate it again.
  • Ctrl+Shift+D now cycles through debugger display states off/partial/full
  • Ctrl+Shift+LeftArrow now opens previous active quest while debugger active
  • Ctrl+Shift+RightArrow now opens next active quest while debugger active
  • Ctrl+Shift+UpArrow now teleports to next dungeon quest marker while debugger active inside dungeon
  • Ctrl+Shift+DownArrow now teleports to previous dungeon quest marker while debugger active inside dungeon

Note: Some inputs might move character, e.g. Ctrl+Shift+D will also move character slightly to right when activating debugger. This is expected and not considered a breaking issue for a debug/development feature that is normally disabled.

General Fixes & Improvements

Pango

  • Potion maker: Fix issues tracking ingredient stack count between cauldron and player inventory
  • Conjured arrows: Don’t stack conjured arrows with different time-to-live
  • Conjured arrows: Always shoot conjured arrows first, priority to lowest time-to-live
  • Conjured arrows: Change colour of arrows to show if conjured or real in inventory and arrow counter on HUD
  • Conjured arrows: Prevent shooting a conjured arrow converting to a real arrow

Ferital

  • World: Fix classic bug relating to %ef macro not using correct local race for building names

Hazelnut

  • DaggerfallQuestJournalWindow: Change access permissions to allow overriding by mods
  • DaggerfallQuestJournalWindow: Allow events to be overridden by mods
  • DaggerfallLoot: Allow mods to add or modify loot items via FormulaHelper.ModifyFoundLootItems() override
  • Inventory UI: Right-click now works as described in Daggerfall manual to perform complement of equip/remove, appearance cycling moved to middle-mouse

KABoissonneault

  • DaggerfallInventoryWindow: Change access permissions to allow overriding by mods
  • Biographies: Fix issues parsing patched BIOG files
  • Biographies: Add ability to add custom biographies
  • FormulaHelper: Add hook to override CalculateCasterLevel
  • FormulaHelper: Add hooks to override spell costing formulas CalculateTotalEffectCosts, CalculateEffectCosts, ApplyTargetCostMultiplier
  • Magic: Fix spells with multiple effects ending too early

Bl4ckh34d

  • World: Fix incorrect nature billboards at climate borders

XJDHDR

  • ActionDoor: Add support for MeshCollider
  • RuntimeMaterials: Fix bug where dungeon texture not applied if runtime material not attached to base object
  • MeshReplacement: Fix regressions of new scripts not added to mod-added models

TheLacus

  • TextBox: Do not draw defaultText if null

Interkarma

  • World: Extend town borders by 4096 units – increases distance at which flavour text is displayed, guards will chase player out of town, etc.
  • Magic: Fix player not receiving payload of Damage Fatigue effect
  • Formula: Fix randomness of levelup health roll so this is always different, even after a reload
  • Localization: Fix exception when determining size of new font atlas using deprecated fields
  • Engine: Update Addressables package to 1.17.17

Daggerfall Unity Beta 0.11.2

Daggerfall Unity 0.11.2 is now available on Live Builds page. This is a general bug-fix release with some updates to mod system.

New Features

Custom Mobile Units (TheLacus)

TheLacus has taken a big step towards support for replacing enemies with custom graphics, including 3D models. See gif below for an example of this in action using a humble cube.

If you don’t think a cube is that amazing, consider this a 3D model injected by a mod into an enemy mobile unit to alter it’s appearance. The same could be done with a fully animated 3D model. There are some limitations around this for now, notably that classic enemy attack triggers are linked to sprite animation frames. So for now a modder would also need to reimplement parts of combat to fully replace model. But this is something that can be refined over time as the community starts experimenting with this feature and sending their feedback.

Teleport To Any Dungeon Marker (Interkarma)

This is a very minor improvement to quest debugger that finally reimplements a test/cheat feature from classic. When quest debugger is open (default LeftShift+Tab) you can now use Shift+[ and Shift+] keys to cycle forwards and backwards through all markers in a dungeon. This doesn’t require a quest to be active in dungeon, only for the quest debugger to be open while player is in a dungeon. This is handy for situations like teleporting to Medora’s room in Direnni Tower, as she’s a permanent NPC without a specific quest marker.

The keybinds for quest debugger and cycling through markers can be changed in StreamingAssets/Text/DialogShortcuts.txt.

General Fixes & Improvements

Lots of bug fixes small and large from our awesome community of devs.

Hazelnut

  • Fix dictionary access for non-existent world variant keys
  • Prevent “remote” Place quest selection from randomly selecting local Place
  • Don’t restrict shields by plate or chain to match classic
  • Move hardcoded info panel colour into DaggerfallUI
  • Allow non-member quests to have rep requirements – to fix non-joinable Witch Coven quest dispensing
  • Fix Oghma removal after use to function from everywhere including wagon

AsesinoBlade

  • Change HotKeySequenceProcessed from Bool to Enum
  • Add forward thrust to click to attack – previously this move was never selected

Deepfighter

  • Fix formatting of date lines in diary entries of quests

KABoissonneault

  • Fixed misnamed formula overrides for CalculateFatigueRecoveryRate and CalculateSpellPointsRecoveryRate
  • Fix torch burning ticks progressing while game is paused
  • Fix %hpw inconsistent with classic for Dunmer characters

TheLacus

  • Import mod settings and presets files after create or changes from editor window
  • Fix mod settings not accepting negative float values
  • Fix mod asset loading on Turkish culture
  • Fix RuntimeMaterials by ignoring climate when using dungeon table
  • Improve support of mod localization through CSV text tables

Pango

  • Toggle large HUD with F10 like classic
  • Fix interacting with HUD when cursor not active on Linux
  • Fix NullReferenceException
  • Horse now has constant jump height to clear hedges

Jefetienne

  • Add joystick middle-click keybind and set joystick UI controls to protected
  • Prevent accidental axis button “presses” from binded movement and camera axes

XJDHDR

  • Reduce delay filling Dungeon variable in PlayerEnterExit
  • Add detailed exception handling and logging to BookReader
  • Automap check CombineRDB state before resetting so it stays disabled if previously set in editor
  • Automap move mesh and material update to separate script and optimise automap creation times
  • Fix texture table in dungeon automap to match environment
  • RuntimeMaterials automap type differentiation for interior types and other models
  • Add support for the discovery state of OBJ models to be saved and loaded
  • Fix some editor warnings

Interkarma

  • Fix vampires not being offered vampire quests
  • Restore per-task click rearming
  • Update DaggerfallFont to use .atlasTexture instead of deprecated .atlas
  • Deprioritise System Locale Selector to prevent an error during localization development
  • S0000011: Fix needing to click Barenziah twice with Chapter 6 before quest ends
  • S0000011: Fix clicking Gortwog to hand in Chapter 6 with per-task click rearming
  • S0000011: Reordered gold reward so it doesn’t interupt Barenziah’s information at end of quest
  • N0B00Y16: Fix issue of clicking on merchant at wrong time stalling quest
  • S0000021: Fix King of Worms potentially spawning into Sentinel during quest
  • S0000021: Fix logic issues with click handling carried over from classic
  • S0000021: Fix success condition to correctly check player has killed lich
  • M0B21Y19: Fix victim default home being selected as local and stashing live version of dead NPC