Patch Version1.89.8193.37
Patch release date (PC)

Development/beta - 1/10/2024

Final - 9/1/2025

Hotfix - 11/1/2025

Patch release date (Others)
Patch release notes

https://nwn.beamdog.net/docs/

Summary

Hello again Neverwinter Nights players!

This release was developed for personal enjoyment and out of goodwill for our fellow players and creators by unpaid software engineers from the NWN community:

- clippy, Daz, Jasperre, niv, shadguy, Soren, tinygiant, virusman

With thanks to:

  • Cormyr Dalelands players and staff for testing this build and providing invaluable feedback.
  • Thomas Dubier at Synacktiv for vulnerability reports.
  • All NWN authors and players keeping this game alive. <3


You are cordially invited to join the NWN community developer Discord, here: https://nwn.beamdog.net/discord/

Key Features

  • Multisample anti-aliasing and anisotropic filtering now built in
  • Tracy profiler with an extensive collection of instrumentation points now compiled in and available to all players and server admins
  • Many new NWScript functions
  • New logging framework
  • Major networking code improvements
  • Major performance improvements
  • Script compiler improvements from the open-source release
  • Toolset quality of life improvements


Tracy documentation can be found here: https://nwn.wiki/display/NWN1/Tracy

See https://nwn.beamdog.net/docs/ for the full list of over 100 changes.

Patch Notes

[89.8193.37-14] - 2025-01-11

Fixed

  • Fixed relays not working.
  • Fixed the game asking you for your player name twice when not saving it to settings.tml.
  • Fixed Steam not able to set the game language from outside the engine.

[89.8193.37-13] - 2025-01-07

Appreciation

This release was developed for personal enjoyment and out of goodwill for our fellow players and creators by unpaid software engineers from the NWN community:

  • clippy, Daz, Jasperre, niv, shadguy, Soren, tinygiant, virusman

With thanks to:

  • Cormyr Dalelands players and staff for testing this build and providing invaluable feedback.
  • Thomas Dubier at Synacktiv for vulnerability reports.
  • All NWN authors and players keeping this game alive. <3

Join us on Discord: http://nwn.beamdog.net/discord

Key Features

  • Multisample anti-aliasing and anisotropic filtering now built in.
  • Tracy profiler with extensive collection of instrumentation points now compiled in and available to all players and server admins.
  • Many new NWScript functions.
  • New logging framework.
  • Major networking code improvements.
  • Major performance improvements.
  • Script compiler improvements from the open source release.
  • Toolset quality of life improvements.

Added

  • Added new config options for anisotropic texture filtering and multisample anti-aliasing.
  • The game now ships with the Tracy profiler. Binaries are available in bin/. Requires explicit enablement in game options.
  • Logging has been redone: All engine logs now go into nwenginelog.txt, with a new and improved format.
    • All privacy-sensitive logs still go into nwclient/serverlog.txt; including script and chat logs in order to not break existing log parsers.
  • Toolset: Updated the Creature Level Up Wizard, Creature Wizard, and Creature Editor to support editing creatures with up to 8 classes.
  • Toolset: Added version info to the main window banner.
  • Toolset: Added label column fallback to placeabletypes.2da for rows where the strref is left out.
  • Toolset now displays a menu option and shortcut key (F3) for the Find Next command when right clicking a Palette.
  • Toolset now displays the shortcut key (Ctrl-F) for the Find command when right clicking a Palette.
  • Toolset: added Label column fallback for strref column in soundset.2da.
  • scriptcomp: Added support for constant folding of unary operators -, ! and ~.
  • scriptcomp: Added support for __FUNCTION__, __FILE__,__LINE__, __DATE__ and __TIME__.
  • scriptcomp: The compiler now prints additional info on error messages.
  • scriptcomp: Added support for hashed string literals, h"..." and H"...".
  • Added ENCOUNTERS_ON_ENTER_FIRE_BEFORE_SPAWN to ruleset.2da.
  • New savingthrowtypes.2da, and new column in iprp_saveelement.2da to allow saving throw types additions and changes.
  • Added pre-existing SAVING_THROW_TYPE_PARALYSIS to nwscript.nss.
  • Added MONK_SPELL_RESISTANCE_CAN_BE_LOWERED to ruleset.2da.
  • Added EMOTE_ANIMATIONS_USE_MDL_TIMINGS to ruleset.2da.
    • This allows longer custom emote animations and use of ReplaceObjectAnimation to not be cut off if longer than default animation times.
    • It will not affect PlayAnimation, conversation animations, Sit or Mediate.
  • VM: Added SpellResistanceCheck(), SpellImmunityCheck(), SpellAbsorptionLimitedCheck() and SpellAbsorptionUnlimitedCheck().
  • VM: EffectPolymorph() can now have a customised polymorph removal VFX and can set an ability modifier and caster level for the 3 polymorph spells cast from it.
  • VM: Player network latency ("ping") is now tracked and can be queried with the new script call GetPlayerNetworkLatency().
  • VM: EnterTargetingMode() can now be cancelled.
  • VM: Added oAttacker parameter to TouchAttackRanged().
  • VM: Added oAttacker parameter to TouchAttackMelee().
  • VM: Added oObject parameter to SetFacingPoint().
  • VM: Added oObject parameter to SetFacing().
  • VM: Added oFrom parameter to GetDistanceToObject().
  • VM: Added oObject parameter to ClearAllActions().
  • VM: Added parameter to EffectSpellFailure(), specifying the type of spell failure to use (allowing Arcane Spell Failure as an effect).
  • VM: Added GetBodyBag() and SetBodyBag().
  • VM: Added unique identifier for the source of EFFECT_TYPE_ABILITY_DECREASE retrievable with GetEffectInteger(e, 2)
  • VM: Added oObject parameter to GetLastOpenedBy().
  • VM: Added oObject parameter to GetLastClosedBy().
  • VM: Added oObject parameter to GetLastLocked().
  • VM: Added oObject parameter to GetLastUnlocked().
  • VM: Added oObject parameter to GetLastDisturbed().
  • VM: Added oObject parameter to GetInventoryDisturbItem().
  • VM: Added oObject parameter to GetInventoryDisturbType().
  • VM: Added nSlotsToReady to ReadySpellLevel().
  • VM: EffectSummonCreature() can now have arbitrary creatures added, and the unsummon VFX be changed or removed.
  • VM: Added GetIsDestroyable(), GetIsRaiseable() and GetIsSelectableWhenDead().
  • VM: Added SetIsDestroyable() oObject parameter to target a specific object.
  • VM: ActionOpenDoor() and ActionCloseDoor(): added bRun parameter.
  • NWSync prune grace period now available in config UI.
  • ContentIndex repository modules can now specify a minimum required game version.
  • Added config toggle to disable singleplayer auto-pause on window focus loss. (Windows only)
  • nui: added a "unknown-bind" event which the client sends when trying to set a bind it doesn't know about.
  • nui: Added a default (monospace) font to nui_skins.tml.
  • Added the JetBrains Mono font family plus their licence to game data.
  • Chargen/levelup panel: Now sorts classes alphabetically (with available classes first). This can be disabled in the options.
  • Game now shows server version in char select UI.
  • Exposed new bounding box shader uniforms (vec3 bboxMin/bboxMax) to give access to local bounds of a given rendered mesh.

Changed

  • Crash reports are now written to directory "crashreports" in the user directory in a new unified file format.
  • The game now has a new keytable, nwn_retail.key (+ various bif), with the contents of the ovr/ directory.
    • The nwscript.nss file still present in ovr/ is just for human reference, and not read by the game.
  • Attempting to walk will now click through the player object hitbox by default (config key available to revert behaviour).
  • Mouse cursors can now be set as small as 0.5 scale.
  • Chatbar sizes are now only saved on end of mouse drag. This reduces the amount of network updates sent to the server.
  • Loading screen hint messages are now yellow instead of green.
  • BIC gff validator no longer prints a pointless log message every time a file successfully validates.
  • Modules are no longer limited to 100 in-use tilesets.
  • Improved the AV warn message.
  • Reverted movement teleport fix because it was resulting in jerky WASD movement for some players.
  • Toolset: Increased the Creature Editor Properties GUI size to improve usability of the Spells tab.
  • Toolset now displays the model part ID in addition to the toolset ordered ID for easier part identification.
  • Toolset now sorts Creature->Appearance->Tail alphabetically.
  • Toolset now sorts Creature->Appearance->Wings alphabetically.
  • Toolset now sorts Area->Visual->Skybox alphabetically.
  • Toolset now sorts Door/Placeable->Advanced->Portraits->Category alphabetically.
  • Changed the first row of skyboxes.2da to preserve legacy toolset sort order showing "None" at the top of the skybox list.
  • Changed the first row of tailmodel.2da to preserve legacy toolset sort order showing "None" at the top of the tail list.
  • Changed the first row of wingmodel.2da to preserve legacy toolset sort order showing "None" at the top of the wings list.
  • VM: GetSpellFeatId() and GetSpellCastSpontaneously() now work in Area of Effect scripts.
  • VM: Added documentation to Object<>Json script functions to explain lack of ABI stability guarantees.
  • Server: No-client power saving can now be turned off entirely by setting the config key to 0.
  • The new limit for NWScript instructions per script runtime is 1024k, up from 128k.
  • NWScript debug widget now defaults to (monospace) font.
  • MacOS build now requires version 10.15 or later.
  • Sound object templates can now be serialized to json with TemplateToJson().
  • Sound objects can now be serialized to json with ObjectToJson().
  • Sound objects can now be created with JsonToObject() and will update the client.
  • Sound objects can now be destroyed with DestroyObject().
  • NuiSlider() and NuiSliderFloat() will now react to click and drag interaction anywhere on the widget.
  • NWSync: Legacy code cleanup surrounding database handling.
  • NWSync: Downloader UI on Community tab will automatically close on completion.
  • NWSync: Housekeeping no longer runs after each download. A button was added to the Storage UI to run it manually to reclaim storage space.
  • NWSync: Improved performance when storing a downloaded manifest.
  • NWSync: Will only write to the primary/first storage shard. Older storage shards are still read.
  • Network code improvements (70+ changes):
    • Improved de/compression behaviour.
    • Added server/client messaging debug logging.
    • Network code hardening.
    • Network and HTTP logging improvements.
    • Masterserver DNS resolver has been improved.
    • Fixed gameserver sometimes not sending the heartbeat consistently.
    • All remaining IPX support was removed, sorry!
  • Setting the env var NWN_ENABLE_DEBUG_SPEW turns on logging on stderr on dedicated nwserver.
  • Optimised masterserver resolver behaviour.
  • GOA was hardened against memory issues.
  • effecticons.2da can be used past line 255. Note: Older clients will simply not be sent icons past line 255.
  • MP UI now requires entering a player name before admitting to menu.
  • Network connections are now kept around slightly longer (120, up from 30) before being pruned.
  • nwserver now blocks on startup until the masterserver is either resolved or timed out.
  • Added missing platform MAC_ARM64 in nwscript.nss.
  • Updated sqlite3 to 3.45.3.
  • The experimental graphics setting "Dynamic Buffer Handling Mode" is now a single toggle and has been renamed to "Orphan Buffers Before Write".

Removed

  • Removed obsolete subnetprofiler config option and code.
  • The nwscript instruction limit configuration was removed. Please adjust all your scripts to check runtime with GetScriptInstructionsRemaining() if needed instead of advising people to just increase the value.
  • Game no longer writes a empty nwerror.log file.
  • Server heartbeat logging functionality (printing a dot every 10 seconds) has been purged.
  • The unused model errors config flag was removed. All model errors get written to the new log.
  • All remaining, nonfunctional texturepack (txpk/) code was stripped.
  • NWSync: Removed option of not compressing nwsync data, always use zstd.
  • NWSync: Removed all flush-related configuration and always use sane defaults.
  • NWSync: Removed dangling resref grace period config toggle.
  • NWSync: Removed auto delete config toggle.
  • Removed useless spam about UUIDs missing for locally installed modules.
  • Removed vestigial, dead serveradmin connection code.
  • Removed experimental settings "Disable Gui Lighting" and "Enhanced Light Managing" (they are now always enabled).

Fixed

  • VM: Updated GetCasterLevel and GetSpellId nwscript descriptions to reflect updated functionality.
  • Fixed SetShaderUniformVec()'s 4th float parameter clobbering the 3rd float parameter when saving as gff.
  • Spellcraft identification of spells now works on creatures you can hear.
  • Fixed trying to learn a scroll you already know making the scroll unusable.
  • Area of Effects that apply to creatures no longer get generated twice when loading a save game.
  • Area of Effect objects now store all data to save games.
  • VM: GetMetaMagicFeat, GetLastSpellCastClass, GetSpellCastSpontaneously and GetSpellFeatId are no longer set erroneously with bad data if the AOE was generated in a spell script when using an item.
  • Fixed .36 regression where chat bubbles were not appearing above NPCs heads.
  • Fix: Toolset will scale down oversized item icons to fit the final icon size.
  • Resolved shadows sometimes becoming corrupted when using dynamic area light functions (e.g. by using the nw_dynlight script).
  • Fixed compiler causing a stack overflow on some code when attempting to fold constants.
  • No longer auto-merges parts on model level (which would apply for models compiled by using the game executable).
  • Fixed a memleak related to shadow rendering.
  • Default return type for nui window binds that have not been set.
  • Fixed an ItempropertyCustom() regression.
  • Fixed Robe Icons > 255 not working.
  • Fixed client AoEs sometimes adding duplicate objects.
  • Fixed a bug where the client objects appear to be frozen in place until the game is restarted.
  • Fixed screen capture tools like OBS and Steam not being able to read the full framebuffer content.
  • Fixed a crash that happens after several loadscreens on some Linux systems.
  • Fixed some race conditions in network layer.
  • Fixed GetDamageDealtByType() crashing the game when called on an invalid object.
  • nw_inc_nui.nss now has toolset-compatible function comments and uses *Inplace json functions where appropriate.
  • Fixed radial for level 8 and 9 spells being missing when a class uses MemorizesSpells=0 with SpellbookRestricted=0 combination.
  • Toolset properly loads non-human PLT textures, instead of defaulting to human textures.
  • Popup bubbles over objects should not wrap in the middle of a word as often.
  • Fixed EffectSummonCreature default unsummon VFX.
  • Customised palette files (pal_XXXyy.tga) are now loaded from hakpacks and nwsync manifests per-module.
  • Fixed a client crash that could happen when spawning projectiles with no target.
  • Toolset: All valid file types are now saved into the .mod file when saving.
  • Old NWScript profiling support was removed. Use the NWScript Debug level to see individual execution timings, and for more comprensive analysis use Tracy instead.
  • Fixed a crash caused by static (unenhanced) lighting in certain tilesets.
  • scriptcomp: fixed Unidentified Identifier errors not displaying the identifier name.
  • Fixed a memory and performance degradation after longer play sessions on Linux+Mesa.
  • Fixed nui_skin.tml fonts not getting rebaked when in a hak.
  • Fixed an issue with VFX based light that made them fade in too slowly.
  • Fixed a crash when trying to write the last known cdkey for an empty player name.
  • Fixed incorrect encoding for strings in GetBacktrace(TRUE) crashing the game.
  • GetFirstInPersistentObject() now correctly errors when using any nPersistentZone value other than 0 on encounter objects.
  • Fixed creature examine window portraits only checking for M size textures.
  • Fixed corner case where database handles were left in a invalid state on error.
  • Fixed the PleaseCrash console command not writing a crash log on Windows.
  • NWSync: Housekeeping is no longer at the whim of the framelimiter.
  • Fixed custom monster perception ranges (eg setting to "Long") are now saved and loaded properly, and correctly serialised with CopyObject/SqlBindObject
  • Polymorph: The save DC for the 3 polymorph spell-like abilities is now set to 10 + Innate Spell Level + Ability Modifier (the ability to use is set in EffectPolymorph or defaulting to the class who used the polymorph ability/spell, falling back to class slot 0 if necessary).
  • Polymorph: The caster level of the 3 polymorph spell-like abilities is tied to the caster level of the polymorph effect by default, rather than being based on class slot 0 of the character.
  • Polymorph: Clientside Levelups are disabled while polymorphed, and serverside now correctly validates against pre-polymorph racial type and statistics in case of legacy clients (although with certain custom content this fallback may still be buggy).
  • Polymorph: bonus spell slots should no longer be lost or unreadied while polymorphed.
  • Polymorph: Dying while polymorphed now properly applies pre-polymorphed item effects such as ability bonuses.
  • Polymorph: Save games no longer re-apply temporary HP on each load of the game/re-entry into MP server.
  • Polymorph: Save games now save out the state of the creatures pre-polymorph making valid BICs in save game files.
  • Polymorph: Creature weapon proficiency is applied as a bonus feat effect not as an actual feat addition.
  • Polymorph: Polymorph applied items are saved to the BIC consistently on logout/save game and reused when polymorph is applied on load/login rather than fresh items being applied.
  • Polymorph: Loading a save game when polymorphed no longer causes extra OnPlayerEquip/Unequip events to fire (note: logging into an MP game still has odd events fire, excepting the OnPlayerUnEquip no longer fires for the players items when the polymorph effect loads, due to the order of BIC -> temporary user resource data).
  • Polymorph: The effect is no longer is removed and reapplied on BIC export meaning linked effects do not end and events for item equips do not fire unnecessarily on saving the game or exporting player BIC.
  • Polymorph: NATURALACBONUS is now actually a base natural AC change rather than a dodge AC effect, replacing NPCs base natural AC if present when polymorphed (PCs do not get any base natural AC so this is a slight buff).
  • Fixed LAN servers not receiving the correct NWSync advert, so they never offered a download.
  • Fixed rare case of local session enumeration inheriting the wrong nwsync data.
  • Fixed visual effect removal sometimes removing the wrong visual effect.
  • The game will now show an error messagebox when it detects the Windows generic graphics card driver, instead of crashing.
  • Fixed regression in progfx.2da:525 to be purple-black instead of green-black.
  • Fixed c_nulltail having some trimesh geometry allowing mouseover to erroneously highlight/select models above their head.
  • Fixed some music crashing the toolset when played.
  • Fixed a NUI crash when scrolling in a list or group.
  • Parts that can be "keyhole" dissolved are now correctly rendered in the same pass as transparent geometry.
  • Fixed UTF8 handling in NUI options and tabbar widgets.
  • Addressed incorrect CD key bumping behaviour on duplicate logins.
  • Framelimiter no longer limits movie playback.
  • Fixed NUI window states not being cleared when loading a save while in-game.
  • Fixed loading SoundSet column in polymorph.2da.
  • Fixed soundset.2da to only load lines clientside when there is a valid resref.
  • Fixed hen_companion and hen_familiar to need a valid Name and resref entry to show in chargen.
  • Spellcraft checks for identifying a spell being cast now properly apply spell school bonuses and penalties.
  • Fixed ActionCastSpell*() VM functions applying more metamagic then intended on Sorcerer-style casting classes when using METAMAGIC_ANY.
  • Fixed beams being removed immediately when a creature dies.
  • EffectSpellFailure is now defaults to being a magical subtype effect.
  • Fixed a crash when a disease incubation or 24 hour script killed the creature.
  • Polymorph: Fixed bonus spell slots being lost when using Shifter polymorph abilities.
  • EffectDamageImmunityIncrease / EffectDamageImmunityDecrease now correctly calculate the full immunity if applied when already at 100 / -100 immunity.
  • Fixed a rare crash when calculating inventory weight.
  • Swapped the capitalized and lowercase class name strrefs for the ooze class in classes.2da.
  • TLK: Fixed the German Y and Z axis labels (swapped) in the Toolset Adjust Location interface.
  • Toolset: The Standard Palette Tileset specific door list now updates properly when changing between different Area Tabs.
  • Toolset: The Standard Palette Tileset Specific door list now lists door names, rather than calling everything "Door".
  • Toolset: Fixed a reported regression vs 1.69 with the list of Tileset Specific doors in the standard palette wherein many extra "Door" listings were populated to the palette.
  • Toolset: Fixed handling of Standard Palette for Doors.
  • Addressed master query traffic incurring needless log spam.
  • Fixed application exit crash when using Enable/DisableCompass.
  • Fixed camera clip shader uniforms not always being properly updated, resulting in SSAO sometimes appearing beyond the fog cutoff distance.
  • Fixed trying to load a corrupt bic file crashing the server.
  • Fixed a crash when exiting nwserver due to it trying to unload tilesets too late.
  • Models with bad tangents will no longer emit a white glow when HDR bloom is enabled.

Security

  • Fixed some security issues in the network layer.

Performance Improvements

  • Speed improvements on some NWSync download operations.
  • Improved area loading times in multiplayer, after the initial load, by keeping the tileset in memory.
  • Baked static geometry position and orientation in to GPU vertex data.
  • Minor optimizations to internal math operations.
  • Network layer is now fully lockless.
  • Optimized ResRef handling.
  • Improved game startup time.
  • Minor improvement to renderer object sorting.
  • scriptcomp: Optimized the common for loop construct for (i = 0; i < N; ++i).
  • scriptcomp: Will optimize away dead branches when an if condition is a constant.
  • Minor performance improvements to local variable access.
  • Optimized string length calculations and handling.
  • nwsync: Some explicit index creation on shard databases improves startup and read performance.
  • Optimized checks for whether shader uniforms need refreshing.
  • Optimized the handling of rendering transformation updates.
  • Toolset now caches door related 2das.
  • NWSync dangling resref prune is now run async.
  • NWSync will now initialise on a side thread to speed startup.
  • NWSync download: Improve long hangs at end of download ("Reconciling").
  • No labels