You can find the latest app version downloads here.
If you encounter a bug or want to suggest a new feature, feel free to open a ticket!
Depending on your operating system, you have to select the correct file:
- Windows: Blood.on.the.Clocktower.Online_[version]_x64-setup.exe
- Mac (M1 or newer): Blood.on.the.Clocktower.Online_[version]_aarch64.dmg
- Mac (Intel): Blood.on.the.Clocktower.Online_[version]_x64.dmg
- Linux: Blood.on.the.Clocktower.Online_[version]_amd64.AppImage
Warning
The Linux standalone version currently does not support microphone / camera chat.
This will be fixed in a future update.
Your custom (and homebrew) scripts can be augmented with "meta data" to improve the play experience and make it easier for your players to see what script exactly is being played. In order to do this, just add a meta
entry to your custom script JSON, with the following (optional) properties:
{
"id": "_meta",
"name": "Your Custom Script Name",
"author": "Your Name",
"logo": "https://i.imgur.com/logo.png",
"background": "https://i.imgur.com/background-image.jpg"
}
If you're interested in creating your own "homebrew" scripts or characters, there's a JSON Schema available which will give you an idea about how your JSON should look like, in order to be supported by the app. You can also use this schema to validate your JSON file. Here's an example of how a character might be defined:
{
"id": "widow",
"name": "Widow",
"edition": "experimental",
"image": [
"https://i.imgur.com/widow.png",
"https://i.imgur.com/widow_good.png"
],
"team": "minion",
"firstNight": 22,
"firstNightReminder": "Show the Grimoire for as long as the Widow needs. The Widow chooses a player. :reminder:",
"otherNight": 0,
"otherNightReminder": "",
"reminders": ["Poisoned"],
"remindersGlobal": ["Knows"],
"setup": false,
"ability": "On your 1st night, look at the Grimoire and choose a player: they are poisoned. 1 good player knows a Widow is in play.",
"special": [
{
"name": "grimoire",
"type": "signal",
"time": "night"
}
],
"jinxes": [
{"id": "alchemist", "reason": "The Alchemist can not have the Widow ability."},
{"id": "magician", "reason": "When the Widow sees the Grimoire, the Demon and Magician's character tokens are removed."},
{"id": "poppygrower", "reason": "If the Poppy Grower is in play, the Widow does not see the Grimoire until the Poppy Grower dies."},
{"id": "damsel", "reason": "Only 1 jinxed character can be in play."},
{"id": "heretic", "reason": "Only 1 jinxed character can be in play."}
]
}
Note that most of these properties are optional and in fact a few of them (jinxes
, special
) will very rarely, if ever, be needed for Homebrew content and might be subject to change.
Homebrew characters can use some of the app features through the special
property, which contains an array of each special app feature that this character will use.
Each of these special
features requires a type
and name
property, at the very least. Some of them also need a value
, time
or global
property or any combination of them.
The available special app features are listed below, grouped by their type
.
This type modifies how the character selection process at the beginning of the game works.
- Name:
bag-disabled
: This character can't be selected to go into the bag. (to be distributed to the players)
Example: Drunk, Marionette - Name:
bag-duplicate
: This character can be added more than once to the bag. (to be distributed to the players)
Example: Legion, Riot
This type allows the Storyteller to activate a special character ability, like returning all ghost vote tokens or allowing players to point at another player.
All abilities can be modified by the time
and global
parameters.
- Name:
pointing
: Starts a "point at a player" type of special vote, which allows some or all players to democratically choose a player.
Example: Boomdandy, Fiddler - Name:
ghost-votes
: This ability returns all spent ghost votes to dead players.
Example: Ferryman - Name:
distribute-roles
: This ability sends out the currently assigned characters to all players.
Example: Gardener
This type allows the Storyteller to send a player special information through the night "wake" interface.
Can be modified by the time
parameter.
- Name:
grimoire
: Send a copy of the Grimoire to the player. The grimoire copy can be modified before being sent.
Example: Spy, Widow - Name:
card
: Send a pre-defined custom Storyteller card to a player with this character. Requires avalue
to contain the card text. - Name:
player
: Allows a player with this character to send a pre-defined custom response to the Storyteller. Requires avalue
to contain the response text.
This type modifies how the nomination or vote is being run.
- Name:
hidden
: The vote will be run in secret. (only the Storyteller can see the results)
Example: Organ Grinder - Name:
multiplier
: Assigning any reminder token of this character to a player will modify their vote count with a multiplier. Requires avalue
to define the multiplier.
Example: Bureaucrat, Thief
This type modifies what happens when the game ends, right before the character reveal.
- Name:
replace-character
: Assigning the firstremindersGlobal
reminder token (e.g. "Is the Philosopher") to a player will replace their current character with this one when the game ends.
Example: Drunk, Philosopher
- Property
time
: This property limits when a specific ability or effect can be used. Currently only works onability
andsignal
type of effects. Possible values:- "pregame"
- "day"
- "night"
- "firstNight"
- "firstDay"
- "otherNight"
- "otherDay"
- Property
value
: Can be a Number or String that is used as a parameter for a special ability or effect. - Property
global
: An awkward compromise to allow Lil'Monsta to work when it is not in play. Currently defines what kind of characters have the special ability as long as this character is on the script. I'd probably not use this if I were you, because it might be subject to change if I can think of a better way to make Lil'Monsta work. Can contain any character type value. ("townsfolk", "outsider", "minion", "demon", "traveler")