Build DocFX

The beating (molten) heart of the RisingV ecosystem.

RisingV.Core is a core mod for V Rising that allows you to use RisingV mods.
It provides a set of APIs and utilities that make it easier to create and manage mods for V Rising.”

Features

Feature Link Description
Plugin lifecycle Docs deterministic load / unload / reload with safe dependency ordering using RisingPlugin.
Aspect abstraction Docs Aspect (a.k.a. Aspecting) is the pattern this SDK uses to give a domain object or ECS entity one or more typed views without polluting the underlying model with cross-cutting concerns.
Engine modules Docs modular architecture for loading/unloading systems, processors and hooks like DamageEngine, DeathEngine, StatEngine, etc.
Harmony Patches Docs a set of Harmony patches for common game hooks like DeathHook, StatChangeSystemHook, etc. The hooks all publish to the event bus, so you can subscribe to them without needing to patch the game code directly.
Processors Docs a high-level abstraction for processing game objects/events in a type-safe manner, allowing you to create custom processors that can be registered with the engine. Mostly used in Harmony patches.
Systems Docs a set of systems for common game mechanics like LootSystem, DamageTrackingSystem, ChatSystem, etc. These systems can be registered in your plugin or sometimes are pre-registered in an Engine.
Event bus Docs decoupled, async pub-sub pipeline for game-wide events.
Loot System Docs a system for managing item drops, including support for custom drop tables and loot generation.
Extensions Docs Class extensions for common operations on Entity, PrefabGUID, and more.

Note: This may not be the entire list—refer to the API docs for every class, interface, and extension method that RisingV.Core provides.

Installation

  1. Dependencies – ensure the following are installed:
  2. Download the latest RisingV.Core.<version>.zip from Releases
  3. Extract the zip file into your BepInEx directory.
  4. Restart your dedicated server or client.

Installing Engines

You can find the stock standard core engines in /Engines to find out which ones you need.

  1. Download the latest engine zip from Releases
  2. Extract the zip file into your BepInEx directory.
  3. Restart your dedicated server or client.
  4. (Optional) You can make your engines a plugin dependency like so: [BepInDependency("RisingV.Core.DamageEngine", SoftDependency)], marking this with SoftDependency will ensure that your plugin doesn't brick if you remove the engine DLL's (which is recommended), you can adjust this as you require.

Development

  1. Add NuGet package dotnet add package RisingV.Core to your project.
  2. Add [BepInDependency("RisingV.Core")] BepInEx dependency.

Using Aspects

If you want to make use of the aspects you just need to make sure you have the following:

Plugin quick start

using BepInEx;
using RisingV.Shared.Plugins;
using RisingV.Shared.Engines;
using RisingV.Core.Engines;

public class MyCoolPluginConfig() : PluginConfig(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_GUID)
{
    public ConfigEntry<float> AttackModifier { get; set; } =
        new("Gameplay", "AttackModifier", 1f, "Modifier for attack damage");
}

public class MyCoolPluginContext() : PluginContext(typeof(MyPluginInfo), new MyCoolPluginConfig());

[BepInPlugin(MyPluginInfo.PLUGIN_GUID, MyPluginInfo.PLUGIN_NAME, MyPluginInfo.PLUGIN_VERSION)]
[BepInDependency("RisingV.Core")]
public class Plugin : RisingPlugin<MyCoolPluginContext>
{
    protected override void OnInitialize()
    {
        // Manually adding engines, you don't need to do this if you have `AutoLoadEngines` enabled (default: true). 
        EngineManager.AddEngine<ScriptingEngine>(this);
        EngineManager.AddEngine<DamageEngine>(this);
        EngineManager.AddEngine<DeathEngine>(this);
    }
    
    protected override void OnLoad()
    {
        // Plugin startup logic (pre-initialization)
    }

    protected override bool OnUnload()
    {
        return true;
    }

    // You can also override other methods to register systems, processors, databases, etc.
}

Configurations

RisingV.Core uses the RisingV.Shared.Config base class for configuration management. This allows you to define your plugin's configuration in a type-safe manner, with support for hot-reloading and easy access to configuration values. It also means that majority of the systems/components in the RisingV ecosystem can be configured via json files.

BepInEx/configs
└── RisingV.Core
    ├── Engines
    │   ├── AchievementEngine.cfg
    │   ├── AdminEngine.cfg
    │   ├── BuffEngine.cfg
    │   ├── CastleEngine.cfg
    │   ├── ClanEngine.cfg
    │   ├── DamageEngine.cfg
    │   ├── DeathEngine.cfg
    │   ├── EquipmentEngine.cfg
    │   ├── ItemEngine.cfg
    │   ├── LootEngine.cfg
    │   ├── SaveEngine.cfg
    │   ├── SpawnEngine.cfg
    │   └── StatEngine.cfg
    ├── RisingV.Core.cfg
    ├── Systems
    │   ├── DamageTrackingSystem.cfg
    │   └── LootSystem.cfg
    └── RisingV.Core.cfg

Docs

For a deeper dive, API reference, and design docs see https://docs.risingv.dev/core.

Contributing

PRs that add new functionality—or improve existing ones—are warmly welcomed. Please open an issue first if you plan a large refactor. See CONTRIBUTING.md for more information.

Community

Join the V Rising Mod Community Discord for modding support, updates, and discussions!

Discord

License

GNU GPL-3.0. See LICENSE for details.