1. Neverwinter Nights: Enhanced Edition
  2. News

Neverwinter Nights: Enhanced Edition News

Patch 8193.26 Launches for Neverwinter Nights: Enhanced Edition

Greetings, dear players and creators!

Patch 8193.26 for Neverwinter Nights: Enhanced Edition arrives today! The update includes dozens of features and fixes — plus adds two epic adventures to our trove of curated community content!

Check out full patch notes below!

Patch Highlights
  • New curated community content available! | Our new game launcher continues to grow! Two remarkable modules, Against the Cult of the Reptile God by Rich Barker, and Eye of the Beholder 1 & 2 by Rick Francis are now available to download with a single click!
  • Curated community content now playable in Multiplayer | The new curated content UI is now available when running multiplayer games
  • Polished fonts | Based on player feedback, we’ve spent some time improving font rendering!
  • Renderer | Many more performance and stability/compatibility improvements
New Curated Content Releases

We’re proud to announce two new curated content adventures, released in full cooperation with their authors.

With the latest update, you can also play them in multiplayer— and Eye of the Beholder by Rick Francis was designed to do just that. So gather your friends, and play the thrilling remake of the classic 1991 release from Strategic Simulations, Inc.

Or perhaps you're in the mood to dive into early tabletop AD&D nostalgia? Against the Cult of the Reptile God, by Rich Barker adapts the novice-series module into a smart, single-player dungeon crawl!
[h2]N1: Against The Cult of the Reptile God[/h2]
By Rich Barker

Terror by night! The village of Orlane is dying. Once a small and thriving community, Orlane has become a maze of locked doors and frightened faces.

Strangers are shunned, trade has withered. Rumours flourish, growing wilder with each retelling.
Terrified peasants flee their homes, abandoning their farms with no explanation.

Others simply disappear...

The adventure is set in Greyhawk and is based on the original TSR AD&D module N1 : Against the Cult of the Reptile God by Douglas Niles, which was ranked the 19th best AD&D module of all time by Dungeon Magazine.

While this conversion has added considerably to the original source material, all of the core elements of the adventure remain.

It is a mixture of wilderness, underground, and urban adventure, with a number of unique monsters and items, and some class-specific treasure hoards and rewards.

It is suitable for any class, although is harder for rogues. Druids and rangers are particularly well catered for, and can talk to many of the animals.

The adventure has a duration of approximately 15 hours, and is designed for starting 1st level characters, who can be expected to progress to around 8th level by the end of the adventure.

There are no alignment restrictions, but the storyline is predominantly suitable for good or neutral characters.
[h2]Eye of the Beholder[/h2]
By Rick Francis

A two-part remake of the classic game by Westwood/SSI.

The Eye of the Beholder series is designed to be fully multiplayer-compatible!
[h3]Eye of the Beholder[/h3]
A drow spy was captured two nights ago by Oltec, Captain of the Guard. Under interrogation, the drow revealed a disturbing plan. He claimed to be working for a being named "Xanathar". The spy claimed that "Xanathar" is an evil crime lord that inhabits the deepest part of the sewer system. Supposedly, Xanathar magically teleported this drow into the city to spy on the Lords of Waterdeep, but was unable to use his magic to teleport him back underground safely. Speak with Khelben Blackstaff to find out more information that could help you before setting out on your journey.
[h3]Legend of Darkmoon[/h3]
You are summoned by the wizard Khelben Blackstaff, and sent to investigate the dreaded Temple Darkmoon. The heroes of Waterdeep are sent to investigate strange disappearances from villages north of the city in the outline areas of the dark forest. Reports have been made of discoveries of human remains in shallow graves. The clues seem to lead to the Temple Darkmoon, which appears to be a peaceful sanctuary, run by divinely-inspired priests. You must explore the temple, deal with its inhabitants, avoid traps, and battle monsters to discover the temple's evil secrets. Alas, as often happens, appearances are deceiving, and the Temple's dark secret is up to the player to unfold.
Curated Content in Multiplayer

The multiplayer UI now uses the same slick design already offered in single-player.

You can now host games with modules downloaded from the curated content list (or any other third party repository used).

The repository will be automatically shared with other players, so they will be offered the download transparently (it’s just like joining a NWSync-enabled persistent world)!

Note: Multiplayer is not supported by all modules. Some were designed for singleplayer, and may break in unexpected ways when played with multiple people. Play them at your own risk!

In addition, the Start Game UI (for both single and multiplayer) saw the following changes:
  • Steam Workshop modules now show up on the Community tab. Each workshop item shows up with all modules grouped as a campaign
  • Improved UX when deselecting campaigns or modules
  • Campaigns in the list now grey out properly if none of their modules are installed
  • Campaigns can now display screenshots
  • Modules can now show as published-but-unreleased by setting a future date in the version entry
Renderer

Tons of performance and stability/compatibility improvements went into this patch:

  • Fixed the pink screen issue for unsupported GPUs
  • Drastically reduced the need for buffer switching by combining vertex arrays (perf+)
  • Combined most post-processing shaders into single pass (perf+)
  • Custom shader parameters are now properly relinked when another shader is loaded (consistency)
  • Early-Z optimisation reenabled via ifdef guard in shaders (perf+)
    - Note: if using custom shaders for setting alpha on a texture, you must now supply a txi too with an alphamean entry with a value below 1.0
  • TSB are now calculated for legacy compiled models at runtime as well (consistency/compat)
  • Fixed GL CubeMap load order (compat)
  • Fixed env maps for PC models not updating between areas. Now allows “default” map in txi files
  • Now uses the default chrome environment map if the assigned map is missing. Fixes issue with metallic objects becoming transparent (consistency)
  • Fixed gamma functions erroneously checking all colour channels, instead of any (consistency)
  • Fixed disabling tile light source with TILE_SOURCE_LIGHT_COLOR_BLACK not actually removing the light
  • Completely disabled texture downsampling for non-compressed textures
  • Fixed crash when releasing PLT
  • Added some crash safeguards for broken models
  • Adaptive soft particle based on size, should fix missing/faded monk eyes
  • Simple shadow perf optimisation
  • Fixed setting ambient material for grass
  • Fixed a crash when downsizing internal data structures
Fonts

We spent some time improving font rendering after the feedback from the last patch:

  • TrueType Fonts renamed to their function, away from font names
  • Combined glyph maps so all languages now share the same font files. Brawler is now the default font for high res typeface, since it was the most popular
  • Mordred numerals no longer offset old-style
  • Added slight adjustments to spacing and padding to make it look better
  • You can now tweak font outlines and contrast per-font (via txi)
  • Fixed the wrong font appearing in places like the DM chooser
  • Increased contrast for the high-res variant
Pathfinding
  • Static object removal now properly removes objects from the internal object list. This addresses the cases where a lot of static objects (such as body bags) added and removed over hours, would bog down gameplay
  • Fixed creatures not correctly moving towards an interactable object in certain marginal situations. Added better handling of requested distance when moving towards an object
  • Abort attempts at pathfinding early if the target destination isn’t achievable (perf+)
Gameplay
  • Default weapon feats for gloves and bracers now properly set if 2da entry is missing
  • Recommended button in chargen/levelup can now be disabled via ruleset.2da entry
  • Fixed hit dice validation for RDD
  • Fixed creature gobs sometimes erroneously generating really large wind values
Premium Modules

We cleaned up the dataset for the Tyrants of the Moonsea premium module. All content that is already part of the base game has been removed from the DLC download.
In addition, the following fixes went in:
[h2]Tyrants of the Moonsea[/h2]
  • Camera position no longer resets to top-down when exiting the world map
  • Some tile appearances are now correct when "facelift" mode isactive
  • The Kur-Tharsu main gate is no longer difficult to attack
  • A spider on the Shind Road East spawns in the correct spot
  • Removed a minor XP exploit in Thalia's conversation

[h2]Darkness over Daggerford[/h2]
  • Camera position no longer resets to top-down when exiting the world map
Other Fixes
  • UI/Nuklear: Fixed a crash that would occur when swapping child layouts (“clicking around a lot”)
  • Game: OnPlayerTarget now actually persisted to save games
  • Toolset: Fixed not rendering bounding boxes
  • Fonts: codepage=cp1251: Added support for a missing cyrillic character
  • Nui: codepage=cp1251: Fixed an issue with baking missing glyphs that would break rendered text
  • Fixed a regression from the previous development patch where some PLT textures were rendering incorrectly


Development Build 8193.25

Hello, dear community.

Today's development patch is a small one: Most importantly, it fixes one crash we found in testing.

It also addresses some compatibility issues with the unofficial Cyrillic language support, that hopefully helps our Russian friends maintain their community translation. We know that some strings in the new UI scenes are still not translatable. This will be addressed in a future patch!

[h2]Fixes[/h2]
  • Renderer: Fixed a crash in static object walkmesh calculation.
  • Start Game UI: Fixed the New/Existing Character UI not doing anything useful.
  • Fonts: codepage=cp1251: Added support for a missing Cyrillic character.
  • Nui: codepage=cp1251: Fixed line break calculation for Cyrillic text.

