Skip to content

Your first Custom Campaign

Gasterbuzzer edited this page Feb 2, 2026 · 129 revisions

Your first Custom Campaign

This following section will cover all the basics on how to create a custom campaign for NewSafetyHelp.
Please be aware that this will require some basic entry creation knowledge.
I will be skipping the syntax and installation on this page.
This section will not cover creating custom entries / monsters, but will tell you how to attach it to a custom campaign.
So, if you haven't made your first entry yet, be sure to check it out first.

Creating the custom campaign

We will first see how the custom campaign is defined and then how to add entries, calls, emails, and videos to it.
Similar to how we created a simple entry, we also have to create a .json file in a folder. This will contain the options and settings for your custom campaign.

A simple custom campaign should look like this (Don't forget syntax containing: braces {}, commas ,, the quotation marks "" and the colon :):

{
        "custom_campaign_name": "Custom Campaign Name",

        "custom_campaign_desktop_name": "Campaign Desktop Name",

        "custom_campaign_icon_image_name": "campaign_desktop_icon.png",

        "custom_campaign_days": 5
}

The above JSON file defines the minimum to create a custom campaign. The first line:

"custom_campaign_name": "Custom Campaign Name"

Is the internal name of the campaign. It is best to not reuse the same internal name as others, as this could lead to mix-ups. This is also the name that entries, videos, emails, and callers will need to be associated with the correct custom campaign.

The line:

"custom_campaign_desktop_name": "Campaign Desktop Name"

Provides the name that is shown on the desktop; if you wish to have a name similar to an existing custom campaign, provide it here, as it won't interfere.

For the remaining lines:

"custom_campaign_icon_image_name": "campaign_desktop_icon.png",

"custom_campaign_days": 5

The first line defines the icon that shows up on the desktop to switch into your custom campaign.
And the second line defines how long your campaign should go for. Please be aware that this is merely a way for the game to be able to save your progress, so you don't need to use all the provided days. However, if you are going to have more days than provided in the file, it will not be able to save your custom campaign progress.

If everything worked correctly, then you should be able to see this when you go to the desktop screen:

image

Testing and Debugging

Before learning how to add things to the custom campaign, it's best to learn some options to make testing and working easier. And how to identify problems.
First, let us see how to always enable some default programs on the desktop.

"entry_browser_always_active": true
"scorecard_always_active": true
"artbook_always_active": true
"arcade_always_active": true

These will make the provided programs always be unlocked while in the custom campaign. This may be helpful if you wish to see your scorecard or all entries.
If you enable the entry browser, you see all your custom entries without needing to start a day.

If you are testing the different calls, it is helpful to be able to skip the waiting time. As such, you can use the following option:

"always_show_skip_call_wait_time": true

Now, if your custom campaign or any attached things do not work, always be sure to check the console for any errors. An example of a syntax problem in your file is:

image

As you can see, the mod was unable of reading the provided JSON file. This could be due to a comma or quotation mark missing. So make sure to look for any red errors in the console if things do not work.

Another type of error are warnings. These tell you that something is missing or wrongly provided. These don't necessarily mean that something is wrong, but that something could go wrong or unexpected if not fixed. Here you can see an example of providing a conflicting option. This can happen in cases, such as having a warning caller (A caller that call the player if you get too many answers wrong) and that caller being normal caller at the same time.
In such case you would see the following:

image

If you ever see your game stop working at some point, like after the 4th caller, and you don't see any errors or even warnings, it could be a silent fail (Meaning it fails but doesn't inform you).

This could mean that you may be missing a caller after the current one. Just make sure you aren't forgetting something.

If everything worked fine (no red errors) but it isn't working. Then don't hesitate to ask others or even me for help.

I know there are a lot of new things to learn. Don't worry, take your time. You don't need to know everything now, so feel free to try out and only return once you have some questions.

Later you might find testing 80 different callers in your custom campaign a bit exhausting, especially if you don't remember all the answers. You can use the following option to make all your answers correct, even if you provided the wrong answer (Just don't forget to disable it for others later!):

"skip_callers_correctly": true

Custom Campaign Basic Features

Just as the main campaign uses existing videos, emails, and entries, we might wish to include or exclude them.
Per default, all emails and videos are removed, but not the entries. But if you wish to remove the default entries or include the emails and videos again, you can use the following options:

"custom_campaign_remove_main_entries": true
"remove_default_emails": false,
"disable_main_campaign_videos": false

You can also make all default entries instead be unlocked on day 1 with the following option:

"custom_campaign_empty_main_entries_permission": true

And if you want to disable the default music, you can as well. Just make sure to add some later, or else you won't hear anything:

"remove_default_music": true

In the main campaign, if you get too many answers wrong, you get a warning call, and if you continue getting answers wrong, then you get a game over screen.
You may want to adjust the threshold or set how many callers must happen until a warning appears.

For adjusting the game over and warning threshold, you can use:

"custom_campaign_gameover_threshold": 60
"custom_campaign_warning_threshold": 60

The default is 60. Which means that if you have less than or equal to 60% of calls wrong, it will then trigger a warning, and if it is the end of the day it will also trigger the game over.

To set how many calls with entries attached are required until a warning can appear, one must do it in the following way:

"custom_campaign_threshold_amount": [3, 2, 3, 4, 5, 7] 

The first number in the list is for the first day, the second number is for the second day, etc…
So if your campaign has 5 days, you would need to pass 5 numbers in the list. As an example, the first number “3” means that for the warning to appear, one must see at least 3 callers with entries. This does not mean you need to get 3 wrong, but the 3 can be a mixture of correct and wrongly answered callers. What matters is the warning threshold we provided before. If the 3 callers are the only callers, and we get 2 wrong and 1 correct, it will cause the warning caller to trigger (at 60% threshold) after the third caller.

After this, now let's see the perhaps more interesting option. Cutscene videos! One can now provide a video to play instead of the default after either a game over or normal game ending.

"custom_campaign_end_cutscene_video_name": "cat_dancing.mp4",

"custom_campaign_gameover_cutscene_video_name": "cat_punching_you.mp4"

All you have to do is provide the name and the file inside the same folder. As a recommendation, if you wish to share your mod, make sure your files aren't too large.

That would cover all the basic functionality to have a basic campaign.
The next section will cover more customization for the custom campaign, but it is not needed.
If you wish to learn how to add emails, callers, and videos. And also learn how to attach your custom entries into the custom campaign instead; you can skip the next section.

Adding your first caller

Now after you have created your custom campaign it's time to add callers to it. For this, create a new JSON file (newCaller.json) and call it whatever you wish. Just know that each custom caller must have their own file.

Every custom caller in a custom campaign needs the following form:

{
  "custom_caller_name": "John Safety",
  "custom_caller_transcript": "This doesn't seem to be safe. But I trust your judgement.",
  "custom_caller_image_name": "john.png",
  "custom_caller_audio_clip_name": "john_crying.mp3",

  "custom_campaign_attached": "Name of custom campaign here",
  "order_in_campaign": 23
}

The first three lines should be familiar if you have created a custom entry before. The last two are, however, new.
The line custom_campaign_attached allows you to provide a name for the custom caller to be attached to (This refers to the internal name and not the desktop name).
The option order_in_campaign is to set the order it should appear in. If it is the first caller, you provide a 0. If the caller is the second, you provide the number 1, up until your nth caller which will have the order n - 1. Make sure you don't forget to start at 0! And also don't forget to include all numbers without any gaps, so if you provide caller 0 and caller 2, you also need to provide caller 1, or else it won't work.

The current caller we defined above is called a dynamic caller, since it does not do anything other than provide its transcript and go away.
Callers that have a monster / entry attached are not dynamic callers. This may be helpful if you ever get an error.

Now there is something important to know! The last caller of your campaign should be a dynamic caller! If not, the game will not end your campaign! That means don't provide a monster / entry for the last caller.

Let's now see a few more options.

To provide a monster / entry to be asked by the custom caller, you need to provide any of the following:

"custom_caller_monster_name": "Pizza Cat",

"custom_caller_monster_id": 34

The first option is the recommended way to have it ask for that monster. If, however, you want to instead use IDs, you can use them. But be aware that this ID is meant for testing. Be aware that due to how the game is made, you can not lose on the first day. This may change if there is enough interest to be able to lose on the first day; If you want this, don't be afraid to scream at me to implement it.

Now for a few interesting options.

"custom_caller_downed_network": true
"custom_caller_increases_tier": true

The first option custom_caller_downed_network downs the "network". Which basically means that the player can not access the entries as if the internet were gone. This should be familiar if you have played the main campaign.

The second option allows you to increase the tier of the player in the campaign. That means that if your entries have a higher unlock requirement, you can use it to unlock it for them. How you use this is up to you to decide, but I recommend doing it like the main game at the beginning of the day with a dynamic caller.

Now, after adding a few callers, you may be interested in how to end the day. We do this by assigning a caller to be the last caller of the day (or else it will go through each caller on the first day and end the game on the first day). The option is quite straightforward:

"custom_caller_last_caller_day": true

If set to true, it will end the day afterward. Any caller defined afterward will appear on the next day.

Now an extra option that many will probably will use are consequence callers (Different from warning calls!), which basically are a special call which only happen if the player got an answer wrong. So, if the player said it's an "Ant" even though your custom monster "Ant Queen" was the correct answer. Then you can use this option. It tells the game that the current caller should only play if the answer for a previous caller (For example for the caller ID: 23) was wrong. You can provide it in the consequence caller by:

"custom_caller_consequence_caller_id": 23

Which says, "this caller should only happen if I choose wrongly for caller 23".

After you have successfully defined your custom caller, you should see something like this:

image

Now this is a lot, and you might be wondering if it is possible to replace callers in the main campaign. The answer is yes and no. You can provide the option:

"include_in_main_campaign": true

Please be aware that this is not guaranteed to work and is still in active development, but it works most of the time for basic callers.

That covers all the basics for a custom caller. The next section will show you how to create warning and game over callers. This will be useful if you don't want the default callers.

Warning and Game Over Caller

A warning caller is a caller that appears after the accuracy drops below the warning threshold. The threshold is provided in the custom campaign file. (It also requires a number of non-dynamic callers to happen before the warning call happens, so if you want different values, provide them in your custom campaign file).

To define a warning caller, one must only need to create a normal custom caller (without attaching a monster or entry to it, as it wouldn't fit) and add the following line:

"is_warning_caller": true

The line is always required to define the caller as a warning caller and not a normal caller. As such, providing an order is not needed. Now, if you only provide the above, it will replace all warning callers, but if you wish to use different warning callers for different days, you can provide the following line as well:

"warning_caller_day": 2

Which will make the warning caller only appear on the second (2) day. That means you can have multiple warning callers for each different day and even one warning caller for all days except the ones you provided. It will always prioritize the warning callers with a day provided over general warning callers.

That's all for warning callers.
Another option is to convert your caller to game-over callers. These trigger when the player loses the game (can happen on each day except the first day).

It uses the lines:

"is_gameover_caller": true,

"gameover_caller_day": 1

Similar to warning callers, if you don't provide the day, it will apply for each day and will be overridden by other game-over callers if they provide a day.

And that is all for custom callers! The next section will shortly cover on how to add your already / or soon to be monsters to the custom campaign.

Add your custom monsters into the campaign

This is a small section about attaching your custom monster / entry to the custom campaign. If you haven't yet, check out how to create a custom entry!

Now after you have created your entry, all you have to do is add the following line:

"attached_custom_campaign_name" : "Name of custom campaign"

With this line you attach the entry to the custom campaign. Meaning that it won't be available for the main campaign. Please note if you didn't see the caller section, is that the name of the custom campaign is the internal name and not the desktop name.

A small tip for those interested: replacing an entry / monster is also possible in custom campaigns!

You can use the replace feature to delete an entry from the campaign. (This means you remove only a single entry instead of multiple). You delete an entry with the following lines as an example:

{
	"monster_name": "Bees",
	"attached_custom_campaign_name" : "Custom Campaign Name",


	"replace_entry": true,
	"delete_entry": true
}

The line "delete_entry": true in combination with the line "replace_entry": true causes the entry 'Bees' ("monster_name": "Bees") to be deleted from the custom campaign. Please note that the replace_entry flag is required if you wish to delete an entry.

And that is all. Now the entry / monster will be available in the custom campaign. And last two sections will cover on how to add custom emails and videos to the custom campaign.

Section End

And that all the basics for your very own custom campaign.
Let's hope you found it at least a bit useful and could learn how to create your own custom campaign.
The next page shows a few more customization options and how to add more emails, music and much more to your custom campaign. If you want every option displayed in a cleaner matter, you can check the documentation for a list of all used and available features.
In any case, if you want a feature that isn't added yet, don't be afraid to ask! This isn't all there will be.
Anyway, have fun creating your campaigns!