Schedule I
Install

Details

Last Updated
First Uploaded
Downloads
75
Likes
0
Size
17MB
Dependency string
DropDaDeuce-K9Patrol_Mono-1.1.0
Dependants

Categories

K9 Patrol

Police officers now patrol with a dog, and the dog can smell what you are carrying.

If you run into any issues, please report them in the modding Discord or on GitHub.

Disclaimer

  • AI Content: out of respect for those who wish to avoid AI content, this mod was created with the assistance of AI tools. The icon was generated using ChatGPT v5.

Features

  • K9 units on patrol. Officer-and-dog pairs are put onto the game's own police foot-patrol routes, so they walk the beat like any other patrol.
  • The dog smells contraband. Carry anything illegal and a nearby K9 picks it up. The officer breaks off patrol and comes for you.
  • It ends in a real body search. The officer runs the game's own body search, with all the consequences that already come with it. It is not a custom minigame.
  • How much you are carrying decides how far away you are noticed. A single bud is almost nothing. A full stack of loose product is smelled from across the street. Packaging muffles it. Walls muffle it further. There is a whole section on this below, and every number in it is yours to change.
  • The dog behaves like a dog. It trots after its handler, sprints when it falls behind, sits down when the officer stops, wags its tail, puts its head down and sniffs while closing on a suspect, barks, and talks! Wait..
  • You can hit the dog, and the police will not like it. Punches, melee weapons and gunfire all land. The dog yelps, and the game treats it as assaulting an officer, with the same crime, pursuit level and escalation you would get for hitting the handler. The dog itself cannot actually be hurt or killed; it has no health and takes no knockback. Everyone in a multiplayer lobby hears the yelp, not just whoever swung.
  • It works in multiplayer. Tested on both game builds. See the Multiplayer section, because a couple of things about it are worth knowing before you host.
  • Both game builds. Separate Mono and IL2CPP downloads, from one codebase.

Requirements

Schedule I A legitimate copy of the game.
MelonLoader Required, always. No mod manager installs this for you.
SteamNetworkLib Multiplayer only. Mono · IL2CPP. Skip it if you only play single-player. Without it the mod loads normally, notes in the log that multiplayer sync is off, and plays exactly as it always has.

Installation

Step 1: work out which build of Schedule I you have

The game ships in two flavours and the mod file has to match yours. Open the folder that has Schedule I.exe in it and look:

  • GameAssembly.dll is sitting next to the exe. You want IL2CPP. This is what a standard Steam install is. If you are not sure, it is this one.
  • No GameAssembly.dll, and Schedule I_Data\Managed\ is full of .dll files instead. You want Mono. This is the alternate branch, usually opted into through Steam.

Getting it wrong is harmless. The mod simply does not load and MelonLoader says so in its console. Swap the file and you are fine. Only ever have one of the two in your Mods folder.

Step 2: install MelonLoader

Get it from the MelonLoader releases page and install it against the same copy of Schedule I you are modding. Then run the game once so it creates its folders. You should end up with a Mods folder next to the exe.

Step 3: install K9 Patrol

A mod manager does this for you. By hand, drop the .dll into Schedule I\Mods\. Install only the one matching your build from step 1.

Step 4: install SteamNetworkLib, if you play multiplayer

Skip this if you only play single-player. Otherwise, install it in the flavour matching your build. It is the same choice as step 1, and a different file for each. Everyone in the lobby needs it, not just the host.

Step 5: run the game once

The config file is created at UserData\DropDaDeuce-K9Patrol\K9Patrol.cfg, and a second file for tuning smells appears beside it at K9Scents.cfg. Both are plain text with comments explaining every line.

Usage

There is nothing to press and nothing to turn on. Once installed, police foot patrols start going out with a dog.

Give it a few minutes of in-game time near a patrolled area. Units are put onto real patrol routes, so they do not appear instantly and they are not everywhere. Carry something illegal near a K9 and the officer will come to you and run a body search.

The config is read once, at startup. Editing it mid-game does nothing; restart the game to pick up a change.

Multiplayer

It works, and it has been tested on both builds: a host and a second player, on Mono and again on IL2CPP.

Everyone in the lobby needs both K9 Patrol and SteamNetworkLib, in the flavour matching their own game. There is deliberately no half-installed mode. A player without them simply never gets detected by a police dog, and the host's log names them.

Everyone in the lobby is expected to be on the same build of Schedule I. Mixed builds is not supported.

How it divides up, because it changes what your settings do:

  • The host spawns the officer-and-dog pairs and decides who gets chased and searched.
  • Your own game is the only thing that can see your inventory, so it is what tells the host whether you are carrying. That is sent only to the host, not to the other players.
  • Every machine draws the dogs itself, following officers the game already keeps in sync.

So some of your settings only matter if you are hosting. The rule: if a setting changes where the dog is, the host's copy wins for everybody; if it changes how the dog looks or sounds, yours is used. The table below marks each one, and so does the config file itself.

If something looks wrong in a lobby, turn on DebugLogging on every machine and send every log. One side alone almost never shows the problem.

Configuration

UserData\DropDaDeuce-K9Patrol\K9Patrol.cfg, created on first run and read once at startup. Every setting carries a plain-language explanation in the file itself; this table is the same information in one place.

Detection and pursuit

Setting Default What it does
UnitCount 2 HOST How many officer-and-dog pairs are out at once. More of them means you run into one more often, not that they hunt harder.
SniffRadius 10 HOST Metres. How far a dog can smell contraband, as a starting point rather than a fixed distance. What you are carrying stretches or shrinks it; see the note below the table.
ScentFullRadiusScore 20 HOST How much contraband counts as "a normal amount". Carry that much and you are smelled at the full SniffRadius. Lower it to make the dogs sharper; raise it to carry more before you are noticed.
ScentMaxRadiusMultiplier 1.5 HOST A hard ceiling, as a multiple of SniffRadius. 1.5 means no stash, however big, is ever smelled from beyond 15 m.
RecheckInterval 0.2 HOST Seconds between a dog's checks for anyone carrying. Lower reacts faster and costs a little more performance.
BodySearchStartDistance 1.25 HOST Metres. How close the officer has to actually get before the search itself begins. Raise it and you are searched from further away; lower it and the officer has to walk right onto you.
SearchCooldown 30 HOST Seconds of peace after a search before any K9 starts on the same person again. Shared between all the dogs, so being cleared by one officer does not hand you straight to the next.
PursuitSpeedMultiplier 1.25 HOST How much faster an officer moves while chasing, compared to their patrol speed. 1 is no faster at all.

How far the dog can actually smell you. SniffRadius is a reference distance, not a fixed one. The dog scores what you are carrying and the score decides the range.

What you are holding Effect on the score
More of it Proportionally more scent. Ten buds shout louder than one.
Loose / unpackaged All of the smell gets out
A baggie 60% of it gets out
A brick 60% gets out
A jar 40% gets out
A wall, floor or door in the way Whatever is left is cut to about a third

Every drug smells the same by default. One unit of any finished drug scores 1, and raw materials score 0.5, so the only things that change the answer are how much you have and what it is in. If you want meth to be louder than mushrooms, that is a number you choose rather than one the mod chose for you.

Packing up is a trade, not a free win. A container hides each unit better and holds several of them, and every unit still counts, so a full jar is not automatically quieter than a couple of loose buds.

At the defaults a full stack of loose product is smelled at the full 10 m, ten of it at about 5 m, a single bud at half a metre, and it takes half as much again to reach the hard ceiling of 15 m. Carry a little and you really are quiet. Carry a lot and you really are loud.

Every one of those numbers is editable. The mod writes UserData\DropDaDeuce-K9Patrol\K9Scents.cfg, and it is a short file on purpose: one line per kind of drug, not per item.

[smell]
Cocaine = 1
Ingredient = 0.5
Meth = 1
Product = 0.5
Shrooms = 1
Weed = 1

[packaging]
(none) = 1
baggie = 0.6
brick = 0.6
jar = 0.4

One number covers every strain of weed, and one covers all the raw materials. Product is the odd row out and you can ignore it, because it covers two internal items the game never actually lets you carry. [packaging] is how much of the smell each container lets out, and (none) is loose product with nothing around it. Both columns point the same way: bigger means easier to smell. 0 in either column means the dog cannot smell that thing at all.

The mod fills the file in itself from what your game actually has, keeps your edits, and adds a line if a game update adds a new kind of drug. Drugs added by other mods are covered too. A modded strain of weed is scored as weed without you doing anything, because the mod asks the game what each item is rather than keeping a list of names.

In multiplayer the host's K9Scents.cfg is used for everybody. The host sends its numbers to every player when you join, and again if it changes them mid-game. Your own file is used when you are hosting, and when you play alone. So if you edit it while playing on someone else's game, nothing will change, and that is not a bug. You do not need to give anyone your file and everyone in the lobby plays to the same smells whether they have edited theirs or not.

Want one specific item to differ? There is an [items] section at the bottom, empty apart from two commented-out examples. A line there, such as ogkush = 2, overrides that one item and leaves everything else alone.

A dog smells through walls, which is what a nose does, so being indoors is not a hiding place. It just means the dog has to get close. What it does stop is an officer marching to your door from halfway down the street having never been anywhere near you.

A dog beats packaging, and that is the point of a dog. Packaging costs you range. It never hides you outright. The side effect is deliberate and you will meet it: you can be sniffed out, chased, searched, and come up clean, because the officer then runs the game's normal body search and that search does fully respect your packaging. Neither one is misbehaving.

If you want a container to hide you from the dog completely, K9Scents.cfg is where you do it. Set that packaging to 0 under [packaging] and the dog cannot smell through it at all.

Backpack mods: the dog looks inside. If you use a mod that gives you a backpack, whatever is in it counts too. Without that, a clean pair of hands and a bag full of product would make you invisible to every dog in the city, which rather defeats the point of a dog.

It lives in K9Scents.cfg with the other smells, in a section of its own:

[containers]
backpack = 1

That number works exactly like a packaging one, and in multiplayer it is the host's copy that counts, the same as everything else about smell:

Value What it means
1 (default) The bag hides nothing. A stash inside it smells the same as one in your hands.
0.5 Half the smell gets out.
0 The dog cannot smell into a bag at all.

Packaging still applies on top, so a jar inside a bag is hidden twice over. This row does nothing in an unmodded game — vanilla Schedule I has no backpack for a dog to sniff, and the mod is looking for a container rather than for any particular mod, so any backpack mod is covered without either mod knowing about the other.

If halving this number changes nothing, you are over the ceiling. The sniff radius is capped by ScentMaxRadiusMultiplier, so a big enough stash reaches the cap at any setting and the distance stops moving. Test with a small amount if you want to see the difference.

Worth knowing if you use one: a backpack mod may have its own setting for whether the police search looks in your bag, and it may well be off by default. Those are two different questions. The dog decides whether you get stopped; the search decides what the officer finds once you are.

Dog movement

Setting Default What it does
DogBaseSpeed 3.0 HOST Metres per second. The dog's ordinary trot alongside its handler.
DogAcceleration 14 HOST How quickly it gets up to speed and slows down again. High looks eager, low looks like it is on ice.
DogAngularSpeed 720 HOST Degrees per second the dog can swing round while it is moving, so how tightly it corners. 720 is two full turns a second. (How fast it spins on the spot to face someone is fixed, and is not this setting.)
CatchupStartDistance 6 HOST Metres behind its handler before the dog breaks into a run to catch up.
CatchupMaxMultiplier 2.2 HOST Fastest it may go while catching up, as a multiple of DogBaseSpeed. It eases back down as it closes the gap.
HardWarpDistance 30 HOST Metres. Past this the dog gives up walking and teleports back to its officer.
HardWarpVerticalDelta 5 HOST Metres of height difference that also triggers the teleport. This is the one that fetches a dog left downstairs.
WarpCooldown 4 HOST Shortest gap between two teleports, so a stuck dog cannot strobe.

The warp settings exist because stairs, doorways and lifts strand dogs. If you see dogs blinking around, raise HardWarpDistance; if you see dogs stranded far behind, lower it.

How the dog looks and sounds

These are YOURS rather than the host's: they change nothing about where the dog is.

Setting Default What it does
DogAnimationSpeedScale 4.5 YOURS How fast the dog's legs move at full speed. Raise it if the dog looks like it is skating, lower it if its legs look like they are spinning. Scales with actual speed, so changing DogBaseSpeed does not require changing this.
AmbientBarkEnabled true YOURS K9s woof to themselves occasionally on patrol. false = silent dogs. The alert shout when a dog smells you is a different sound and is not affected by this.
AmbientBarkRadius 15 YOURS Metres. A dog only bothers woofing if somebody is close enough to hear it.
AmbientBarkMinInterval 14 YOURS Seconds. Shortest gap between two idle woofs.
AmbientBarkMaxInterval 45 YOURS Seconds. Longest gap. Each dog rolls its own gap at random between the two, so they do not bark in unison.

Diagnostics

Setting Default What it does
DebugLogging false YOURS Extra logging. Turn this on before reporting a bug. How the dog decided what it could smell, and how it decided where to walk, are both silent without it.

Compatibility

  • Works on both Schedule I builds. Install the one matching yours.
  • May conflict with other mods that patch police mechanics.
  • Binds directly to the game's police, inventory and NPC code, so a Schedule I update can break it. If it worked before an update and does not now, that is the likely cause. Please report it with DebugLogging = true and the log.

Troubleshooting

Nothing happens at all. MelonLoader is not installed, or you installed the wrong build. Re-check step 1.

No dogs ever appear. They are put onto police foot patrols, so they are not instant and not everywhere. Give it a few minutes of in-game time near a patrolled area. Still nothing? Turn on DebugLogging and look for Spawning up to N K9 officer(s) in the log.

The mod is not in the MelonLoader console at all. That usually means its asset bundle failed to load, which unloads the whole mod rather than starting it without a dog model. The log says so. Please report it.

Dogs are blinking around, or stuck far behind their officer. That is the teleport-when-stranded rule, and it is tunable. See HardWarpDistance above.

I got searched and came up clean. Expected. It is the one place the dog and the search disagree on purpose: the dog smells straight through packaging, and the game's search does not. If you would rather a container hid you from the dog too, set that packaging to 0 in K9Scents.cfg.

Something is wrong in a multiplayer lobby. Turn on DebugLogging on every machine and send every log. One side alone almost never shows the problem. Also check that everyone has both mods, in the flavour matching their own game.

The log to attach is MelonLoader\Latest.log in your Schedule I folder.

Credits

  • Bublisher, the original K9 model: Unity Asset Store
  • spec, K9 harness model and texture design input
  • Bars, shader help and SteamNetworkLib
  • Deeej, the Mono/IL2CPP mod template
  • LavaGang, MelonLoader

Licence

GPL-3.0. The full text ships in the download as LICENSE.txt, and is on GitHub with the source.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.