Check that your columns are correctly named according to the specifications - A can be anything, B can be anything, C must be "Sender", D must be "SenderCond", E must be "Action", F must be "Target", G must be "TargetCond", H must be "ApplyCond", I must be "Lore". Capitalisation doesn't actually matter, though.
Check that there's no completely blank row in the sheet. Google doesn't like giving me any rows beneath blank rows.
Try to avoid using colons in your sheet, that should fix it. If they're in the Lore, try replacing them with $COLON. If they're part of a status name or role name... change those names.
Go to chrome://flags, find DirectWrite, click Enable, then restart your browser.
You have a restraing order
Leave me alone or I'll call the police
Nope, it's all client-side. Cookies are used to preserve your Setting between sessions, though.
Click SETUP WALKTHROUGH if this is your first time.
Each row of a Lore Sheet can be read like this:
When a player with the role "Sender" (who has the Condition "SenderCond") uses the action "Action" on a player with the role "Target" (who has the Condition "TargetCond"), the Sender gets the Condition "ApplyCond" and the message "Lore" is sent to the Sender.
The initiator of an action is the Sender.
The recipient of an action is the Target.
The name of the action itself is the Action.
When logging player's nightly actions, you will need to specify what players are using actions, what actions they use, and (if applicable) who they are targeting.
Senders and Targets, in the Lore Sheet, are always character names, not player names.
Each row contains 9 columns.
Columns A and B are the descriptive columns, they have no effect on this tool.
Columns C, D, E, F, and G are the conditional columns - they are compared to each of the actions in your Mafia. Each column returns TRUE or FALSE.
If all of the conditional columns in a row return TRUE, the row is considered to be "valid" and columns H and I are enacted - the effect columns. H adds and removes Condition and I sends a message.
For example - Amy_Player and Bob_Player are players in a game of mafia.
Amy_Player has the role "Mafioso", and she has the Conditions "mafia" and "immune".
Bob_Player has the role "Cop", and he has no Conditions.
The Lore Sheet for this example is as such:
|player is dead||%||dead||%||%|
|Cop||investigate||Godfather||mafia||$tNAME is innocent.|
|Cop||investigate||%||mafia||$tNAME is mafia.|
|Cop||investigate||%||$tNAME is innocent.|
|%||mafia||kill||%||immune||You tried to kill $tNAME but they were immune!|
|%||mafia||kill||%||You killed $tNAME!|
|%||immune||?kill||%||mafia||Someone tried to kill you, but you're immune!|
|%||?kill||%||mafia||You have been killed!|
Amy_Player uses the action "kill Bob_Player".
Bob_player uses the action "investigate Amy_Player".
As the investigation options are above killing actions in the sheet, they are processed first, so Bob_Player's action goes first.
We'll skip the first row (the dead one) because it will obviously return false.
For the second row: Sender is "Cop". Bob_Player is a Cop, so this is TRUE.
SenderCond is blank, so this column is skipped and returns TRUE by default.
Action is "investigate". Bob_Player is indeed using the "investigate" ability so this returns TRUE.
Target is "Godfather". Bob_Player is targeting Amy_Player, who is a Mafioso (not a Godfather), so this returns FALSE.
TargetCond is "mafia". Amy_Player has the Condition "mafia" so this returns TRUE.
Because one of the conditions returned FALSE, the remaining two columns are not activated. Instead, the programme looks at the next row in the list.
In this row the only difference is Target, which is is "%". A target role is present (Mafioso) which matches "%", so this returns TRUE. This means that all of the conditions on this row are TRUE, and so the ApplyCond and Lore takes effect.
ApplyCond is blank, so nothing happens; and the message in Lore is sent to Bob_Player.
Before we move onto Amy_Player's action, the reverse action happens.
Amy_Player has been targeted with the "investigate" action by Bob_Player. Amy_Player has "used" the action ?investigate on Bob_Player.
We go down through the sheet until we find a
|C||Sender||For this row to be valid, the player who initiates this action must be playing as one of the roles listed here. Delimit multiple roles with a pipe ("|") or a new line (press Ctrl+Enter in the spreadsheet cell to make one). The symbol "%" means "any role", the same as writing down all of the roles in your mafia. Don't leave this column blank.|
|D||SenderCond||For this row to be valid, the sender must have all of the Conditions listed here. Delimit multiple Conditions with a pipe or a new line. Blank means "no Conditions needed". "%" cannot be used here.|
|E||Action||For this row to be valid, the player who initiates it must be using the action listed here. Each action must have its own row - eg "kills|eats" will count as one action, not two. "%" means "any action". Blank means "no action needed". "@" means this whole row will automatically occur for all players at the start of the next round. Prefixing with "?" inverts the sender and the target.|
|F||Target||For this row to be valid, the recipient of this action must have any of the roles listed here. Delimit multiple roles with a pipe or a newline. "%" means "any target". Blank means "no target needed".|
|G||TargetCond||For this row to be valid, the target must have all of the Conditions listed here. Delimit multiple Conditions with a pipe or a newline. Blank means "no Conditions needed". "%" cannot be used here.|
|H||ApplyCond||If this row is valid, the sender receives all of the Conditions listed here. Delimit with a pipe or a newline. Prefixing with "-" removes the Condition from the sender (if it is present) instead of adding it. Blank means "no Conditions added or removed".|
|I||Lore||If this row is valid, this string will be added to a message that the host should PM to the sender. Multiple pieces of lore generated in this way will be concatenated into a single message. "\n" will be replaced with a line break. As such, it is recommended to end all lore with "\n\n".|
List the roles here
A really simple mafia with only a few roles.
Godfather and Mafioso are the mafia - both have the action "kills" which kills a target.
A Doctor can prevent a kill using the "heals" action.
A Sheriff detects the alignment of a player with the "investigates" action but beware, a Godfather will appear innocent.
A Hooker distracts a player from their action with their roleblocking "distracts" action.
Do not assign any initial conditions.
Phase 0: Make all players do the action "initialise" with no target.