|License: MIT| |ci| |CodeQL| |codecov| |Documentation Status| |pypi|
rollNW
======
rollNW is an homage to Neverwinter Nights in C++ and Python.
See the `docs `__ and
`tests `__ for more info,
or open an IDE in browser in the quickstart section below.
**This library is a work-in-progress. There will be serious refactoring
and until there is a real release, it should be assumed the library is
in flux.**
-----------------------------------------
features
--------
- The beginnings of a novel `Rules System `__ designed for
easily adding, overriding, expanding, or removing any rule and reasonable performance
- A `combat engine `__ that's very
nearing being able to simulate melee battles.
- Objects (i.e. Creatures, Waypoints, etc) are implemented at a toolset level. Or in other words their features cover blueprints, area instances, with support for effects and item properties. They are still missing some new EE things. Player Characters are read only, for now.
- A recursive decent `NWScript Parser `__
- Implementations of pretty much every `NWN File Format `__
- An binary and ASCII `Model Parser `__. See also the `mudl `__ model viewer side project.
- A Resource Manager that can load all NWN containers (e.g. erf, key, nwsync) and also Zip files.
- An implementation of NWN's `Localization System `__ focused
on utf8 everywhere.
-----------------------------------------
goals
-----
- aims to implement an RPG engine inspired by NWN, excluding graphics and networking.
- focuses on 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.
-----------------------------------------
quickstart - Open VS Code in your Browser
-----------------------------------------
|Open in Gitpod|
`Github Codespaces `__ is
available to those in the beta.
-----------------------------------------
History
-------
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.
-----------------------------------------
Moonshots
---------
You make ask yourself, why? But, to paraphrase Tennyson, ours isn't to
question why, it's but to do and die and learn and maybe make neat
things. In that spirit, here is a list of crazy projects that this
library hopes to facilitate and that all fly in the face of “WHY?”.
- A nwscript `Language
Server `__
- A modern, cross-platform nwexplorer.
- And, of course, the ever elusive open source NWN Toolset, with
plugins, scripting, and a built-in console.
-----------------------------------------
Credits
-------
- `Bioware `__, `Beamdog `__ - The game itself
- `abseil `__ - Foundational
- `Catch2 `__ - Testing
- `glm `__ - Mathematics
- `loguru `__,
`fmt `__ - Logging
- `stbi_image `__,
`NWNExplorer `__,
`SOIL2 `__ - Image/Texture loading.
- `inih `__ - INI, SET parsing
- `nholmann_json `__ - JSON
- `toml++ `__ - For settings.tml
- `libiconv `__,
`boost::nowide `__ - i18n, string conversion
- `doxygen `__, `sphinx `__,
`breathe `__ - documentation
.. |License: MIT| image:: https://img.shields.io/badge/License-MIT-yellow.svg
:target: https://opensource.org/licenses/MIT
.. |ci| image:: https://github.com/jd28/rollnw/actions/workflows/ci.yml/badge.svg
:target: https://github.com/jd28/rollnw/actions?query=workflow%3Aci
.. |CodeQL| image:: https://github.com/jd28/rollnw/actions/workflows/codeql-analysis.yml/badge.svg
:target: https://github.com/jd28/rollnw/actions/workflows/codeql-analysis.yml
.. |codecov| image:: https://codecov.io/gh/jd28/rollnw/branch/main/graph/badge.svg?token=79PNROEEUU
:target: https://codecov.io/gh/jd28/rollnw
.. |Open in Gitpod| image:: https://gitpod.io/button/open-in-gitpod.svg
:target: https://gitpod.io/#https://github.com/jd28/rollnw
.. |Documentation Status| image:: https://readthedocs.org/projects/rollnw/badge/?version=latest
:target: https://rollnw.readthedocs.io/en/latest/?badge=latest
.. |pypi| image:: https://badge.fury.io/py/rollnw.svg
:target: https://badge.fury.io/py/rollnw
.. toctree::
:caption: getting started
:maxdepth: 1
gs/building
gs/using
gs/differences
.. toctree::
:caption: structure
:maxdepth: 1
structure/formats
structure/i18n
structure/kernel
structure/model
structure/objects
structure/resources
structure/rules
structure/script
structure/serialization
.. toctree::
:caption: c++ api
:maxdepth: 1
api/classlist
api/definelist
api/enumlist
api/functionlist
api/typedeflist