RunBackup

版本 v1.1.0·更新於 2026-07-24

Automatically backs up your save every level, so a team wipe doesn't end the run. Rotating copies, restore by hand.

模組介紹 作者原文

RunBackup

Automatically copies your save every time a level starts, so a team wipe

doesn't have to end the run.

Built and compiled against game build v0.4.4 (Cosmetics Update line).

Why

R.E.P.O. deletes the save file when every player dies, and there's no in-game

undo. It also writes a save at the moment you die, so quitting from the death

screen rescues nothing. The only protection is a copy made beforehand — which

means remembering to make one.

This does the remembering.

What it does

Hooks RunManager.ChangeLevel, which covers both moments the game auto-saves:

arriving at the Service Station, and the instant a new level begins. Every

save the game writes gets a copy.

Copies land in a timestamped folder named after the run, e.g.

2026-07-24_11-42-08_L4-Manor, so you can find the right one at a glance.

Oldest are pruned once you pass MaxBackups.

Restoring

  • Quit to the main menu (or close the game).
  • Open the backups folder — by default Documents\REPO RunBackups.

The exact path is also printed in LogOutput.log at startup.

  • Pick the backup from the level you want.
  • Copy its contents back into the saves folder, replacing what's there.
  • Load the game — you'll be at the start of that level.

Restoring is deliberately manual. Doing it automatically would mean writing

to the save folder while the game may be reading it, and getting that wrong

costs you the run it was meant to protect.

Host only

In multiplayer only the host has a save file at all, so only the host needs

this. Clients running it will simply never find a saves folder to copy.

Config

BepInEx/config/benjamin.runbackup.cfg

| Key | Default | Notes |

|---|---|---|

| Enabled | true | Master switch |

| MaxBackups | 10 | Oldest pruned first. A few hundred KB each |

| WriteDelay | 5.0 | Seconds to wait after a level change before copying |

| BackupDirectory | (empty) | Absolute path override. Empty = Documents\REPO RunBackups |

| Verbose | false | Logs every backup and prune |

WriteDelay exists because the game writes its save around the level change,

and copying mid-write would capture a truncated file. Raise it if a backup

ever looks incomplete.

Notes

The saves path is derived from Unity's Application.persistentDataPath

rather than a hardcoded AppData path, so it resolves correctly on Windows and

under Proton or a native Linux build.

Backups default to Documents\REPO RunBackups — somewhere you'll actually

find them — and are never written inside the game's saves folder, where

they'd risk being picked up by the game's own save list. If Documents doesn't

resolve (unusual setups), it falls back to a RunBackups folder beside the

saves folder.

Files are opened with ReadWrite sharing, so a backup can never block the game

from writing its own save even if the timing overlaps.

Tests

Unlike a gameplay patch, the file handling here is testable outside the game,

and it is. FileOps.cs has no Unity or BepInEx references so the same source

file compiles into a test harness covering recursive copying, byte-for-byte

integrity, copying while another process holds a save file open, prune

ordering and edge cases, and a 12-level rotation against a cap of 10.

Building

Requires.NET SDK 8.0+. Add the NuGet feeds in nuget.config, then:

dotnet build -c Release

Output lands in bin/Release/netstandard2.1/RunBackup.dll. Drop it in

BepInEx/plugins.

安裝與使用 安裝:BepInEx 外掛

  1. 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
  2. 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
  3. 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
  4. 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。

帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。

前置依賴

下面這些內容需要先安裝,否則該模組不會生效:

BepInEx-BepInExPack

檔案與校驗

檔案名稱
RunBackup-1.1.0.zip
檔案大小
19.4 KiB