Release Notes: Neverwinter Nights: Enhanced Edition Launch Features

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Release Notes

Neverwinter Nights: Enhanced Edition Launch Features


• Improved Display. Your portrait, combat bar, inventory, and other UI elements adjust in size based on
your chosen resolution including 1080p and 4k.
• Advanced Graphics Options. Full-screen post-processing effects make for crisper, cleaner visuals.
Enable contrast, vibrance, and depth of field
• Backwards Compatibility. Works with save games, modules, and mods from the original Neverwinter
Nights. A galaxy of community created content awaits.
• Steam Feature Support. Find mods and modules or upload your own in Steam Workshop. Easily join
online games using Friends List.
• Restored Multiplayer. A completely rebuilt multiplayer system makes it easy to find online persistent
worlds and game with friends
• More Modder Opportunities. Toolset quality-of-life improvements, shaders, filters, texture maps, and a
new material systems allow creators to make amazing looking models and modules.

Where Game Data is Stored


The game uses an install directory (read-only), and a user directory for your content and save-games that is
independent of the install directory.
This user folder can be found in:
[My Documents]\Neverwinter Nights (Windows)
~/Documents/Neverwinter Nights (macOS)
~/.local/share/Neverwinter Nights (Linux)

Launching executables with the command-line option -userDirectory alternative_directory will use alternative_
directory instead of the one specified.

Linux Install Rebuilt


For nwmain, we now link against OpenAL libraries for audio, WebM libraries for the movies, and SDL + OpenGL
libraries for graphics.

macOS Support Updated


Both the main game and the standalone-server should now run on macOS (OS X) 10.9 Mavericks or later.

Upscaled UIs Added


When in full-screen, Neverwinter Nights: Enhanced Edition will automatically use your desktop resolution. The
UI will now upscale to the largest resolution possible (3x scaling on a 4k monitor).

Release Notes / 1
key (granted through Beamdog servers).
Master Server Support • You can configure servervault behaviour on a per-
and Networking server basis (see below).
• The in-game server browser now works again for Languages Updated
v74 multiplayer games.
French, German, Italian, Polish and Spanish
• LAN enumeration has been improved. translations of v74 have been completed. NWN 1.69
• Servers respond and connect faster. was English only.
• Networking has been made much more robust: Server Changes
• Game servers, both in client and standalone, • Optimized multiple hotspots in the servers to
support UPnP (on Windows only) to map their speed up processing speed.
port.
• Exposed new .ini option to let servers use less CPU
• Game servers will attempt STUN-like udp when not enough players are connected, but run at
hole punching to allow clients to connect even full throttle once enough players are connected.
when no ports are mapped.
• Conversation performance dramatically improved
• If all else fails (as can be on some NAT types), on busy servers.
game clients will use Beamdog-provided
infrastructure to relay traffic for players. • Servervault characters will be saved by public
This connection is fully authenticated and cdkey (secured via master server) instead of by
transparent to both the player and the server player name.
admin. Servers will still see the player IP • Features added for server admins to allow them to
address and port through scripting and the switch servervaults from NWN 1.69 to v74 (see
admin console. A script command has been official Beamdog forums for more information
added to query relay status of any player on what clients and servers must do to make this
connection. work).
• Added a crash reporter to the Linux server that
Audio System Changes will enable server administrators to easily report
The audio system (miles) has been replaced with issues.
OpenAL and OpenMP3. • Servers can now host all premium modules in
multiplayer. Note that not all premium modules
Movie Changes are meant to be played that way.
The movie system (Bink) has been replaced with • Linux servers now run on file systems that do not
WEBM. have a 32bit API anymore (such as Docker-For-
Mac/Windows).
Steam Support
• Players on Steam can join their friends by clicking New nwnplayer.ini Options
“Join Game” or using the Friends tab on the • Option added to allow users to claim names
Multiplayer browser. permanently and associate the name with their
• Workshop support has been added. You can CD Key. Off by default. Turn on ONLY if you
package and upload content to the Steam workshop are running a persistent world.
(see Workshop_README.txt for details). [Server Options]
Sticky Player Names=0

