Skip to main content

Install and link

RPS Framework installs two static CMake targets:

  • RPS::Addresses for the versioned catalog and layouts;
  • RPS::Runtime for checked engine operations, bringing RPS::Addresses transitively.

Most plugins should link RPS::Runtime.

Requirements

  • Windows x64 and MSVC v143 or an ABI-compatible compiler toolset.
  • CMake 4.2 or newer when building the framework source tree.
  • C++23 in the consumer target.
  • A native DLL running inside Fallout 4 VR 1.2.72.0.
  • A valid F4SEVR plugin bootstrap or another safe native host.

The staged Release libraries are built with the static MSVC runtime (/MT). Use a compatible runtime in the consumer, or build RPS in the consumer's own toolchain/configuration. Do not mix a prebuilt RPS library with an incompatible compiler ABI or CRT: some move-only public owners contain C++ standard-library state.

RPS itself does not require CommonLibF4VR, REL, or F4SE headers. A consuming plugin may use those libraries for its own bootstrap and game types, but it should pass only the native pointers and values required by the RPS call.

Build the framework

From the RPS Framework source directory:

cmake --preset custom-fast
cmake --build --preset custom-fast --config Release -- /m:1 /p:CL_MPCount=2
ctest --test-dir build-fast -C Release --output-on-failure -j 4

The build installs a directly consumable package under:

build-fast/stage/
├── include/RPS/
├── lib/RPSAddresses.lib
├── lib/RPSRuntime.lib
└── lib/cmake/RPSFramework/

stage is replaced by each successful auto-deploy build. Point consumers at the stage root or copy the complete staged package as one versioned unit. Do not copy only selected headers or only one library.

Consume the CMake package

Pass the stage root through CMAKE_PREFIX_PATH:

cmake -S . -B build `
-DCMAKE_PREFIX_PATH="F:/path/to/RPS_Framework/build-fast/stage"

Then link the runtime target:

CMakeLists.txt
find_package(RPSFramework 0.1 CONFIG REQUIRED)

target_link_libraries(MyFo4VrPlugin PRIVATE
RPS::Runtime
)

target_compile_features(MyFo4VrPlugin PRIVATE cxx_std_23)

For a configurable dependency path:

set(RPS_FRAMEWORK_ROOT "" CACHE PATH
"Installed RPS Framework package root")

if(RPS_FRAMEWORK_ROOT)
list(PREPEND CMAKE_PREFIX_PATH "${RPS_FRAMEWORK_ROOT}")
endif()

find_package(RPSFramework 0.1 CONFIG REQUIRED)
target_link_libraries(MyFo4VrPlugin PRIVATE RPS::Runtime)

Address-catalog tools that never call the engine may link only:

target_link_libraries(MyAddressTool PRIVATE RPS::Addresses)

Include public headers

Include the narrowest module you need:

#include <RPS/Runtime/RuntimeModule.h>
#include <RPS/Runtime/PhysicsApi.h>
#include <RPS/Runtime/WorldAccess.h>

There is intentionally no umbrella header. Narrow includes keep ownership and threading contracts visible at the call site and avoid implying that every engine subsystem is safe in the same callback.

What not to vendor

  • Do not copy individual RVAs into your plugin.
  • Do not duplicate the native layouts from Layouts.h.
  • Do not compile selected RPS .cpp files directly into another project.
  • Do not replace a checked runtime wrapper with base + rva merely because it is shorter.
  • Do not treat the address library as runtime-version detection; use RuntimeModule::detect() first.

Next: establish the runtime and ownership boundary.