Skip to content

Repository files navigation

VicMod

An all-in-one quality-of-life and character mod for Waterpark Simulator, built on BepInEx 6 (IL2CPP).

Eleven features in one plugin, each with its own on/off switch and its own settings. Nothing is forced on you: turn off what you do not want and it is never patched in. If a feature breaks against a newer game build it is logged and skipped, and the game still boots.

Adult content. Some features change guest and staff bodies, including removing swimwear and shipping a replacement nude body mesh. All of it is client-side and cosmetic, and all of it can be switched off.


What it does

Feature Default What it changes
StaffCapacity on Multiplies the staff slots the research tree grants — 3 to start and +3 per upgrade, against vanilla's 0–1 and +1.
StaffExperience on Rescales the research-XP penalty on actions your staff complete rather than you. Defaults to removing it.
GuestSwimwear on Removes swimwear from guest NPCs. Optionally strips staff and player avatars too, by slot. Client-side visual only.
WardrobeNone on Puts the game's own hidden "None" buttons back into the character editor's body slots, so your avatar can wear nothing by choice. Only the loaded copy is changed; game files are untouched.
StaffMarker on, inert Marks employees so they can still be told from guests once StripStaff has taken their uniform: the job on their nameplate, a hat, or sunglasses. Mode ships Off, so it does nothing until you pick one.
Wetness on Scales down the wet-skin shader, which otherwise reads as shiny plastic, and retunes skin specular.
BodyMesh on Replaces character meshes with .vmesh files shipped next to the plugin, matched by name.
Jiggle on Spring motion on the breast and (optionally) glute bones, so they lag and settle as a character moves.
DayLength on Stretches the in-game day so it does not run out while you are doing something else.
VisitorVariety on Widens the visitor body generator. Vanilla randomises one visitor in four, and only over the bottom half of its own range.
VisitorSexRatio on Sets how often a visitor — and optionally a newly offered hireable staff member — is female. Vanilla is a coin flip with no setting.
VisitorSkinTones on Reweights how often each skin tone is drawn. Ships with vanilla's even spread, so it does nothing until you change the weights.
Probe on A loopback-only HTTP endpoint for inspecting live game objects. A debugging tool; see below.

Every knob is documented in docs/features.md — what it does, what the vanilla behaviour was, and how it was measured.

A note on Probe

Probe listens on 127.0.0.1:9099 and can read and modify live game state. It is bound to loopback, so nothing off your machine can reach it, but any local process can. That is the right trade for a single-player debugging tool and the wrong one for anything else — turn it off in the config when you are not debugging.


Requirements

  • Waterpark Simulator (CayPlay), Windows build. Runs natively on Windows and under Proton/Wine on Linux.
  • BepInEx 6 bleeding-edge, IL2CPP, win-x64. Not BepInEx 5, and not the IL2CPP build from the 5.x line — this game is Unity 6 IL2CPP and only BepInEx 6 loads against it.

Installing BepInEx

  1. Download the latest BepInEx-Unity.IL2CPP-win-x64-*.zip from the bleeding-edge builds page: https://builds.bepinex.dev/projects/bepinex_be (Developed against 6.0.0-be.785. Anything close to it should work.)
  2. Extract the zip into the game folder — the one containing WaterparkSimulator.exe. You should end up with BepInEx/, doorstop_config.ini and winhttp.dll sitting next to the exe.
  3. Launch the game once and let it reach the main menu, then quit. The first run generates the IL2CPP interop assemblies into BepInEx/interop/ and can take several minutes with no visible progress. This is normal.
  4. Confirm BepInEx/LogOutput.log now exists. If it does not, BepInEx is not loading — stop here and fix that first, because no plugin will run.

On Linux (Steam / Proton): the injector is a winhttp.dll override, which Proton does not enable by itself. Set your launch options to:

WINEDLLOVERRIDES="winhttp=n,b" %command%

Non-Steam launchers (Lutris, Heroic, Faugus, bare wine) need the same WINEDLLOVERRIDES value in their per-game environment.


Installing VicMod

  1. Grab VicMod-<version>.zip from the Releases page.
  2. Extract it into the game folder — the same one holding WaterparkSimulator.exe. The zip already contains the BepInEx/plugins/VicMod/ path, so it lands in the right place.
  3. Launch the game.

You should end up with:

<game folder>/
  WaterparkSimulator.exe
  BepInEx/
    plugins/
      VicMod/
        VicMod.dll
        meshes/
          CC_Body_Female_LOD0.vmesh
          CC_Body_Female_LOD1.vmesh