• When Sticky Player Names is set, this allows the


Gamespy (Unique Player old NWN 1.69 servervault characters saved by
Names Support) Removed player name directory behaviour. Recommended
for old persistent worlds that do not want to swap
• Now that GameSpy is no longer operational, we to the new servervault format.
can no longer guarantee player names are unique
across the community. [Server Options]
Server Vault By Player Name=0
• Your identity is now based around your public CD
• Specify the number of clients required to be
connected to a server before it stops aggressively
attempting reduce its CPU usage via sleep().
[Server Options]
Clients Required To Disable CPU Sleep=1

• Specifies the maximum number of scripting


instructions available to run within a given script
before the script is assumed to be in an infinite
loop and terminated (was 131042 in NWN 1.69,
minimum = 131042, maximum = 16777216)
[Script Options]
Instruction Limit=524288

Release Notes / 2
• Determines whether combat modes are turned defaults to the original NWN theme and can now
off by movement. The standard behaviour is 0, be changed. Additional choices include:
movement turns off combat modes. When the
value is 1, combat modes become sticky and not • mus_theme_main (Original Campaign main
interrupted by movement. theme)
• mus_x2theme (HotU main theme)
[Server Options] • mus_dd_witchwake (Witch’s Wake main
StickyCombatModes=0 theme)
• For those of you who want to play around with • mus_wc_theme (Wyvern Crown of Cormyr
bigger textures without downsampling in your main theme)
module, set the maximum texture memory
used by the engine on your local machine in Add your own bmu file in your install dir/data/
megabytes. Minimum 64, Maximum 2047. You mus/
should only rely on 64 MB of texture space for [Sound Options]
your module if you intend on giving it to others! Main Menu Music Theme=mus_theme_main
[Video Options]
MaxTextureMemory=64 New Advanced Graphics
• You can configure hard limits on various bonuses Options (nwn.ini)
and penalties. These ini configuration options can
be overridden with the provided script calls (see • Advanced Frame-Buffer Effect (High Contrast).
below). Increases the colour contrast throughout the entire
viewport.
[Server Options]
AttackBonusLimit=20 [Video Options]
Enable FBEffect High Contrast=1
DamageBonusLimit=100
SavingThrowBonusLimit=20 • Advanced Frame-Buffer Effect (Vibrance).
AbilityBonusLimit=12 Boosts saturation (or colour vibrancy) in areas that
AbilityPenaltyLimit=30 are monochrome.
SkillBonusLimit=50
[Video Options]
• You can now adjust the camera distance and pitch Enable FBEffect Vibrance=1
limits through nwnplayer.ini. On the first run, the
following values are populated: • Advanced Frame-Buffer Effect (Depth of Field).
Causes more distant pixels to be blurred. This
[Control Options]
effect only becomes visible as the camera zooms
CameraMaxDist=25.000000
CameraMinDist=1.000000
in close to the player character.
CameraMaxPitch=89.000000 [Video Options]
CameraMinPitch=1.000000 Enable FBEffect Depth of Field=1

• Advanced Frame-Buffer Effect (SSAO). Screen


New nwn.ini Options Space Ambient Occlusion causes edges where
objects meet to be darker, resulting in more
• Language. If you wish to override the language natural-looking lighting.
choice as specified by the Beamdog Client, you
may set this entry directly in nwn.ini. [Video Options]
Enable FBEffect Ambient Occlusion=1
[Display Options]
language=en New frame-buffer effects off.

Choices available are:


• German: de
• English: en
• Spanish: es
• French: fr
• Italian: it
• Polish: pl
Note that if language selected does not exist in
your build, English will be selected by default.
New frame-buffer effects on.
• SetUIScale. The UI attempts to resize to the
maximum scale possible (when at the default
value of 0). However, if this UI choice given is too
large for you, you may set the UI Scale to a lower
number. If the number is set to a value between
1 and 8, it will attempt to give you that exact UI
scale. The game may decide to override this value
if you are running at a resolution that does not
allow this value properly on the screen.
[Video Options]
SetUIScale=0

• By popular request, the main menu music now

Release Notes / 3
tags in the link will be overwritten.
• int GetEffectCasterLevel(effect eEffect); Returns
the caster level of the creature who created the
effect. If not created by a creature, returns 0. If
created by a spell-like ability, returns 0.
• int GetEffectDuration(effect eEffect); Returns the
total duration of the effect in seconds. Returns 0 if
the duration type of the effect is not DURATION_
TYPE_TEMPORARY.
• int GetEffectDurationRemaining(effect eEffect);
Returns the remaining duration of the effect in
seconds. Returns 0 if the duration type of the effect
is not DURATION_TYPE_TEMPORARY.
• string GetItemPropertyTag(itemproperty
nProperty); Returns the string tag set for the
New Materials and Content provided item property. If no tag has been set,
returns an empty string.
Authoring Tools • itemproperty TagItemProperty(itemproperty
• We added support for normal and specular nProperty, string sNewTag); Tags the item
mapping on any texture. property with the provided string. Any tags
currently set on the item property will be
• We added support for .mtr files, which describe a overwritten.
material that can be applied on a per-mesh basis,
including fragment- and vertex-shaders. This is • int GetItemPropertyDuration(itemproperty
still work-in-progress and will be documented nProperty); Returns the total duration of the item
once finalised. property in seconds. Returns 0 if the duration type
of the item property is not DURATION_TYPE_
TEMPORARY.
Crashes Fixed
• int GetItemPropertyDurationRemaining(ite
• Game running on some ATI/AMD graphics cards mproperty nProperty); Returns the remaining
(updated water support). duration of the item property in seconds. Returns
• Creatures containing more than 255 memorized 0 if the duration type of the item property is not
DURATION_TYPE_TEMPORARY.
spell slots for a level.
• object CreateArea(string sResRef, string
• Using Smite Evil and Smite Good against non- sNewTag = “”, string sNewName = “”);
creature objects. Instances a new area from the given resref,
• Polymorph spell and items with constitution bonus which needs to be a existing module area. Will
(in some situations). optionally set a new area tag and displayed name.
The new area is accessible immediately, but
• Using NWScript’s GetReputation() on area of initialisation scripts for the area and all contained
effects created by modules and areas. creatures will only run after the current script
finishes (so you can clean up objects before
• Player starts barter with a stackable undroppable returning). Returns the new area, or OBJECT_
(cursed) item. INVALID on failure.
• (Rare) objects deleted while contained in an area • Note: When spawning a second instance of
of effect. a existing area, you will have to manually
adjust all transitions (doors, triggers) with the
• (Rare) divide by zero crash in the particle system relevant script commands, or players might
(hellball VFX creates this infrequently). end up in the wrong area.
• Entries longer than 255 characters in .2DA files. • int DestroyArea(object oArea); Destroys the
• Opening the second page of the epic spell radial given area object and everything in it.
menu. Return values:
• Case-sensitive filesystems (Linux) with non- • 0: Object not an area or invalid.
lowercase resources in override. • -1: Area contains spawn location and removal
would leave module without entrypoint.
• -2: Players in area.
New Scripting Commands • 1: Area destroyed successfully.
• object CopyArea(object oArea); Creates a copy
• void SetTag(object, string); Specifies a new tag of a existing area, including everything inside
for the given object. Note that this call will not of it (except players). Returns the new area, or
update any of the references to this tag (such as OBJECT_INVALID on error.
area transitions).
• Note: You will have to manually adjust all
• string GetEffectTag(effect eEffect); Returns the transitions (doors, triggers) with the relevant
string tag set for the provided effect. If no tag has script commands, or players might end up in
been set, returns an empty string. the wrong area.
• effect TagEffect(effect eEffect, string sNewTag); • object GetFirstArea(); Returns the first area in the
Tags the effect with the provided string. Any other

