| Patch Version | 1.88.8193.36 |
| Patch release date (PC) | |
| Patch release date (Others) | |
| Patch release notes |
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
-noaliasesCLI 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".."andR"..", which can also span multiple lines. - Added new GUI events:
GUIEVENT_CHATLOG_PORTRAIT_CLICKandGUIEVENT_PLAYERLIST_PLAYER_TELL. - Added new
cachedmodels.2dathat 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_regionproperty 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
_RECTtype 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_PCSSKILL_SET_TRAP_DURATIONSKILL_FLAG_TRAP_DURATIONSKILL_DISABLE_TRAP_DURATIONSKILL_RECOVER_TRAP_DURATIONSKILL_EXAMINE_TRAP_DURATIONSKILL_OPEN_LOCK_DURATIONSKILL_LOCK_DURATIONSKILL_HIDE_IN_PLAIN_SIGHT_COOLDOWNSKILL_TAUNT_COOLDOWNSKILL_PICKPOCKET_COOLDOWNSKILL_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 hasbIgnoreUsesparameter.SetObjectTextBubbleOverride()now works for items in inventories.ActionCastSpellAt{Object,Location}()now havenClassandbSpontaneousCastparameters.ResManGetFileContents()can now return binary data in base64 or hex encoding.TemplateToJson()andJsonToTemplate()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 havebChatWindowparameter.GetLastSpellCastClass()now returns the AOE creator's class in AOE scripts.EffectDamageResistance()andEffectDamageReduction()now have abRangedOnlyparameter.GetEffectType()now has abAllTypesparameter.NuiCreate()andNuiCreateFromResRef()now have asEventScriptparameter.GetItemPossessor()now has abReturnBagsparameter.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,.0and.42f. constdeclarations 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=0withSpellbookRestricted=0combination inclasses.2dais now valid.damagetypes.2dahas a newDamageRangedProjectilecolumn.ammunitiontypes.2dahas newAmmunitionTypeandDamageRangedProjectilecolumns.packages.2danow allows values over 255.vfx_persistent.2danow 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
EffectRunScriptinterval 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.2dastealth/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 thenAssociateIndexparameter 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 innwscript.nss. - Fixed
SetObjectUiDiscoveryMask()description innwscript.nss. - Fixed
SetBaseAttackBonus()description innwscript.nssto 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
stringandjsonconstants 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.