Skip to content
This repository was archived by the owner on Sep 6, 2026. It is now read-only.

Repository files navigation

Red Moon

Archived 2026-09-06. Red Moon is no longer developed. The repository is read-only and the working copy it was built on has been deleted, so what is here is the whole of it.

Nothing below has been tidied up to make the ending look neater. The parts marked working were working when development stopped, and the parts marked withheld are still withheld for the reason given. docs/LEDGER.md is the full history, newest first, and its top entry says exactly where the work stopped and what a fork inherits.

Combat and progression math for V Rising, computed from the game's own data rather than from a wiki.

Red Moon has three parts. RedMoon.Bridge is a BepInEx plugin that exposes the running game's state over local HTTP. The extractor pulls the game's static tables - items, recipes, abilities, V Bloods, blood types, ability stats

  • off disk into versioned JSON keyed to the exact game build. Bloodforge is the engine that turns those into damage, DPS and effective-HP numbers.

Everything runs on one machine, over loopback, against a game you already own.

Status

Development stopped 2026-09-06. What worked at the end:

Part State
RedMoon.Bridge plugin Working. Serves /health, /state, /dump/* and /record/* in both the game client and the dedicated server.
Static data extraction Working. 3,038 rows across six tables for build 1.1.13.0-r99712, every count asserted by test.
Bloodforge damage and DPS Working, with one term unresolved (below).
Effective HP, time-to-kill Withheld on purpose. See below.
Dashboard Never built. Designed down to the stack and the concept list, no code written.

There is no packaged release and no installer. This was a working repository rather than a product, and it is now the record of one.

Why some numbers are missing rather than wrong

Two things Red Moon would need are not readable from the data as it stands:

  • Which power stat drives a given ability. The game exposes PhysicalPower and SpellPower, and nothing in the extracted tables says which one a particular ability scales from. It is not inferable from the damage type - a single ability contradicts the obvious rule. Resolving it needs one measured in-game cast, and that measurement has not been taken.
  • Boss maximum health. It does not exist on the prefab. It only exists on a spawned instance in a live world, so any time-to-kill needs a running game.

Rather than defaulting these to zero or guessing, Red Moon omits the fields entirely - the key is absent, not null, not 0, not -1 - and a test refuses to let an embargoed field be emitted. A missing number is recoverable. A confident wrong one is not.

The same rule runs through the data: an ability with no damage coefficient is distinguishable from one whose coefficient is genuinely 0.0, because those two sit one row apart in the real tables and conflating them is wrong about the most common weapon in the game.

Requirements

  • Windows, and a V Rising install (client, dedicated server, or both)
  • Game build 1.1.13.0-r99712 - the extracted data is keyed to it, and the ingest refuses a dump whose values disagree with the promoted tables for the same build
  • BepInEx IL2CPP for the plugin
  • Python 3.14 and the .NET SDK for the plugin build

Quick start

Run the test suite - it needs no game running and no game data:

python -m pytest

Extract the static tables from your install:

python tools/rmdata_extract.py

Build the bridge plugin:

dotnet build bridge/src/RedMoon.Bridge/RedMoon.Bridge.csproj -c Release

docs/OPERATIONS.md covers deploying the plugin, launching a local dedicated server, and reading live state.

Ports

All loopback. The plugin's port is a function of which host loaded it, so one assembly serves both without a bind-time race.

Service Port
RedMoon.Bridge, game client 8777
Dashboard (planned) 8778
Vision server (planned) 8779
RedMoon.Bridge, dedicated server 8780
Bloodforge engine (planned - a library today, not a service) 8783

Documentation

  • docs/ARCHITECTURE.md - module map and data flow
  • docs/BLOODFORGE.md - the combat engine in detail
  • docs/API.md - bridge endpoints
  • docs/OPERATIONS.md - build, deploy, run
  • docs/adr/README.md - architectural decisions and why they went the way they did
  • ROADMAP.md - what is next, including the open measurement gaps

Contributing

The repository is archived, so issues and pull requests are closed and nothing here will be merged. Fork it if it is useful to you - the license permits that and no permission is needed.

If you do fork it, three house rules are wired into the tooling and will trip you on your first commit until you either keep them or remove their gates. All authored content is 7-bit ASCII, every feature or fix starts with a failing test, and no credential reaches a commit.

That last one is enforced, not asked for. hooks/pre-commit scans every staged file - not only the authored ones - for structured provider key formats and for credential filenames like .env or *.pem, and refuses the commit rather than reporting the leak afterwards. It deliberately uses no entropy heuristic: this repository commits a SHA256 pin and forty-character commit hashes, so a generic high-entropy rule would flag its own history, and a gate that cries wolf gets switched off. tools/secret_guard.py holds the rules and tests/test_secret_guard.py asserts the whole tracked tree stays clean.

License

Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.

Copyright 2026 Moonbeam.

V Rising is a trademark of Stunlock Studios. This project is not affiliated with or endorsed by Stunlock Studios, and redistributes no game assets. The extracted data directory is generated locally from your own install and is not committed.

About

Red Moon - V Rising coaching and analysis. Cycle 2 done: the RedMoon.Bridge BepInEx plugin and five populated data tables. Cycle 3 in progress: Bloodforge combat math.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages