Patch Version1.88.8193.36
Patch release date (PC)

Development/beta - 5/12/2023

Final - 15/2/2024

Hotfix - 25/2/2024

Patch release date (Others)
Patch release notes

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

Summary

Hello 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, Liareth, niv, shadguy, Soren, Squatting Monk, tinygiant, virusman

To our fellow community:

Thank you all for keeping this shared adventure alive.

Highlights

  • New HDR-bloom postprocessing effect accumulates overlapping effects more naturally and makes intense colors bleed into the surrounding pixels.
  • Improvements to the gameplay UI, such as toggling object highlight by double-pressing TAB.
  • Significant performance improvements across the board, both on servers and clients.
  • Many new and improved scripting functions, including support for synchronised audio playback and improvements to the scriptable UI.
  • Over a hundred bugfixes, including several notorious 20-year-old bugs, such as area objects sometimes showing up too late.
  • Script compiler is now open source and available as a standalone tool at https://github.com/niv/neverwinter.nim.


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

Patch Notes

[88.8193.36-12] - 2024-02-23

Fixed

  • 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 learning a stacked scroll making the remainder of the stack unusable.
  • Fixed a crash that happens after several loadscreens on some Linux systems.
  • Fixed the bug report message pointing at the wrong URL.
  • Fixed the MacOS binaries not containing the aarch64 build.
  • Fixed screen capture tools like OBS and Steam not being able to read the full framebuffer content.

Changed

  • Improved the AV warn message.
  • Reverted movement teleport fix because it was resulting in jerky WASD movement for some players.

[88.8193.36-11] - 2024-02-06

Credits

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, Liareth, niv, shadguy, Soren, Squatting Monk, tinygiant, virusman

To our fellow community:

Thank you all for keeping this shared adventure alive.

Highlights

  • New HDR-bloom postprocessing effect accumulates overlapping effects more naturally and makes intense colors bleed into the surrounding pixels.
  • Improvements to the gameplay UI, such as toggling object highlight by double-pressing TAB.
  • Significant performance improvements across the board, both on servers and clients.
  • Many new and improved scripting functions, including support for synchronised audio playback and improvements to the scriptable UI.
  • Over a hundred bugfixes, including several notorious 20-year-old bugs, such as area objects sometimes showing up too late.
  • Script compiler is now open source and available as a standalone tool at https://github.com/niv/neverwinter.nim.

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

Kindly report issues you find at https://github.com/Beamdog/nwn-issues by following the instructions provided there.

Added

  • Added HDR-bloom postprocessing effect.
  • You can now lock object highlighting by double-tapping TAB instead of holding it down permanently.
  • Added Debug UI panel to view Sound system details.
  • Added a set of console commands (perfstats*) to get performance data.
  • Added game setting for VSync, including support for adaptive VSync.
  • Added -noaliases CLI arg, which ignores aliases in nwn.ini and always uses the default values.
  • Added setting to tweak the minimum Z (height) offset used by keyholing.
  • Added support for custom damage visuals for ammunition.
  • Added support for loading/saving script sets in the Toolset Area Properties dialog.
  • Added a Direct Connect button directly in the Multiplayer menu.
  • Added nwscript support for raw string literals: r".." and R"..", which can also span multiple lines.
  • Added new GUI events: GUIEVENT_CHATLOG_PORTRAIT_CLICK and GUIEVENT_PLAYERLIST_PLAYER_TELL.
  • Added new cachedmodels.2da that lists all models that will always be kept loaded in memory. Use with care.
  • Loadscreen hints are now displayed in chatlog.
  • Mouse cursor scaling can optionally be set independent of the UI scale chosen (Game Options -> UI -> Mouse Cursor Scale Override).

30 New VM functions

  • SetEffectCreator(), SetEffectSpellId(), SetEffectCasterLevel()
  • SqlGetColumnCount(), SqlGetColumnName().
  • GetSpellAbilityCount(), GetSpellAbilitySpell(), GetSpellAbilityCasterLevel(), GetSpellAbilityReady(), SetSpellAbilityReady()
  • JsonObjectSetInplace(), JsonObjectDelInplace(), JsonArraySetInplace(), JsonArrayInsertInplace(), JsonArrayDelInplace()
  • SetAreaGrassOverride(), RemoveAreaGrassOverride(), SetAreaDefaultGrassDisabled()
  • SetAge(), JsonToTemplate()
  • GetAttacksPerRound(), EffectEnemyAttackBonus()
  • SetAreaTileBorderDisabled(), GetAreaNoRestFlag(), SetAreaNoRestFlag()
  • StartAudioStream(), StopAudioStream(), SetAudioStreamPaused(), SetAudioStreamVolume(), SeekAudioStream()

See nwscript.nss for documentation.