Development Build 8193.24

Hello, friends!

Today we are releasing patch .24 to the development branch of Neverwinter Nights: Enhanced Edition!

This patch addresses some of the concerns raised with the latest stable release, while also bringing consistency, compatibility and performance improvements.

As always, we appreciate your feedback and help in bringing these changes to the next stable release!

[h2]Start Multiplayer Game UI[/h2]

The Start Game UI for multiplayer is now also using the new design that singleplayer already offers.

You can now host a game from the curated content repository, or any other third party repository used. The repository will be automatically shared with other players, so that they will be offered the download transparently, same as if joining a NWSync-enabled persistent world.

In addition, the Start Game UI (both SP and MP) saw the following changes:

  • NewGame UI: Steam Workshop modules now show up on the Community tab. Each workshop item shows up with all modules grouped as a campaign
  • NewGame UI: Allow selecting panels even if they are already selected (allows going back to the info text)
  • NewGame UI: Campaigns in the list now grey out properly if no contained modules are installed
  • NewGame UI: Campaigns can now show screenshots as well
  • NewGame UI: Modules can now show as published-but-unreleased by setting a future date in the version entry


[h2]Fonts[/h2]

We spent some time working on font rendering after the feedback received after the latest stable release:

  • Fonts: TrueType Fonts renamed to their function, away from font names
  • Fonts: Combined glyph maps so all languages now share the same font files. Brawler is now the default font for high res typeface, since it was the most popular
  • Fonts: Mordred numerals no longer offset old-style
  • Fonts: Slight adjustments to spacing and padding to make it look better
  • Fonts: You can now tweak font outlines and contrast per-font (via txi)
  • Fonts: Fixed the wrong font appearing in places like the DM chooser
  • Fonts: Increased contrast for the high-res variant


[h2]Renderer[/h2]

A lot of performance and stability/compatibility improvements went into this patch:

  • Renderer: Fixed pink screen on unsupported older GPUs
  • Renderer: Drastically reduced the need for buffer switching by combining vertex arrays (perf+)
  • Renderer: PLT are now constructed on the GPU (perf+)
  • Renderer: Combined all post-processing shaders into single unit (perf+)
  • Renderer: Custom shader parameters are now properly relinked when another shader is loaded (consistency)
  • Renderer: Shadows are now rendered entirely via VBO (perf+)
  • Renderer: Early-Z optimisation reenabled via ifdef guard in shaders (perf+)
  • Renderer: TSB are now calculated for legacy compiled models at runtime as well (consistency/compat)
  • Renderer: Fixed GL CubeMap load order (compat)
  • Renderer: Fixed env maps for PC models not updating between areas. Now allows “default” map in txi files, handling missing maps better (consistency)
  • Renderer: Fixed gamma functions erroneously checking all colour channels, instead of any (consistency)
  • Renderer: Fixed disabling tile light source with TILE_SOURCE_LIGHT_COLOR_BLACK not actually removing the light
  • Renderer: Completely disabled texture downsampling for non-compressed textures
  • Renderer: Fixed crash when releasing PLT
  • Renderer: Added some crash safeguards for broken models
  • Renderer: Adaptive soft particle based on size, should fix missing/faded monk eyes
  • Renderer: Explicitly set PLT alpha mean values to fix issues with custom content such as robes not showing properly
  • Renderer: Simple shadow perf optimisation
  • Renderer: Fix setting ambient material for grass
  • Renderer: Fix skinmesh bodyparts not rendering
  • Renderer: Fix the renderaabb command not working
  • Fixed a crash when downsizing internal data structures


[h2]Pathfinding[/h2]

  • Pathfinding: Static object removal now properly removes objects from the internal object list. This fixes cases where a lot of static objects (such as body bags) added and removed over hours, would bog down gameplay
  • Pathfinding: Fix creatures not correctly moving towards a interactible object in certain marginal situations. Better handling of requested distance when moving towards an object
  • Pathfinding: Abort attempts at pathing early if the target destination isn’t achievable anyways (perf+)


[h2]Game[/h2]

  • Game: Default weapon feats for gloves and bracers now properly set if 2da entry is missing #317
  • Game: Recommended button in chargen/levelup can now be disabled via ruleset.2da entry
  • Game: Fixed hit dice validation for RDD
  • Game: Fixed creature gobs sometimes erroneously generating really large wind values #320


[h2]Premium Modules[/h2]

