

Game Version: 0.4.5f1 alternate
CartelEnforcer.dll
SHA256 File Hash: 13A9D117DB2D10FD680506942B52BD41E9A679BD616CE5FD0164F778DA97F578
Requires Melon Loader
Cartel Enforcer adds new features and challenges to the Cartel, including new ambush locations, events, and a better dealer robbery system. Experience the drive-by events, take on mini-quests, and influence the enforced Cartel's presence in new ways!
If you are using Thunderstore Mod Manager you can skip these steps and just install the mod through the manager and it will work.
If you install the mod manually you will find all the config files from the following directory:
UserData/XO_WithSauce-CartelEnforcer/
If you installed with Thunderstore Mod manager the config files will be in the following directory:
UserData/XO_WithSauce-CartelEnforcer_MONO/XO_WithSauce-CartelEnforcer/
OR
UserData/XO_WithSauce-CartelEnforcer_IL2CPP/XO_WithSauce-CartelEnforcer/
You can enable and disable mod features with the first config.json file
You can alternatively change these settings with the UserData/MelonPreferences.cfg file OR the Schedule I mod manager phone app.
The mod supports "hot-reloading" at runtime for all of these.
Manual editing:
{
"debugMode": false,
"driveByEnabled": true,
"realRobberyEnabled": true,
"defaultRobberyEnabled": true,
"miniQuestsEnabled": true,
"interceptDeals": true,
"enhancedDealers": true,
"cartelGatherings": true,
"businessSabotage": true,
"stealBackCustomers": true,
"alliedExtensions": true,
"endGameQuest": true,
"endGameQuestMonologueSpeed": 1.0
}
debugMode:
true: Show debug messages, visualize spawn locations, and display coordinates.false: Hides debug content. The cartel features will still be active.driveByEnabled:
true: Enables drive-by events.false: Disables drive-by events.realRobberyEnabled:
true: Enables the realistic robbery system.false: Disables the realistic robbery system.defaultRobberyEnabled:
true: Enables the game default robberies where you only get a text messagefalse: Disables the game default text message based robberiesminiQuestsEnabled:
true: Enables mini-quests.false: Disables mini-quests.interceptDeals:
true: Enables the Intercept Deals event.false: Disables the event.enhancedDealers:
true: Enables the Enhanced Cartel Dealers featurefalse: Disables the feature.cartelGatherings:
true: Enables the Cartel Gatherings eventfalse: Disables the event.businessSabotage:
true: Enables the Business Sabotage eventfalse: Disables the event.stealBackCustomers:
true: Enables the Steal Back Customers featurefalse: Disables the feature.alliedExtensions:
true: Enables usage of Allied Extensions features. (Requires endGameQuest to be true)false: Disables the features.endGameQuest:
true: Enables the generation of End Game Quest.false: Disables the generation.endGameQuestMonologueSpeed:
1.0: Monologue messages are displayed for roughly 5 seconds0.0: Monologue messages are displayed for roughly 10 seconds
When a dealer is being robbed, a robber will spawn and engage them in a fight. Your actions affect the regional Cartel influence:
This is a new type of event where the Cartel actively attempts to intercept one of your deals.
XO_WithSauce-CartelEnforcer/EventFrequency/config.json file
These events only happen when the Cartel is hostile.
XO_WithSauce-CartelEnforcer/EventFrequency/config.json fileXO_WithSauce-CartelEnforcer/DriveBy/driveby.json file
Mini-quests can be obtained from select NPCs (Anna, Fiona, Dean, Mick, Jeff, Dan, Marco or Herbert).
Cartel Gatherings are a regional task that appear frequently and even during the early game, before the cartel becomes hostile. Their locations are picked from all unlocked regions, with new locations unlocking as you progress through the game.
You can reveal these gathering locations by bribing certain mini quest NPCs.
Gatherings include a "loot goblin" goon carrying stolen items and money if the cartel has stolen from your dealers.
Goons have varied behaviors, including random animations and voice lines, and they occasionally rotate.
If player gets nearby they will get annoyed and eventually turn hostile. If you have killed enough Cartel Dealers, the Gatherings will be hostile on sight at a range depending on the Cartel Dealer Activity value.
XO_WithSauce-CartelEnforcer/EventFrequency/config.json file
Player owned businesses can now be sabotaged by Cartel. For these events you will get a notification indicating which business is being sabotaged. After the notification, a goon will spawn and go plant a bomb at your business. Defuse the bomb or your current laundering operation will fail!
XO_WithSauce-CartelEnforcer/EventFrequency/config.json fileThe frequency of Business Sabotage events is linked directly to the total cartel influence across all regions. When the cartel total influence is lower, these events become more frequent!
Unlocked customers can now be stolen back by the Cartel forcing you to re-unlock your customers by giving them free samples. This event scales in difficulty and frequency depending on how low the Cartels influence is across all regions. The lower their influence is, the harder they fight back!
config.json by setting stealBackCustomer to falseAllied Extensions consists of multiple features that are added to the game while the Cartel is Truced. These features aim to provide new means of reducing influence even while Cartel is Truced in order to progress and complete the game. Additionally the Allied Extensions allow the player to Persude the Cartel Dealers to work for them!
Allied Extensions features and cooldowns can be modified from the XO_WithSauce-CartelEnforcer/Allied/config.json file
The Allied Extensions saves persistent data and progression to the XO_WithSauce-CartelEnforcer/Allied/QuestData folder for each save
After choosing to Truce with the Cartel, each Cartel Dealer gets new Persuade Dialogue Options! Each of the choices offer different probability of success to persuade the Cartel Dealer. Once successfully persuaded, the player can hire the Cartel Dealer to work for them! Each persuasion attempt lowers the regions Cartel Influence!
XO_WithSauce-CartelEnforcer/Allied/config.json file at PersuadeCooldownMinsChoice 1: Clothing Similarity
Choice 2: Overall Cartel Influence
Choice 3: Threatening
Choice 4: Spread Rumours
After hiring a succesfully persuaded Cartel Dealer the regions Cartel Influence is set to 0 instantly.
While a Cartel Goon Gathering is active, greeting all 3 goons in a short timeframe will award the player with influence reduction in the respective region.
XO_WithSauce-CartelEnforcer/Influence/influence.json by changing the trucedGreetingChallenge valueAfter player attends the meeting with Thomas and chooses Truce or loads into a save where Westville Cartel Dealer is not recruited and Cartel is Truced, the Allied Intro Quest will be automatically enabled.
Completion XP: 200
When the Cartel is Truced an Allied Supplies Quest will periodically appear! Grab the Cartel supplies before they disappear.
Completion XP: 300
XO_WithSauce-CartelEnforcer/Allied/config.json file at SupplyQuestCooldownHoursSupply Loot by type:
Blue Barrels:
White Van:
All end game quests scale in difficulty based on the total cartel influence across all regions. Higher total influence will result in enemies having more HP and being overall more lethal and harder to kill. XP Rewards are also scaled based on the total cartel influence to compensate for difficulty.
The End Game Quest can be started by speaking to Manny (the Warehouse Fixer). This Quest can be completed only once per session.
Note: The Unexpected Alliances Quest is in early phase development and is subject to change in content, difficulty and rewards.
Quest Prerequirements:
Upon paying the $5000 Bribe to Manny, you get a custom active quest:
Quest Rewards:
The End Game Quest can be started by speaking to Ray between 18:15 and 19:00 when they are smoking a cigarette near the courthouse. This Quest can be completed only once per session.
Note: The Infiltrate Manor Quest is in early phase development and is subject to change in content, difficulty and rewards.
Quest Prerequirements:
Upon paying the $2500 Bribe to Ray, you get a custom active quest:
Quest Rewards:
| Item | Drop Chance | Quantity | Notes |
|---|---|---|---|
| M1911 Magazine | 100% | 1 | This item is a guaranteed drop. |
| M1911 Pistol | 33.4% | 1 | |
| Cocaine | 10% | 12-20 | |
| Gold Bar | 70% | 3-7 | This drop prevents cash from spawning. |
| Cash | 30% | $1000 | Will spawn if a gold bar does not. |
| Silver Watch | 60% | 1 | |
| Silver Chain | 60% | 1 | |
| Stolen Cartel Item | 80% | 1 | Only spawns if the cartelStolenItems pool has items. |
The End Game Quest can be started by speaking to Cranky Frank between 16:00 and 18:00 when they are smoking a cigarette near the Northern Waterfront. This Quest can be completed only once per session.
Note: The Four Wheels Quest is in early phase development and is subject to change in content, difficulty and rewards.
Quest Prerequirements:
Upon paying the $3500 Bribe to Cranky Frank, you get a custom active quest:
Quest Rewards:
Cooldowns of specified events are saved for each save separately into the XO_WithSauce-CartelEnforcer/EventFrequency/Cooldowns folder
You can customize the frequency of mod added events and also the base game cartel events from the Event Frequency config.
In this file you can also change influence requirements for all events.
{
"events": [
{
"Identifier": "Ambush",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "RegionActivity",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "StealDeadDrop",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "CartelCustomerDeal",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "RobDealer",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "SprayGraffiti",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "CartelPlayerDeal",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "DriveBy",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "InterceptDeals",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "Gathering",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
},
{
"Identifier": "Sabotage",
"CooldownHours": 0,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
}
]
}
Identifier: Name that identifies the event. Do not change the ID values or the mod will break.CooldownHours: How many ingame hours have to be waited until event can start again
InfluenceRequirement: Amount of regional influence needed for the event to run
RandomTimeRangePercentage: Random range that is applied to the cooldown hours if cooldown hours is not 0.
The RegionActivity Cooldown controls how often one of these following Regional Events trigger inside any given region: StealDeadDrop, CartelCustomerDeal, RobDealer, SprayGraffiti. These 4 events do not have a cooldown by default, but you can add it in the config if you want.
Example template value for the Ambush that is the same random cooldown and influence requirement as the game has by default, but overrides the default game cooldown calculation:
{
"Identifier": "Ambush",
"CooldownHours": 15,
"InfluenceRequirement": 0.1,
"RandomTimeRangePercentage": 0.625
},
Result: The cooldown hours will be random between 6 - 24 hours and happens only in regions with more than 100 influence
Example template value for the RegionActivity that is the same random cooldown as the game has by default, but overrides the default game cooldown calculation:
{
"Identifier": "RegionActivity",
"CooldownHours": 30,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.625
},
Result: The cooldown hours will be random between 11 - 49 hours
Example: I want to have the Dealer robbing at higher influence regions only and increase cooldown for only this event
{
"Identifier": "RobDealer",
"CooldownHours": 50,
"InfluenceRequirement": 0.6,
"RandomTimeRangePercentage": 0.3
},
Result: The cooldown hours will be random between 35 - 65 hours and it only happens in regions with higher than 600 influence
Example: I want to have the Sabotage feature less often
{
"Identifier": "Sabotage",
"CooldownHours": 120,
"InfluenceRequirement": -1.0,
"RandomTimeRangePercentage": 0.0
}
Result: The cooldown hours for sabotage event will be exactly 120 ingame hours (5 ingame days in total)
You can customize the Cartel Dealers' settings through the dealer.json file.
{
"CartelDealerWalkSpeed": 2.8,
"CartelDealerHP": 200.0,
"CartelDealerLethality": 0.5,
"CartelDealerWeapon": "M1911",
"StealDealerContractChance": 0.06,
"StealPlayerPendingChance": 0.08,
"DealerActivityDecreasePerKill": 0.10,
"DealerActivityIncreasePerDay": 0.25,
"SafetyThreshold": -0.85,
"SafetyEnabled": true,
"FreeTimeWalking": true
}
CartelDealerWalkSpeed: Adjusts the walking speed of Cartel Dealers (Range 1.0 - 7.0)CartelDealerHP: Sets the total health points for a Cartel dealer (Range 10.0 - 2000.0)CartelDealerLethality: Controls how lethal Cartel Dealers' weapons are (Range 0.0 - 1.0)CartelDealerWeapon: Specifies the weapon used by Cartel dealers. Supported values are: "M1911", "Revolver", "Knife" and "Shotgun".StealDealerContractChance: Controls the probability for the Cartel Dealer stealing Players hired dealers active contracts. (Range 0.0 - 1.0)StealPlayerPendingChance: Controls the probability for the Cartel Dealer stealing Players pending deal requests. (Range 0.0 - 1.0)DealerActivityDecreasePerKill: A decrease in dealer activity for each kill the player makes. (Range 0.0 - 1.0)DealerActivityIncreasePerDay: An increase in dealer activity for each in-game day that passes. (Range 0.0 - 1.0)SafetyThreshold: Defines the minimum value required for a dealers to stop leaving their houses. This will cause them to stay inside if too many dealers are killed. (Range -1.0 - 1.0)SafetyEnabled: When set to true, this enables the usage of SafetyThreshold.FreeTimeWalking: When true, dealers will randomly walk around when they are not performing an active task. When false, they will remain stationary at their apartment door when spawning. This also controls their walking during time which cartel is not hostile.You can add or modify custom ambush locations.
XO_WithSauce-CartelEnforcer/Ambush/ambush.json file.mapRegion: A number from 0-5 for the region.ambushPosition: The X, Y, and Z coordinates of the trigger area.spawnPoints: At least four spawn points for enemies (only X and Z values matter for ambushes above ground, in Sewers you need the exact negative y value too).detectionRadius: A decimal number for how close the player must be to the ambushPosition. {
"mapRegion": 5,
"ambushPosition": {
"x": 143.05,
"y": 1.75,
"z": -16.73
},
"spawnPoints": [
{
"x": 138.56,
"y": 0.0,
"z": -38.61
},
{
"x": 128.19,
"y": 0.0,
"z": -9.84
},
{
"x": 135.87,
"y": 0.0,
"z": -6.18
},
{
"x": 155.29,
"y": 0.0,
"z": -23.90
}
],
"detectionRadius": 10.0
},
XO_WithSauce-CartelEnforcer/Ambush/default.json.default.json to ensure your configuration is up to date. It will be recreated the next time you load a save.Open XO_WithSauce-CartelEnforcer/Ambush/settings.json.
You can modify the weapons used for ambush events, change the minimum rank required for ranged weapon usage in ambushes and also disable the ambushes that happen rarely after deals get completed by player.
The file content is by default:
{
"RangedWeaponAssetPaths": [
"Avatar/Equippables/Revolver",
"Avatar/Equippables/M1911",
"Avatar/Equippables/PumpShotgun"
],
"MeleeWeaponAssetPaths": [
"Avatar/Equippables/Knife"
],
"MinRankForRanged": 2,
"AfterDealAmbushEnabled": true,
"AmbushTriggerProbability": 0.8,
"AmbushWeaponLethality": 0.33
}
The Drive By events triggers and trigger radius' in addition to the driving routes can be configured from the XO_WithSauce-CartelEnforcer/DriveBy/driveby.json
You can add new triggers, edit existing ones or remove them. When adding new triggers, make sure that the spawnEulerAngles are Euler and not default Quaternion and that the car is facing correct rotation at the start position. Both the start and end positions must be on the road.
The file contains all of the drive by triggers data with each entry containing the name, trigger position & radius, car spawning rotation and the driving start and end position.
Example of the .json file content:
{
"triggers": [
{
"name": "Suburbia Bus Stop",
"triggerPosition": {
"x": 110.39,
"y": 5.36,
"z": -111.69
},
"radius": 2.0,
"spawnEulerAngles": {
"x": 0.0,
"y": 270.0,
"z": 0.0
},
"startPosition": {
"x": 144.68,
"y": 5.6,
"z": -103.69
},
"endPosition": {
"x": 17.4,
"y": 1.37,
"z": -103.53
}
},
...
{
"name": "Suburbia Jeremys house",
"triggerPosition": {
"x": 69.55,
"y": 5.93,
"z": -117.93
},
"radius": 2.0,
"spawnEulerAngles": {
"x": 0.0,
"y": 270.0,
"z": 0.0
},
"startPosition": {
"x": 144.68,
"y": 5.6,
"z": -103.69
},
"endPosition": {
"x": 17.4,
"y": 1.37,
"z": -103.53
}
}
]
}
XO_WithSauce-CartelEnforcer/CartelItems/(slot number)_(organisation name).json.XO_WithSauce-CartelEnforcer/Influence/influence.json.{
"interceptFail": 0.025,
"interceptSuccess": -0.050,
"deadDropFail": 0.025,
"deadDropSuccess": -0.050,
"gatheringFail": 0.025,
"gatheringSuccess": -0.080,
"robberyPlayerEscape": 0.025,
"robberyGoonEscapeSuccess": 0.025,
"robberyGoonDead": -0.080,
"robberyGoonEscapeDead": -0.050,
"sabotageBombDefused": -0.150,
"sabotageGoonKilled": -0.050,
"sabotageBombExploded": 0.200,
"cartelDealerPersuaded": -0.100,
"trucedGreetingChallenge": -0.150,
"passiveInfluenceGainPerDay": 0.025,
"cartelDealerDied": -0.100,
"ambushDefeated": -0.100,
"graffitiInfluenceReduction": -0.050,
"customerUnlockInfluenceChange": -0.075
}
Note: Due to the way which the mod handles some of the influence changes, sometimes the displayed influence change is not displaying the correct change and can rarely display the change twice for the event
Open XO_WithSauce-CartelEnforcer/Allied/config.json.
Each Cartel Dealers "Cut" and "Signing Fee" is defined in this file
Additionally the Persuade Cooldown (in-game) minutes and Supply Quest Cooldown (in-game) Hours are defined in this file
The file content is by default:
{
"WestvilleCartelDealerCut": 0.3,
"WestvilleCartelSigningFee": 6000.0,
"DowntownCartelDealerCut": 0.4,
"DowntownCartelSigningFee": 12000.0,
"DocksCartelDealerCut": 0.5,
"DocksCartelSigningFee": 18000.0,
"SuburbiaCartelDealerCut": 0.55,
"SuburbiaCartelSigningFee": 24000.0,
"UptownCartelDealerCut": 0.6,
"UptownCartelSigningFee": 36000.0,
"PersuadeCooldownMins": 60,
"SupplyQuestCooldownHours": 48
}
In debug mode, you can see various visual cues and use keybinds to test features.
The Debug Mode does not log anything into console in version 1.4.0 and above for performance reasons. For Console Logs you need to build the dll file from source code using DEBUG configuration. See GitHub BUILD.md for more info.
Left CTRL + R: Trigger a Dealer Robbery at the nearest dealer.Left CTRL + G: Trigger an instant drive-by at the nearest location.Left CTRL + H: Give a mini-quest to one of the select NPCs.Left CTRL + L: Log internal mod data to the console. ( Only Debug Builds )Left CTRL + T: Trigger an Intercept Deal event.Left CTRL + Y: Generate the Unexpected Alliances Quest dialogue option for Manny, without checking prerequirements.Left CTRL + U: Generate the Infiltrate Manor Quest dialogue option for Ray, without checking prerequirements.Left CTRL + P: Instantly spawn a Cartel Gathering at a random locationLeft CTRL + N: Start a Sabotage Event at nearest supported businessLeft CTRL + O: Steal back the nearest customer to the player without checking prerequirementsLeft CTRL + I: Start the Allied Intro Quest (note: might cause errors or break the game if not truced)Left CTRL + K: Start the Allied Supplies Quest (note: might cause errors or break the game if not truced)For multiplayer to function correctly, all players must have the same configuration content inside the UserData/XO_WithSauce-CartelEnforcer folder
Most of the events and activities added by this mod do not support multiplayer yet.
Note: The configuration files and directory structure described in this document will be created automatically in the UserData directory if the files are missing.
Contribute, Build from Source or Verify Integrity -> GitHub