Uninstall by deleting BepInEx/plugins/VicMod/.

Checking that it loaded

BepInEx/LogOutput.log will contain:

[Message: VicMod] VicMod 0.2.1 loading
[Info   : VicMod]   [x] StaffCapacity
[Info   : VicMod]   [x] StaffExperience
...
[Message: VicMod] VicMod ready (11 feature(s) active)

A [ ] means the feature is switched off in the config. A [!] means it failed to apply and was skipped — the line says which feature and why.


Configuration

Launch the game once after installing; BepInEx writes BepInEx/config/VicMod.cfg with every setting, its default and a comment explaining it. Edit it with a text editor and restart the game.

Turning a feature off entirely:

[Features]
Jiggle = false

Everything else lives in a section named after its feature:

[Jiggle]
Breasts = true
Glutes = false
Stiffness = 300
Damping = 20

[GuestSwimwear]
NamePatterns = Bikini, Swim, Crop_Top
StripStaff = Off

[VisitorSexRatio]
FemaleShare = 0.5

Two things worth knowing before you tune:

  • Logging.Level defaults to Warning. Raising it to Info or Debug is how features report what they measured. BepInEx also has its own filter — Debug lines will not reach the log file unless Debug is in [Logging.Disk] LogLevels in BepInEx/config/BepInEx.cfg.
  • Settings that take a list (NamePatterns, KeepStaffSlots, Weights) are comma-separated, and BepInEx rewrites the file on every launch — your values are preserved, but formatting is not.

The full reference, including what each number actually does and the range worth trying, is in docs/features.md.


Building it yourself

You need the .NET SDK (6.0 or newer — the project targets net6.0, and a newer SDK builds it fine). Nothing else.

git clone https://github.com/JIRPOS/VicMod.git
cd VicMod
./scripts/build.sh          # or: dotnet build src/VicMod/VicMod.csproj -c Release

The output is src/VicMod/bin/Release/net6.0/VicMod.dll. Copy it and src/VicMod/meshes/ into BepInEx/plugins/VicMod/.

VicMod compiles against NuGet packages only — it references no game assembly and resolves every game type by name at runtime — so the build works on a machine with no copy of the game installed.

If the game is installed, the build deploys straight into it. The install is auto-detected from Steam's library folders and the usual manual-install spots; if that misses, point it at yours:

export GAME_DIR="/path/to/Waterpark Simulator"   # also used by every script in scripts/
./scripts/build.sh

or, for MSBuild only, create a gitignored Local.props beside Directory.Build.props:

<Project>
  <PropertyGroup>
    <GameDir>/path/to/Waterpark Simulator</GameDir>
  </PropertyGroup>
</Project>

A build that cannot find the game still succeeds; it just tells you it did not deploy.

Building a release zip

The Release workflow under the Actions tab builds the plugin and packages it. Run it from the Actions tab (Run workflow); it uploads VicMod-<version>.zip as a run artifact and, optionally, opens a draft GitHub Release with the zip attached.

Locally:

./scripts/package.sh        # -> release/VicMod-<version>.zip

Development

Other scripts, all of which locate the game themselves:

./scripts/log.sh            # tail the BepInEx log, filtered to VicMod (-a for everything)
./scripts/dump.sh           # Cpp2IL + ilspycmd -> dump/ ; run after every game update
./scripts/commands.sh       # regenerate docs/commands.md from that dump
./scripts/meshexport.sh     # game asset -> .vmesh
./scripts/meshedit.sh       # a .vmesh -> an editable .blend  (--shipped reopens VicMod's own)
./scripts/meshinstall.sh    # an edited .blend -> .vmesh -> src/VicMod/meshes/

The mesh scripts additionally need Blender and uv on PATH; dump.sh needs tools/cpp2il and dotnet tool install -g ilspycmd.

Further reading:


Compatibility

Developed against game build 24862398 (Unity 6000.0.65f1, IL2CPP) with BepInEx 6.0.0-be.785.

VicMod resolves every game type, method and field by name at runtime rather than compiling against generated IL2CPP proxies, which is what usually breaks a mod on a game update. A build that only shifts metadata tokens will not break it. A build that renames or removes something a feature looks for will disable that feature, log which one and why, and leave the rest running.

Multiplayer: anything on a NetworkSystem is server-authoritative. The cosmetic features are client-side and safe; test the rest in singleplayer first.

License

MIT — see LICENSE.

About

All-in-one quality-of-life and character mod for Waterpark Simulator, on BepInEx 6 (IL2CPP).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages