Home Products Changelog

Release Notes for Neverwinter Nights: Enhanced Edition

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!

N1: Against The Cult of the Reptile God

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.

Eye of the Beholder

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!

Eye of the Beholder

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.

Legend of Darkmoon

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:

Renderer

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

Fonts

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

Pathfinding
Gameplay
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:

Tyrants of the Moonsea
Darkness over Daggerford
Other Fixes

Update 81.8193.16 (16 September 2020)

The hot fix is now live for the NWNEE patch, which should address the issues for non-english versions of the game. Here is a list of the fixes from today's release:


Update 81.8193.15 (15 September 2020)

NWNEE Patch Change Log / Sept 15, 2020

Lighting Engine Improvements

Enhanced graphics rendering for lighting & shadows.

Tileset Additions:

This patch includes all content from Darkness over Daggerford and Tyrants of the Moonsea.

For the tileset facelifts, there is a configuration toggle (on by default) to use them in the main campaigns and all official DLC. Custom content modules can use them as new tilesets. (As the tile layout is compatible, you could also just open the .are file in GFFEditor and replace the tileset reference.)

Player Dungeon Master Mode

Players can now acquire and relinquish DM privileges during normal play, assuming they know the DM password. A player DM will have all of the normal dungeon master ruleset amenities: Their player character will turn invincible; they will be able to cast any spell they wish, and their skill checks will always be made against max.

However, player DMs will not gain features specific to DM characters: Their feat list will not include all the DM abilities, and they will not walk any faster. They will also not join the DM party/faction, so they will not be able to see all player parties.

Dedicated servers can turn this off in configuration.

To enter player DM mode, you can use the console commands (dm_login <pw> and dm_logout), or you can use the debug UI.

There is a new script command that can be used to distinguish between player DMs and “real” DMs:

// Returns TRUE if the given player-controlled creature has DM privileges // gained through a player login (as opposed to the DM client). // Note: GetIsDM() also returns TRUE for player creature DMs. int GetIsPlayerDM(object oCreature);

As a consequence, GetIsDM() will now return TRUE for player DMs. Previously, you could rely on this being static per-connection, as true DMs could not drop their privileges. Pathfinding improvements Pathfinding quality in placeable and creature-heavy areas has been significantly improved, beyond the optimisations already done in 8193.13.

Your character should no longer get stuck on random placeables, or not find their way around other creatures. Conversation script parameters You can now specify script parameters in the toolset conversation editor, and these parameters can be queried via new the new script command:

// Returns the script parameter value for a given parameter name. // Script parameters can be set for conversation scripts in the toolset's // Conversation Editor, or for any script with SetScriptParam(). // * Will return "" if a parameter with the given name does not exist. string GetScriptParam(string sParamName);

There is also a script command to set parameters when invoking other scripts via ExecuteScript.

// Set a script parameter value for the next script to be run. // Call this function to set parameters right before calling ExecuteScript(). void SetScriptParam(string sParamName, string sParamValue); Scripted access to SQLite databases Full access to the sqlite API has been added.

You can access the following databases: Campaign: Databases spanning modules and savegames, living in database/. Module: A database attached to the running module, persisted to savegames. Player: Each player character has a database attached that gets saved to the character .bic file when saving to a vault (local/server), or exporting the character in singleplayer. It also gets saved to savegames.

To get you started, please check INSTALLDIR/lang/en/docs/SQLite.txt for a short introduction and further documentation on the newly-added script commands.

Please note: This is an advanced feature, and requires a solid understanding of SQL to make robust and effective use of. Scripted mouse targeting mode You can now trigger cursor targeting mode from scripting:

// Makes oPC enter a targeting mode, letting them select an object as a target // If a PC selects a target, it will trigger the module OnPlayerTarget event. void EnterTargetingMode(object oPC, int nValidObjectTypes = OBJECT_TYPE_ALL, int nMouseCursorId = MOUSECURSOR_MAGIC);

// Gets the target object in the module OnPlayerTarget event. // Returns the area object when the target is the ground. object GetTargetingModeSelectedObject();

// Gets the target position in the module OnPlayerTarget event. vector GetTargetingModeSelectedPosition();

// Gets the player object that triggered the OnPlayerTarget event. object GetLastPlayerToSelectTarget();

A new module event has been added to support this.

Caveat: The toolset cannot currently configure this module event. You need to set it via SetEventScript() at module load. New script actions related to item property usage These script commands allow NWScript to properly trigger item property usage, circumventing the Talent system.

// Returns the number of uses per day remaining of the given item and item property. // * Will return 0 if the given item does not have the requested item property, // or the item property is not uses/day. int GetItemPropertyUsesPerDayRemaining(object oItem, itemproperty ip);

// Sets the number of uses per day remaining of the given item and item property. // Will do nothing if the given item and item property is not uses/day. // Will constrain nUsesPerDay to the maximum allowed as the cost table defines. void SetItemPropertyUsesPerDayRemaining(object oItem, itemproperty ip, int nUsesPerDay);

// Queue an action to use an active item property. // oItem - item that has the item property to use // ip - item property to use // object oTarget - target // nSubPropertyIndex - specify if your itemproperty has subproperties (such as subradial spells) // * bDecrementCharges - decrement charges if item property is limited void ActionUseItemOnObject(object oItem, itemproperty ip, object oTarget, int nSubPropertyIndex = 0, int bDecrementCharges = TRUE);

// Queue an action to use an active item property. // oItem - item that has the item property to use // ip - item property to use // location lTarget - target location (must be in the same area as item possessor) // nSubPropertyIndex - specify if your itemproperty has subproperties (such as subradial spells) // * bDecrementCharges - decrement charges if item property is limited void ActionUseItemAtLocation(object oItem, itemproperty ip, location lTarget, int nSubPropertyIndex = 0, int bDecrementCharges = TRUE);

// Sets oObject's hilite color to nColor // The nColor format is 0xRRGGBB; -1 clears the color override. void SetObjectHiliteColor(object oObject, int nColor = -1);

Custom mouse cursors

You can now override the mouse cursor a ingame object presents. Additionally, mouse cursors have been unhardcoded, so you can add more via custom content (see MOUSECURSOR_CUSTOM_00).

// Sets the cursor (MOUSECURSOR_*) to use when hovering over oObject void SetObjectMouseCursor(object oObject, int nCursor = -1); ProgFX have been unhardcoded A new 2da, progfx.2da has been added, that links visualeffect.2da columns. This allows for adding additional custom skin effects, beams, MIRVs, etc.

Texture replacements

You can now replace individual textures on objects at runtime

// Replace's oObject's texture sOld with sNew. // Specifying sNew = "" will restore the original texture. // If sNew cannot be found, the original texture will be restored. // sNew must refer to a simple texture, not PLT void ReplaceObjectTexture(object oObject, string sOld, string sNew = ""); Walk animations have been unhardcoded You can add new walk anims by naming them walk_002, walk_003, etc. (001 is walkdead, 002 is hardcoded to walkinj) Weather Types Unhardcoded Added new 2da: weatherypes.2da; which - unsurprising, considering the name - unhardcodes weather types. Scripted wind management The game now allows much finer-grained scripted control over the wind data.

// Sets the detailed wind data for oArea // The predefined values in the toolset are: // NONE: vDirection=(1.0, 1.0, 0.0), fMagnitude=0.0, fYaw=0.0, fPitch=0.0 // LIGHT: vDirection=(1.0, 1.0, 0.0), fMagnitude=1.0, fYaw=100.0, fPitch=3.0 // HEAVY: vDirection=(1.0, 1.0, 0.0), fMagnitude=2.0, fYaw=150.0, fPitch=5.0 void SetAreaWind(object oArea, vector vDirection, float fMagnitude, float fYaw, float fPitch); Visual effects can now use PLT textures Visual effects can now refer to PLT textures. The layer colours/indices are inherited from the object the effect is applied to (such as creatures). Visual effects can now be scaled, rotated, and translated When applying a visual effect, you can now scale, rotate and translate it, in relation to the parented object. The script commands have been extended to support this:

effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE, float fScale=1.0f, vector vTranslate=[0.0,0.0,0.0], vector vRotate=[0.0,0.0,0.0]);

effect EffectBeam(int nBeamVisualEffect, object oEffector, int nBodyPart, int bMissEffect=FALSE, float fScale=1.0f, vector vTranslate=[0.0,0.0,0.0], vector vRotate=[0.0,0.0,0.0]); Modules and HAKs can now contain more than 16k items

Art Changes

// Convert sHex, a string containing a hexadecimal object id, // into a object reference. Counterpart to StringToObject(). object StringToObject(string sHex);

Miscellaneous Improvements

Update 80.8193.13 (19 May 2020)


Update 1.79 build 8193.3 (13 December 2019)

Fixes

Update 1.79 (03 December 2019)

Major Features
Further Features
Breaking Changes
Fixes
Content Creation
Toolset Changes
New Script Commands

Update 1.78 (26 November 2018)

Features:

Fixes:

Server Changes

Fixes: