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.mdis 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.
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.
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
PhysicalPowerandSpellPower, 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.
- 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
Run the test suite - it needs no game running and no game data:
python -m pytestExtract the static tables from your install:
python tools/rmdata_extract.pyBuild the bridge plugin:
dotnet build bridge/src/RedMoon.Bridge/RedMoon.Bridge.csproj -c Releasedocs/OPERATIONS.md covers deploying the plugin, launching a local dedicated
server, and reading live state.
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 |
docs/ARCHITECTURE.md- module map and data flowdocs/BLOODFORGE.md- the combat engine in detaildocs/API.md- bridge endpointsdocs/OPERATIONS.md- build, deploy, rundocs/adr/README.md- architectural decisions and why they went the way they didROADMAP.md- what is next, including the open measurement gaps
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.
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.