Skip to main content

RPS SDK

Public consumer SDK · FO4VR · C++

One SDK, one module per provider.

RPS SDK is the consumer documentation for the Rock / Paper / Scissors stack: the public header, a complete API reference, and buildable examples for each provider. The runtimes are open source — this is the focused path through them for someone building a mod, instead of a tour of their internals.

How you use it

Each module is a header, not a library. There is nothing to link and no framework layer between your code and the provider. You include the module's header, ask it to find the provider DLL at runtime, and receive a struct of function pointers. Calling one calls straight into the provider.

#include "ROCKProviderApi.h" // one header, nothing linked
#include "PAPERApi.h" // include only what you use

RockProviderApi::initialize(...); // inline: locate ROCK.dll,
// negotiate the table extent
RockProviderApi::inst->registerConsumerV1(...); // call the provider directly

paper::api::PaperApi::initialize(...); // same model for PAPER.dll

The example plugins each module ships are teaching projects you copy from, not a runtime you depend on. Take one, rename its plugin definition, and build your mod on top of it.

Modules

A module is a directory under SDK/. It carries its own public headers, reference documentation, integration recipes, and buildable example consumers. Adding a provider does not change any existing module's contract or release history.

What you can rely on

The runtime source is public and worth reading. What the SDK gives you is the part that is stable: the header, the versioned contract, and examples built on it. Code that reaches past that into a runtime's internals is not covered by the API version and can break on any release.

Within that contract, a module defines exactly what it hands out and what it refuses. Consuming one does not make your plugin part of a provider — there is no static link to a runtime DLL and no authority to mutate arbitrary scene or Havok state.

The SDK is also not an F4SE plugin. Your DLL keeps ownership of its own F4SE bootstrap, lifecycle, runtime gating, and shutdown ordering.

Choosing between the SDK and the Framework

These solve different problems and compose cleanly.

RPS SDKRPS Framework
BoundaryCross-DLL provider contractStatically linked into your DLL
You getCopied values, bounded requests, leased authorityChecked native calls against FO4VR's engine
Provider must runYes — the provider DLL owns the stateNo — it is your own code
Native memory accessDeliberately not grantedYes, with explicit ownership and epoch rules

Use the SDK when you want a provider to arbitrate something it already owns. Use the Framework when your plugin needs to call FO4VR engine mechanics itself. A plugin may reasonably use both.

Start here

  1. Choose ROCK for physical interaction or PAPER for animation/reload intelligence.
  2. Add the RPS SDK once and link the provider-specific CMake target.
  3. Register only the capabilities your plugin actually consumes.