Merch Reviews Music About Codex Creators Contact Join Discord
SCUM Custom Quest Modification Guide
SCUM Server Customization

SCUM Custom Quest Modification Guide

Create, customize, and manage SCUM quests with the Jade Vanity Gaming Quest Editor or through manual JSON files. This guide breaks down the quest folder structure, required properties, reward pools, condition types, map markers, interaction objects, and practical setup tips for server owners and sandbox testing.

Launch Quest Editor Start Guide Back to Guide
Quick note: Quest changes require a server restart, or a game restart in sandbox mode, before modified JSON files will take effect.

1. Overview

SCUM allows you to create and customize quests through JSON files located in specific folders, depending on whether you are running a multiplayer server or playing in sandbox mode. All changes to quest JSON files require a server restart (or game restart in sandbox mode) for the changes to take effect.

Interactive SCUM Quest Editor

Before creating quests manually, you can use the Jade Vanity Gaming SCUM Quest Editor to build valid quest files through a visual interface. The editor helps generate properly formatted JSON, reduce formatting mistakes, and speed up the custom quest creation process.

  • Visual quest builder
  • Reward and condition setup
  • Export-ready JSON structure
  • Beginner-friendly quest creation
Launch the SCUM Quest Editor

While understanding the JSON structure is important for advanced customization, most users can create complete quests using the SCUM Quest Editor first, then use the rest of this guide to understand, fine-tune, or manually edit the exported quest files.

Relevant Commands

#ExportQuests - Creates the Quests folder (if it doesn't already exist) and exports quest-related JSON files, providing a snapshot of all current quests.

#GetMeshInfo - Used for Interaction conditions to retrieve object information on the map (e.g., for placing interactable objects).

2. Folder and File Structure

Quests Folder

Depending on your setup, the Quests folder is located at the following location:

  • Multiplayer server: <server>\SCUM\Saved\Config\WindowsServer\Quests
  • Sandbox: %LocalAppData%\SCUM\Saved\Config\WindowsNoEditor\Quests

This folder is created automatically the first time you run the #ExportQuests command. Inside the Quests folder, you will find the following subfolders:

Blocked

Contains BlockedQuests.json, which lets you block (disable) certain quests by name or block all default quests.

Override

Used to add or update custom quests. When the server starts (or the game in sandbox), it parses the JSON files in this folder and applies any new or updated quests.

QuestList

Contains CustomQuestList.json (list of all custom quests exported) and DefaultQuestList.json (list of all default quests). Editing these files does not affect the server or gameplay; they are for reference only.

Blocking Default Quests

If you wish to prevent certain default quests from appearing, you can use the BlockedQuests.json file located in the Blocked folder. Simply add the names of the quests you want to disable. For example:

{
  "BlockAllDefaultQuests": false,
  "BlockQuestNames": [
    "T1_AR_Fetch_45ACPAmmobox",
    "T1_AR_Fetch_50AEAmmobox",
    "T1_AR_Fetch_9mmAmmobox"
  ]
}

Set BlockAllDefaultQuests to true if you want to disable all default quests.

3. Creating Custom Quests

All custom quests must be placed as one JSON object per file in the Override folder. Each file describes a single quest. When the server (or game) restarts, SCUM will load these quests.

Example File Structure

Quests
│
├── Blocked
│   └── BlockedQuests.json
├── Override
│   ├── MyFirstCustomQuest.json
│   └── MySecondCustomQuest.json
└── QuestList
    ├── CustomQuestList.json
    └── DefaultQuestList.json

4. Anatomy of a Quest JSON File

Each quest you create is defined by a Quest JSON object with specific properties. Some properties are mandatory, while others are optional.

Below is the structure, followed by detailed explanations:

{
  "AssociatedNPC": "Bartender",
  "Tier": 1,
  "Title": "My First Custom Quest",
  "Description": "Help the Bartender with some tasks.",
  "TimeLimitHours": 24,
  "RewardPool": [
    {
      // One or more Reward objects can go here.
    }
  ],
  "Conditions": [
    {
      // One or more Condition objects can go here.
    }
  ]
}

More on RewardPool and Conditions later.

4.1 Mandatory Properties

AssociatedNPC
Type: string
Must be one of: "Armorer", "Banker", "Barber", "Bartender", "Doctor", "Fisherman"/"Harbourmaster", "GeneralGoods", or "Mechanic".
Indicates which NPC offers the quest and where the rewards (including store discount rewards) come from.

Tier
Type: integer (valid range: 1 to 3)
Specifies the quest's difficulty or importance level.

Title
Type: string
Any suitable text to label your quest.

Description
Type: string
A short description outlining what the player needs to do.