Release Notes / 4
module.
• object GetNextArea(); Returns the next area in the module (after GetFirstArea), or OBJECT_INVALID if
no more areas are loaded.
• void SetTransitionTarget(object oTransition, object oTarget); Sets the transition target for oTransition.
• oTransition can be any valid game object, except areas.
• oTarget can be any valid game object with a location, or OBJECT_INVALID (to unlink).
• Rebinding a transition will NOT change the other end of the transition; for example, with normal doors
you will have to do either end separately.
• Any valid game object can hold a transition target, but only some are used by the game engine (doors
and triggers). This might change in the future. You can still set and query them for other game objects
from nwscript.
• Transition target objects are cached: The toolset-configured destination tag is used for a lookup only
once, at first use. Thus, attempting to use SetTag() to change the destination for a transition will not work
in a predictable fashion.
• void SetHiddenWhenEquipped(object oItem, int nValue); Sets whether the provided item should be hidden
when equipped. The intended usage of this function is to provide an easy way to hide helmets, but it can be
used equally for any slot which has creature mesh visibility when equipped, e.g.: armour, helm, cloak, left
hand, and right hand. nValue should be TRUE or FALSE.
• int GetHiddenWhenEquipped(object oItem); Returns whether the provided item is hidden when equipped.
• object CopyItemAndModify(object oItem, int nType, int nIndex, int nNewValue, int bCopyVars=FALSE);
Creates a new copy of an item, while making a single change to the appearance of the item. Helmet models
and simple items ignore iIndex.
iType iIndex iNewValue
ITEM_APPR_TYPE_SIMPLE_MODEL [Ignored] Model #
ITEM_APPR_TYPE_WEAPON_COLOR ITEM_APPR_WEAPON_COLOR_* 1-4
ITEM_APPR_TYPE_WEAPON_MODEL ITEM_APPR_WEAPON_MODEL_* Model #
ITEM_APPR_TYPE_ARMOR_MODEL ITEM_APPR_ARMOR_MODEL_* Model #
ITEM_APPR_TYPE_ARMOR_COLOR ITEM_APPR_ARMOR_COLOR_*1 0-1752
1. Alternatively, where ITEM_APPR_TYPE_ARMOR_COLOR is specified, if per-part coloring is desired, the following equation can be
used for nIndex to achieve that:
ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_ * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_
APPR_ARMOR_COLOR_
For example, to change the CLOTH1 channel of the torso, nIndex would be:
6 + (7 * 6) + 2 = 50
2. When specifying per-part coloring, the value 255 is allowed and corresponds with the logical function ‘clear colour override’, which
clears the per-part override for that part.

