Bones & regions
Joint/region names used throughout item and animation JSON.
✅ Available This page is for server owners and pack admins, not add-on
authors. The mod ships two Forge config files — tiedup-server.toml and tiedup-client.toml —
exposing roughly 120 tunables (struggle pacing, per-material bind resistances, gag balance, NPC
spawn rates, economy tiers, combat-tool numbers, plus client switches). Every key below was verified
field-by-field against ModConfig (the ForgeConfigSpec builders).
The two specs are registered as a Forge SERVER config and a CLIENT config
(ModConfig.SERVER_SPEC / ModConfig.CLIENT_SPEC). That registration type decides where the file
is written and who owns it:
| File | Forge type | Location | Scope |
|---|---|---|---|
tiedup-server.toml | SERVER | per-world: <world save>/serverconfig/tiedup-server.toml (dedicated server: world/serverconfig/) | Gameplay balance. Lives inside the save, synced to clients on join. |
tiedup-client.toml | CLIENT | global: .minecraft/config/tiedup-client.toml | Each player’s own machine. Never synced; purely local. |
[Section] / [Section.Subsection]
headers (TOML tables) — the same nesting shown in the tables below.struggleProbability is
0..100). An out-of-range or wrong-typed value is rejected and Forge restores that key’s default./reload for TOML config.This is the single most important thing to understand before you touch tiedup-server.toml. About
two dozen of the server settings are also registered as vanilla GameRules, and game code
resolves settings in three tiers (SettingsAccessor):
/gamerule) — wins if the world is loaded.tiedup-server.toml — the default used when no GameRule applies.Settings with a GameRule twin (name on each side differs — GameRule name in the right column):
TOML key (tiedup-server.toml) | GameRule (/gamerule …) |
|---|---|
tyingTime | tyingPlayerTime |
untyingTime | untyingPlayerTime |
struggleEnabled | struggle |
struggleProbability | probabilityStruggle |
struggleTimer | struggleTimer |
struggleMinDecrease / struggleMaxDecrease | struggleMinDecrease / struggleMaxDecrease |
struggleCollarRandomShock | struggleCollarRandomShock |
shockerControllerRadius | shockerControllerBaseRadius |
enslavementEnabled | enslavementEnabled |
gagTalkProximity | gagTalkProximity |
damselsSpawn / kidnappersSpawn | damselsSpawn / kidnappersSpawn |
damselSpawnRate, kidnapperSpawnRate, kidnapperArcherSpawnRate, kidnapperEliteSpawnRate, kidnapperMerchantSpawnRate, masterSpawnRate | same names |
Everything else in tiedup-server.toml (resistances, gags, economy, the whole KidnapperAdvanced
tree…) has no GameRule twin — for those, the TOML is the only place to tune them.
tiedup-server.toml — gameplay balanceGrouped by the TOML tables the config builds. Defaults shown are the shipped values; the parenthetical is the allowed range Forge enforces.
[General] — tying & struggleThe core capture/escape pacing.
| Key | Default | Range | Meaning |
|---|---|---|---|
tyingTime | 5 | 1–60 | Seconds to tie a player. |
untyingTime | 10 | 1–60 | Seconds to untie. |
struggleEnabled | true | bool | Master switch for the struggle mechanic. |
struggleProbability | 40 | 0–100 | % chance an RNG struggle attempt succeeds. |
struggleTimer | 80 | 1–200 | Cooldown (ticks) between attempts. |
struggleMinDecrease / struggleMaxDecrease | 1 / 10 | 1–100 | Resistance removed per successful struggle (random in this band). |
struggleCollarRandomShock | 20 | 0–100 | % chance of a random shock while struggling against a collar. |
[General.MiniGames]| Key | Default | Meaning |
|---|---|---|
struggleMiniGameEnabled | true | Use the QTE struggle mini-game instead of pure RNG. |
lockpickMiniGameEnabled | true | Use the “sweet spot” lockpick mini-game instead of RNG. |
exhaustionCooldownSeconds | 30 (5–120) | ⚠️ Partial Cooldown after mini-game exhaustion. Written to the TOML but not yet acted on. |
[Restrictions]| Key | Default | Range | Meaning |
|---|---|---|---|
tiedSwimSpeedMultiplier | 0.5 | 0.0–1.0 | Swim speed when legs are bound. |
messageCooldown | 2000 | 0–10000 | ⚠️ Partial Cooldown (ms) for restriction chat spam. Written to the TOML but not yet acted on. |
[Resistances] — per-material bind difficulty ✅ AvailableThe escape “HP” each bind type contributes. Higher = harder/longer to struggle free. Every key is an
int in 1–1000. These are the fallback resistances by material name; an individual item can
still override via its resistance component, and a worn item with no
component uses its escape_difficulty.
| Key | Default | Key | Default | |
|---|---|---|---|---|
rope | 100 | latex_sack | 300 | |
chain | 150 | ribbon | 50 | |
armbinder | 180 | vine | 60 | |
wrap | 200 | web | 70 | |
straitjacket | 250 | slime | 80 | |
gag / blindfold / collar | 100 each | tape | 90 |
Plus one standalone key:
| Key | Default | Range | Meaning |
|---|---|---|---|
padlockResistance | 250 | 0–1000 | Extra resistance a padlock/lock adds on top of the bind. |
[Resistances] rope = 100 chain = 150 armbinder = 180 # ...raise to make a material harder to escape straitjacket = 400 padlockResistance = 250[Gags] — gagged-chat balance ✅ Available| Key | Default | Meaning |
|---|---|---|
gagTalkProximity | true | Whether gagged players’ garbled speech is heard by nearby players only. |
[Gags.Properties.<material>]Each gag material has its own subtable with two doubles: how much speech a listener can make out, and how far it carries.
| Field | Range | Meaning |
|---|---|---|
comprehension | 0.0–1.0 | Fraction of the message left legible (0.0 = fully garbled, 1.0 = clear). |
range | 0.0–100.0 | Blocks the gagged speech reaches. |
Shipped values:
| Material | comprehension | range | Material | comprehension | range | |
|---|---|---|---|---|---|---|
cloth | 0.4 | 15.0 | latex | 0.1 | 6.0 | |
ball | 0.2 | 10.0 | ring | 0.5 | 12.0 | |
tape | 0.05 | 5.0 | bite | 0.3 | 10.0 | |
stuffed | 0.0 | 3.0 | sponge | 0.0 | 2.0 | |
panel | 0.05 | 4.0 | baguette | 0.25 | 8.0 |
[Gags.Properties.ball] comprehension = 0.2 range = 10.0[NPCs] & [NPCs.Spawning]| Key | Default | Meaning |
|---|---|---|
damselsSpawn | true | Natural Damsel spawning. (GameRule twin) |
kidnappersSpawn | true | Natural Kidnapper spawning — includes Elite/Archer/Merchant. (GameRule twin) |
merchantHostileDuration | 6000 (0–72000) | Ticks a Merchant stays hostile after being hit. |
[NPCs.Spawning] first carries one enum key:
| Key | Default | Meaning |
|---|---|---|
spawnGenderMode | BOTH | Which genders spawn — BOTH / FEMALE_ONLY / MALE_ONLY. |
The remaining keys are all a 0–100 percentage of the base spawn weight (GameRule twins):
| Key | Default | Key | Default |
|---|---|---|---|
damselSpawnRate | 60 | kidnapperEliteSpawnRate | 70 |
kidnapperSpawnRate | 70 | kidnapperMerchantSpawnRate | 70 |
kidnapperArcherSpawnRate | 70 | masterSpawnRate | 100 |
[Dialogue] — NPC dialogue broadcast ✅ AvailableControls how NPC barks reach nearby players.
| Key | Default | Range | Meaning |
|---|---|---|---|
dialogueRadius | 20 | 1–100 | Radius for NPC dialogue broadcast. |
dialogueCooldown | 100 | 20–1200 | Cooldown in ticks between same-type dialogues. |
[Economy] & [Economy.TierPrices]| Key | Default | Range | Meaning |
|---|---|---|---|
merchantMinTrades / merchantMaxTrades | 8 / 12 | 1–20 | Trade-offer count band for Merchants. |
[Economy.TierPrices] — prices in nuggets, each 1–640. Four tiers, min/max each:
| Tier | min / max | Tier | min / max |
|---|---|---|---|
tier1Min / tier1Max | 9 / 18 | tier3Min / tier3Max | 54 / 90 |
tier2Min / tier2Max | 27 / 45 | tier4Min / tier4Max | 90 / 180 |
[CombatTools] — tool & weapon numbers| Key | Default | Range | Meaning |
|---|---|---|---|
whipDamage | 2.0 | 0.0–20.0 | Damage per whip hit. |
whipResistanceDecrease | 15 | 0–100 | Resistance removed per whip hit. |
ragWetTime | 6000 | 100–72000 | Ticks before a wet (chloroform) rag dries. |
chloroformEffectDuration | 200 | 20–6000 | Ticks the knockout effect lasts. |
ropeArrowBindChance | 50 | 0–100 | % chance a Rope Arrow binds its target. |
archerArrowBindChanceBase | 10 | 0–100 | Archer NPC base bind chance. |
archerArrowBindChancePerHit | 10 | 0–100 | Cumulative bind-chance increase per Archer hit. |
shockerControllerRadius | 50 | 1–200 | Shocker controller radius. (GameRule twin) |
taserStunDuration | 100 | 0–600 | Ticks a Taser stun lasts. |
lockpickSuccessChance | 25 | 0–100 | % to pick a lock (when the mini-game is off). |
lockpickBreakChance | 15 | 0–100 | % the lockpick breaks on a failed pick. |
lockpickJamChance | 2.5 | 0.0–100.0 | % the lock jams on a failed pick. |
[Kidnapping] & the [KidnapperAdvanced] tree[Kidnapping] holds the high-level toggles:
| Key | Default | Range | Meaning |
|---|---|---|---|
enslavementEnabled | true | bool | Master/Slave system. (GameRule twin) |
forcedSeatingEnabled | true | bool | ⚠️ Partial Written to the TOML but not yet acted on. |
maxBountiesPerPlayer | 5 | 1–50 | Active bounty cap per player. |
bountyDuration | 14400 | 60–86400 | Bounty lifetime (seconds; default 4 h). |
bountyDeliveryRadius | 5 | 1–20 | Delivery detection radius (blocks). |
kidnapBombRadius / kidnapBombFuse | 5 / 80 | 1–20 / 20–600 | Kidnap-bomb blast (blocks) / fuse (ticks). |
[KidnapperAdvanced] is a large subtree governing the AI capture loop. The grouping (each is its own
TOML subtable):
| Subtable | Notable keys (defaults) |
|---|---|
[KidnapperAdvanced.Lairs] | ⚠️ Partial enableLairs (true), lairDensity (1.0, 0.1–5.0) — written to the TOML but not yet acted on. |
[KidnapperAdvanced.Capture] | ⚠️ Partial transportToLair (true), confiscateInventory (true) — written to the TOML but not yet acted on. |
[KidnapperAdvanced.Ransom] | ⚠️ Partial enableRansom (true), ransomAmount (16, 1–64), ransomItem (minecraft:iron_ingot), ransomTimeoutMinutes (30, 5–120) — written to the TOML but not yet acted on. |
[KidnapperAdvanced.Timeout] | laborRestSeconds (120, 10–600); ⚠️ Partial maxCaptivityMinutes (45, 0–240, 0=unlimited) and releaseWithInventory (true) are written to the TOML but not yet acted on. |
[KidnapperAdvanced.Struggle] | ⚠️ Partial struggleMakesNoise (true) — written to the TOML but not yet acted on. |
[KidnapperAdvanced.AI] | ⚠️ Partial enablePunishment (true) — tighter binds / blindfold on recapture; written to the TOML but not yet acted on. |
[KidnapperAdvanced.Abandon] | abandonKeepsBlindfold (true), abandonKeepsBinds (true); ⚠️ Partial abandonTeleportRadius (1000, 100–5000) is written to the TOML but not yet acted on. |
[KidnapperAdvanced.SoloMode] | enableSoloFallback (true), soloKeepChance (0.6), soloAbandonChance (0.4), soloTimeoutSeconds (120, 30–600) |
[KidnapperAdvanced.MasterNPC] | enableMasterSpawn (true), petCollarResistance (250, 50–1000), slaveDamageMultiplier (0.25), distraction interval/duration tick bands ⚠️ Partial (the distraction interval/duration bands are written to the TOML but not yet acted on) |
[Cells] ⚠️ PartialAll four keys are written to the TOML but not yet acted on.
| Key | Default | Range | Meaning |
|---|---|---|---|
maxWallDistance | 32 | 8–64 | Max distance from a cell centre to its wall markers. |
maxPrisonersPerCell | 1 | 1–4 | Prisoner cap per cell. |
deleteMarkerOnCellDelete | true | bool | Remove marker blocks when a cell is deleted. |
autoRemoveDestroyedWalls | true | bool | Drop wall references when wall blocks break. |
tiedup-client.toml — per-player, local 🖥️ Client / singleplayer onlyThese are client-only and never synced — each player tunes their own. They affect rendering, local audio, and the dynamic-texture security gate. A dedicated server’s copy is irrelevant; what matters is the file on each connecting client.
[Audio] & [Visuals]| Section | Key | Default | Range | Meaning |
|---|---|---|---|---|
[Audio] | earplugVolumeMultiplier | 0.15 | 0.0–1.0 | Volume while wearing earplugs (0.0 = silent). |
[Visuals] | blindfoldOverlayOpacity | 1.0 | 0.0–1.0 | ✅ Available Alpha of the blindfold overlay — 1.0 is fully opaque, lower values let some of the world show through. |
[Visuals] | hardcoreBlindfold | true | bool | When ON, the blindfold covers everything incl. menus. OFF hides it whenever a GUI is open. |
[Visuals] | enablePreviewTool | false | bool | Show a “RIG Previewer” button on the main menu (dev/artist tool). |
[DynamicTextures] — the “clothes” URL systemThe clothes system can load textures from a URL. The whitelist is a security control — keep it on for public servers.
| Key | Default | Meaning |
|---|---|---|
enableDynamicTextures | true | Master switch for loading clothes textures from URLs. |
useTextureHostWhitelist | true | Only allow URLs from whitelisted hosts. Leave on unless you fully trust every texture URL. |
additionalWhitelistedHosts | [] (list of strings) | Extra allowed hosts on top of the built-in defaults (imgur, the Discord CDN, GitHub raw). |
[DynamicTextures] enableDynamicTextures = true useTextureHostWhitelist = true additionalWhitelistedHosts = ["cdn.example.com", "media.mysite.net"][CellRendering]| Key | Default | Range | Meaning |
|---|---|---|---|
showCellHighlights | true | bool | Show cell-boundary highlights while holding the cell wand. |
highlightRenderDistance | 32 | 8–64 | Max highlight render distance (blocks). |
[RigCloth]| Key | Default | Meaning |
|---|---|---|
enableClothPhysics | true | 🖥️ Client / singleplayer only Verlet cloth simulation for bondage items that declare a cloth block (capes, dangling straps). Client-side, players only. Turn OFF to skip all cloth sim + rendering — the go-to lever for clients with performance issues. |
Bones & regions
Joint/region names used throughout item and animation JSON.
Item JSON
Per-item resistance, escape difficulty and movement — the content side of the same balance the
[Resistances] table backs.
Components
The resistance / gagging components an item carries, which these defaults back-stop.
Planned / not yet
Honest list of what isn’t tunable or authorable yet.
→ Planned