Neverwinter Nights: Enhanced Edition

Neverwinter Nights: Enhanced Edition 8193.34

Version
8193.34
Version Date
Dec. 8, 2021
Links

Patch Notes

Patch 8193.34: Pathfinding, Renderer & Other QoL Improvements

Greetings, Neverwinter Nights players and modders!

A new PC patch for Neverwinter Nights: Enhanced Edition arrives today. This update brings new quality of life improvements and fixes a few regressions introduced by the previous stable update.

Patch notes



Fixes


  • Apple M1: Fixed audio crackle when decoding mp3 files, including voiceovers.
  • Pathfinding: Fixed a case where pathing was bailed on too early, resulting in incorrect behaviour that was regressed in the previous patch.
  • Facelift tilesets tts02 tcm02: Addressed various texture and model issues.
  • ResMan: Fixed two memleaks where it wouldn’t release loaded data instances.
  • Renderer: Minor fixes to animation start consistency.
  • Renderer: Fixed animated skinmesh parts going out of sync/being one frame behind.
  • Renderer: Fixed rough surfaces having a milky sheen at some viewing aspects, especially when using height maps.

QoL Improvements


  • Game: Disable ctrl-drag selection box on clients when server.player-party-control is off (the default). Note that clients will have to reconnect if you toggle this setting while a game is up.
  • NWSync: Repositories are now collapsible in the main UI view; this state is remembered in settings.tml.
  • NWSync: Module versions can now hold a `localalias` field that is used to backreference for StartNewModule(“originalfilename”).
  • NWSync: Better support for repository-side statistics.
  • NWSync: Hide modules, campaigns and adverts with empty name labels.
  • NWSync: Don’t reject repository.json if advert buttons have empty labels and URLs.
  • Launch Game UI/Repo Manager: Fixed “Show Advert” checkbox label being cut off.
  • Launch Game UI: Fixed “Advert” panel type displaying a STRREF instead of text when no label is defined in repository.json.

Scriptable UI


  • Nui: Fixed crash when calling SetGroupLayout() with invalid data.
  • Nui: Fixed scrollbar size for textedit.
  • Nui: Text can now override border and scrollbars properties.
  • Nui: Fixed draw_list scissoring breaking succeeding widget rendering.
  • Nui: Fixed draw_list scissoring leaving a stale scissor on the GL stack for nested widgets.
  • Nui: Fixed entries in a list view not scissoring draw_list correctly when scrolling out of view.
  • Nui: list(): Fixed textedit() widget not working in lists.
  • Nui: list(): Scrollbars now configurable.
  • Nui: list(): Fix spacers not advancing row layout correctly.
  • Nui: Never allow binds to update during construction. This fixes list() array binds degrading to scalar values, among other.
  • Nui: textedit(): Fixed placeholder sometimes rendering on the succeeding widget instead.
  • Nui: textedit(): Fixed range event triggering too often or with wrong values.
  • Nui: Added demo code for spreadsheet UI.
  • Nui: Fixed “list” widget not showing a vertical scrollbar in AUTO mode.

Premium Modules


  • Tyrants of the Moonsea: Fixed ship's cabin navigation map occasionally disabling erroneously.

New Script Commands



// Returns the number of script instructions remaining for the currently-running script. // Once this value hits zero, the script will abort with TOO MANY INSTRUCTIONS. // The instruction limit is configurable by the user, so if you have a really long-running // process, this value can guide you with splitting it up into smaller, discretely schedulable parts. // Note: Running this command and checking/handling the value also takes up some instructions. int GetScriptInstructionsRemaining(); // Returns a modified copy of jArray with the value order changed according to nTransform: // * JSON_ARRAY_SORT_ASCENDING, JSON_ARRAY_SORT_DESCENDING // Sorting is dependent on the type and follows json standards (.e.g. 99 < "100"). // * JSON_ARRAY_SHUFFLE // Randomises the order of elements. // * JSON_ARRAY_REVERSE // Reverses the array. // * JSON_ARRAY_UNIQUE // Returns a modified copy of jArray with duplicate values removed. // Coercable but different types are not considered equal (e.g. 99 != "99"); int/float equivalence however applies: 4.0 == 4. // Order is preserved. // * JSON_ARRAY_COALESCE // Returns the first non-null entry. Empty-ish values (e.g. "", 0) are not considered null, only the json scalar type. json JsonArrayTransform(json jArray, int nTransform); // Returns the nth-matching index or key of jNeedle in jHaystack. // Supported haystacks: object, array // Ordering behaviour for objects is unspecified. // Return null when not found or on any error. json JsonFind(json jHaystack, json jNeedle, int nNth = 0, int nConditional = JSON_FIND_EQUAL); // Returns a copy of the range (nBeginIndex, nEndIndex) inclusive of jArray. // Negative nEndIndex values count from the other end. // Out-of-bound values are clamped to the array range. // Examples: // json a = JsonParse("[0, 1, 2, 3, 4]"); // JsonArrayGetRange(a, 0, 1) // => [0, 1] // JsonArrayGetRange(a, 1, -1) // => [1, 2, 3, 4] // JsonArrayGetRange(a, 0, 4) // => [0, 1, 2, 3, 4] // JsonArrayGetRange(a, 0, 999) // => [0, 1, 2, 3, 4] // JsonArrayGetRange(a, 1, 0) // => [] // JsonArrayGetRange(a, 1, 1) // => [1] // Returns a null type on error, including type mismatches. json JsonArrayGetRange(json jArray, int nBeginIndex, int nEndIndex); // Returns the result of a set operation on two arrays. // Operations: // * JSON_SET_SUBSET (v <= o): // Returns true if every element in jValue is also in jOther. // * JSON_SET_UNION (v | o): // Returns a new array containing values from both sides. // * JSON_SET_INTERSECT (v & o): // Returns a new array containing only values common to both sides. // * JSON_SET_DIFFERENCE (v - o): // Returns a new array containing only values not in jOther. // * JSON_SET_SYMMETRIC_DIFFERENCE (v ^ o): // Returns a new array containing all elements present in either array, but not both. json JsonSetOp(json jValue, int nOp, json jOther); // Returns the column name of s2DA at nColumn index (starting at 0). // Returns "" if column nColumn doesn't exist (at end). string Get2DAColumn(string s2DA, int nColumnIdx); // Returns the number of defined rows in the 2da s2DA. int Get2DARowCount(string s2DA);