RewardPool
Type: array of Reward objects.
Exactly one of these Reward objects is randomly chosen each time a new instance of the quest is generated.

Conditions
Type: array of Condition objects.
These define the objectives that must be met to complete the quest.

4.2 Optional Properties

TimeLimitHours
Type: number (could be integer or decimal)
Sets the time limit for completing the quest in hours (e.g., 24, 48.5, etc.).
Omit if there is no time limit.

5. Reward Objects

Each entry in the RewardPool array is a Reward object. SCUM places a maximum of five "reward slots" in each object, counted as follows:

Currency (Normal, Gold, Fame) Group:
All three of these together count as 1 reward slot—whether you include just one (e.g., CurrencyNormal only) or all three (CurrencyNormal, CurrencyGold, and Fame).

Skills:
Each Skill grant counts as 1 reward slot per skill.
Example: If you give experience in Archery and Cooking, that's 2 reward slots.

TradeDeals:
The first TradeDeal within a single Reward object counts as 2 reward slots.
Each additional TradeDeal in the same Reward object counts as 1 reward slot.
Item awarded must belong to the Trader's Inventory

Below is an example showing how reward counting works:

{
  "CurrencyNormal": 100,
  "CurrencyGold": 1,
  "Fame": 10,
  "Skills": [
    {
      "Skill": "Cooking",
      "Experience": 50
    }
  ],
  "TradeDeals": [
    {
      "Item": "Weapon_M9",
      "Price": 50,
      "Amount": 2,
      "AllowExcluded": false,
      "Fame": 10
    }
  ]
}
  • CurrencyNormal (100) + CurrencyGold (1) + Fame (10) → 1 reward slot
  • Cooking Skill +50 EXP → 1 reward slot
  • First TradeDeal → 2 reward slots

So far, the total is 4 reward slots. You could add one more skill or one more TradeDeal (or any single-slot reward element) before hitting the limit of 5.

5.1 Reward Object Properties

CurrencyNormal (integer) The amount of normal currency the player receives.

CurrencyGold (integer) The amount of gold currency the player receives.

Fame (integer) Fame points awarded.

Skills (array of Skill objects) The player gains skill experience for each Skill object in this array.

TradeDeals (array of TradeDeal objects) Defines discounted or otherwise modified item prices at the corresponding NPC shop.

6. Skill Objects

Used within the Skills array inside a Reward object.

{ 
  "Skill": "Cooking",
  "Experience": 50 
}

Skill (string) Must be one of the predefined skill names: "Archery", "Aviation", "Awareness", "Boxing", "Camouflage", "Cooking", "Demolition", "Driving", "Endurance", "Engineering", "Farming", "Handgun", "Medical", "MeleeWeapons", "Motorcycle", "Rifles", "Running", "Sniping", "Stealth", "Survival", "Tactics", or "Thievery".

Experience (integer) Amount of experience points to grant for that skill.

7. TradeDeal Objects

Used within the TradeDeals array inside a Reward object.

{
  "Item": "Weapon_M9",
  "Price": 50,
  "Amount": 2,
  "AllowExcluded": false,
  "Fame": 10
}

Item (string) The in-game name of the item, same as you would use in #SpawnItem.

Price (integer, optional) The discounted (or altered) price. Omit to keep the default price.

Amount (integer ≥ 1, optional) The quantity of the discounted item available.

AllowExcluded (boolean, optional) Allows buying items normally not sold by the trader if set to true.

Fame (integer ≥ 0, optional) Fame requirement to buy the item. Omit to use the default fame requirement.

8. Condition Objects

The Conditions array in a Quest JSON object consists of one or more Condition objects. Each condition can be one of three types: Elimination, Fetch, or Interaction.

8.1 Common Condition Properties

{
  "Type": "Elimination",
  "CanBeAutoCompleted": false,
  "TrackingCaption": "Eliminate 3 puppets",
  "SequenceIndex": 0,
  "LocationsShownOnMap": [
    {
      "Location": { "X": 0.0, "Y": 0.0, "Z": 0.0 },
      "SizeFactor": 1.0
    }
  ]
}

Type (string) Must be "Elimination", "Fetch", or "Interaction".

CanBeAutoCompleted (boolean, default: false) If false, the player must return to the quest-giving NPC to complete this step. If true, it completes automatically once the requirements are met.

TrackingCaption (string, optional) What appears in the player's journal or quest log to describe this step.

SequenceIndex (integer ≥ 0) Defines the order in which conditions become active.

  • At least one condition must have SequenceIndex: 0.
  • Multiple conditions can share the same index, and all must be completed before the quest advances to the next index.

LocationsShownOnMap (array of MapLocation objects, optional) Draws circles on the map for this condition's location(s).

