Hello friends, we're now shipping dev build 29! Please note: Modules saved with the toolset of this patch are flagged as Compat 1.84, due to some new script commands. As always, we appreciate your continued support! [h2]Game, Logic and Rules[/h2] [list] [*] Shields: Now take their AC from the BaseAC column, no longer hardcoded. Still only works for the three base shield types! [*] Game: Reverted the MoveToObject fRange change; fRange is now once again ignored for that specific breakage. This fixes various issues in custom content modules, notably the elusive wizard in Aielund III Pt 3. [*] Game/baseitems: New column IsMonkWeapon replaces all hardcoded checks against BASETYPE_KAMA. [*] Game/baseitems: Custom content can now make Flurry Of Blows also work with ranged weapons (when IsMonkWeapon is enabled). [*]Game/baseitems: New column WeaponFinesseMinimumCreatureSize. Takes 0/**** or the minimum creature size type needed to finesse. [*] Game: Other stealthed/concealed creatures no longer pop up briefly when transitioning into a new area or into a doored-off room. [*] Game: Fixed creatures doing a weird shimmy/turny when coming to a stop. [*] Game data: Added “Neverwinter Chess” module from old Bioware demo modules. [/list] [h2]Config[/h2] [list] [*] Game/Config: You can now hide player quickchat lines from the chat window (Config->UI->Feedback) [*] Config: Exposing codepage setting under Game->Advanced; this should make it easier for Russian language players to set the correct codepage without having to edit settings.tml. [*] Config: New option to enable SQLite API tracing to the server log: Show all queries, or just show queries running longer than N msec. [/list] [h2]Tech[/h2] [list] [*] Core: Upgraded static openssl to 1.1.1k. [*] Core: Upgraded libyuv to latest master upstream. [*] Core: Upgraded SQLite to version 3.36.0. [*] Renderer: VDO optimisations in preparation for OpenGL 3.3. [*] Renderer: The fallback envmap is now a globally shared object, not tied to the scene. [*] Renderer: Fixed most visual oddities related to water refraction (fringing, edge gaps, highlight strangeness). [*] Renderer: Fixed a regression that prevented custom shader params being set in scripting. [*] Renderer: Improved TSB generation, doing away with some visual glitches when adjacent faces had opposing hardness. [*] Renderer: Fixed a crash when setting hilite color of party members clients haven’t seen yet. [*] Renderer: Fixed a crash when setting a texture override for a creature object that the client hasn’t seen yet. [*] Nk/Nui: Image renderer can now render webm. [*] Nk/Nui: Fix key repeat not working. [*] Nk/Nui/json: NWSync Repository CExoLocStr fields now convert to the local game encoding; should fix various special characters. This means you now need to have the json once again properly encoded as UTF-8. (e.g. module descriptions in Polish) [*] Nk/Nui: Copy/Paste now works with Cmd on Mac, instead of Ctrl. [*] Game Launcher: Repositories can now advertise websites (such as the Vault on the Curated repo). [*] Game Launcher: Modules can now have a list of web links. [*] Game Launcher: Repository Info now shows the origin URL. [*] NWSync Management UI: Text clarity improvements to the disk space effect of deleting manifests. [*] NWSync UI: Sped up manifest loading. Game Launcher and Storage UI should now appear much faster. [*] NWSync UI: Fixed the NWSync housekeeping UI no longer popping up when deleting multiple manifests in a row. [*] NWSync UI: NWSync Storage UI now remembers selected checkboxes and sorting. [*] NWSync: Game no longer crashes when running out of disk space while downloading manifest, shows error instead. [*] NWSync/SQLite: We now use soft limits on shard size, not hard limits. This fixes a very rare “out of disk” error when trying to write metadata even though plenty of free space is available. [*] VM: Fixed a crash in reconciling automap data when trying to load a player TURD. #309 [*] VM: Fixed CopyObject not triggering OnAreaEnter (fixes HotU Beholder caves anti-magic restore) [*] VM: Fixed SetCampaignString(, “”) resulting in a SQL error. Now it deletes the variable from the database instead. It now also deletes entries when other types are “empty”. [*] VM: GetCurrentlyRunningEvent now has param bInheritParent for cases such as CreatureOnDeath/Damaged returning the wrong event ID otherwise. [*] VM: Fixed Area Of Effect sometimes not returning the expected objects due to local object positions in memory not updating correctly. #52 [*] VM: SQLite: soundex() now available to scripting. https://sqlite.org/lang_corefunc.html#soundex [*] VM: SQLite: Math functions now available to scripting. https://sqlite.org/lang_mathfunc.html [*] VM: Cassowary: Fixed a crash when calling AddConstraint with invalid math formula. #293 [*] VM: We had to change how Create/Copy/DestroyArea works. Most prominently: [*] Areas you create via Create/Copy now have their own auto-generated resref in the nw_ namespace; they no longer have the same resref as the originating area/template. You cannot influence this. nw_ is also the same namespace that the toolset reserves for game-builtin content, so you shouldn’t be able to clobber into it. Instanced areas go into CURRENTGAME:, until they are saved into a .sav. (This also means you can CreateArea with the new template, if you really wanted, though why would you? You’d get the area as it looked like at original instantiation time) [*] Areas are now saved to savegames correctly and savegames no longer corrupt when the area count changes. [*] Savegames now also store a serialised image of the .are data. [*] This means that CreateArea(“originalresref”) in savegames will now instance the area as saved in the savegame, NOT as designed in the toolset. This is because modules don’t actually load anymore after a savegame; the savegame replaces the original module. [*] CopyArea now supports assigning a new tag and name directly on instantiation. [*] This is a high-risk change, as it touches significant parts of the area load codepath. We’d appreciate thorough testing. [*] Movies: We no longer show the Bioware credits for all modules; only the last module in each main campaign. [*] Movies: Fixed error/crash when calling EndGame(“”). Now the game shows no movie instead, and just quits the main menu. [/list] [h2]New Script Commands[/h2] [code]// Create a RunScript effect. // Notes: When applied as instant effect, only sOnAppliedScript will fire. // In the scripts, OBJECT_SELF will be the object the effect is applied to. // * sOnAppliedScript: An optional script to execute when the effect is applied. // * sOnRemovedScript: An optional script to execute when the effect is removed. // * sOnIntervalScript: An optional script to execute every fInterval seconds. // * fInterval: The interval in seconds, must be >0.0f if an interval script is set. // Very low values may have an adverse effect on performance. // * sData: An optional string of data saved in the effect, retrievable with GetEffectString() at index 0. effect EffectRunScript(string sOnAppliedScript = "", string sOnRemovedScript = "", string sOnIntervalScript = "", float fInterval = 0.0f, string sData = ""); // Get the effect that last triggered an EffectRunScript() script. // Note: This can be used to get creator or tag, among others, of the EffectRunScript() in one of its scripts. // * Returns an effect of type EFFECT_TYPE_INVALIDEFFECT when called outside of an EffectRunScript() script. effect GetLastRunScriptEffect(); // Get the script type (RUNSCRIPT_EFFECT_SCRIPT_TYPE_*) of the last triggered EffectRunScript() script. // * Returns 0 when called outside of an EffectRunScript() script. int GetLastRunScriptEffectScriptType(); // Hides the effect icon of eEffect and of all effects currently linked to it. effect HideEffectIcon(effect eEffect); // Create an Icon effect. // * nIconID: The effect icon (EFFECT_ICON_*) to display. // Using the icon for Poison/Disease will also color the health bar green/brown, useful to simulate custom poisons/diseases. // Returns an effect of type EFFECT_TYPE_INVALIDEFFECT when nIconID is < 1 or > 255. effect EffectIcon(int nIconID); [/code]