An extensive collection of C# libraries for producing RPGCore mechanics and more.
RPGCore started as an in-Unity framework for producing RPGCore games. Nowadays; RPGCore is a collection of .NET Standard libraries that offer specialised sets of features.
|RPGCore.Behaviour||Provides a node-based modular behaviour system.|
|RPGCore.Packages||Provides an API for processing and bundling game content.|
|RPGCore.Inventories||Provides an API for containing and moving items.|
|RPGCore.Items||Provides items with modular behaviour.|
|RPGCore.Traits||Provides generic containers for character stats.|
These libraries are unit-tested using the NUnit test framework.
The RPGCore.Demo.BoardGame project is demo project that utilises RPGCore.Behaviour and RPGCore.Packages to produce a game that isn't in the style of an RPG.
This demo project and be run from the Command Line via RPGCore.Demo.BoardGame.CommandLine and via Unity; however this demo is in it's very realy phases and acts more of a proof-of-concept.
This demo contains a basic set of nodes that you might expect to find in a typical RPG implementation.
There isn't much to this demo at this point in time.
RPGCore.Packages is an API for processing and bundling game data. For ever resource managed by RPGCore.Packages, it provides tagging, metadata and dependencies; which work together to form a basic CMS.
RPGCore.Packages is currently being used to drive the content of my portfolio website.
RPGCore.Packages also provides a customisable service-stack for importing resources and building resources to packages.
- Custom resource importers can tag, write metadata and register dependencies for all resources they import.
- Custom resource exporters can compress, optimize and write new resourcs to the exported directory.
RPGCore.Behaviour is a node-based modular behaviour system. It can be used to describe the real-time or restful behaviour of any gameplay element.
How it works
RPGCore.Behaviour operates on node collections called "graphs".
Nodes have inputs and outputs that allow nodes to get connected together. Every "connection" from one node to another is represented by a single object that both nodes share a reference too. Output sockets from nodes can write to the connection object whereas input sockets can only read from the connection.
Nodes can also connect directly to other nodes. This is useful for simpler graph-based solutions like behaviour-trees and state-machines. Nodes can use the Graph APIs to determine which node their inputs and outputs are connected too.
RPGCore.Behaviour aims to be fully-serializable and support multiplayer content aswell.
RPGCore.Behaviour is suitable for the following networked gameplay environments:
- Deterministic Simulation with behaviour driven by RPGCore.Behaviour.
- RPGCore.Behaviour driven server-side RPC generation.
- RPGCore.Behaviour driven client input to server-side graphs.
- Server-authoritative inputs to RPGCore.Behaviour nodes on client.
The biggest goal of mine when it came work creating my own node-based system was to create a transparent API. I wanted to avoid all unnessessary reflection as much as possible to reduce any "black-magic" that users might expect was going-on behind the scenes.
Below is the API for creating an "Adding" node.