We cleaned up the data set for the Tyrants of the Moonsea premium module. All content that is also part of the basegame has been removed from the DLC download.

In addition, the following fixes went in:

[h3]Tyrants of the Moonsea[/h3]

  • Camera position no longer resets to top-down when exiting the world map
  • Some tile appearances were incorrect when "facelift" mode was active
  • The Kur-Tharsu main gate was difficult to attack
  • A spider on the Shind Road East spawned in the wrong spot
  • Removed a minor XP exploit in Thalia's conversation


[h3]Darkness over Daggerford[/h3]

  • Camera position no longer resets to top-down when exiting the world map


[h2]Other Fixes[/h2]

  • UI/Nuklear: Fixed a crash that would occur when swapping child layouts (“clicking around a lot”)
  • Game: OnPlayerTarget now actually persisted to savegames
  • Toolset: Fixed not rendering bounding boxes

Patch 8193.23 Launches for Neverwinter Nights: Enhanced Edition

Greetings friends!

We’re launching a new patch for Neverwinter Nights: Enhanced Edition with some of the biggest feature sets yet! Today’s update brings a new game launcher with featured community content, performance improvements, plus hundreds of fixes.

Check out full details on Patch 8193.23 below...

[h2]Patch Highlights[/h2]

New Game Launcher | A new game launcher highlights some amazing community content that’s free for everyone!
New Portraits | Added three new character portraits (sourced from the community portrait contest)
TrueType Font | Added full TrueType font (TTF) support throughout the game, for clearer and more adaptive text (as well as fractional/decimal point UI scaling)
Pathfinding Improvements | Smoother movement and navigation
Performance Improvements | Enjoy smoother gameplay with significant performance improvements
Bug Fixes | Hundreds of bug fixes and polish features added
New Scripts | Added dozens of new script commands for use in custom servers, including improved scaling and transformation (lerping)
Water Graphics | Added realistic water reflections and refractions

[h2]New Game Launcher with Community Highlights[/h2]

This patch ships with a new (singleplayer) game launcher. It showcases all campaigns and premium modules with header images, descriptions, screenshots, and more.

We’ve also added a repository of community content, hosted by Beamdog. This gives all players easier access to some amazing (and free) community adventures. For example, we are honoured to offer both the full Aielund Saga by Savant, and the Auren Saga (Almraiven / Shadewood) by Fester Pot. Now all you need to do to play them is click Download (...and wait a bit).


[h3]Aielund Saga[/h3]
By Savant

Embark on a journey through the Kingdom of Aielund, a realm weakened by war and beset by enemies from without and within. Defend the people of Aielund against monsters from mythology, and ones that clothe themselves in a more human form. Uncover evidence of foul play, delve into the deepest caves, travel the breadth of the land and even the planes of reality. Secure the kingdom from foes more powerful than you can imagine, while you rise from simple mercenaries into the mightiest of heroic legends.
[h3]Auren Saga[/h3]
By PJH

The Auren Society of Weavers draw their power from a Weave that spans into the Land of the Dead. It allows such members to grasp a better understanding of the spirits that roam that realm and use it to their advantage. It is this very Weave one will use to scour murderous scenes and unravel the mysterious deaths that surround the region of Calimshan.
[h2]TrueType Fonts and UI scaling[/h2]

The game now supports TrueType fonts (and fractional/decimal point UI scaling). This means when you adjust the User Interface the text scales much more clearly for readability.

Note: Currently, fonts cannot be overridden by custom content, but we are looking at options for a future release.


[h2]Water Visuals[/h2]
We’ve added brand new water visuals! Water now has realistic reflections and refractions to make your adventures more beautiful.


[h2]Art Changes[/h2]
  • Added three contest winner portraits to base game (Aragnosh: human male, Seafaref: half-elf female, Seafarem: half-elf male)
  • Fixed torch model flicker
  • Fixed forest facelift tileset (ttf02) referring to missing envmap, resulting in transparent metal textures

[h2]Pathfinding Improvements[/h2]

We have been carefully making some changes to pathfinding to improve efficiency and reliability. Here are some of the technical details of the changes:
  • Pathfinding on Windows, macOS and Linux no longer uses simplified pathfinding at certain distances.
  • Fixed inaccurate calculation of grid step tolerance when using grid pathfinding.
  • Fixed potential endless loops with ActionMoveAwayFromLocation.
  • Fixed inconsistencies between when to use Z when comparing distances, which would result in certain actions failing when they shouldn't
  • Added lacking safety checks which was causing pathfinding to floor performance if trying to interact with a door that was unreachable
  • Server settings: Removed experimental enhanced pathfinding toggle (now always on).
  • Fixed some minor errors related to collision resulting in imprecisions
  • Fixed interacting with objects when Z-offset was implied (e.g. stairs). This should alleviate some troubles where having to manually force the PC near the object before it would interact
  • Fixed a case where creatures failed to pathfind to a near point in a straight line

[h2]New Scripting[/h2]
[h3]Visual Object Transform Lerping[/h3]

Script commands can now transform objects smoothly over time.

All existing visual transform types (translate, rotate, scale) can be applied this way, and there is a built in selection of algorithms available.


[h3]New Script Commands[/h3]

This release adds a set of new script commands:

// Returns the currently executing event (EVENT_SCRIPT_*) or 0 if not determinable.
// Note: Will return 0 in DelayCommand/AssignCommand. ExecuteScript(Chunk) will inherit their event ID from their parent event.
int GetCurrentlyRunningEvent();
// Get the integer parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 8.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or 0 on error/when not set.
int GetEffectInteger(effect eEffect, int nIndex);
// Get the float parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 4.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or 0.0f on error/when not set.
float GetEffectFloat(effect eEffect, int nIndex);
// Get the string parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 6.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or "" on error/when not set.
string GetEffectString(effect eEffect, int nIndex);
// Get the object parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 4.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or OBJECT_INVALID on error/when not set.
object GetEffectObject(effect eEffect, int nIndex);
// Get the vector parameter of eEffect at nIndex.
// * nIndex bounds: 0 >= nIndex < 2.
// * Some experimentation will be needed to find the right index for the value you wish to determine.
// Returns: the value or {0.0f, 0.0f, 0.0f} on error/when not set.
vector GetEffectVector(effect eEffect, int nIndex);
// Check if nBaseItemType fits in oTarget's inventory.
// Note: Does not check inside any container items possessed by oTarget.
// * nBaseItemType: a BASE_ITEM_* constant.
// * oTarget: a valid creature, placeable or item.
// Returns: TRUE if the baseitem type fits, FALSE if not or on error.
int GetBaseItemFitsInInventory(int nBaseItemType, object oTarget);
// Get oObject's local cassowary variable reference sVarName
// * Return value on error: empty solver
// * NB: cassowary types are references, same as objects.
// Unlike scalars such as int and string, solver references share the same data.
// Modifications made to one reference are reflected on others.
cassowary GetLocalCassowary(object oObject, string sVarName);
// Set a reference to the given solver on oObject.
// * NB: cassowary types are references, same as objects.
// Unlike scalars such as int and string, solver references share the same data.
// Modifications made to one reference are reflected on others.
void SetLocalCassowary(object oObject, string sVarName, cassowary cSolver);
// Delete local solver reference.
// * NB: cassowary types are references, same as objects.
// Unlike scalars such as int and string, solver references share the same data.
// Modifications made to one reference are reflected on others.
void DeleteLocalCassowary(object oObject, string sVarName);
// Clear out this solver, removing all state, constraints and suggestions.
// This is provided as a convenience if you wish to reuse a cassowary variable.
// It is not necessary to call this for solvers you simply want to let go out of scope.
void CassowaryReset(cassowary cSolver);
// Add a constraint to the system.
// * The constraint needs to be a valid comparison equation, one of: >=, ==, // * This implementation is a linear constraint solver.
// * You cannot multiply or divide variables and expressions with each other.
// Doing so will result in a error when attempting to add the constraint.
// (You can, of course, multiply or divide by constants).
// * fStrength must be >= CASSOWARY_STRENGTH_WEAK && // * Any referenced variables can be retrieved with CassowaryGetValue().
// * Returns "" on success, or the parser/constraint system error message.
string CassowaryConstrain(cassowary cSolver, string sConstraint, float fStrength = CASSOWARY_STRENGTH_REQUIRED);
// Suggest a value to the solver.
// * Edit variables are soft constraints and exist as an optimisation for complex systems.
// You can do the same with Constrain("v == 5", CASSOWARY_STRENGTH_xxx); but edit variables
// allow you to suggest values without having to rebuild the solver.
// * fStrength must be >= CASSOWARY_STRENGTH_WEAK && < CASSOWARY_STRENGTH_REQUIRED
// Suggested values cannot be required, as suggesting a value must not invalidate the solver.
void CassowarySuggestValue(cassowary cSolver, string sVarName, float fValue, float fStrength = CASSOWARY_STRENGTH_STRONG);
// Get the value for the given variable, or 0.0 on error.
float CassowaryGetValue(cassowary cSolver, string sVarName);
// Gets a printable debug state of the given solver, which may help you debug
// complex systems.
string CassowaryDebug(cassowary cSolver);
// Overrides a given strref to always return sValue instead of what is in the TLK file.
// Setting sValue to "" will delete the override
void SetTlkOverride(int nStrRef, string sValue="");
// Constructs a custom itemproperty given all the parameters explicitly.
// This function can be used in place of all the other ItemPropertyXxx constructors
// Use GetItemProperty{Type,SubType,CostTableValue,Param1Value} to see the values for a given itemproperty.
itemproperty ItemPropertyCustom(int nType, int nSubType=-1, int nCostTableValue=-1, int nParam1Value=-1);
[h3]NWScript Debugger[/h3]