New NUI features

  • Added image_region property for image button widgets.
  • Added window title text coloring.
  • Added window size and edge constraints.
  • Added support for binding array data in draw lists (except inside list views).
  • Added support for _RECT type in draw lists.
  • Added text and number transformation parameter support to binds (e.g. render a int as hex).
  • Added support for custom fonts for whole windows, layout groups, and individual widgets.

New ruleset.2da entries

  • TURN_RESISTANCE_AFFECTS_PCS
  • SKILL_SET_TRAP_DURATION
  • SKILL_FLAG_TRAP_DURATION
  • SKILL_DISABLE_TRAP_DURATION
  • SKILL_RECOVER_TRAP_DURATION
  • SKILL_EXAMINE_TRAP_DURATION
  • SKILL_OPEN_LOCK_DURATION
  • SKILL_LOCK_DURATION
  • SKILL_HIDE_IN_PLAIN_SIGHT_COOLDOWN
  • SKILL_TAUNT_COOLDOWN
  • SKILL_PICKPOCKET_COOLDOWN
  • SKILL_ANIMAL_EMPATHY_COOLDOWN

Changed

Gameplay

  • Game now shows a descriptive error message, instead of crashing if file access is blocked (e.g. by antivirus software).
  • Object popup information will now update dynamically, for example when taking damage.
  • The game now allows logins from private network addresses (LAN only) even if the masterserver is currently unreachable.
  • NWSync will keep data marked for deletion, that has been written recently, a little while longer (default: 14 days).
  • Module buttons in the New Game browser now have the same height as Campaigns.

Graphics

  • Implemented use of OpenGL renderbuffers and framebuffer targets.
  • SSAO now runs at half resolution but with additional smoothing.
  • PLT-on-GPU generation now uses custom offscreen framebuffer target. This means the output texture size is no longer limited to screen resolution.
  • Mouse cursors can be any resolution, and scale at non-integer values.
  • Added validation of compiled models upon first load to fix invalid normals and tangents.

VM functions

  • GetHasFeat() now has bIgnoreUses parameter.
  • SetObjectTextBubbleOverride() now works for items in inventories.
  • ActionCastSpellAt{Object,Location}() now have nClass and bSpontaneousCast parameters.
  • ResManGetFileContents() can now return binary data in base64 or hex encoding.
  • TemplateToJson() and JsonToTemplate() now also support RESTYPEs: DLG, UTS, IFO, FAC, ITP, JRL, GUI, GFF.
  • SqlPrepareQueryObject() temporary databases are now entirely in-memory (:memory:).
  • FloatingText{String,StrRef}OnCreature() now have bChatWindow parameter.
  • GetLastSpellCastClass() now returns the AOE creator's class in AOE scripts.
  • EffectDamageResistance() and EffectDamageReduction() now have a bRangedOnly parameter.
  • GetEffectType() now has a bAllTypes parameter.
  • NuiCreate() and NuiCreateFromResRef() now have a sEventScript parameter.
  • GetItemPossessor() now has a bReturnBags parameter.
  • GetResRef() now works with encounter objects.
  • EffectDispelMagic() made consistent with new caster level calculations and will always utilize stored caster level of effects.
  • Area of Effect objects now consistently store and retrieve their caster level and spell ID.

See nwscript.nss for documentation.

Script Compiler

  • For loops can now take non-integer expressions in the first and third part of a loop statement. (e.g. floating point values now work).
  • Parser now understands floating point values such as 0f, .0 and .42f.
  • const declarations can now contain any constant expression (such as arithmetic), including previously defined consts.

Logging

  • Changed "Error:" messages in client log to clarify they are related to the sound subsystem.
  • Updated a log message regarding bad PWK use nodes to provide more explicit feedback.
  • Will print 2DA load failures to log instead of just crashing the game.
  • In case of module corruption, game will now print the relevant area resref to the log.
  • BIC gff validator no longer prints a pointless log message every time a file successfully validates.
  • Corrected crash dialog message URL.

Misc

  • nui_skin.tml can now specify an array of fonts, with their properties, to bake into the font atlas.
  • NUI can now load DDS images, which are only used if no other texture format of same name is found.
  • Caster level calculations are now made consistent across the engine including using the Caster Level Multiplier for spells.
  • You can no longer give gold to placeables that have no inventory enabled.
  • Updated Sqlite3 implementation to 3.42.0.

2DA changes

  • MemorizesSpells=0 with SpellbookRestricted=0 combination in classes.2da is now valid.
  • damagetypes.2da has a new DamageRangedProjectile column.
  • ammunitiontypes.2da has new AmmunitionType and DamageRangedProjectile columns.
  • packages.2da now allows values over 255.
  • vfx_persistent.2da now allows values over 255 for mobile AOEs.

