Local copy of the nice blood on the clocktower webapp in case it ever disappears.
Find a file
MRegnard 3e859a8850
Adding the Organ Grinder (#42)
* Adding Organ Grinder's icon

* Adding Organ Grinder's English description

* Adding Organ Grinder's French Description

* Adding Organ Grinder's English Jinxes

* Adding Organ Grinder's French Jinxes

* Correcting a typo

* Correcting a typo

* Adding a new icon

* Temporary change to test presence of new icon

* Adding some texts

They will be useful later

* Adding some texts, useful later

* Adding print in History for hidden vote

* Correcting history's print

* Adding new token for Organ Grinder

* New token for Organ Grinder

* Adding new (boolean) parameter for hidden vote

* Adding a new option in the menue

Without effect for now

* Cancelling previous update

* Adding new option in the menue

For now, without the bad effect

* Test: is the variable "isOrganGrinder" detected?

* The option in the menue can now change a variable

* Updating the saving of vote history

Taking account the possibility of Organ Grinder

* Correcting the previous commit

Deleting an unexpected "locale"

* Testing new way

Because of its folder, this file doesn't have access to the grimoire. I test now to give the boolean "organVote" as a parameter.

* Testing giving "organGrinder" as a parameter

* Testing to find the "grimoire" variable

* Adding a print for debbug

* Deleting the console.log, but adding a new test

* Test to know if the bool variable is seen

* End of test, get back to the normal type

* Test

* Cancelling all changes in Vote.vue

* Trying to access to the grimoire with an import

* Testing again to import grimoire

* Testing to print organGrinder

* Gone back to the first changes

Now, we just have to know where is the grimoire, for the import

* Test for access to the grimoire

* New test to find the grimoire

* Trying to import 'state' instead of 'grimoire'

* maybe the import is useless

* Trying what happens if organGrinder=true

* Trying access to index.js/state without conflict

* Update session.js

* Update session.js

* Update session.js

* Correcting typo

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Update session.js

* Final version of this file

* Updating a sentence in singular

* Correcting Organ Grinder's ability

The Organ Grinder's ability is not active for exiles.

* Hiding the number of votes if Organ Grinder

* Trying new bool, maybe better that "isStoryTeller"

* Update Vote.vue

* Update Vote.vue

* Just for a test

* Update Vote.vue

* It's just for a test

* Cancelling all changes, I'll see it later

* Updating to take account isOrganGrinderVoteMode

* Allowing Story Teller to see history

(even if there is an Organ Grinder)

* Correcting ?:

An "else" condition is necessary.

* Trying to correct the error with new parenthesis

* Hidding the number of hands up during vote

Only for players, and only if there is an Organ Grinder

* Test for hide vote

* Update Player.vue

* Cancelling changes

* Test for icons

* New test to confirm the "v-if" is detected

* New test

* Trying to add the "?"

* Testing adding some new elements to print the "?"

* Finishing the print of "?"

The print wasn't printed for other players before the vote lock.

* Corecting a careless mistake

* Finalising the hidden votes

- Correcting the conditions (the previous ones was for tests
- Changing the colour of "?"

* Adding a new colour

* Removing the previous (and without effect) change

* Adding a new colour
2023-05-09 17:32:02 +00:00
.github Menu adjustments 2023-02-27 21:49:15 +00:00
public added mobile web app capabilities 2021-07-14 14:00:10 +02:00
server fixed local server (closes #240) 2022-01-25 12:25:48 +01:00
src Adding the Organ Grinder (#42) 2023-05-09 17:32:02 +00:00
.editorconfig Integrating some more popular custom scripts 2022-10-27 23:13:01 +02:00
.env.template Dockerization of dev env 2023-02-27 16:32:45 +00:00
.eslintrc.js eslint added 2020-04-05 19:50:33 +02:00
.gitignore Dockerization of dev env 2023-02-27 16:32:45 +00:00
CHANGELOG.md Updated changelog 2022-10-12 21:21:15 -07:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2020-05-24 22:35:28 +02:00
CONTRIBUTING.md v2.13.0 (#168) 2021-05-15 20:07:54 +02:00
docker-compose.template.yml Dockerization of dev env 2023-02-27 16:32:45 +00:00
Dockerfile Dockerization of dev env 2023-02-27 16:32:45 +00:00
LICENSE Create LICENSE 2020-05-11 23:45:16 +02:00
package-lock.json 2.16.0 2022-06-14 14:56:50 +02:00
package.json 2.16.0 2022-06-14 14:56:50 +02:00
README.md Update README.md 2022-04-04 20:33:22 +02:00
vue.config.js optimized ping and gamestate messages 2021-01-29 21:54:27 +01:00

Blood on the Clocktower Grimoire & Town Square

⚠️ This project is no longer actively maintained and will only receive critical bug fixes and the remaining Kickstarter preview roles. ⚠️

social

This is an unofficial online tool to run Blood on the Clocktower games through Discord or other digital means. It is supposed to aid storytellers and players by allowing them to quickly set up games, run votes and much more.

You can try it online!

If you want to learn more about how to use the app as a player, JayBotC kindly created two tutorial videos.

How to host a game

How to host a game

How to play a game

How to play a game

Features

  • Public Town Square and Storyteller Grimoire (toggle with shortcut [G])
  • Supports custom script JSON generated by the Script Tool
  • Live Session for Storyteller / Players including live voting and character distribution!
  • Includes all 3 base editions, Travelers and Fabled plus all officially spoiled characters so far!
  • Night sheet and reminder text for each character ability to help storytellers
  • Full homebrew support for hosting and playing games with your own sets of characters
  • Many other customization options!

Custom Script Support

Any custom script generated by the official Script Tool is supported out of the box and you only need to upload it to get the selected set of characters into your grimoire. If you want to customize your script further, there is an additional "_meta" object that you can add to the script like you would add a normal character:

[
  {
    "id": "_meta",
    "name": "Deadly Penance Day",
    "author": "TPI",
    "logo": "https://url.to/your/logo.png"
  }
]

This will provide your local Grimoire (and those of your live session players) with more information to show about your custom script - instead of "Custom Script" it would show "Deadly Penance Day" on the character reference sheet, for example. The logo will be shown to your players after they have enabled custom images in the Grimoire menu.

Custom Character Support

In order to add custom characters to your local Grimoire, you need to create a JSON definition for them, similar to what is provided in the roles.json for the 3 base editions. Here's an example of how such a character definition file might be written:

[
  {
    "id": "acrobat",
    "image": "https://github.com/bra1n/townsquare/blob/main/src/assets/icons/acrobat.png?raw=true",
    "edition": "custom",
    "firstNight": 0,
    "firstNightReminder": "",
    "otherNight": 49,
    "otherNightReminder": "If either good living neighbor is drunk or poisoned, the Acrobat dies.",
    "reminders": ["Die"],
    "remindersGlobal": [],
    "setup": false,
    "name": "Acrobat",
    "team": "outsider",
    "ability": "Each night*, if either good living neighbor is drunk or poisoned, you die."
  },
  { 
    "id": "investigator" 
  },
  { 
    "id": "imp" 
  }
]

This definition JSON includes a custom character, the Acrobat, and 2 base game characters, the Investigator and the Imp. For base game characters, it is sufficient to only provide the ID, similar to what you get from the Script Tool.

Required properties: id, name, team, ability

  • id: the internal ID for this character, without spaces or special characters
    Note: this ID needs to be unique and can't be the same as any ID already used by an existing character, otherwise the custom character will be overwritten with the existing role!
  • image: a URL to a PNG of the character token icon (should have a transparent background!)
    Note: custom images will only be visible after enabling them in the Grimoire menu!
  • edition: the ID of the edition for this character. can be left blank or "custom"
  • firstNight / otherNight: the position that this character acts on the first / other nights, compared to all other characters
    Note: must be a positive number or zero, with zero being treated as "does not act during the night"
  • firstNightReminder / otherNightReminder: reminder text for first / other nights
  • reminders: reminder tokens, should be an empty array [] if none
  • remindersGlobal: global reminder tokens that will always be available, no matter if the character is assigned to a player or not
  • setup: whether this token affects setup (orange leaf), like the Drunk or Baron
  • name: the displayed name of this character
  • team: the team of the character, has to be one of townsfolk, outsider, minion, demon, traveler or fabled
    Note: if you create a custom Fabled character, it will be automatically added to the game when the custom script is loaded
  • ability: the displayed ability text of the character

Code of Conduct

Contributing

Acknowledgements and Copyrights

This project and its website are provided free of charge and not affiliated with The Pandemonium Institute in any way.

Donations

This project will always be available free of charge, since I love building cool things and playing Blood on the Clocktower. If you still want to support me with a donation, you can do that here:

Donate