We’ve revived the script debugger with several improvements:
  • Added back script debugger binary into bin/win32/.
  • Added configuration keys to UI.
  • Fixed incorrect address parsing resulting in it not connecting. Also fixes setting debugger addresses other than localhost.
  • Fixed heap overflow parsing NDB files resulting in crashes.
  • Now renders all internal fields of CGameEffect.
  • Now renders all internal state of CScriptEvent.
  • Now renders cswysolver and sqlquery types instead of crashing in pitiful confusion.
  • Will no longer attempt to launch from within nwmain, you now need to run the binary by hand. On the plus side, it should now work on Linux and Mac (via wine/wine32to64).

[h2]Other Feature Changes[/h2]

In addition to the major features listed above, we’ve added dozens of minor polish features to improve the game:
  • GUI/NUI: Implemented floating point UI scaling.
  • UI: Allow exceeding safe UI scale if needed for accessibility reasons. There is a toggle under Config->UI->Accessibility->Advanced.
  • GUI/NUI: Implemented TTF font rendering.
  • Input: Added new manual config key game.language.codepage that can be used to force a different codepage (e.g. cp1251 for cyrillic). Together with a TTF override, this should allow modding in compatibility for russian language overrides.
  • NUI: Implemented 9-slice gui skinning.
  • NUI: Now using a cassowary constraint solver system to layout widgets
  • Floating damage numbers are now colourised based on the damage type taken.
  • Add config toggle that allows showing damage numbers as totals or split
  • NUI: Redesigned the Options UI.
  • NUI: Redesigned the NWSync Storage Management UI. (Now called Storage in the menu, and also accessible via the new game launcher).
  • NUI: Fixed up some other UI panels to layout properly even when scaled.
  • NUI: Added a panel to show Open Source Licences to config UI.
  • NUI: Made sound effects more immersive/in line with base UI usage (different click noises depending on widget).
  • GUI: Added a windowed/fullscreen/borderless dropdown to the Config UI and fixed the mode sometimes not initialising correctly.
  • Async loading of files and images via http streaming. (Backend system work)
  • ResMan: Movies can now be stored and played from override, ERF (hak, mod) and NWSync.
  • SQLite: Added a configurable busy timeout, so that just externally running something on a campaign/nwsync database doesn’t immediately abort queries running in the game. (3s default)
  • SQLite: Added builtin functions for NWCompressedBuf compression, base64 de/encode, and hashing. See SQLITE_Readme.md in data.
  • NWSync: Client now downloads wbm movie files if part of the manifest.
  • HTTP: Added a disk caching service to avoid repeated requests; added alias CACHE: (USERDIR/cache) by default. Configurable in settings, default max size is 100MB.
  • Base: Game windowed size is now 1024x768 by default, because some UI just got too big.
  • Base: TLK files now have a local cache, improving repeated lookup performance.
  • Base: API cleanup for NWNX support
  • Server: Removed some superfluous service updates (very minor perf).
  • Renderer: Tweaks to palettes for PLTs to prevent metallic looks. Tweaks to PLTs for armour to prevent alpha dithering. Check out the comparison here
  • Renderer: Added unique shader for particles, with soft particle rendering and enabled particle blending with fog. Check out soft particle shader here and fog rendering here
  • Renderer: Improved colour overflow for transparent objects. Check out the comparison here
  • Renderer: Implemented proper OpenGL buffer orphaning
  • Renderer: Unified and simplified the shader setup, allowing the default vs/fslit_nm/sm shaders to be used for all standard PBR setups
  • Renderer: Made displacement offset a uniform that can be passed from materials to set a base level. To use it, add parameter float DisplacementOffset in a material. By default, the shaders assume the base (zero) level of the heightmap is 1 (white), so if base level is 0.6, the value needs to be -0.4, etc
  • Renderer: Made alpha level adhere to Fresnel effects at high shader quality.
  • Renderer/Debug UI: Added a dropdown to select various rendering modes helpful for debugging (Material modes, Lighting channels, ..)
  • Renderer: Improvements to FBO, grant all shaders access to color and depth buffer textures
  • Renderer: Quickbar icons can now reload via SetTextureOverride.
  • Renderer: Fixed broken normal and tangent generation for skinmeshes due to invalidated render hints. Improved shader picking based on tangets/handedness.
  • Renderer: Shader compilation errors are now printed to the game log file.
  • Renderer: Separated out area wide lighting from area point lights. (Small perf improvement)
  • Renderer/OVT: WALKDIST and RUNDIST now scales properly with visual transforms for you, in order to keep footsteps in sync
  • Renderer: Added material files for icy tileset so that ice no longer appears metallic
  • Renderer: Added material files for male and female old human heads so their hair no longer appears metallic

[h2]Fixes[/h2]

In addition to feature changes, this patch release also contains a sizeable selection of bug fixes:
  • Fixed main menu music not playing when intro movies are skipped.
  • Renderer: Fixed a bad hashing algo for PLT textures resulting in excessive cache misses.
  • Renderer: Fixed incorrectly initialised null textures in some cases, resulting in incorrect textures and unnecessary texture binds.
  • Renderer: Removed redundant skinmesh bone remapping. Slight performance improvement, especially for models with many nodes.
  • Renderer: Made texture management more efficient, streamline for future changes to PBR.
  • Renderer/ResMan: Disabled the async model loader. Addresses the bodyparts missing issue. #145
  • Renderer: Maximum number of bones of a single skinmesh is now 64, to match mobile. This should fix the case where the game runs with 1-2fps on some GPUs.
  • Renderer: Fixed crashes due to NULL textures.
  • Renderer: Fixed crashing due to broken skinmesh models.
  • Renderer: Regression: Fixed compiled light models having issues due to memory misalignment/struct packing.
  • Renderer: Fixed an issue that would potentially cause scenes using custom shaders to malfunction in the event that a user changes video options in game.
  • Renderer: Fix text input caret pulsing when paused. Fix caret colouring following text in some situations
  • Renderer: Safeguard against crashes when an animation was missing
  • Renderer: Optimised animesh buffer uploading; reduce time spent on GUI rendering.
  • Renderer: Make the `decal` property actually disable lighting, rather than just self-illuminating brightly. Fixed some GUI scenes by adding decal to txis.
  • Renderer: Fixed issue with darkness and similar negative light effects always being pushed to the end of the light priority list.
  • Renderer: Fixed tile lights being added to the BSP before having their radii set (causing minor imprecisions)
  • Renderer: Fixed an issue with setting custom shaders when objects were using just one material for all parts while having more than one part
  • Renderer: Fixed a minor regression with the high contrast shader
  • Renderer: Removed a good chunk of dead/redundant code
  • Nuklear: Fixed a memleak that would degrade long play sessions
  • VM: Fixed crash when calling DestroyArea() on a invalid object.
  • VM: Stopped ExecuteScriptChunk from writing “!chunk.ndb” to override.
  • VM: sqlite commands: Added missing newline in log output.
  • VM: Fixed issue in string handling (also: VM: SubString()) that would have resulted in memory leaks or crashes.
  • Game: Don’t use weapon AB for ranged touch attacks anymore.
  • Fixes to passive attack target selection. This should address Cleave etc. sometimes failing to find a followup target. #172
  • Game: Effect Miss Chance/Blind Fighting: Fix erroneous re-roll against target concealment, fix effect being ignored against blind fighting. #15
  • Game: Fixed error in levelup validation related to SkillpointModifierAbility being starred out #180
  • Game: Fixed ResistSpell() when called from AOE spell scripts.
  • Game: Fixed classstat modifiers applying incorrectly to polymorph. #185
  • Fixed the DM flag being set incorrectly on player characters when copying files around. #216
  • Fixed a rare crash in game object update netcode when writing out the party state of a player that just exited
  • Fixed a loop wraparound overflow game hang/crash when removing effect icons
  • Game: Fixed a crash when the game tried to write a log entry as it was shutting down
  • Emitters: fixed them not interpolating if not both size_y start and end were set (correct behaviour is to do if either is non-zero)
  • Game: Never allow the window size to shrink below (100, 100). This works around the case where the window was too small to spot or resize back up
  • Fixed a crash when clicking the Recommended button on chargen package selection with no packages available
  • Fixed a string type conversion error resulting in some empty strings in UI
  • http: Made http errors more verbose. Verbosity is Friend
  • Fixed nwsync-enabled savegames not loading due to missing TLK error
  • Input: Character input is now correctly converted from the language charset. This should address broken polish text input
  • NUI: Fixed codepage glyphs cutting text off due to incorrectly-set codepage.
  • NUI: Fix window flickering from (0,0) to center pos on first frame after opening.
  • NUI: Fix window sometimes scaling down to (0,0).
  • NUI: Pressing Escape now closes the currently focused window.
  • NUI: Fixed UI not properly hiding when pressing Alt-F4/X to close the game.
  • NUI Skinning: Made font white in all widgets, instead of grey.
  • NUI Skinning: Skinned text input box.
  • NUI Skinning: Title bars now look like native windows.
  • NUI Skinning: Close/Minimise buttons match native style.
  • NUI Skinning: Fixed combo box style.
  • NUI Skinning: Window and group borders are now rendered 9-sliced.
  • NUI Skinning: Fixed scrollbars not aligning properly.
  • NUI: Fixed windows not properly auto-centering when ui-scaled.
  • NUI: Fixed line fitting code to no longer repeat words when word-wrapping; improved performance to only do line flowing once.
  • NUI/GUI: Fixed TTF font rendering for Polish. #191 #235
  • GUI: Fixed input caret; now back with extra cyan and more blinkage.
  • GUI: Fixed password input box not accepting your passwords, no matter how good they were.
  • Movie player: Optimised so it doesn’t create the movie texture as often.
  • Toolset: Fixed floating point drifting for X/YOrientation
  • Toolset: Now reads DEVELOPMENT: (but it might not live-reload the same as the game would).
  • Toolset: Fixed some backgrounds not filling the full icon pane. #240
  • Linux: Fixed exclusive(fullscreen) and borderless window modes.
  • ResMan: Fixed crash that could happen when exiting the game, especially seen after failing to load a savegame.
  • Renderer: Restore the check for bumpshinytexture, fixing regression where meshes appeared transparent or invisible #298
  • Renderer: Fixed static lights not updating properly. #290
  • Config UI: Don’t show horizontal scrollbar when UI scaled.
  • VM: Fixed SetColor() not updating in some cases (such as heads/hair)
  • Savegames: When loading a savegame with a missing manifest, attempt to load the newest manifest of the same UUID instead (upgrade path for New Game UI modules). Emit a message to the client log indicating such - no UI support for showing this yet.