Removed

  • Removed legacy code for reading pre-EE encrypted premium modules. All premium modules shipped with EE are in default MOD format and not affected by this change.
  • All rules-related internal checks on expansion pack availability have been removed from the game client and server.
  • All engine code for deprecated and nonfunctional multi-byte lang support has been removed.

Fixed

Crash Fixes

  • Fixed a server crash on area load due to bad GFF data.
  • Fixed a server crash due to a player having outdated automap data.
  • Fixed a server crash that could happen if a creature died during the EffectRunScript interval script.
  • Fixed a client crash related to models with no or corrupt faces.
  • Fixed a client crash when decoding some mp3 files.
  • Fixed a client crash caused by missing bone weights in model skinmeshes.
  • Fixed a client crash when enabling the PLT-on-GPU setting and loading PLT textures with an uneven number of texels per row.
  • Fixed a client crash when loading a module with a missing movie.
  • Fixed a client crash when using NUI scrollbars in a group with many elements.
  • Fixed a client crash that could happen when applying a gamma modifier to an image.
  • Fixed a client crash when loading a corrupt TGA file.
  • Fixed a client crash that could happen when exiting a module that used custom shaders.
  • Fixed a client crash that happened if server gave info about a baseitem client does not know about.
  • Fixed a client crash caused by bad custom content related to customized damage type 2das.
  • Fixed a rare client crash when trying to select a race and Human is not a playable race.
  • Fixed a rare client crash on game shutdown if music was still playing.
  • Fixed a rare client crash when trying to spawn a ranged projectile.
  • Fixed a very rare client crash when handling inventory items.

Gameplay

  • Fixed aura VFX not being rendered after an area change.
  • Fixed a race condition where a PC would teleport to the wrong part of the map after an area transition.
  • Fixed a race condition that could lead to objects being invisible for a client.
  • Fixed VFX on placeables not fading out when the placeable is destroyed.
  • Fixed an issue where special attacks that missed still caused damage to target's defensive effects.
  • Fixed issue where Entangle and other effects stopping movement sometimes left dexterity on 3.
  • Fixed stat gains that affect skill points not being validated correctly at levelup.
  • Fixed Effect Icons getting removed from the top bar if there are icons from permanent effects still in effect.
  • Fixed buffer stutter when resuming music playback.
  • Fixed not being able to cast automatic silent spells if predecessor feats were missing.
  • Fixed incorrect attack bonus vs X data shown on charsheet.
  • Fixed custom two-handed/offhand weapon strength modifiers not showing correctly on the character sheet.
  • Fixed some visual effects (like visibility) not properly updating when updated or reattached.
  • Fixed journal entries not being retained after relogging on a server.
  • Fixed area lighting still appearing even when under the blindness effect.
  • Fixed damage color regressions from 8193.35.
  • Fixed click to move not respecting modified ruleset.2da stealth/detect mode movement penalties.
  • Fixed effect caster level not being included in save games.
  • Fixed polymorph making every subfeat in the quickbar change to "Cancel Polymorph".
  • Fixed nwsync repository modules unable to progress to the next module/chapter.
  • Fixed clientside objects not being properly cleaned up, leading to degraded performance as play session progressed.
  • Fixed Defensive Stance getting cancelled without notifying the clients.
  • Fixed a bug where party members standing at elevation over 2m could cause information about other objects to be lost.
  • Fixed a regression with Leave Lootable Corpse where generated remains were clickable on clients.
  • Fixed incorrect total weight carried calculating when using stacks of items with weight property.
  • Fixed a rare issue where a malformed tile walkmesh would cause levitation.
  • Fixed critical threat roll displaying incorrect totals if attacks are made with a penalty.
  • Fixed vsync negatively affecting (un)load times of very large areas.

Toolset

  • Fixed structures passed using the ?: operator causing a bad compiler state.
  • Fixed toolset clobbering module UUID, when the author has manually embedded one with a GFF editor.
  • Fixed toolset not preserving scriptset changes after loading a scriptset into a Trigger instance.
  • Fixed armor parts over 255 not working in the toolset.
  • Fixed PLT textures not updating correctly when the color is changed.

Graphics

  • Fixed PLT-on-GPU not properly loading custom palette textures.
  • Fixed using custom palettes for PLT in combination with the generate-PLT-on-GPU setting.
  • Fixed regression where beams were rendered with wrong width/thickness.
  • Fixed Material Shader Uniforms not refreshing when a creature's appearance changed.
  • Fixed keyholing not always applying properly on some geometry.
  • Fixed model tangent generation unable to handle faces with zero area.
  • Fixed the weather density shader uniform not always going to 0 at the end of the transition when setting weather to clear.
  • Fixed flat model planes generating invalid normals when both sides of the plane shares smoothing group.
  • Fixed model part combining not taking into account materialname fields being different between nodes.
  • Fixed an issue with texture displacement that would cause warping when texture was viewed from steep viewangles.
  • Fixed a memory corruption when using procedural texture distortion if the image dimensions exceed 256x256.
  • Fixed a minor memory leak related to PLT-on-GPU generation.

Scripting

  • Fixed a memory leak in the RandomName() nwscript function.
  • Fixed ItemPropertyCustom() returning a valid itemproperty if a required parameter was -1.
  • Fixed GetAreaLightDirection() causing scripting errors.
  • Fixed GetAssociate() to honor the nAssociateIndex parameter for Dominated Associates.
  • Fixed DecrementRemainingFeatUses() to work correctly on NPCs using feats with successors when they don't have the some of the intermediate feats.
  • Fixed SetWeather() causing the weather effects to disappear if setting the type to the already current.
  • Fixed EffectModifyAttacks() not recalculating total bonus attacks when being applied.
  • Fixed LongJmp() incorrectly modifying some passed return values.
  • Fixed SetCreatureBodyPart() erroneously modifying equipped armor.
  • Fixed SetCreatureBodyPart() changes only being seen by a single client in multiplayer.
  • Fixed SetCreatureBodyPart() failing to update some armor appearances if no skinmesh was used.
  • Fixed SetMaterialShaderUniform*() calls not propagating to head/wing/tail/cloak models.
  • Fixed SetFacing() not sending updates to clients for changes of less than 20 degrees.
  • Fixed SetCreatureAppearanceType() not updating all appearance related variables.
  • Fixed CopyItem() not copying the hidden when equipped field.
  • Fixed SetObjectUiDiscoveryMask() while holding TAB not taking effect until release.
  • Fixed EffectDamageReduction() not always being checked on placeables and doors when other effects are applied.
  • Fixed PCs not being searchable with GetObjectByTag() after relogging.
  • Fixed sqlite database transaction rollback not working correctly in DelayCommands.
  • Fixed the encounter object support in ObjectToJson(), CopyObject(), SqlBindObject(), StoreCampaignObject().
  • Fixed effect links not being retained after relogging on a server.
  • Fixed traps created by nwscript not being detectable until after a save/load cycle.
  • Fixed a visual corruption when modifying armor that is hidden.
  • Fixed ActionUseFeat() with an invalid target to queue a combat feat against the current target the creature is attacking.
  • Fixed SetShaderUniformVec()'s 4th float parameter clobbering the 3rd float parameter when saving as gff.
  • Area of Effect scripts now use the spell ID and caster level that was stored when the AOE was created.

Misc

  • Fixed cutscene camera settings to use 1.69 values that existing cutscenes expect.
  • Fixed traps without a key tag set getting destroyed by a creature carrying an item with no tag set.
  • Fixed clients leveling up in a 4th class on a server running version 8193.34 or earlier.
  • Fixed ELC only validating domain feats for last chosen class.
  • Fixed dynamic area light fade timers not resetting properly upon changing area.
  • Fixed baseitems.2da line IDs over 255 giving bad feedback messages when pickpocketing or acquiring unidentified items.
  • Fixed Shou Disciple allowing for 2d20 unarmed damage in some cases.
  • Fixed GetName() description in nwscript.nss.
  • Fixed SetObjectUiDiscoveryMask() description in nwscript.nss.
  • Fixed SetBaseAttackBonus() description in nwscript.nss to properly describe how it works on PCs.
  • Fixed News panel on main menu showing ".. 0 more .." with exactly 5 unread news items present.

Performance Improvements

Scripting

  • Optimized instruction decoding in the nwscript VM.
  • Optimized instruction counting in the nwscript VM.
  • Optimized how strings are pushed and popped on the nwscript VM stack.
  • Optimized how string and json constants work in the nwscript VM.
  • Added a second pass over the generated bytecode to meld some redundant instructions together.
  • Where possible, expressions are now evaluated at compile time (instead of runtime).

Graphics

  • Optimized internal quaternion math.
  • Low level optimizations to how shadow edges are built.
  • Improved PLT shader generation performance by reserving mipmap storage in advance.
  • Various low level optimizations to the renderer.
  • No longer do distance sorting of particle emitters that have no particles.
  • Optimized away memory allocations and copies in BSP scene management.
  • Optimized computing keyholing dissolve in some cases.
  • Several minor optimizations to emitter/particle rendering.

Misc

  • Optimized loading times for areas with many placeables.
  • Sped up area unloading by up to 10x.
  • In singleplayer, if struggling to hit 60fps, some server logic will yield to favor rendering instead.
  • Optimized away most of the unnecessary string copies.
  • Optimized how object updates are calculated by the server.
  • Reduced some performance overhead related to visual transforms.
  • Optimized ruleset.2da entry lookup.
  • Reduced memory and performance footprint of triggers and encounters.

Security

  • Updated bundled OpenSSL.
  • Fixed an exploit that allowed hacked clients to teleport anywhere in an area.
  • No labels