Neverwinter Nights: Enhanced Edition
Changelog for Update 1.79 (03 December 2019) - Part I:
The new patch for #NeverwinterNights: Enhanced Edition on PC (1.79) is finally here! Thanks to our amazing community for your patience.
Check out the list of improvements, including bug fixes, 64bit support, achievements, keyholing, toolset updates & more in our patch notes below.
Major Features
- Both client and server are now 64bit binaries. We do not provide 32bit binaries anymore as of this patch. (The binary directories in the game install are now misnamed; we didn't change this yet but will in a future patch.)
- CodeBase (“Bioware Campaign Database”) has been replaced with sqlite3, as the old database code would not work when compiled with a 64bit compiler. All new database files end up in the database/ directory in your user home. They have the extension .sqlite3. Old database files will be imported once at module startup.
- A new configuration system has been put in place. Most client and server config is now stored in a file called settings.tml, instead of nwn and nwnplayer ini.
- We're changing how networking is done in NWN:EE, with the following benefits: Cryptographic server and client identity authentication; full network encryption to prevent traffic snooping - and in the case of public servers via the master, connection hijacking; floating connections (you might be able to IP/port-hop and retain your connection); better use of compression; and no more host/port confusion when connecting multiple times from behind the same LAN.
- Networking/Crypto: Servers can now have fixed identities that persist between restarts. This identity is stored in a file named “cryptographic_secret” in the user home. Leaking this identity allows others to impersonate your server, much in the same way as leaking a private CD key. Favourites and History storage will now use server identities if available, so that floating IP/port servers can be found again easily.
- We ported keyholing from Android. It is turned ON by default, but can be turned off with a console command (KeyholeToggle) or the configuration setting. There are also bindable keys.
- New main menu background art. (Also configurable in settings.tml)
- A management UI for NWSync was added to the Options dialog. It allows players to remove downloaded data they don’t want anymore.
- New script calls (see below).
Further Features
- Shaders now support #include. Use with care: It's not a real preprocessor, just a verbatim string replace.
- NWSync now cleans up downloaded manifest mappings when getting updates from known servers. It will not remove unreferenced data yet (as desktop users might not want to lose it), but that will come next.
- NWSync will automatically reconnect you to the server if you are still around after the download finishes (based on keyboard/mouse input detection).
- A debug UI for advanced users to showcase experimental new features and UI scenes has been implemented (Ctrl+Shift+F12 to access).
- A lot of new configuration keys have been added, too numerous to list here.
- Configuration will be imported from ini files. Once imported, the .ini will not be written anymore (but left in place in case you want to go back to a previous build).
- All configuration keys can be overridden via ENV variables (useful for automated server setups), like so: NWN_CONFIG_SET_key, where key is the fully-qualified configuration key.
- Some configuration still remains in .ini files; these will be migrated as we go along.
- The .tml file is in TOML format and has a full schema embedded for better introspection and tool-based editing.
- The debug UI offers access to the full new configuration system.
- The game now defaults to windowed mode (instead of exclusive fullscreen) on new installs.
- The game will now remember the window position between restarts when in windowed mode.
- A simple frame limiter has been added, which can be used to reduce CPU/GPU usage on battery-constrained devices. It is accessible through the Debug UI as explained below.
- Walking/Running with shift held down is now an invertible config toggle. This is also accessible through the Debug UI.
- NWSync now automatically purges outdated server manifests, removing stale and unneeded data. Manifests are considered outdated if they are coming from the same server URL and carry the same group_id (see NWSync documentation).
- NWSync can now download offline modules from preconfigured servers. This is a experimental feature and only accessible via the Debug UI, and requires adding a specially-prepared repository.
- The debug UI offers to purge unwanted nwsync manifests and all associated data. This will eventually be turned into a more user-friendly UI.
- Music and ambient sounds are now loaded through ResMan and can thus be in hak and nwsync.
- The game will now read plain mp3 files (the .bmu extension rename is still required, because this extension is used in all existing resources/haks).
- The game user home (i.e. Documents/Neverwinter Nights) is now provisioned “development” directory, which detects changes and content is reloaded at runtime. This directory sits at the very top of the resources search path (unlike override/, which is sitting below ERF containers such as HAKs).
- NB: This content reload only affects resource types that are not cached. For example, it can be used to inject scripts or GFF data, but not replace textures on the fly.
- ResMan resource management and priorities has been rewritten. The debug UI can show this to you.
- [Linux/Mac only] The game can now optionally mmap() all core game resources. This speeds up loading times drastically on some systems. This is turned off by default.
- We have added a script command to JIT-compile and run a chunk of NWScript.
- We have added functionality that allows attaching UUIDs to objects. These UUIDs are persisted to GFF and can be used by authors to identify items across module restarts, among other use cases.
- Script calls that serialise/deserialise objects (StoreCampaignObject and CopyObject as of now) can now work with the following object types: Creatures, Items, Placeables, Waypoints, Stores, Doors, Triggers.
- Model compiler: Added a new alias to nwn.ini: MODELCOMPILER (instead of clobbering the installation directory)
- New console command: compileloadedmodels (comppiles all loaded models, including binary)
- New console command: compileloadedasciimodels (compiles all loaded models, only ascii)
- New console command: compilemodel (specific model, will load and unload it for you even if it is not currently loaded)
- New command line switch: nwmain.exe compilemodel (same as the above console command; will compile the model and exit the game immediately)
- NWSync now shows network and storage speed separately while downloading.
- A new toolset build has been added. See the Toolset section below for details.
- New console command: cfg [value] to change config values.
- Configuration keys to set min-height (from ground level), min-radius (percentage of screen), and max-radius (also percentage of screen) for keyholing have been added. These are available through the Debug UI and by editing settings.tml.
- A configuration key that allows toggling keyholing alongside tooltip (TAB, by default) has been added. It is available through the Debug UI and by editing settings.tml.
- DM Creator Palettes can now contain plain CExoString entries in addition to STRREFs. Strictly speaking, this was possible before (node name was DELETE_ME); we’ve renamed that node to - surprise - “NAME” to make it * prettier.
- Experimental area precaching has been added. It is guarded behind a configuration toggle and defaults to off.
Breaking Changes
- CopyObject() now also copies the plot flag for creatures and items. This used to not be the case, but copying the plot flag is more consistent since it matches all other script calls for copying objects (i.e. CopyItem()).
- Dragon Disciple characters will not be back-portable to earlier game versions, as the baked-in stats modifiers are now applied at runtime. Existing characters will be written at first save (see below for details).