8.1.1 MapLocation Objects

Each object in LocationsShownOnMap looks like this:

{"Location": { "X": 1000.0, "Y": 2000.0, "Z": 30.0 },
"SizeFactor": 1.0}

Ctrl+C in-game to copy location also works:

{ "Location": "{X=-157607.328 Y=-687586.562 Z=667.976|P=353.113800 Y=101.191971 R=0.000000}",
"SizeFactor": 1.0}

Location
An object containing X, Y, Z coordinates in the game world.

SizeFactor (number > 0.0)
The scale of the drawn circle (1.0 is ~300 m diameter).

8.2 Elimination Conditions

Used for kill requirements:

{ 
  "Type": "Elimination",
  "TargetCharacters": [
    "Puppet",
    "Prisoner" 
  ],
  "Amount": 5,
  "AllowedWeapons": [
    "BP_Weapon_M1911_C",
    "BP_Weapon_M9_C"
  ]
}

TargetCharacters (array of strings) Lists who or what must be eliminated. Can include spawn names used in #SpawnZombie (e.g., Puppet) or #SpawnAnimal. Special placeholders:

  • "Puppet" (matches all puppets)
  • "Prisoner" (matches all player characters)
  • "Razor", "Sentry", "SentryOld"
  • "ArmedNPC" (matches all Armed Npcs)

Amount (number ≥ 1) The number of kills required.

AllowedWeapons (array of strings, optional) If present, only kills made with these weapons will count. Omit to allow any weapon.

8.3 Fetch Conditions

Used for collecting or delivering items:

{
  "Type": "Fetch",
  "DisablePurchaseOfRequiredItems": false,
  "PlayerKeepsItems": false,
  "RequiredItems": [
    {
      "AcceptedItems": [ "Apple" ],
      "RequiredNum": 3,
      "RandomAdditionalRequiredNum": 2,
      "MinAcceptedItemUses": 1,
      "MinAcceptedCookLevel": "Raw",
      "MaxAcceptedCookLevel": "Cooked",
      "MinAcceptedCookQuality": "Poor",
      "MinAcceptedItemMass": 100.0,
      "MinAcceptedItemHealth": 50.0,
      "MinAcceptedItemResourceRatio": 20.0,
      "MinAcceptedItemResourceAmount": 50.0
    }
  ]
}

DisablePurchaseOfRequiredItems (boolean) If true, no one can buy items listed in RequiredItems while the quest is active—only relevant if the server has BLOCK PURCHASE OF REQUIRED ITEMS setting turned ON.

PlayerKeepsItems (boolean) If true, items are not removed from the player's inventory upon quest completion.

RequiredItems (array of Item objects) Each Item object specifies what and how many items must be collected.

8.3.1 Item Objects

Properties for each required item:

AcceptedItems (array of strings) List of item names as recognized by #SpawnItem.

RequiredNum (integer ≥ 1) How many of these items must be collected.

RandomAdditionalRequiredNum (integer ≥ 1, optional) A random additional amount (up to the specified number) that may be required.

MinAcceptedItemUses (integer ≥ 0, optional) If applicable, the item must have at least this many uses.

MinAcceptedCookLevel / MaxAcceptedCookLevel (string, optional) Allowed cooking level range for food. Valid levels: "Raw", "Undercooked", "Cooked", "Overcooked", "Burned".

MinAcceptedCookQuality (string, optional) Lowest acceptable cooking quality: "Ruined", "Bad", "Poor", "Good", "Excellent", "Perfect".

MinAcceptedItemMass (number ≥ 0.0, optional) In grams, an item's mass must be at least this value.

MinAcceptedItemHealth (number from 0.0 to 100.0, optional) Minimum item health percentage required.

MinAcceptedItemResourceRatio (number from 0.0 to 100.0, optional) Used for liquid-containing items (e.g., water bottles). Must have at least this % of the liquid.

MinAcceptedItemResourceAmount (number ≥ 0.0, optional) Used for liquid-containing items. Must have at least this many grams.

8.4 Interaction Conditions

Used for interacting with objects placed on the map (e.g., flipping switches, collecting notes, etc.).

Obtaining Location Data

Use #GetMeshInfo in-game while looking at an object to capture its mesh name, instance, transform, etc. It copies a JSON snippet to the clipboard that you can paste directly into your quest file.

{ 
  "Type": "Interaction",
  "Locations": [{
    "AnchorMesh": "/Game/World/SomeMap/BP_Switch.BP_Switch_C",
    "Instance": 4,
    "FallbackTransform": "X=123.456 Y=234.567 Z=10.0 Pitch=0 Yaw=0,Roll=0",
    "VisibleMesh": "/Game/World/SomeMap/BP_SwitchModel.BP_SwitchModel_C" 
  },
  {
    "AnchorMesh": "/Game/World/SomeMap/BP_Door.BP_Door_C"
  }],
  "MinNeeded": 1,
  "MaxNeeded": 2,
  "SpawnOnlyNeeded": true,
  "WorldMarkerShowDistance": 50
}

