Happy New Year, friends!
We’re kicking off 2020 with a brand new development patch for you to play with!
Development Patch 8193.6 focuses on creation for both single player and multiplayer. This dev patch is best suited for our content creator community, as it requires technical knowledge of our toolsets (and a willingness to endure a few issues). We hope you have some fun breaking these features— fair warning: we’re expecting there to be some outstanding bugs in this build.
This patch is network-compatible with all other 8193 releases; however, new features will not work when the patch revision differs (and characters may fail to pass ELC).
Check out the full patch notes below!
All the best,
- Beamdog NWNEE Team
Customise weapons-related feats in baseitems.2da
Weapons-related feats (Focus, Epic Focus, Spec, Epic Spec, Improved Crit, Overwhelming Crit, Devastating Crit, Weapon of Choice) can now be customised on a per-baseitem case.
Please refer to baseitems.2da for the new columns: WeaponFocusFeat EpicWeaponFocusFeat WeaponSpecializationFeat EpicWeaponSpecializationFeat WeaponImprovedCriticalFeat EpicWeaponOverwhelmingCriticalFeat EpicWeaponDevastatingCriticalFeat WeaponOfChoiceFeat
Custom weapon visual effects
Weapons can now have custom visual effects (in addition to the stock fire, ice, electricity, etc.)
Please refer to the new file iprp_visualfx.2da for details.
Custom spellcaster classes
We've added (somewhat partial) support for custom spellcaster classes by "unhardcoding" a lot of the builtin constants and references.
Please refer to classes.2da for the new columns: MemorizesSpells SpellbookRestricted PickDomains PickSchool LearnScroll Arcane ASF SpellcastingAbil SpellTableColumn CLMultiplier MinCastingLevel MinAssociateLevel CanCastSpontaneously
Note that not all combinations are valid. We recommend cloning one of the existing caster classes and then start customising from there. When adding spellcasting to new classes, remember to also update existing columns.
There is also a new ruleset entry: COMPANION_LEVELS_STACK, defaulting to 0.
Level of Detail
You can now specify LODs via a new file type ".lod". When the game loads the model mymodel.mdl, it will look up mymodel.lod. Inside that file, add the following lines:
The game supports LOD files with up to three levels, as shown above. You may omit the last entry. The first line is the high-resolution model; the other two are meant to be lower-resolution model files, that will be dynamically swapped out as the camera reaches the given distance.
Please note that LODs are highly dependent on the screen resolution of the client. The actual mechanisms here need to still be figured out; but for now, we'd suggest choosing LOD distances as if the user had a 1080p screen. To support other resolutions, there is a configuration slider in the debug settings (Ctrl-Shift-F12, select "Config", key: "graphics.lod.scale-factor") that users can influence LOD distances with.
The game now supports 50 more custom animation slots (LOOPING_CUSTOM21 -> 70).
Script call to swap out textures on the fly
A new script call was added:
// Makes oPC load texture sNewName instead of sOldName.
// If oPC is OBJECT_INVALID, it will apply the override to all active players
// Setting sNewName to "" will clear the override and revert to original.
void SetTextureOverride(string sOldName, string sNewName = "", object oPC = OBJECT_INVALID);
Changes made through this call will appear immediately on clients.
When downloading something via NWSync, disk writes now happen asynchronously while more content is downloaded. This should minimise occurrences of "Waiting On Storage". If this is giving you grief, you can turn it off in settings via the key "nwsync.transfer.flush.async".
The NWSync Downloader UI was swapped out with a new version, which is now rendered in Nuklear. It has a fancy graph and a pause button.
Finally, the Storage Manager (Options -> NWSync) now has two tabs: Servers, and Modules. Server manifests (i.e. when joining a PW that offers files) show up in the Server tab.
The Modules tab will show all singleplayer/offline modules you have downloaded via NWSync. To facilitate this, the Storage Manager UI now can download offline modules for you; however, by default, no remote repositories offering this are added to your game.
To add a remote repository, add the following lines to your settings.tml (right at the top is fine, the game will sort them in properly on next launch):
To actually generate a repository of your own that can offer singleplayer modules for download, you need to generate NWSync manifests that have module contents in them (nwsync_write --with-module --group-id N ...). Finally, add all manifests into a big json array in modules.json in the repository root (the nwsync_write tooling will update soon to do this for you). See the sample repository if it is unclear.
Modules downloaded this way will show up under "Other Modules" when clicking Singleplayer -> New Game.
There is a new, experimental, texture caching system in place that will speed up GL texture binding, depending on your hardware (especially if you are CPU-bound). It is enabled by default
, but you can turn it off via the config flag graphics.experimental.aggressive-texture-caching, if it turns out to have issues.
We have seen - depending on scene complexity and the amount of texture maps in use - dramatic performance improvements. We'd appreciate feedback on this.
We fixed a shader issue that would result in illumination appearing on content that was intended to be black (e.g. the tile borders in the “Dungeon” tileset).
We fixed mipmaps not being generated for non-compressed textures.
ResMan can now use more than 256MB of memory for caching. There is a configuration option to specify the percentage of detected physical memory that ResMan can use. Additionally, new defaults in place will avoid I/O churn, resulting in vastly improved performance in complex scenes.
The priorities of userpatch, modules, haks, and override have been restored.
- Toolset now allows selection of heads from custom slots 50-99.
- The up and down arrow keys for Adjust Position now progress in perfect sequence.
- We fixed a bug where double-clicking on an area entry could cause parts of the toolbar to grey out.
- We fixed a truncation issue when using search & replace in the script editor.
- You can now add a NAME CExoString field to your custom tileset palettes, instead of having to put a STRREF.
- Object descriptions over 2000 characters long are no longer truncated.
- The toolset no longer crashes when moving the start location between areas open in multiple tabs.
- A group of raised objects now retains their z-level when moved.
- [Windows] We fixed large strings, such as chat logs, disappearing if they exceed 1024 characters.
- We addressed an issue where models/resources would leak over when hopping servers, sometimes resulting in a crash.
- We updated the crash reporter text and URL.
Have a great start into 2020!