[h3]Known Issues[/h3]
Steam Workshop | Modules in the Steam Workshop do not show in the game launcher

Development Build 8193.23

Greetings, dear community!

This patch release contains another set of small bug fixes and improvements that will hopefully see us shipping this to the stable branch really soon.

Thank you for reporting any issues you find! Your help will catch all the corner cases with multiplayer and custom content we cannot test for.

Fixes
  • Renderer: Minor tweaks to water shader parameters to make it look more natural.
  • Pathfinding: Fixed a case where creatures failed to path to a near point in a straight line.
  • New Game Launcher: Show author line on campaign tabs.
  • New Game Launcher: Show advisory about potential savegame/manifest mismatch issues when downloading new versions.
  • New Game Launcher: Allow selecting campaign tabs when a module in the same campaign is selected.
  • Fix adding custom repositories.
  • New Game Launcher: Added a small spacer between campaigns and modules in custom content repos.
  • New Game Launcher: Empty bottom bar on the Official content tab is now hidden.
  • New Game Launcher: Campaigns are now deselected when selecting a non-campaign module on the same pane that have both.
  • Savegames: When loading a savegame with a missing manifest, attempt to load the newest manifest of the same UUID instead (upgrade path for New Game UI modules). Emit a message to the client log indicating such - no UI support for showing this yet.
  • NWSync: Client now downloads wbm movie files if part of the manifest.
  • Pathfinding: Addressed regression where NPCs fail to open doors. #285
  • Pathfinding: Fixed interacting with objects when Z-offset was implied (e.g. stairs). This should alleviate some troubles where having to manually force the PC near the object before it would interact.
  • UI: Allow exceeding safe UI scale if needed for accessibility reasons. There is a toggle under Config->UI->Accessibility->Advanced.
  • UI: Now clamp lower bound of UI scale to 1.0.
  • UI: horizontal window constraint is now 900 instead of 960 before requiring scaling.
  • Nui: Fixed more panels erroneously showing a horizontal scrollbar when scaled.


Art
  • Art: Shifted collision box for tcn_udoor_01 #313