• int SetTileExplored(object creature, object area, int x, int y, int newState); Sets if the given creature has
explored tile at x, y of the given area. Note that creature needs to be a player- or player-possessed creature
Keep in mind that tile exploration also controls object visibility in areas and the fog of war for interior and
underground areas.
Return values:
• -1: Area or creature invalid.
• 0: Tile was not explored before setting newState.
• 1: Tile was explored before setting newState.
• int GetTileExplored(object creature, object area, int x, int y); Returns whether the given tile at x, y, for
the given creature in the stated area is visible on the map. Note that creature needs to be a player or player-
possessed creature. Keep in mind that tile exploration also controls object visibility in areas and the fog of
war for interior and underground areas.
Return values:
• -1: Area or creature invalid.
• 0: Tile is not explored yet.
• 1: Tile is explored.
• int SetCreatureExploresMinimap(object creature, int newState); Sets the creature to auto-explore the map
as it walks around. Keep in mind that tile exploration also controls object visibility in areas and the fog of war
for interior and underground areas. This means that if you turn off auto exploration, it falls to you to manage
this through SetTileExplored(); otherwise, the player will not be able to see anything.
• Valid arguments: TRUE and FALSE.
• Does nothing for non-creatures.
• Returns the previous state (or -1 if non-creature).
• int GetCreatureExploresMinimap(object creature); Returns TRUE if the creature is set to auto-explore the
map as it walks around (on by default). Returns FALSE if creature is not actually a creature.
• int GetSurfaceMaterial(location at); Get the surface material at the given location. (This is equivalent to

Release Notes / 5
the walkmesh type). Returns 0 if the location is changing the name (area, creature, placeable,
invalid or has no surface type. item, or door).
• float GetGroundHeight(location at); Returns • sNewName: the new name that the object
the z-offset at which the walkmesh is at the given will use SetName() does not work on player
location. Returns -6.0 for invalid locations. objects. Setting an object’s name to “” will
• int GetAttackBonusLimit(); Gets the attack bonus make the object revert to using the name it had
limit. The default value is 20. originally before any SetName() calls were
made on the object.
• int GetDamageBonusLimit(); Gets the damage
bonus limit. The default value is 100. • void BootPC(object oPlayer, string sReason =
“”); Remove oPlayer from the server. You can
• int GetSavingThrowBonusLimit(); Gets the optionally specify a reason to override the text
saving throw bonus limit. The default value is 20. shown to the player.
• int GetAbilityBonusLimit(); Gets the ability
bonus limit. The default value is 12.
• int GetAbilityPenaltyLimit(); Gets the ability
New Console Command
penalty limit. The default value is 30. MakePano <yaw_steps=18> <pitch_steps=4>
<view_angle=40>
• int GetSkillBonusLimit(); Gets the skill bonus
limit. The default value is 50. • This command will generate a sequenced series of
pictures in your screenshots directory.
• void SetAttackBonusLimit(int nNewLimit); Sets
the attack bonus limit. The minimum value is 0. • You can use the resulting files to stitch together a
360 panoramic.
• void SetDamageBonusLimit(int nNewLimit);
Sets the damage bonus limit. The minimum value • They are labelled with their respective yaw and
is 0. pitch angles: MakePano_p<pitch>_y<yaw>.tga
• void SetSavingThrowBonusLimit(int • view_angle describes the camera FOV in degrees.
nNewLimit); Sets the saving throw bonus limit.
The minimum value is 0. • The center point is the camera position, not the
player position.
• void SetAbilityBonusLimit(int nNewLimit); Sets
the ability bonus limit. The minimum value is 0. • Only one panoramic sequence can be taken at
a time. Repeated calls overwrite the previous
• void SetAbilityPenaltyLimit(int nNewLimit); Sets sequence.
the ability penalty limit. The minimum value is 0.
• void SetSkillBonusLimit(int nNewLimit); Sets • Make sure to provide sane values, otherwise your
the skill bonus limit. The minimum value is 0. game might hang while the disk fills up.
• int GetIsPlayerConnectionRelayed(object • You can omit the arguments to use the defaults as
oPlayer); Get if oPlayer is currently connected stated above.
over a relay (instead of directly). Returns FALSE
for any other object, including OBJECT_
INVALID.
• string GetEventScript(object oObject, int
nHandler); Returns the event script for the given
object and handler. Will return “” if unset, the
object is invalid, or the object cannot have the
requested handler.
• int SetEventScript(object oObject, int nHandler,
string sScript); Sets the given event script for the
given object and handler. Returns 1 on success, 0
on failure. Will fail if oObject is invalid or does
not have the requested handler.
Toolset Improvements
Modified Existing Scripting • The toolset is now much faster in many situations,
Instructions like opening and editing objects.
• object GetTransitionTarget(object oTransition); • Numerous crashes and memleaks have been fixed.
Get the destination object for the given object. All • The toolset will no longer move objects down to
objects can hold a transition target, but only Doors the walkmesh z-level when clicking/editing them.
and Triggers will be made clickable by the game
engine (This may change in the future). You can • Undo/redo is supported for object moving.
set and query transition targets on other objects for • Objects can be edited by double-clicking them.
your own scripted purposes. Returns OBJECT_
INVALID if oTransition does not hold a target. • The toolset keeps variables on triggers and
encounters when repainting their polygon.
• void SetName(object oObject, string
sNewName=””); Set the name of oObject. • The script compiler identifier limit has been
bumped to 16K (from 8K).
• oObject: the object for which you are

Release Notes / 6
• Casting a metamagic spell will no longer add
Other Issues the metamagic to the item used immediately
afterwards.
• Fixed aggressive removal of spell uses for bards/
sorcerers when charisma bonus is removed from • Weapon Focus (Trident) should now work
the character. properly.
• Fixed DC checks for spell-like abilities (instant • Prevent characters, when being moved in drive
feats). mode, from rarely appearing in incorrect locations
after area transitions.
• Local variables are now copied correctly to items
purchased from an infinite-stack in stores. • Ensure that the module’s desired HAK and TLK
files are loaded before we attempt to start character
• OnHit::SpellCast property will no longer overwrite creation within a multiplayer module (allows
properties of spell currently being cast by creature. servers to specify their own set of additional base
• Fixed an issue using EnforceLegalCharacters classes, races, et cetera)
where feats were temporarily removed, causing • Area of Effect objects (in areas containing PCs)
spell slots to disappear. have a higher AI priority.
• Fixed an issue where spell slots are removed • Area of Effect objects now move each time
because of premature calculation of primary their creature moves (to prevent creatures from
statistic as we equip the character during outrunning their own auras in busy areas).
validation.
• Character sheet will now be refreshed when a
• Fixed an issue where item properties can be player loses a level.
attributed permanently to a creature without
having the item equipped. • Attempting to buy a non-infinite item from a store
when you have a full inventory will no longer
• Fixed an issue where placeables could get stuck cause the item to disappear from store.
open/closed.
• Fixed rules for deflecting arrows (use the target,
• No longer remove creature weapons/armor when not the shooter, to measure whether we must wield
ItemLevelRestrictions or EnforceLegalCharacters the current weapon with both hands).
is on (since this is how horses are generated).
• Properly linked item property to their associated
• Ensure the PC is actually saved when a PC has game effects (removal of temporary game effects
been dominated (was saving the dominator’s would occasionally remove the item property
creature data in its place). effects instead).
• Binarized some of the 1.69 MDL files (horses, • Metamagic slots are now properly removed, if the
dragon wings) to improve the speed of loading metamagic feat is lost.
them into the game.
• Assassin’s Death Attack balanced to only fire once
• Dispel Check calculation now takes a tie as per round (first attack).
a remove effect, as specified in the Player’s
Handbook. • Assassin’s Death Attack paralysis length is based
only on assassin level, not total character level.
• Counterspell cleaned up properly, no longer grants
a wizard with an instananeous spell cast after it is • Quivering Palm will no longer work against Pale
finished. Masters with Deathless mastery (immunity system
fixed).
• OnClientLeave event is now called before the
creature is physically removed from the area, • For feat-based spells (such as Harper Scout sleep),
instead of after, to allow scripting to determine the GetSpellSaveDC now computed properly when
creature’s position as it leaves. the base ability score for the character is less than
10.
• Assassins with Death Attack can now use
Improved Sneak Attack without having Sneak • Extra spell slots earned from items are
Attack 1. unreadied instead of cleared when shapeshifting/
polymorphing.
• Player Party Changes will only cause other players
to stop hostile actions against the creature that has • Dungeon Master limboing a sitting creature will
now become friendly, instead of all hostile actions no longer make the placeable they were sitting on
against all creatures everywhere. unusable.
• Triggers and doors will no longer run default.nss
for scripting events if no script has been declared
for the event within the Aurora Toolset.
• Spells cast with cones will never target the caster
(when launched in some directions, the cone
would sometimes encompass the caster)
• Applying EffectDeath() on a target immune to
death magic will no longer cause the creature to
stop all of its actions.
• Remove all bad effects from a creature properly
(some bad effects were ignored).

Release Notes / 7
• Fix to Uncanny Dodge 2 feat (higher-level rogues
are now allowed to attack lesser rogues with
Sneak/Death attacks).
• Increase maximum number of charges that can be
placed on items from 50 to 250.
• Scripting command CopyItemAndModify can
now modify colours 1-9 for custom-content
weapons (note that all standard content only has
four colours)
• Weapon Master prestige class: For the Ki Critical
feat, the offhand weapon will no longer use
weapon of choice of onhand weapon. • Removed ability for shapeshifting players to
abuse the UI and use their normal spells while
• Monk’s Circle Kick: When current target leaves shapeshifted.
maximum attack range, we will now pick a new
target within attack range instead of standing and • Skinned animations no longer go out of sync in
doing nothing. some corner cases (like editing creature/armor
appearances.)
• Defensive Stance mode will be canceled properly
when casting spell or using an item. • Skybox position is now centered on the character,
so skybox warping will no longer be apparent
• Fixed issues with saving a character while when you’re at the edge of large maps.
polymorphed/shapeshifted (temporarily removing
the polymorph, saving the creature and reapplying • A crash has been fixed that would occur when
the polymorph). modding restduration.2da to very short values.
• Greater Sanctuary now stacks properly with • A crash with reading broken PLTs has been fixed.
Invisibility (True Seeing no longer pierces both
effects). • A crash related to script caching was fixed.
• Spell-like abilities assigned in Special Ability tab • A set of memleaks in resource handling was fixed.
in creature properties will be cast at level as set by • A serious issue with how shadow edges are
builder (was ignored and set to innate caster level). generated has been fixed. This happened with
• Combat modes are now terminated properly when complex custom models, like some Project Q
swapping from one combat mode to another. creatures, and resulted in visual corruption and
delayed, hard-to-fathom gameplay crashes.
• EffectDeaf() should now work properly for
perception. • A crash with delayed effects applying after a
player has left the server has been fixed.
• Monk’s Stunning Fist: Balance change to last only
one round instead of three rounds. • A rare cornercase has been fixed where removing
an ability penalty would not remove a linked
• Party list UI element should function correctly movement speed penalty (and possibly others).
now when one has a large party list and many
members leave/rejoin. • The limit for SetDescription() has been bumped
to 128KB (was: 8KB). Be aware that descriptions
• Custom-content added base classes can now be sent this way will be transmitted over the network
selected during character creation. each time a player views it.
• Players cannot cancel actions through the UI when • A crash triggered by damaging a caster-class
character is non-commandable (for example, player and having them roll a concentration check
while confused). after having left the server has been fixed.
• Special abilities and cleric domain feats can now • A rare cornercase crash in applying True Seeing
coexist in the Special Abilities radial menu if there has been fixed.
are >= 8 elements.
• A bug has been fixed where a immortal bodybag
• Added Rob Krajacarski and Jenny McKearney to would still despawn after a DestroyObject was
the English XP2 credits (they were in the credits queued.
for all other language builds).
• Drag-rotating the window viewport with
• Combined credits list for all languages into a middle mouse is now framerate- and resolution-
unified credits movie for XP1 and XP2. independent.
• Updated embedded zlib library. • A lot of crashes in the networking protocol
handling and related game state manipulation have
• Fixed case where Enforce Legal Characters could been fixed.
prevent a character from multiclassing into a new
class with a larger hit dice than the one previously • Security audit; removed numerous hacking
selected. methods from codebase.

WARNING! ALL MODULES CREATED/SAVED WITH THE NEVERWINTER NIGHTS: ENHANCED


EDITION TOOLSET ARE TAGGED AS REQUIRING NWN:EE AND WILL NOT WORK WITH THE
ORIGINAL NEVERWINTER NIGHTS.

Release Notes / 8

You might also like