CustomCrosshairV2
A configurable custom crosshair replacement for Risk of Rain 2.
About this mod Author’s original text
AI-Generated Project Notice
Everything in this project—including the code, architecture, documentation, prompts, implementation plans, and this README—has been generated with AI assistance. The project is being manually reviewed and tested in Risk of Rain 2, but AI-generated work should not be assumed correct without verification.
RoR2 Custom Crosshair
A work-in-progress Risk of Rain 2 mod that replaces the normal gameplay crosshair with a configurable, procedural crosshair system inspired by modern competitive shooters.
The current implementation focuses on local visual customization only. It does not modify weapon behavior, projectile spread, networking, or other gameplay mechanics.
Current Status
The current prototype is implemented, builds successfully, deploys into the development r2modman profile, and has been manually tested in-game by the project owner. The currently implemented visual framework appears to be working as intended based on testing completed so far.
Working foundation
- Procedural crosshair rendering.
- BepInEx configuration persistence.
- RiskOfOptions in-game configuration.
- Live configuration updates without restarting the game.
- Local-player-only crosshair behavior.
- Spectator protection.
- Normal gameplay replacement.
- Sprint replacement.
- Special skill crosshairs can remain vanilla when intentionally preserved.
- Resolution-aware scaling using a 1920x1080 reference.
- HUD-scale compensation.
- Pixel-aligned symmetric geometry.
- True outline rendering that does not tint translucent fills.
- Crosshair lifecycle survives normal gameplay state changes.
- No R2API dependency is currently required.
- No gameplay networking or configuration synchronization.
Current Crosshair Framework
The renderer is divided into four independently configurable visual systems.
Inner Bars
Four centered bars with independent settings for:
- Enabled
- Static / Dynamic mode
- Length
- Thickness
- Gap
- RGB color
- Opacity
- Outline enabled
- Outline thickness
- Outline RGB
- Outline opacity
Outer Bars
A second four-bar layer with the same independent controls as Inner Bars.
Inner and Outer Bars can be enabled at the same time and use the same exact center and scaling rules.
Circle
A hollow circular crosshair layer with:
- Enabled
- Static / Dynamic mode
- Radius
- Thickness
- RGB color
- Opacity
- Outline enabled
- Outline thickness
- Outline RGB
- Outline opacity
The circle is rendered as generated ring geometry rather than a texture-based approximation.
Center Dot
A separate centered dot with:
- Enabled
- Size
- RGB color
- Opacity
- Outline enabled
- Outline thickness
- Outline RGB
- Outline opacity
The current dot is square so it remains pixel-exact at small sizes.
Static and Dynamic Modes
Static and Dynamic modes currently render the same geometry.
This is intentional.
Dynamic mode is reserved specifically for future visualization of actual weapon/projectile spread.
Dynamic mode will not represent:
- charge state
- cooldown
- windup
- readiness
- time remaining
- shots remaining
- skill stock
Those concepts will be handled by separate indicator systems.
The current renderer already exposes independent future dynamic offsets for:
- Inner Bars
- Outer Bars
- Circle
This allows any combination of Static and Dynamic layers later without another renderer rewrite.
Configuration Layout
RiskOfOptions currently exposes separate configuration categories for:
- General
- Inner Bars
- Outer Bars
- Circle
- Center Dot
Existing older crosshair configuration is migrated into Inner Bars on first launch of the newer framework.
Default behavior keeps Inner Bars enabled while Outer Bars, Circle, and Center Dot start disabled so existing users retain approximately the same appearance after migration.
Current Technical Architecture
Crosshair replacement
The mod works through Risk of Rain 2's HUD crosshair-selection flow instead of permanently forcing CrosshairUtils.RequestOverrideForBody.
This was chosen b
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.
Install these first, or the mod will not work: