News Updates

News
Google Play Update to Neverwinter Nights: Enhanced Edition

Google Play Update to Neverwinter Nights: Enhanced Edition

July 21 2020 in

Hello friends & fellow adventurers,

We just released a patch for Neverwinter Nights: Enhanced Edition on Google Play!

With this update, Android players will see some major features and fixes— including 64-bit support, restored compatibility with Persistent Worlds, and access to Ossian's Premium Adventure, Tyrants of the Moonsea, as DLC.

Patch Highlights

  • Added New DLC: Tyrants of the Moonsea
  • Native 64-bit support
  • Restored network compatibility with Persistent Worlds
  • Menu-bar can now dock at side of screen when viewing the log
  • Chat panel is now smaller to reveal more screen space
  • Screen no longer shrinks when using keyboard
  • Added higher resolution game textures
  • Users can now view their achievements via the options menu
  • Context button's target-selection now follows the camera
  • Many bug fixes and performance improvements
  • Added an in-game GUI for nwsync

Main-capsule-image-616-x-353 (1).png

Full Patch Notes

Features

  • Adds access to a new DLC: Tyrants of the Moonsea
  • Restores crossplay compatibility with desktops and adds crossplay with consoles, including access to Persistent Worlds.
  • 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.
  • Adds native 64-bit support. 32-bit support will still be available for Neverwinter Nights: Enhanced Edition on Android.
  • CodeBase data has been replaced with sqlite3, as the old database code would not work when compiled with a 64-bit compiler. All new database files end up in the database/directory in your user home with the extension .sqlite3. Old database files will be imported at module startup.
  • Added a new configuration system. Most client configuration is now stored in a file called settings.tml, instead of nwn and nwnplayer ini.
  • Networking improvements, including:
    • 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;
    • Added floating connections (you might be able to IP/port-hop and retain your connection);
    • Improved use of compression; and,
    • Removed issue around 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.
  • Added management UI for NWSync to the Options dialog allowing players to remove downloaded data they don’t want anymore.
  • Shaders now support #include. Use with care: It's not a preprocessor, but a verbatim string replacement.
  • 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 active after the download finishes (based on keyboard/mouse input detection).
  • Added debug UI for advanced users to showcase experimental new features and UI scenes.
  • Added new configuration keys.
  • Configuration will now 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.
  • Added simple frame limiter, which can be used to reduce CPU/GPU usage on battery-constrained devices. It is accessible through the Debug UI as explained below.
  • 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 pre-configured servers. This is an 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).
  • 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.
  • New console command: compileloadedmodels (compiles all loaded models, including binary)
  • New console command: compileloadedasciimodels (compiles all loaded models, only ascii)
  • New console command: compilemodel <name> (specific model, will load and unload it for you even if it is not currently loaded)
  • New console command: cfg <key> [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.
  • Experimental area precaching has been added. It is guarded behind a configuration toggle and defaults to off.

Fixes

  • Performance and memory usage improvements at NWSync startup.
  • History/Favorites have been fixed to once again show what has been saved to the .ini.
  • We fixed the SetName and SetHiddenWhenEquipped script commands not reliably updating all clients.
  • We fixed some doors becoming unclickable after having been destroyed, despite having a scripted transition present.
  • We fixed the script compiler sometimes confusing functions where the full name of one is a prefix of the other ("Action" <-> "ActionTwo").
  • We fixed module content (hak, tlk, nwsync) not properly unloading when disconnecting from a server.
  • We fixed a bug where resources were indexed twice when loading a module, resulting in prolonged load/connect times.
  • We fixed an issue where sending visual transforms or material updates for creatures only seen on the party bar, but not yet in an area, crashed clients.
  • C++: Thousands of cases of undefined behaviour have been addressed. A lot of code duplication has been removed in the process.
  • KTX texture loading order has been fixed.
  • The Load/Save dialogue now properly removes savegames from the resource manager when exiting the UI.
  • GL Render Culling was fixed (i.e. flickering trees and keyholing showing backfaces of geometry instead of punching through).
  • We fixed invalid user savegames being deleted on read errors; for example when erroneously storing savegames in subdirectories, or when AV denies access to reading the .sav.
  • Automatic tangent generation has been fixed.
  • A memleak in script evaluation was fixed.
  • SetPhenoType: The constraint condition was too narrow in clamping the phenotype; this has been fixed.
  • SetName() on areas now sends the configured language, instead of English.
  • The rather arbitrary built-in effect icon limit has been removed.
  • Object Visual Transforms: We now send VTs for newly-created doors and placeables. Some inefficiencies in network updates have been removed.
  • Material Shader Params: Some inefficiencies in network updates have been removed.
  • The server now waits 3 seconds before attempting to list with the master, allowing a module to load in non-interactive use.
  • Running a local multiplayer game now should never reject the primary player if the master is unreachable.
  • A case where arturo texture animations failed to animate has been addressed.
  • A bug in the creature serialisation code (for StoreCampaignObject) has been addressed where it would erroneously embed transient object IDs for inventory items, resulting in issues when loading this creature again in a persistent world setting.
  • A nullptr deref crash related to funny/zombie-walking a player was fixed.
  • A nullptr deref crash when clicking placeables without a valid player creature was fixed.
  • A thread race crash during sound system initialisation was fixed.
  • A nullptr deref crash when the server sends a weapon switch request for a creature where the model did not yet load was fixed.
  • A selection of nullptr deref crashes when the server sends a creature update for a non-existing creature were fixed.
  • A case where encounters containing creatures only of the same CR would fail to select the proper amount/difficulty was fixed.
  • NWSync SQLite migration stability has been improved. They are now defined in code, and no longer in the installation directory. The schema, of course, remains public.
  • The effect limit configuration keys have been uncapped. They used to be limited to [1, default]; they now are [0, 255]. Beware: You may run into strange behaviour if you exceed a total bonus/penalty of -128, 127 or 255 regardless of configuration; since some values are internally typed with 8 bits.
  • Hosting local multiplayer games on Mac and Linux, where the system hostname is not resolvable through DNS, has been fixed.
  • The server config "Server vault by player name" does not require "Sticky player names" enabled anymore to work. This will help servers that want to set up custom authentication schemes.
  • We fixed an issue where the threadpool would not spawn enough worker threads if your CPU had less than three (virtual) cores.
  • Scripting: The effect limit accessors now adhere to the configuration constraints. Values set through these will always override the user-configured values for the running module only.
  • We addressed a custom content-related crash when adding invalid items to merchants.
  • A handful of UI-crashes inside NWSync have been fixed.
  • The crash reporter now says which OS it came from.
  • We fixed an issue where playing wav ambient sounds would confuse the resource manager into either leaking or freeing memory excessively.
  • A serious memleak when rendering skinmeshed objects was fixed.
  • A memleak when calculating tangent space basis was fixed.
  • An issue where the internal resource manager would needlessly evict recently used files under memory pressure was fixed, which had resulted in disk churn.
  • A nullptr deref in the expression parser of TestStringAgainstPattern has been fixed. It triggered when trying to match empty groups following a token (i.e. “hello()”).
  • We fixed a crash when unloading compiled skinmesh models.
  • We fixed a crash when loading uncompiled skinmesh models that had invalid array lengths for the bone array.
  • The uncompiled model parser now skips empty lines. This will not fix invalid array lengths. Models that have invalid array lengths in any definition will still behave erratically and/or not animate and/or just be broken, but will no longer cause crashes.
  • We fixed a memleak in loading tile walkmeshes.
  • We fixed a memleak in internal string handling.
  • The premium modules have been fixed to once again run on 64 bit without crashing. The fix was to strip the DRM! There are no script sources in the package yet due to time constraints on this patch, but we will be providing them in the future.
  • We fixed the script call CopyItem not properly copying item description overrides.
  • We fixed CopyObject() not properly copying the faction of a creature.
  • We fixed Store/RetrieveCampaignObject() not properly storing/retrieving the faction of a creature.
  • Player characters stored/copied now end up in the Commoner faction (it used to be a the PC faction; with no valid party).
  • We fixed a crash that happened when trying to RetrieveCampaignObject a creature with an invalid faction.
  • We fixed the game not properly reconnecting immediately after clicking Cancel during a connection attempt.
  • We fixed “legacy CD keys” not being sent properly to the server during the connection process.
  • We fixed some memory management issues in CExoResMan, where having a lot of RAM would make it evict cached resources early.
  • The Examine Panel now scales its UI properly.
  • We now return to the premium selection UI when cancelling out of running a premium module, instead of the normal module selection.
  • We fixed a thread race in the game client when receiving network packets on the builtin server, resulting in issues connecting to local servers.
  • We fixed the configuration option server.restore-spell-uses-on-login.
  • Palemaster natural AC progression has been restored to what it should be (it was off by one level after 4).
  • The script call ActivatePortal() has been fixed to no longer show “Cryptographic Handshake Error”.
  • A small memory issue in RESREF handling was addressed, that could occasionally crash clients when transitioning via ActivatePortal.
  • We restored ResMan priority behavior with regards to haks vs. modules.
  • We fixed CopyObject not duplicating an item if the target inventory or location was not valid.
  • A potential crash fix inside the HTTP library when running NWSync repeatedly.
  • The ResMan debug UI has gained a few more buttons to help custom content authors.
  • There is a new resman configuration option to log failed resource lookups.
  • We fixed a bug where in singleplayer, the 2da cache would not clear properly between module runs with differing custom content.
  • Object hilite state and colors is now configurable - clientside - in settings.tml.