Install and link
RPS Framework installs two static CMake targets:
RPS::Addressesfor the versioned catalog and layouts;RPS::Runtimefor checked engine operations, bringingRPS::Addressestransitively.
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:
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
.cppfiles directly into another project. - Do not replace a checked runtime wrapper with
base + rvamerely because it is shorter. - Do not treat the address library as runtime-version detection; use
RuntimeModule::detect()first.