rollNW is an homage to Neverwinter Nights in C++. It started as reusable NWN infrastructure and is broadening toward support for a modern authored RPG toolset/game: content formats, rules, scripting, rendering validation, networking foundations, and the runtime services needed to make those pieces authorable and playable. See the docs and tests for more info. Opening an IDE is going to get the most current view.
Transition warning: rollNW is in active transition. Older docs and APIs may show a narrower NWN-library cross section of the project. Until there is a real release, assume APIs and subsystem boundaries can move.
- Smalls is a statically-typed scripting language designed for RPG tooling. It is the active rules/script authoring path and explores replacing NWScript-style workflows with modern features (modules, generics, first-class arrays/maps) while staying small enough to embed in rollNW-based tools. See the docs for a language spec.
- The beginnings of a novel rules system and combat engine built on smalls.
nw::gfx, a thin Vulkan-focused rendering layer intended to support renderer experiments, headless graphics validation, and eventual authored-toolset/game viewports.- Objects (i.e. Creatures, Waypoints, etc) are implemented at a toolset level. In other words, their features cover blueprints and area instances, with support for effects and item properties. Loading objects from resman or the filesystem is transparent whether the source is GFF or JSON.
- A Resource Manager that can load all NWN containers (e.g. erf, key, nwsync) and also Zip files.
- Implementations of pretty much every NWN File Format
- An implementation of NWN's Localization System focused on utf8 everywhere.
- A recursive descent NWScript Parser. This remains useful for NWN compatibility, but new rules and scripting experiments are moving toward Smalls.
mudl, a renderer-backed NWN model/spell/VFX viewer and headless capture tool used to validate creature assembly, particle and programmable FX playback, glTF/PBR rendering, and the asset paths a future toolset needs to trust. Renderer design notes inlib/nw/render/docs, including the particle system overview.
- aims to implement the reusable RPG, toolset, resource, rendering, networking, and runtime foundations for a modern authored game inspired by NWN, with current effort on the practical pieces (rules, content formats, renderer validation, authoring workflows) a playable toolset/game will need.
- focuses on authoring and usage, instead of doing things the Aurora Engine Way.
- follows utf8 everywhere.
- hews as close to C++ Core Guidelines as possible.
- aims to be as easily bindable as possible to other languages. I.e. only library specific or STL types at API boundaries.
The library uses CMakePresets.json as its build system. The naming convention for non-ci presets is {platform}-dev[-{build tool}][-debug]. In debug presets, build files are written to build-debug, otherwise build. On macOS and Linux, ninja is always to the build tool of choice so it is omitted. On windows the default build tool is Visual Studio 2022.
Examples:
$ cmake --preset=linux-dev
$ cmake --preset=macos-dev-debug
$ cmake --preset=windows-dev-vs2019-debug
$ cmake --preset=windows-dev
Once your configuration is done, everything is the same between platforms. To build:
$ cmake --build --preset=default
$ cmake --build --preset=debug
To install all binaries and test data to local bin dir (build or build-debug):
$ cmake --install build --prefix=.
$ cd bin
$ ./rollnw_benchmark
To run ctest:
$ ctest --preset=default
A lot of what's here was written in the 2011-2015 range as part of personal minimalist toolset, modernized and with new EE stuff added. In some sense, it's a work of historical fiction -- it's what I'd have suggested at the start of NWN:EE: get the game and the community on the same set of libraries. Similarly to an older project that asked "what if Bioware had stuck with Lua?". The answer to that was pretty positive: a decade ahead, at least, of nwscript.
- Bioware, Beamdog - The game itself
- abseil - Foundational
- GoogleTest - Testing
- glm - Mathematics
- Vulkan, Dear ImGui - Graphics and tool UI
- loguru, fmt - Logging
- stbi_image, NWNExplorer, SOIL2 - Image/Texture loading.
- inih - INI, SET parsing
- nholmann_json - JSON
- libiconv, boost::nowide - i18n, string conversion
- sphinx - documentation