Locations (array of Location objects) Each defines an object placement or interaction point in the world.

MinNeeded / MaxNeeded (integers) Randomly determines how many out of the specified location objects the player must interact with. If MinNeeded = 1 and MaxNeeded = 2, the game will decide if 1 or 2 interactions are needed.

SpawnOnlyNeeded (boolean) If true, only the randomly determined number of objects are spawned. If false, all are spawned, but the player only needs to interact with enough to satisfy the required number.

WorldMarkerShowDistance (integer ≥ 0) The distance (in meters) at which a marker is visible in the world, guiding players to the object's exact location.

8.4.1 Location Objects

AnchorMesh (string) Identifies the in-game object on the map.

Instance (integer, optional) Used if multiple copies of the same mesh are in close proximity.

FallbackTransform (string) Position/rotation data used if AnchorMesh fails (e.g., sandbox mode always uses the FallbackTransform).

VisibleMesh (string) The 3D model to display.

Basic shapes that can be used and placed anywhere:

  • /Game/ConZ_Files/Models/BasicShapes/Shape_Cube.Shape_Cube
  • /Game/ConZ_Files/Models/BasicShapes/Shape_Cylinder.Shape_Cylinder
  • /Game/ConZ_Files/Models/BasicShapes/Shape_Plane.Shape_Plane
  • /Game/ConZ_Files/Models/BasicShapes/Shape_Sphere.Shape_Sphere

9. Putting It All Together: Example Quest

Below is a simple, fully-detailed example of a custom quest JSON file. Save this file as MyFirstQuest.json (or any name) inside the Override folder.

{
  "AssociatedNpc": "GeneralGoods",
  "Tier": 1,
  "Title": "General Goods trader's Special",
  "Description": "Collect apples for the General Goods trader and get a small reward.",
  "TimeLimitHours": 24.0,
  "RewardPool": [{
    "CurrencyNormal": 100,
    "Fame": 5,
    "Skills": [{
      "Skill": "Cooking",
      "Experience": 20
    }],
    "TradeDeals": [
      {
        "Item": "Pineapple",
        "Price": 50,
        "Amount": 1,
        "Fame": 0 
      } 
    ] 
  }],
  "Conditions": [{
    "TrackingCaption": "Gather apples",
    "SequenceIndex": 0,
    "CanBeAutoCompleted": false,
    "Type": "Fetch",
    "DisablePurchaseOfRequiredItems": false,
    "PlayerKeepsItems": true,
    "RequiredItems": [{
      "AcceptedItems": [
        "Apple_2"
      ],
      "RequiredNum": 3,
      "MinAcceptedItemHealth": 50.0
    }],
    "LocationsShownOnMap": [{
      "Location": {
        "X": 1000.0,
        "Y": 2000.0,
        "Z": 50.0
      },
      "SizeFactor": 1.0
    }]
  }]
}

Explanation

  • AssociatedNPC - The General Goods trader will offer the quest, and rewards from the TradeDeals array apply to the General Goods trader's shop.
  • Tier - Tier 1 indicates a simple or low-level quest.
  • RewardPool - The player receives 100 normal currency, 5 fame, 20 Cooking experience, and can buy a Pineapple at a discounted price once they complete the quest.
  • Conditions
    • Type is Fetch. The player must bring 3 apples (AcceptedItems: Apple_2) with at least 50% health.
    • They must return to the General Goods trader (CanBeAutoCompleted: false) to finalize the quest.
    • PlayerKeepsItems is true, so they won't lose the apples upon completion.

After creating or modifying this file, restart your server or game for the quest to become active.

10. Tips and Best Practices

  • Keep backups of your JSON files in case you need to revert changes.
  • Validate your JSON using online or local JSON validators to prevent formatting errors.
  • Use #GetMeshInfo for accurate placement data for Interaction type conditions.
  • Test your quest in sandbox mode first if possible, before adding it to a live server environment.
  • Remember that you cannot edit default quests. You can only block them or create entirely new ones.

Conclusion

By following this guide, you should be able to create, customize, and manage your own quests in SCUM. Whether you want to block default quests, add new ones with unique conditions, or reward players with currency, fame, discounts, or skill experience, the JSON structure provided above covers all the essentials.

Important: Always restart your server or game after making changes to the JSON files so that your custom quests load properly.

Enjoy crafting unique SCUM experiences with your custom quests!