1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Guest, PO has ceased our separate tiering and adopted Smogon tiers for SM. More information and updates here.

    Dismiss Notice

How To Make Mafia Themes (V 3.0)

Discussion in 'Theme Development' started by Shazan, May 15, 2014.

  1. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Since the opening post of the previous version is difficult to read after the forum change, I am posting it into this new thread
    Anyway, welcome to the guide about how to make mafia themes. I hope this helps you, and if you still have any questions come to #Project Mafia on the server and people there will be glad to help. You can PM me too if you want.
    When making a theme i suggest you edit a different theme to create the backbone for yours, but make sure you aren't copying theirs. Default is a good start for most.
    When making themes, i suggest using Notepad++, which can be found here, or Textwranger, here. They're both great programs and really make theme design easier.
    Themes used as reference~
    Default
    Pokemon (by Cake)
    Rotom (by IceKirby)
    FF (by Deria)
    ~~~
    The first step when making a team is obviously choosing what you want your theme to be about. The best things would be stuff that you know about a lot. For example, since my name is Hobbes2 you can kinda guess that i'm a big fan of Calvin and Hobbes so it would be easy to make a theme for it.
    Make sure your theme hasn't been done already by typing /themeinfo in the Mafia channel (this will bring up a list of every theme)

    Starting your Theme
    The first step when making your theme is, obviously, setting the name. This is quite simple.
    Code (text):
    1. "name": "Pokemon",
    Self explanatory; set the name of your theme there. Something to notice is that almost everything is surrounded by quotations; if you look at the theme i linked, most words and phrases are surrounded by quotations so don't forget those.

    Author
    Code (text):
    1. "author": "Cake",
    Put your name here. It will show up in the /themeinfo list. Cake made the theme so her name is there. If you have multiple authors, do this ~
    Code (text):
    1. "author": [
    2.   "Cake"
    3.   "Phoenix Down"
    4.   ],
    That's called an Array, when you have multiple things like that. When you want to update the theme, ONLY THE NAMES IN THE AUTHOR LIST will be allowed to update so add your alts in there, not just your main.

    Summary
    Code (text):
    1. "summary": "The legendaries are not your friends...except Celebi. Fight against first rogue Bidoof and the malevolent Missingno, then the Regi and the Eon Mafia! ...",
    There is part of the summary. For this part, put a description of the theme, perhaps mention some of the more important roles, teams, etc. People who don't know a theme will read this part to understand it better, so don't be vague, but don't write an essay either.

    Teams
    The teams are the sides in the mafia game.
    To find out the sides of the theme you are playing, type /sides.
    (17:57:22) ±Side: The Conspirator consists of Conspirator.
    (17:57:22) ±Side: The French Canadian Mafia consists of Don French Canadian Mafia, French Canadian Conspirator, French Canadian Mafia.
    (17:57:22) ±Side: The Godfather consists of Godfather.
    (17:57:22) ±Side: The Good people consists of Bodyguard, Bomb, Inspector, Mayor, Miller, Miller, Miller, Miller, Pretty Lady, Samurai, Spy, Vigilante, Villager.
    (17:57:22) ±Side: The Italian Mafia consists of Don Italian Mafia, Italian Conspirator, Italian Mafia.
    (17:57:22) ±Side: The Mafia consists of Mafia.
    (17:57:22) ±Side: The WereWolf consists of WereWolf.
    These are the sides of default.
    Setting the sides in your theme is a fairly simple process.
    Code (text):
    1. "sides": [
    2.   {
    3.   "side": "village",
    4.   "translation": "Treasure Town",
    5.   "winmsg": "Treasure Town was saved by the hard-working actions of the residents, ~Players~, who continue to live a happy life in the town to this day."
    6.   },
    7.   {
    8.   "side": "bidoof",
    9.   "translation": "Bidoof Army",
    10.   "winmsg": "Before long, the Bidoof Army (~Players~) had taken over, making all the other Pokemon their servants..."
    11.   },
    12.   {
    13.   "side": "glitch",
    14.   "translation": "Missingno",
    15.   "winmsg": "No one could stop the corruption of ~Players~ and the game file was lost to Missingno!"
    16.   },
    17.   {
    18.   "side": "regi",
    19.   "translation": "Regi Mafia",
    20.   "winmsg": "The Regis, ~Players~, rebuilt the world in their own way, leaving no room for pesky invaders like the Treasure Town!"
    21.   },
    22.   {
    23.   "side": "eon",
    24.   "translation": "Eon Mafia",
    25.   "winmsg": "Latias is red, Latios is blue, Cresselia is pastel and they (~Players~) defeated you!"
    26.   },
    27.   {
    28.   "side": "arceus",
    29.   "translation": "Arceus",
    30.   "winmsg": "Arceus (~Players~) began to remake the world, purifying it of all the 'bad' presences it had to defeat to recreate it!"
    31.   },
    32.   {
    33.   "side": "mewtwo",
    34.   "translation": "Psychic Felines",
    35.   "winmsg": "Mewhahaha! The Psychic Felines, ~Players~, defeated all opposition, and began to make the world how it used to be."
    36.   },
    37.   {
    38.   "side": "deoxys",
    39.   "translation": "Deoxys",
    40.   "winmsg": "Having won the battle, Deoxys (~Players~) destroyed the world, getting its revenge on Arceus!"
    41.   },
    42.   {
    43.   "side": "counter",
    44.   "translation": "Wobbuffet",
    45.   "winmsg": "WOBBA! The Wobbuffet (~Players~) knocked everyone out with Counter and Mirror Coat!"
    46.   },
    47.   {
    48.   "side": "dragon",
    49.   "translation": "Creation Trio",
    50.   "winmsg": "The dragons of creation (~Players~) took control of the world!"
    51.   },
    52.   {
    53.   "side": "wish",
    54.   "translation": "Wishmaker",
    55.   "winmsg": "Uwaaaah... ~Players~, Jirachi, defeated the distractions and was able to sleep in peace..."
    56.   },
    57.   {
    58.   "side": "credits",
    59.   "translation": "Credits",
    60.   "winmsg": "So I heard you like reading my coding?"
    61.   },
    62.   {
    63.   "side": "cat",
    64.   "translation": "Legendary Beasts",
    65.   "winmsg": "~Players~, the Legendary Beasts, have the world free to roam as they wish!"
    66.   }
    67.   ],
    I'll take a look at one of the sides specifally, that being the village.
    Code (text):
    1.   {
    2.   "side": "village",
    3.   "translation": "Treasure Town",
    4.   "winmsg": "Treasure Town was saved by the hard-working actions of the residents, ~Players~, who continue to live a happy life in the town to this day."
    5.   },
    It starts off with the "{", then begins by you declaring the side's codename. The codename is the name of the side (or role) that gets referenced by the coding. It will not be visible when playing, but is the name of the side or role in the theme's code.

    If your side is something like "Trolls", a good codename would be "troll". You'll see why codenames are important later.

    The "translation" is what the player sees in the game. The side in Pokemon isn't "village" when playing, because its Translation is Treasure Town. Make sure you don't forget this.
    To finish off, the "winmsg" is the message at the end of the game if the side wins. ~Players~ is replaced by a list of the players, seperated by comma.
    When adding a new side to the list, add a comma after the closing bracket, then enter, then start the new side. Looking at the code from Pokemon, you can see clearly what i mean. When ending off the list,
    Code (text):
    1.   {
    2.   "side": "credits",
    3.   "translation": "Credits",
    4.   "winmsg": "So I heard you like reading my coding?"
    5.   },  <---
    6.   {
    7.   "side": "cat",
    8.   "translation": "Legendary Beasts",
    9.   "winmsg": "~Players~, the Legendary Beasts, have the world free to roam as they wish!"
    10.   }  <---
    11.   ],
    The comma placements are a common cause of syntax errors. Notice that the areas where i pointed to; the regular ones do have a comma, but the last one doesn't.
    That's all for sides, make sure your commas and everything are in the right place! This goes for the whole theme too, finding syntax errors is annoying and make sure your theme is correct as you're doing it.
    The Role
    The roles is where you define what your role is and what it does. This is the longest part and most painstaking part of making your theme. I'm going to put the role "Feebas" as my example here and explain each part indivdually
    Code (text):
    1.   {
    2.   "role": "ugly",
    3.   "translation": "Feebas",
    4.   "side": "village",
    5.   "help": "Feebas are ugly. Eat more Pokeblocks! But at least you can stop a Pokemon acting (and hope they don't laugh) with /distract if you must.",
    6.   "info": "An ugly distractor. Sided with the Treasure Town.",
    7.   "actions": {
    8.   "night": {
    9.   "distract": {
    10.   "target": "AnyButSelf",
    11.   "common": "Self",
    12.   "priority": 1,
    13.   "distractmsg": "Feebas distracted you...xD You laughed at it all night!",
    14.   "teammsg": "Feebas distracted your partner, who was too busy laughing to team up with you and perform your ~Action~ xD"
    15.   }
    16.   }
    17.   }
    18.   },
    Code (text):
    1. {
    Starting up.
    Code (text):
    1. "role": "ugly",
    Define the codename for the roles (yes, roles have those too)
    Code (text):
    1. "side": "village",
    Define the side for the role (USE THE CODENAME OF THE SIDE, NOT THE TRANSLATION)
    Code (text):
    1. "help": "Feebas are ugly. Eat more Pokeblocks! But at least you can stop a Pokemon acting (and hope they don't laugh) with /distract if you must.",
    This is the startup help message the person gets. Make sure you describe the role, commands, and if you want add a little flavor (as Cake has done).
    Code (text):
    1. "info": "An ugly distractor. Sided with the Treasure Town.",
    Relatively new, this is a custom message for /roles. Keep it short and sweet.
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "distract": {
    4.   "target": "AnyButSelf",
    5.   "common": "Self",
    6.   "priority": 1,
    7.   "distractmsg": "Feebas distracted you...xD You laughed at it all night!",
    8.   "teammsg": "Feebas distracted your partner, who was too busy laughing to team up with you and perform your ~Action~ xD"
    9.   }
    10.   }
    11.   }
    The longest and most tedious part to write, the action. This will define what your role does. I will go more in depth in the next few sections, so i won't say much here.
    Code (text):
    1. },
    Close it off!
    The Action - Basics
    You know the action is important as its getting multiple sections.
    It is best to plan out all the roles and actions beforehand, as, trust me, it'll be a load of help.
    This section will have what are considered the BASIC actions.
    ~~~
    Distract - Prevents the target from doing their night command.
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "distract": {
    4.   "target": "AnyButSelf",
    5.   "common": "Self",
    6.   "priority": 1,
    7.   "distractmsg": "Feebas distracted you...xD You laughed at it all night!",
    8.   "teammsg": "Feebas distracted your partner, who was too busy laughing to team up with you and perform your ~Action~ xD"
    9.   }
    10.   }
    11.   }
    The distract is a "night" command, (obviously), and generally targets AnyButSelf (meaning you can't hit yourself but you can anyone else, though if the role knows its teammates, set it to AnyButTeam (meaning you can't hit yourself or your teammates). They also tend to be "common": "Self", which means that the roles command is shared only with the user. "Common": "team" means the command is shared with the team (ex - mafia in default; even if there are 4 mafia they all share one kill), and "common": "role" means everyone with the role shares the command.
    "priority" is the time the action hits over others. The lower the priority (1, 2, 3), that means they hit first. Distract tends to hit first as it STOPS the other roles from doing their role.
    "distractmsg" is what the distracted user sees. Cake decided to make hers flavory, though if you want you can leave it out to keep the default message. "teammsg" is what the roles teammates see, and again Cake decided to go flavory but you can leave it out if you want the default.
    Just something for actions in general, make sure the opening "{" 's match the closing "}" in number.
    Protect - Blocking a kill. Does not block Poison. Since cake doesn't have a clear protecter i'll use default's
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "protect": {
    4.   "target": "AnyButSelf",
    5.   "common": "Role",
    6.   "priority": 5,
    7.   "broadcast": "role",
    8.   "protectmsg": "Your target (~Target~) was protected by the ~Role~!"
    9.   }
    10.   },
    11.   "startup": "role-reveal"
    12.   }
    The bodyguard, one of the most important roles. Prevents nightkills on the target, generally used on samurai or insp. These tend to be "Anybutself", though if you want it to be able to also protect yourself, remove that line entirely. To only protect yourself, it would just be "target": "onlyself". These tend to also have a fast priority as to protect against the killing roles. "broadcast": "role" means the game tells the BG who the other BG's are, if there are multiple. Finally, "startup": "role-reveal" reveals to the player upon starting of the game all the others with their role. replacing it with "team-reveal" would reveal the entire team.
    Kill - The act of eliminating a player during the night.
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "kill": {
    4.   "target": "AnyButTeam",
    5.   "common": "Team",
    6.   "priority": 12,
    7.   "broadcast": "team"
    8.   }
    9.   },
    10.   "startup": "team-reveal"
    11.   }
    The kill. The kill is a role that generally makes up the "Mafia" of the theme. It happens during the "Night" (obviously), and if the player DOES know their team, it would be AnyButTeam (to prevent teamkills.) If the killer does not know their team it would generally be anybutself. If the role is to share a kill, "common": "team" means only one kill per night for that team. The priority of a killer should be preplanned so you don't get any mix ups. Some killers should be faster than others, naturally.
    Right after "priority", "limit": # can be added which specifies how many kills the role gets. Godfather, for example, would be "limit": 2 (two kills)
    Kill Message: For nightkills only, this message will override the theme's killmsg for a player killed by this action.
    For example, if the theme's killmsg is "~Player~ (~Role~) was found dead stabbed by dagger!", then whenever a player dies that message will be sent. But if a specific role has this code:
    Code (text):
    1. "kill": {
    2.   "common": "Self",
    3.   "target": "AnyButSelf",
    4.   "priority": 12,
    5.   "killmsg": "~Target~ (~TargetRole~) was killed by a hand-grenade!"
    6. }
    Then whoever this role kills will not die by the dagger, but by the grenade.

    I strongly suggest this feature is only used when really necessary, or this will get players confused.
    Inspect - Allows you to figure out the role of the target
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "inspect": {
    4.   "target": "AnyButSelf",
    5.   "common": "Self",
    6.   "priority": 30
    7.   }
    8.   }
    9.   }
    Inspectors are "night": commands, and they generally target any but self. They tend to act last as well.
    inputmsg: You can now customize that "You decided to inspect Target!" message.
    The code below will change the usual "You have chosen to kill RiceKirby!" message into "Ok, so we will kill RiceKirby, right?". Reminder that this is only seen by the person who types the command.
    Code (text):
    1.  
    2. "night": {
    3.   "kill": {
    4.   "target": "AnyButTeam",
    5.   "common": "Team",
    6.   "priority": 3,
    7.   "inputmsg": "Ok, so we will ~Action~ ~Target~, right?"
    8.   }
    9. }
    Only parameters allowed as ~Target~ and ~Action~.
    Stalk - Allows you to see who the target visited
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "stalk": {
    4.   "target": "AnyButSelf",
    5.   "common": "Self",
    6.   "priority": 31
    7.   }
    8.   }
    9.   }
    Similar to inspector, tend to hit last. isn't in default so i just wrote that up. Be creative with it!
    Poison - A time bomb version of kill
    Code (text):
    1. "actions": {
    2. "night": {
    3. "poison": {
    4. "target": "AnyButSelf",
    5. "common": "Role",
    6. "priority": 40,
    7. "broadcast": "none",
    8. "limit": 99,
    9. "count": 8
    Not closed, but this poison role is a good example of all the attributes it gets. They generally hit at the night and hit last, as when it hits doesn't matter. "limit": is as with kill, how many poisons you get, and "count": is how long it takes for the role to die. (amount of days)
    Safeguard - Blocks poison, distract, and inspect.
    Code (text):
    1. "safeguard": {
    2. "target": "AnyButSelf",
    3. "common": "Self",
    4. "priority": 2,
    5. "broadcast": "none",
    6. "safeguardmsg": "Your target (~Target~) was safeguarded by the ~Role~!"
    Doesn't have surrounding code but w/e. Its a nightcommand that hits near protect prioritywise. Very similar to protect except for what it does.
    Well that should be everything. Those are all the main night commands and what they do. The next section will feature a dictionary of attributes and stuff.
    Convert - Turns either yourself or a target into a different role.
    Code (text):
    1.   "actions": {
    2.   "night": {
    3.   "heat": {
    4.   "command": "convert",
    5.   "target": "OnlySelf",
    6.   "common": "Self",
    7.   "priority": 1,
    8.   "newRole": "fire",
    9.   "canConvert": [
    10.   "rotom"
    11.   ],
    12.   "silent": true
    13.   },
    This is the most complex of all the commands, the convert. Its relatively new, which is why it wasn't on the old guide. I've been putting off adding it because lazy, but i realized the whole guide is out of date which is why i'm updating it anyway. on to convert, its an interesting command as it has many possibilities. You can convert other roles, though only once (generally for balance), or you can upgrade yourself to be stronger, but this all depends on the theme.
    To customize, your convert command, there are several different things. The first off is do you want it to be an upgrade or a convert something else. For this, you'd set in the "target". To upgrade, you'd do "target": "OnlySelf" which is self explanatory. For others, you'd do "target": "anybutself" or "anybutteam", which are also self explanatory.
    For night actions only, you can limit an action to being usable only on teammates. Useful specially for mafia roles that can protect/safeguard/shield/convert/curse/copy their teammates.
    "OnlyTeam" will make that action only usable on players on your own team, including yourself. "OnlyTeammates" is the same, but won't allow to use the action on yourself.
    Next up is newrole. Following "newrole": you set the codename of the role the target is changing to.
    inside of "canconvert", you'd put an Array which is basically different things seperated by commans (in this case being the targets of the canconvert). Canconvert basically means what you are able to convert (if you want to be able to hit everything, leave it out) To explain this better, i'll provide an example. Say you want to only be able to target the roles "john", "rice", and "cookies". In this case, the code would look like,
    Code (text):
    1.   "canConvert": [
    2.   "john",
    3.   "rice",
    4.   "cookies",
    5.   ],
    as it can only hit those roles.
    New role is simple; it's the new role for the target.
    "silent":, if true, means that everyone will see what role (not the user) got converted into what. False means it will not be broadcasted to everyone.
    Well that's of the commands (I think), so now i'll move on to...the advanced stuff.

    Lets get a bit more advanced, shall we?
    Before I begin, read this - an in depth theme documentation by TheUnknownone, it's a great recourse so check it out!
    http://pokemon-online.eu/forums/showthread.php?15833-Mafia-Theme-Documentation
    This is a "Table of Contents", where basically everything is below, and you can Ctrl+F to the part you want.
    Custom Command Names
    Multiple Commands in the same role
    Distract Modes
    Hax
    Ignore Hax
    Random Side
    Team-Reveal If
    Reveal Role
    Evade Chance
    Bomb
    Reveal Side
    Specific Changetarget / Ignore Distractor
    Evade Daykills
    Daykill Bomb
    Daykill reveal chance
    Poison Bomb
    Side with multiple roles / Win as long as you survive
    Command Recharge
    Insane Inspector (!)
    Convert according to targets role
    Ignore specific kills
    Revenge Reveal
    Expose
    Noplur
    Help2
    Improved closedSetup
    role.players
    Winifdeadroles
    Reveal


    Advanced Features
    There are more then 150 features you can use, to make it easier I divided them into categories and added a Table of Content for each of them to make it easier to use Ctrl+f to make it easier to search inside of them​
    External Features:
    This are role's features but that stay outside the action bracket
    Use ctrl+f on the names on this tag for a faster research
    Custom test for /roles
    Different Name On List
    HIDE
    Info Name
    Random Side
    Reveal Role
    Roles with multiple sides
    Team-Reveal If
    Win if Dead Roles
    Win If Dead Roles update
    help2 message
    startup.revealPlayers
    ~Sided~ on "info"

    Features:
    Custom test for /roles: With this, you can set the ±Ability line in the /roles text for a role.
    Code (text):
    1. {
    2.   "role": "rotom",
    3.   "translation": "Rotom",
    4.   "side": "rotom",
    5.   "help": "You can possess a machine and get a new power! Type /heat [yourname], /wash [yourname], /frost [yourname], /fan [yourname] or /mow [yourname] to change forms. [HINT: Don't try using more than one of those commands]. If you don't possess anything, you can use /shock [name] after the 7th night!",
    6.   "info": "Can transform itself into Heat, Wash, Frost, Fan or Mow Rotom. Can kill 10 times after Night 7. Sided with Rotom.",
    7.   "actions": { }
    8. }
    This code will change this (the automatically generated text)
    to this:

    Different Name On List:
    Use this to make a role appear as a different one on the Current Roles list. Useful for millers and hidden roles.
    {
    "role": "legless",
    "translation": "Legless Lizard",
    "side": "village",
    "help": "You are a Legless Lizard. No, you are not a snake, but people always seem to think you are one.",
    "actions": {
    "onlist": "snake",
    "inspect": {
    "revealAs":
    "snake"
    }
    }
    }


    help2 message:
    With a help2, you can customize a flat message, and as the role changes, you can update help2. Such as:
    Code (text):
    1.  
    2. "help": "You are an inspector. You can /inspect one player during the night",
    3. "help2": "You currently have 4 HP out of a maximum 15 left.",
    4.  
    5.  
    If you define the initial help message as

    Code (text):
    1.  
    2. "variables": {
    3. "inspmsg": "You are an inspector. You can /inspect one player during the night",
    4. "inspaction": {"inspect": {"target": "AnyButSelf", "common": "Self", "priority": 10}}
    5. }
    6.  
    Then you can literally do:
    Code (text):
    1.  
    2. {
    3. "role": "inspector15",
    4. "translation": "Inspector",
    5. "side": "village",
    6. "help": "variable:inspmsg",
    7. "help2": "You currently have 15 HP out of a maximum 15 left.",
    8. "actions": {
    9.   "night": "variable:inspaction"
    10. },
    11. {
    12. "role": "inspector14",
    13. "translation": "Inspector",
    14. "side": "village",
    15. "help": "variable:inspmsg",
    16. "help2": "You currently have 14 HP out of a maximum 15 left.",
    17. "actions": {
    18. "night": "variable:inspaction"
    19. },
    20. {
    21. "role": "inspector13",
    22. "translation": "Inspector",
    23. "side": "village",
    24. "help": "variable:inspmsg",
    25. "help2": "You currently have 13 HP out of a maximum 15 left.",
    26. "actions": {
    27. "night": "variable:inspaction"
    28. },
    29.  
    And so on...

    Now if you wanted to update the Inspector to give it 10% fail chance, you could update the variables
    Code (text):
    1.  
    2. "variables": {
    3.   "inspmsg": "You are an inspector. You can /inspect one player during the night, but it could fail 10% of the time",
    4.   "inspaction": {"inspect": {"target": "AnyButSelf", "common": "Self", "priority": 10, "failChance": 0.1}}
    5. }
    6.  
    And your ENTIRE THEME gets updated at once.


    HIDE:
    An old feature, but given new life and functionality! Fully backwards compatible too.
    You can now define different things to be hidden per role!
    You can set it to "side", "role", "both", or the previously usable true/false
    side: Removes the role from the listing on /sides (good for roles with the same name, but different coded roles. Take Ocean for example: Cthulhu has 2 different roles. If I put "hide": "side" on one of them, then when you do /sides, it only shows Cthulhu listed once.
    role: Removes the role from the /roles listing. Generally not used as much as the former, but in themes like Transport, where each role has 4 variations but can all be summarized in 1 info tag, could use it safely.
    both: Does both of the above features, same as the current "hide": true
    It is important to note, true does NOT use quotation marks, but "side", "role", and "both" REQUIRE quotation marks.
    Example coding
    Side:
    Code (text):
    1.  
    2.   "role": "villager",
    3.   "translation": "vill",
    4.   "side": "town",
    5.   "hide": "side",
    6.  
    ±Side: The Village consists of Bodyguard, Inspector.
    ±Role: Villager
    ±Ability: Sided with Good people.
    Role:
    Code (text):
    1.  
    2.   "role": "villager",
    3.   "translation": "vill",
    4.   "side": "town",
    5.   "hide": "role",
    6.  
    ±Side: The Village consists of Bodyguard, Inspector, Villager.
    ±Game: No such role in this theme!
    Both:
    Code (text):
    1.  
    2.   "role": "villager",
    3.   "translation": "vill",
    4.   "side": "town",
    5.   "hide": "both",
    6.  
    ±Side: The Village consists of Bodyguard, Inspector.
    ±Game: No such role in this theme!
    True:
    Code (text):
    1.  
    2.   "role": "villager",
    3.   "translation": "vill",
    4.   "side": "town",
    5.   "hide": true,
    6.  
    ±Side: The Village consists of Bodyguard, Inspector.
    ±Game: No such role in this theme!


    Info Name: Similar to "info", it changes how a role appears on /roles, but changing the role's name instead of the description. Note that this only applies to /roles, /sides and /priority, in-game nothing will change.
    Example: This code
    Code (text):
    1. "role": "inspector",
    2. "translation": "Inspector",
    3. "side": "village",
    4. "help": "Type /Inspect [name] to find out someone's side!",
    5. "info": "Can inspect one person's role during the night. Sided with Village.",
    6. "infoName": "Super Nerd"
    Will produce the following results:
    On /roles:
    (23:01:09) *****************************************************************************
    (23:01:09) ±Role: Super Nerd
    (23:01:09) ±Ability: Can inspect one person's role during the night. Sided with Village.
    (23:01:09) ±Players: 3-40 Players
    (23:01:09) *****************************************************************************

    On /sides:
    (23:01:28) ±Side: The Village (Village) consists of: Bodyguard, Bomb, Mayor, Miller, Pretty Lady, Samurai, Spy, Super Nerd, Vigilante, Villager.

    On /priority:
    [30] Super Nerd (Inspect)

    In-Game:
    (23:02:20) ±Current Roles: Bodyguard, Inspector, Mafia, Mafia, Pretty Lady, Villager, Villager, WereWolf.
    Basically, this is used only to customize /roles, /sides and /priority more easily.
    ~~~~~~

    Random Side:
    Code (text):
    1. {
    2. "role": "magneton",
    3. "translation": "Magneton",
    4. "side": {
    5. "random" {
    6. "electric": 0.6, <-- This role has a 60% chance of being part of the "electric" team
    7. "steel": 0.4 <-- and 40% of being part of the "steel" team.
    8. }
    9. },
    10. "help": "blablablabla",
    11. "actions": { }
    12. }
    It's not too hard, just in the "side":, put random then then put the sides you want and the chances (similar to hax). The chances don't have to add to 1, you can have .1 and .5 and it'll be out of 6


    Team-Reveal If:
    Does anyone actually use this? Anyway this is only used with Random Side and it basically means you know your team ONLY IF you are sided with the sides listed.
    Code (text):
    1. "actions":{
    2. "startup": { "team-revealif": [ "werewolf", "godfather" ] }
    3. }


    Roles with multiple sides:
    You still have your own default side, but additional sides can be added so that a role will win regardless of whose team is winning (as long as it stays alive).
    Set additional sides:
    Code (text):
    1.  
    2. {
    3.   "role": "consp",
    4.   "translation": "Conspirator",
    5.   "side": "mafia",
    6.   "winningSides": ["village"],
    7.   ...
    8. }
    9.  
    Win everytime if stays alive: (no array here)
    Code (text):
    1.  
    2. {
    3.   "role": "god",
    4.   "translation": "Arceus",
    5.   "side": "god",
    6.   "winningSides": "*",
    7.   ...
    8. }
    9.  
    [/QUOTE]


    Win if Dead Roles: You can set a list of roles that, if dead, will give the victory to the team this role belongs to.
    This is for the likes of the roles that have massive votes (like kronos, 9999) and the game comes down to Kronos and a bunch of non killers. Since kronos is going to win auto, you'd put in the Winifdeadroles all the killers and poisoners.
    Code (text):
    1. {
    2.   "role":"kronos",
    3.   "translation":"Kronos",
    4.   "side":"kronos",
    5.   "help":"Leader of the Titans, you are all alone after your tyranny.  However, you control immense power, and a single vote by you will vote someone out. You don't have any special commands during the night! Vote to remove people in the day!",
    6.   "winIfDeadRoles": ["mafia1", "mafiaboss1", "mafia2", "mafiaboss2", "werewolf", "samurai", "vigilante" ],
    7.   "actions":{
    8.   "vote":100
    9.   }
    10. }
    Note: THIS GOES OUTSIDE OF ACTIONS
    Note 1: I strongly recommend against having roles in different sides with the same list. This could cause both teams elligible for a win, but only one of them actually winning.
    Win If Dead Roles update: winIfDeadRoles will now make Conspirators win too. And it bypasses villageCantLoseRoles too (No need for Cook Kirby to die before Dark Matter can win).


    ~Sided~ on "info":You can now use ~Sided~ on a role's "info" property to automatically fill it with the "Sided with Good People" part.
    Code (text):
    1. {
    2.   "role": "hooker",
    3.   "translation": "Ice Kirby",
    4.   "side": "village",
    5.   "help": "Brrrr! Are you cold enough? If not, I can type /distract [name] during the night to freeze you for a entire night. And I can protect someone (even myself) with an Ice Wall by typing /protect [name] during the night, BUT I can only use it once every 3 nights.",
    6.   "info": "A distractor that can also protect once every 3 nights. ~Sided~",
    7.   "actions": {}
    8. }
    With the code above, typing '/roles Kirby:Ice' will display "A distractor that can also protect once every 3 nights. Sided with Kirby."
    This should save some time when writing a new role/theme and when changing things around (like a role's side or a side's name).

    Passive Actions:
    This are all the features that will influence a role indirectly.
    Use ctrl+f on the names on this tag for a faster research
    Passive vote phase:
    Vote Bonus (or Variable Vote, not sure about how to call it):
    Vote Multiplier:
    Vote Shield:
    Vote/Voteshield as an Array:
    noVote:

    Passive Defensive Mode:
    Bomb against Daykillers:
    Bomb against Exposers/exposerevengemsg:
    Evade Daykills:
    Evade Exposers/exposeevademsg:
    Reveal Daykiller:
    Reveal Exposer (Reveals exposer when exposed)/revealexposermsg:
    EvadeChance/evasionmsg/exposemissmsg:
    Mode Sub Actions:
    Defensive Modes:
    Ignore/msg:
    Daykills get "ignore":
    Bomb:
    Poison Bomb:
    Distract Modes:
    Distract modes.Ignore Distract:
    Evade Chance:
    Evade Chance messages:
    Evade Charges:
    evadeCharges for Standby Actions:
    Ignore specific kills:
    Mode.Die:
    mode.die as Array:
    Mode.Identify:
    Mode.identify as Array:
    No Visit:
    Resistance:
    Specific Changetarget / Ignore Distractor:
    Revenge Specific Day Actions:

    Passive Team Utilities:
    startup.revealRole:
    startup.revealPlayers:
    startup.Team Reveal (with roles):
    startup.Team-RevealIf:
    startup.team-revealif-with-roles:
    Prevent Teamvote:
    Team Talk:
    Update Team:
    Team Utilities:

    Ondeath Ondead and Lynch:
    On Death Action:
    On Death - Curse:
    Less messages for onDeath:
    Convert When Dead Roles:
    Quick onDeadRoles:
    Silent OnDeadRoles:

    Passive other features:
    Hax:
    Hax Ignore:
    Initial Condition - Clear Curse:
    Initial Condition - Curse:
    Initial Poison:
    On Team:
    Reveal As:
    Reveal As Random Role:
    Multiple roles for Miller:
    Reveal Side:
    Update Charges:
    Vote Phase:
    All the passive abilities related to the vote phase, like vote multiplier or vote bombs
    Vote Bonus (or Variable Vote, not sure about how to call it): This feature allow a player to gain a permanent vote or voteshield bonus that sticks to them even if they change roles. The simplest way to explain it is with the Badge item on Shop theme: you gain a permanent bonus to your total vote.
    The code below increases the player's vote by 1 each time the player converts into this role.
    Code (text):
    1. "actions": {
    2.   "addVote": 1,
    3.   "updateVote": true
    4. }
    Important: This bonus is tied to the player, not the role. This means if you change into this role once, your vote will be 2 (roles's vote = 1, player's bonus = 1). If after converting into this role you change into a role with "vote": 3, you will still have your bonus, so your vote will count as 4. If you then convert back into the role in the example above, your bonus will be 2.

    Important 2: The bonus is applied everytime you convert into that role. You could easily have a role that can convert into itself to increase its own vote each time. Also important to note that the bonus is not applied when the game starts, only during conversions.

    Yet another important thing: Vote Bonus is not considered by villageCantLoseRoles. Maybe sometime in the future, but for now remember to keep in mind roles that can gain that bonus.

    Other than "addVote", you can also use "addVoteshield" (increases your "voteshield") and "setVote" or "setVoteshield" to change your bonus to a specific value (e.g.: If your bonus is 3, you could use "setVote": 0 to clear it).
    There's also "updateVote", which will show your current vote/voteshield bonus whenever you use /myrole (similar to updateCharges). Important to note that updateVote will only show the bonus, not the final vote, so if your current role has a vote of 1 and you have a bonus of 2, it will only show the +2.


    Vote Multiplier: A new type of vote. In addition to the player's normal vote, the person voted for will have their total received votes multiplied by this value.
    The code below will make the player cast 0 votes on their target, but at the end of the voting phase, all votes received by their target will be increased in 50%.
    Code (text):
    1. "actions": {
    2.   "vote": 0,
    3.   "voteMultiplier": 1.5
    4. }


    Vote Shield: A value that will be added to the votes a person gets during the voting phase.
    Code (text):
    1. "actions": {
    2. "voteshield": -5
    3. }


    Vote/Voteshield as an Array: Those previously would work as a range, so vote: [1, 5] could mean a vote of 1, 2, 3 or 4. Now it works as a list, so vote:[-100, 0, 100] would mean a role with 33% chance of voting with -100, 33% chance of voting with +100 and 33% chance of voting with 0.
    Below: Any of the listed values have the same chance of being used. You can even use repeated values to increase the chances for that value.
    Code (text):
    1.  
    2. "actions": {
    3.   "vote": [-2, -1, 0, 0, 0, 3, 6, 9.5, 12]
    4. }
    5.  


    noVote: A role with this action is unable to vote during the day.
    Whenever a player with the code below tries to vote, they will receive a "You cannot vote" message.
    Code (text):
    1.  
    2. "actions": {
    3.   "noVote": true
    4. }
    5.  
    Alternatively, a role with the code below would think they voted, but in reality their vote would not count (the 'Self voted for Target' message would only show for that player). Useful to make roles that can silently disable another player's vote.
    Code (text):
    1.  
    2. "actions": {
    3.   "noVote": true,
    4.   "noVoteMsg": "~Self~ voted for ~Target~!"
    5. }
    6.  

    Defensive mode:
    All the passive abilities used to counter the active actions, for exemple Ignore, evadeChance and active actions bombs.
    Bomb against Daykillers:
    Code (text):
    1.  
    2. "actions": {
    3.     "daykill": "bomb",
    4.     "daykillrevengemsg": "~Target~ tried to kill ~Self~, but both exploded and died!"
    5. }
    ~Target~ is replaced by the samurai, ~Self is replaced by the bomb


    Bomb against Exposers/exposerevengemsg:
    ~Target~ = Exposer
    ~Self~ = Player with the revenge
    ~Role~ = Role of player with revenge (in case you want to still reveal the role)
    Code (text):
    1.  
    2. "actions": {
    3.   "expose": "revenge",
    4.   "exposerevengemsg": "Haha. Pitiful ~Target~. You really like you can learn my identity and live to tell anyone?"
    5.   }
    6.  
    Default message: "±Game: ~Target~ tries to expose ~Self~, but ~Self~ gets startled and kills ~Target~!"


    Evade Daykills:
    Code (text):
    1. "daykill": "evade",
    right after actions. Do i really have to explain? Evade daykills.


    Evade Exposers/exposeevademsg:
    ~Self~ = Player with evasion
    ~Target~ = Player with expose
    Code (text):
    1.  
    2. "actions": {
    3.   "expose": "evade",
    4.   "exposeevademsg": "I evaded an expose from ~Target~!"
    5.   }
    6.  
    Default message: "±Game: That person cannot be exposed right now!"


    Reveal Exposer (Reveals exposer when exposed)/revealexposermsg:
    ~Target~ = Exposer
    ~Self~ = Player with revealexposer
    ~Role~ = Exposer's role
    Code (text):
    1.  
    2. "actions": {
    3.   "expose": "revealexposer",
    4.   "revealexposermsg": "~Self~ would like you all to know that ~Target~ is ~Role~. Take that!"
    5.   }
    6.  
    Default message: "±Game: However, ~Self~ revealed that ~Target~ is the ~Role~!"


    Reveal Daykiller:
    If this role is daykilled, it'll reveal the killer (the role with this action will die anyway). Of course, only make sense if there are concealed daykillers.
    Code (text):
    1. "actions": {
    2.   "daykill": "revealkiller",
    3.   "daykillrevengemsg": "±Game: Before dying, ~Self~ revealed that ~Target~ is the ~Role~!"
    4. }


    EvadeChance/evasionmsg/exposemissmsg:
    ~Target~ = Player with expose
    ~Self~ = Player with evasion
    Code (text):
    1.  
    2. "actions": {
    3.   "expose": {
    4.   "mode": {
    5.   "evadeChance": 1,
    6.   "evasionmsg": "I evaded an expose from ~Target~!"
    7.   }
    8.   }
    9.   }
    10.  
    (Goes on exposer)
    ~Target~ = Player being exposed
    ~Self~ = Role with expose
    Code (text):
    1.  
    2. "exposemissmsg": "~Target~ evaded your expose!"
    3.  
    Default message:
    To exposer: "±Game: Your expose was evaded!"
    To exposeee: "±Game: You evaded an expose!"

    Mode Sub Actions:
    Defensive Modes: Did you ever want to give EvadeChance to a convert? Or ChangeTarget to Inspect? Well, now you can :D
    The following Defensive Modes now works for every night action (replace the action at the start for the action you want):
    ignore: Role will be immune to that action. "msg" is optional, and will be shown to whoever used that action on this role (except when the action is Distract). "silent" is optional too and, if true, won't show the msg to the user.
    Code (text):
    1. "inspect": {
    2.       "mode": "ignore",
    3.       "msg": "Your target (~Self~) is too smart to be inspected!",
    4.       "silent": true
    5.     }
    ChangeTarget: This role will kill whoever uses that action on them (like Werewolf killing Pretty Lady when distracted). Remember that, when a role kills someone due to ChangeTarget, it won't proceed to execute any of their actions with lower priority. "targetmsg" or "hookermsg" can be used to set a message that the action user will see when targetting this role. "msg" can be used to set a message that this role will see. ~User~ or ~Distracter~ can be used in "msg" and will show that person's role.
    Code (text):
    1. "protect": {
    2.       "mode": "ChangeTarget",
    3.       "msg": "The ~User~ tried to help you, but you killed them! It was an accident!",
    4.       "targetmsg": "You tried to protect Hulk, but he confused you with a salesman and killed you!"
    5.     }
    Kill Attacker: A role with this action will kill whoever uses such action on it. Of course, this will be similar to ChangeTarget is you add to any action that's not a kill, BUT the role with this action will still perform their actions. "msg" is optional and will be shown to the person that was killed. You can use "killattackerevenifprotected" here too (in this case, it will bypass protect/safeguard, depending on the action used).
    Code (text):
    1. "stalk": {
    2.       "mode": "killattacker",
    3.       "msg": "Your target seems to dislike Stalkers! You were killed for stalking the wrong person!"
    4.     }
    Poison Attacker: Same as Kill Attacker, but with Poison. You can use "poisonattackerevenifprotected" too.
    Code (text):
    1. "distract": {
    2.       "mode": "poisonattacker",
    3.       "msg": "Your target seems to dislike Distractors! You were poisoned for distracting the wrong person!",
    4.       "poisonDeadMessage": "You shouldn't have distracted that Stalker 3 nights ago!",
    5.       "count": 3
    6.     }
    Evade Chance: Similar to Ignore, but with a chance of evading instead of a guaranteed evade. For now it's not possible to customize evadeChance's message (because I forgot about that).
    Code (text):
    1. "protect": {
    2.       "mode": {
    3.       "evadeChance": 0.5
    4.       }
    5.     }
    Ignore If and Kill If: You can have a different behavior depending on which role used that action.
    The following code will make that role ignore conversions from role1 and role2, and kill role3 and role4 if they try to convert this role.
    "msg", "usermsg" and "hookermsg" can be used the same way as "ignore" and "ChangeTarget (Note: Don't put the msgs in "mode"' braces).
    For now, ~User~ and ~Distracter~ will not show when ignoreif is activated (going to fix that soon).
    Code (text):
    1. "convert": {
    2.       "mode": {
    3.       "ignore": ["role1", "role2"],
    4.       "killif": ["role3", "role4"]
    5.       },
    6.       "msg": "You dislike recruiters, so you ran over that ~User~"
    7.     }
    All of these Defensive Modes already existed, but only for specific actions. Now they will work for any night action.


    --Ignore/msg:
    ~Target~= Player with the ignore
    ~Role~ = Role of the player with Ignore
    Code (text):
    1.  
    2.     "expose": {
    3.       "mode": {
    4.       "ignore": ["exposer"],
    5.       },
    6.       "msg": "You cannot expose ~Target~! They are ~Role~!"
    7.       }
    8.    
    Note: This will count as using the expose
    Default message: "±Game: Your target (~Target~) evaded your -commandName-!"


    -Daykills get "ignore":
    ~Target~ = Player with the ignore
    ~Role~ = Role of the player with Ignore
    Code (text):
    1.  
    2.       "daykill": {
    3.       "mode": {
    4.       "ignore": ["samurai"],
    5.       },
    6.       "msg": "You cannot kill ~Target~! They are ~Role~!"
    7.       }
    8.    
    Note: This will count as using the kill
    Default message: "±Game: Your target (~Target~) evaded your -commandName-!"


    Bomb:
    Bomb is an interesting feature. It allows a role to revengekill a role during the night or day.
    Code (text):
    1.   "actions": {
    2.       "kill": {
    3.       "mode": "killattacker"
    4.       }
    5.       }
    If you want to hit the attacker EVEN if they are protected, you'd do the following
    Code (text):
    1. "actions": {
    2.     "kill": { "mode": "killattackerevenifprotected" }
    3.     }


    Poison Bomb:
    Similar to bomb but with poison instead
    Code (text):
    1. "actions": {
    2.     "kill": {
    3.         "mode": "poisonattacker",
    4.         "count": 2,
    5.         "poisonDeadMessage": "You died from a horrible poison!"
    6.     }
    7.     }


    Distract Modes:
    This is how you get roles to either ignore the distract or kill the distractor. Godfathers code ~
    Code (text):
    1.   "actions": {
    2.       "night": {
    3.       "kill": {
    4.           "target": "AnyButTeam",
    5.           "common": "Team",
    6.           "priority": 11,
    7.           "broadcast": "team"
    8.       }
    9.       },
    10.       "distract": {
    11.       "mode": "ignore",
    12.     "msg": "The Pretty Lady came to you last night, but she had no effect on you!"
    13.       },
    14.       "startup": "team-reveal"
    15.       }
    16.       },
    This goes outside of "night":{ or "standby:{. Basically, "mode" has two different possible things you can do; "ignore" which flat out ignores it, or "changeTarget", which kill sthe distractor. There are two different messages that come after here, the "msg" and the "hookermsg"; those are what the role sees (msg) and what the PL'd person sees (hookermsg) after you get distracted. Generally, you leave out a "hookermsg" if its ignore so they don't know.


    Distract modes.Ignore Distract: "But it's already possible to ignore distract!". Well, yeah, but it was only possible on a per-role basis. Now you can have it on a per-action basis. A night action with this property will not be interrupted when the player is distracted (even if other actions are blocked). This is useful for roles with 2 or more night actions where one of them shouldn't be stopped by distractors while the other should, but none of them can be faster than PLs.
    A good example for this is Trainers: the code below allows for a caught pokémon to /runaway even if distracted, but their normal action will still be blocked.
    Code (text):
    1. "night": {
    2.       "kill": {
    3.       "common": "Self",
    4.       "target": "AnyButTeam",
    5.       "priority": 13
    6.       },
    7.       "runaway": {
    8.       "command": "convert",
    9.       "pierce": true,
    10.       "common": "Self",
    11.       "target": "OnlySelf",
    12.       "priority": 17,
    13.       "newRole": "Wild_Exeggutor2",
    14.       "convertmsg": "With their trainer defeated, a ~New~ became wild again!",
    15.       "ignoreDistract": true
    16.       }
    17.     }
    (If distracted, Exeggutor can still run, but not kill, even if both actions are slower than distract)


    Evade Chance:
    This is a popular one, basically it gives the roels a chance of evading the kill / poison / whatever.
    Code (text):
    1. "actions": {
    2.     "kill": {
    3.     "mode": { "evadeChance": 0.3 }
    4.     }
    5.     }

    Evade Chance messages: Evade Chance for night actions now can have a customized message, or even no message at all.
    Below: A role with 50% chance of evading Inspection. If the evasion occurs, the inspector will get a customized message instead of the default one!
    Code (text):
    1.  
    2.     "actions": {
    3.       "inspect": {
    4.       "mode": {
    5.       "evadeChance": 0.5
    6.       },
    7.       "msg": "You were unable to inspect this person! Who could this be?"
    8.       }
    9.     }
    10.    
    Below: A role with 50% chance of evading Inspection. If the evasion occurs, the inspector will get no message!
    Code (text):
    1.  
    2.     "actions": {
    3.       "inspect": {
    4.       "mode": {
    5.       "evadeChance": 0.5
    6.       },
    7.       "silent": true
    8.       }
    9.     }
    10.    


    Evade Charges: Also known as Bulletproof Vest. It's similar to normal Evasion, but the player will only evade a limited number of times. Most useful for nightkills, but works for any night action.
    The example below shows a role that evades nightkills up to 3 times. If hit by a 4th nightkill, it will die normally.
    Code (text):
    1. "actions": {
    2.       "kill": {
    3.       "mode": {
    4.       "evadeCharges": 3
    5.       },
    6.       "evadechargemsg": "Your bulletproof vest saved you from a kill! It still can save you from ~EvadeCharges~ other kills!",
    7.       "msg": "You hit ~Self~'s bulletproof vest!"
    8.       }
    9.     }
    10.    
    "msg" is the message sent to the killer. Use ~Self~ for the evader's name, and ~EvadeCharges~ for the number of times that player still can evade. If you wish to hide this message, use "silent": true.
    "evadechargemsg" is the message sent to the evader. ~EvadeCharges~ is the same as above.

    Note that a role can have both evadeCharges and evadeChance. If a role has both, it will first use all its evadeCharges, and after that those are down to zero, it will be up to evadeChance.
    Also, similarly to night action charges, if you convert into a role that has a new evadeCharges, your evade charges will be reset to that role's.


    evadeCharges for Standby Actions: evadeCharges now work for daykill and expose. It's the same as for night actions.
    Code (text):
    Code (text):
    1.  
    2.     "actions": {
    3.         "daykill": {
    4.             "mode": {
    5.                 "evadeCharges": 2
    6.             }
    7.         }
    8.     }
    9.    
    Also note that it's now possible to set "evadeCharges": "*" (both for night and day actions). With that, your role will still be able to evade, but will retain the evadesCharges from the previous role (instead of resetting the evadeCharge during the conversion).


    Ignore specific kills:This works like Evade Nightkills, but only will evade kills coming from the roles in this list. The following example, if used on Default, will make that role evade kills from IM, FCM and both Dons, but not from regular Mafia, Werewolf, Vigilante or Godfather.
    Code (text):
    1. "actions": {
    2.       "kill": {
    3.       "mode": {
    4.       "ignore": [ "mafia1", "mafia2", "mafiaboss1", "mafiaboss2" ]
    5.       }
    6.       }
    7.     }
    Note: Pay attention to shared kills. If you add only IM and don't add Don IM, this role will evade IM's kill but will be killed by Don IM at the same night.
    [/QUOTE]


    Mode.Die: Whenever a player with this role is targetted by the specific night action, that player will die instantly (the action won't be performed). Can be used with any night action, but it's kind of pointless for nightkills.
    Code (text):
    1. "actions": {
    2.       "inspect": {
    3.       "mode": "die",
    4.       "msg": "~Target~, the ~Role~, tried to ~Action~ you, but you died due to their ugly face!",
    5.       "targetmsg": "You tried to ~Action~ ~Self~, but your ugly face scared them to death!"
    6.       }
    7.     }

    mode.die as Array: You can now use the "die" mode as an array, so a role will instantly die to an action only if it's from a specific role.
    The code below will make the player instantly die if inspected by Bulbasaur or Charmander, but not to any other inspector.
    Code (text):
    1.  
    2.     "inspect": {
    3.       "mode": {
    4.       "die": ["bulbasaur", "charmander"]
    5.       },
    6.       "diemsg": "~Target~ tried to ~Action~ you, but you got scared and died!",
    7.       "targetdiemsg": "You tried to ~Action~ ~Self~, but they got scared and died!"
    8.     }
    "diemsg" and "targetdiemsg" are optional.


    Mode.Identify: Whenever a player with this action is targetted by the specific night action, that player will identify the user of that action. Can be used with any night action, but it's not recommended for nightkills (since it can cause some deadtalk issues).
    Code (text):
    1. "actions": {
    2.       "poison": {
    3.       "mode": "identify",
    4.       "msg": "~Target~, the ~Role~, is the person that tried to ~Action~ you during this night!"
    5.       }
    6.     }


    Mode.identify as Array: Same as mode: identify, but for specific roles.
    The code below will make a role identify the player when inspected by East or South Inspector, but not by any other Inspector.
    Code (text):
    1. "actions": {
    2.         "inspect": {
    3.             "mode": {
    4.                 "identify": ["einspector", "sinspector"]
    5.             },
    6.             "identifymsg": "You identified ~Target~ as the ~Role~ that ~Action~ed you!"
    7.         }
    8.     }
    9.    


    No Visit: It's now possible to have a role that will show as having visited no one when stalked, even if it actually visited someone!
    Code (text):
    1.  
    2.     "actions": {
    3.       "stalk": {
    4.       "mode": "noVisit"
    5.       }
    6.     }
    7.    


    Resistance:
    A mode used to alter the count of poison and curse.
    There are 3 different "modes" for Resistance
    Rate: Count will be multiplied by this number. Use a number greater than 1 to delay the activation of poison/curse and use a number lower than 1 to speed up the activation.
    Constant: Count will be added to this number. Use a number greater than 0 to delay the activation, less than 0 to speed up.
    Default (Nothing defined): Count will be delayed by 1 (So a poison count of 2 takes 3 nights to kill now).
    No messages related to this as it is only modifying the count of poison and curse.
    Each of the 3 examples:
    Rate
    Code (text):
    1.  
    2.     "actions": {
    3.       "poison": {
    4.       "mode": "resistance",
    5.       "rate": 0.5
    6.       }
    7.       }
    8.    
    Constant
    Code (text):
    1.  
    2.     "actions": {
    3.       "poison": {
    4.       "mode": "resistance",
    5.       "constant": -1
    6.       }
    7.       }
    8.    
    Default
    Code (text):
    1.  
    2.     "actions": {
    3.       "poison": {
    4.       "mode": "resistance"
    5.       }
    6.       }
    7.    
    ~~~~~~


    Specific Changetarget / Ignore Distractor:
    With this, you can make a role that only Kill/Ignore specific Distractors.
    For example, you could make Kefka only kill Distractor if that Distractor is Yunalesca or Tidus, and simply Ignore (without killing) Tifa.
    "actions": {
    "distract": {
    "mode": {
    "killif": ["yunalesca", "tidus"], <-- If those distractors try to distract this role, they will be killed instead.
    "ignore": ["tifa"] <-- If Tifa distract this role, Kefka will simply ignore.?
    },
    "hookermsg": "You tried to distract Kefka! Too bad!",
    "msg": "~Distracter~ tried to distract you! But you can't be distracted by mere mortals!"
    },
    }
    Note 1: You don't need to use both "killif" and "ignore". If the distractor is not in any of those lists, this role will be distracted normally.
    Note 2: The role with this action will get the same msg regardless of the distractor. So if your role use both "killif" and "ignore", make a msg that will make sense for both possible results (kill or ignore distractor).


    Revenge Specific Day Actions:
    You can select specific roles to revenge their daykills or exposes.
    You use the same messages as normal revenges
    Code (text):
    1.  
    2.       "actions": {
    3.       "daykill": {
    4.       "mode": {
    5.       "revenge": ["samurai"],
    6.       }
    7.       },
    8.       "daykillrevengemsg": "Same as a normal revenge message"
    9.       }
    10.    
    Code (text):
    1.  
    2.       "actions": {
    3.       "expose": {
    4.       "mode": {
    5.       "revenge": ["exposer"],
    6.       }
    7.       },
    8.       "exposerevengemsg": "Same as a normal revenge message"
    9.       }
    10.    


    Passive Team Utilities:
    All this are abilities useful to collaborate and communicate with teammates like startup or Team-Talk.
    startup.revealRole:
    Code (text):
    1. "actions": {
    2.             "startup": { "revealRole": [ "bodyguard", "mayor" ] }
    3.             }
    Basically what this does is when you start up you only get revealed the roles in there, but not the whole team.


    startup.revealPlayers: It's similar to startup.revealRole, but it will reveal all the players in a single line and without specifying their roles.
    The code below will give the player a "The Parasol or Mirror Kirby are: Beast, Fuzzy and RiceKirby" message to the player with this actions when the game starts or they use /myrole.
    Code (text):
    1.  
    2.             "actions": {
    3.               "startup": {
    4.               "revealPlayers": ["parasol", "mirror"],
    5.               "revealPlayersMsg": "The Parasol or Mirror Kirby are: ~Players~"
    6.               }
    7.             }
    8.            
    revealPlayersMsg is optional. If not defined, the message will be "Your Team is: ~Players~".
    Note that it's not possible to figure out each player's role by the order they are presented, since they will always display in alphabetical order. In the example above, Fuzzy could be the Mirror while Beast and RiceKirby are Parasols.


    startup.Team Reveal (with roles): Same as startup: team-reveal, but it shows the players' roles too.
    Code (text):
    1. "actions": {
    2.               "startup": "team-reveal-with-roles"
    3.             }
    This will show a message like this when the game starts:
    instead of


    startup.Team-RevealIf:
    Does anyone actually use this? Anyway this is only used with Random Side and it basically means you know your team ONLY IF you are sided with the sides listed.
    Code (text):
    1. "actions":{
    2.             "startup": { "team-revealif": [ "werewolf", "godfather" ] }
    3.             }


    startup.team-revealif-with-roles: now exists.
    Code (text):
    1.  
    2.             "startup": {
    3.               "revealRole": [
    4.               "randomperson"
    5.               ],
    6.               "team-revealif-with-roles": [
    7.               "town"
    8.               ]
    9.               }
    10.            


    Prevent Teamvote: You can now make accidental teamvote less likely to happen on your theme. By adding this boolean to a role, that role will only be able to vote a teammate by using a different command (AKA /teamvote).
    Code (text):
    1. "actions": {
    2.               "startup": "team-reveal",
    3.               "preventTeamvote": true
    4.             }
    Be aware that, like Team Reveal and Team Talk, this must be done on a per-role basis. Roles with that boolean enabled will be unable to vote a teammate with /vote and instead receive a message saying they have to use /teamvote to vote them.
    PreventTeamvote can be an array of roles too. Player will be unable to vote roles on that array (regardless of side) unless they use /teamvote.
    In the example below, a player with that code cannot vote Weedle, Kakuna or Beedrill with /vote, but still can vote Shiny Beedrill.
    Code (text):
    1. "actions": {
    2.                 "preventTeamvote": ["weedle", "beedrill", "kakuna"]
    3.             }


    Team Talk: Coolest featured ever, after Convert, onDeath and /myrole and... Anyway, it allows roles to communicate privately by typing /tt [message] or /teamtalk [message].
    A role with the following code will be able to talk to all of their teammates when using /teamtalk (as with team-reveal, you have to add it to all of the team members!):
    Code (text):
    1. "actions": {
    2.               "teamTalk": true
    3.             }
    4.            
    If you want the player to only be able to team talk to a few roles, you can use it as an array too:
    Code (text):
    1. "actions": {
    2.               "teamTalk": ["weedle", "kakuna", "beedrill"]
    3.             }
    4.            
    Both 'first' aTeam Talk appears like this in the chat:



    Update Team: A feature really useful for themes with lots of conversion. A role with this boolean enabled will receive their team-reveal message every night when a new player is added to their team.
    Code (text):
    1. "actions": {
    2.               "startup": "team-reveal",
    3.               "updateTeam": true
    4.             }
    If the role with the code above gains any new teammate during the night, they will automatically receive the "Your team is: Player1, Player2" message. Useful for themes with Recruiter roles like Trainers, so whenever your Trainer catches a new Pokémon you will be updated on your team.
    Note that the team message will only be displayed when there's a new member on your team; losing a teammate will not trigger it.
    For now, this code only updates your team during the night; Standby/Voting phase may come later.[/QUOTE]


    Team Utilities: Adding team-reveal, team talk, prevent teamvote and updateTeam is now simpler. Instead of adding all of those separately, you can simply add teamUtilities and all of them will be automatically enabled for the role.
    This code:
    Code (text):
    1. "actions": {
    2.                 "teamUtilities": true
    3.             }
    is the same as this:
    Code (text):
    1. "actions": {
    2.                 "startup": "team-reveal-with-roles",
    3.                 "teamTalk": true,
    4.                 "preventTeamvote": true,
    5.                 "updateTeam": true
    6.             }

    Ondeath Ondead and Lynch:
    This are all abilities that will activate when certain roles die or get lynched
    On Death Action: And now the best feature in this update: On Death actions. Those actions are performed right before a role with this action dies.
    The following code will be activated whenever that role dies, and will kill all players with the "human" role, poison all Frogs for 2 days and Dinosaurs for 5 days, convert all Bears into Sleeping Bears and Horses into Pegasus and expose any Godfather. Of course, you don't need to use all actions.
    Code (text):
    1. "onDeath": {
    2.           "killRoles": ["human"],
    3.           "poisonRoles": { "frog": 2, "dinosaur": 5 },
    4.           "convertRoles": { "bear": "sleepingbear", "horse": "pegasus" },
    5.           "exposeRoles": ["godfather"],
    6.           "killmsg": "±Game: Before dying, ~Self~ cast a spell that killed ~Target~ (~Role~)!",
    7.           "poisonmsg": "±Game: Before dying, ~Self~ cast a spell that poisoned ~Target~ (~Role~) for ~Count~ days!",
    8.           "convertmsg": "±Game: ~Self~'s death made ~Target~, a good ~Old~, rage and become a ~New~!",
    9.           "exposemsg": "±Game: ~Self~ left a dying message pointing to ~Target~ as the ~Role~!"
    10.         }
    Important Notes about OnDeath:
    -"killmsg", "poisonmsg", "convertmsg" and "exposemsg" are optional and quite obvious at this point, EXCEPT for the ~Target~ part. ~Target~ will show all players with that role, so you should check if your theme allows for more than a copy of that role and write the message taking that in to consideration. Also, remember that those message are sent once for each role affected (not for each player, to reduce flood). For example, if the players Steve Jobs and Bill Gates are the Frog role and the players Bill, George and Barack are the role Dinosaur, the following messages will be broadcast:
    -The order of actions will always be Kill > Poison > Convert > Expose. Always.
    -You can't use onDeath to prevent a player's death. Even if you use convertRole to make the dying player change roles, the death process won't be stopped. This is fully intentend, and a true survival would be another feature.
    -There are 2 situations when OnDeath won't be activated: When a player is slain (to prevent abuses) and when a player dies due to another player's onDeath (to prevent infinite loops). In any other situation (kills, poison, lynch, bombs, etc.) the onDeath will be activated (or at least it's supposed to. Tell me if it doesn't).


    On Death - Curse: Will curse those roles when this player dies.
    "curseRoles" is used to set which roles will be cursed. In this example, "role1" will become "roleA" after 2 nights, while "role2" will become "roleB" after the same time.
    curseCount and curseConvertMessage are the same as in the night action.
    "cursemsg" is the message broadcast to everyone when this role dies and their onDeath is triggered.
    Code (text):
    1. "actions":{
    2.           "onDeath": {
    3.           "curseRoles": {
    4.           "role1": "roleA",
    5.           "role2": "roleB"
    6.           },
    7.           "curseCount": 3,
    8.           "cursemsg": "Because ~Self~ died, ~Target~, the ~Old~ is/are doomed to become ~New~ in ~Count~ days!",
    9.           "curseConvertMessage": "~Target~'s curse took effect and ~Player~ has changed from ~Old~ to ~New~!"
    10.           }
    11.         }


    Less messages for onDeath: Since some themes make heavy usage of onDeath, there's now an alternative to have less messages when those are activated.
    Code (text):
    1.  
    2.         "actions": {
    3.           "onDeath": {
    4.           "killRoles": [
    5.           "villager",
    6.           "bodyguard",
    7.           "mayor"
    8.           ]
    9.           }
    10.         }
    The above code would result in the following messages:
    Code (text):
    1.  
    2.         "actions": {
    3.           "onDeath": {
    4.           "killRoles": [
    5.           "villager",
    6.           "bodyguard",
    7.           "mayor"
    8.           ],
    9.           "singlekillmsg": "When ~Self~ died, ~Target~ died too!"
    10.           }
    11.         }
    The above code would result in the following message:
    With this, you can change the "A message per role affected" to "A message per onDeath effect". Other than "singlekillmsg", you can also have "singlepoisonmsg", "singleconvertmsg" and "singlecursemsg", and those will take priority over the normal messages.
    The downside is that you can't specify anything other than ~Self~ (player that died) and ~Target~ (all players affected) for those messages (~Roles~ could be added in the future). For this reason, there's no "singleexposemsg", since that requires each player's role to be properly specified.


    Convert When Dead Roles: It converts a role to another if no player with specific roles is in the game anymore.
    The code below, if added to Ganondorf, will make it convert into Ganon when all Koumes and Kotakes are dead, or into Phantom Ganon when all Citizens are dead.
    Code (text):
    1. "actions": {
    2.             "onDeadRoles": {
    3.                 "convertTo": {
    4.                     "ganon": ["koume", "kotake"],
    5.                     "phantom_ganon": ["citizen"]
    6.                 },
    7.                 "convertmsg": "With Koume and Kotake's death, ~Self~, the ~Old~, transformed into ~New~!"
    8.             }
    9.         }
    Note 1: Convert When Dead Roles is quite limited at the moment, so theme makers shouldn't try stuff too complex with that.
    Note 2: Although it's called onDeadRoles, it will also activate when roles are converted.
    Note 3: onDeadRoles.convertTo will only trigger at specific moments: When someone is daykilled, lynched or slain; or at the end of the night phase. This could change in the future, but for now it won't trigger after every death in the night, only after all actions are executed.
    Note 4: Convert When Dead Roles won't chain instantly, so if Role A changes into Role B because of onDeadRoles, it can't change again into Role C at the same moment if Role B has onDeadRoles too. However, it could convert on the next phase even if no deaths occur.


    Quick onDeadRoles: You can now set your theme to check for onDeadRoles more often during the night.
    By default, onDeadRoles only triggers at the end of the night, but you can make it check after each player's night action too.
    Code (text):
    1. "quickOnDeadRoles": true
    This is a global-level property. You cannot set it individually per role.


    Silent OnDeadRoles: silentConvert is now available for onDeadRoles.
    This will make the converted player not receive the "You are Role!" and "You can use /blablabla" messages.
    Code (text):
    1. "onDeadRoles": {
    2.           "convertTo": {
    3.           "lucas2": ["ness", "ness2"]
    4.           },
    5.           "silentConvert": true,
    6.           "convertmsg": "Lucas' determination increased due to Ness' defeat!"
    7.         }
    As with most game messages, if you set "convertmsg": "" (nothing between the quotation marks) then the public message will not be displayed as well.


    Convert when lynched: 2nd best feature in this update. Allows a role to survive a lynch by converting to another role!
    A role with the following action will become a Werewolf if lynched:
    Code (text):
    1. "lynch": {
    2.           "convertTo": "werewolf",
    3.           "convertmsg": "~Self~, the ~Old~, received ~Count~ votes and was about to get lynched, but survived and became a ~New~!"
    4.         }
    "convertmsg" is optional and will replace the Lynch message. ~Self~ will show that player's name, ~Old~ will show that player's former role, ~New~ will show the role it converted to and ~Count~ will show the ammount of votes it received. And yeah, ~Old~ and ~New~ are kind of redundant, but whatever.


    lynch.convertVoters: Similar to lynch.killVoters, this action will instead convert the players who voted the lynched person.
    The code below will convert the first and the last person to vote for the lynched player. If the converted player is an 'human' or 'kid', they become a 'werewolf'; if they are 'mafia1' or 'mafia2', they become 'godfather'.

    Code (text):
    Code (text):
    1.  
    2.         "lynch": {
    3.             "convertVoters": {
    4.                 "first": 1,
    5.                 "last": 1,
    6.                 "newRole": {
    7.                     "godfather": ["mafia1", "mafia2"],
    8.                     "werewolf": ["human", "kid"]
    9.                 },
    10.                 "message": "~Target~ transformed for having voted for ~Self~!"
    11.             }
    12.         }
    'newRole' is mandatory, and it follows the same syntax for the convert night action. If a role that should be converted by lynch.convertVoters is not found on 'newRole', they will simply keep their current role (I may add a property to define a default role someday).
    'first' is optional and will default to 1. 'last' is optional and will default to 0.
    'message' is optional and will default to the message used in the example above. ~Target~ will be replaced by the names of the players affected by this effect, while ~Self~ will be the lynched player's name.


    lynch.killVoters: When a role with this action is lynched, the players that voted for them will get killed based on voting order.
    The code below will kill the first and the 2 last person to vote for the lynched player, regardless of their vote count.
    Code (text):
    1. "actions": {
    2.           "lynch": {
    3.           "killVoters": {
    4.           "first": 1,
    5.           "last": 2,
    6.           "message": "~Target~ died for voting ~Self~"
    7.           }
    8.           }
    9.         }
    10.        
    Both 'first' and 'last' are optional. If they are not defined, they will default to first: 1 and last: 0 (AKA only the first person to vote).
    'message' is also optional, and will default to "~Target~ died for having voted for ~Self~!" if not defined.


    "random" for killVoters and convertVoters: So far, lynch.killVoters and lynch.convertVoters could have "first" and "last" as parameters to define which players would be affected. Now there's also "random", which will make the action affect that number of players regardless of voting order (picked randomly).
    The code below will kill 2 random players that voted for this role, regardless of voting order.
    Code (text):
    1.  
    2.         "actions": {
    3.           "lynch": {
    4.           "killVoters": {
    5.           "first": 0,
    6.           "last": 0,
    7.           "random": 2
    8.           }
    9.           }
    10.         }
    If you have something like first: 1, last: 2 and random: 1 in the same action, then the script will pick the first voter, then the 2 last voters, and, if there are still more voters unpickedy, 1 of those will be chosen at random.

    Passive other features:
    All the other passive abilities without categories like: Ondeath, InitialCondition and TeamTalk.
    Hax:
    If you've played mafia you know what hax is. Coding a role to get hax is pretty simple. Here's an example code
    Code (text):
    1.   "actions": {
    2.       "hax": {
    3.       "kill": {
    4.       "revealTeam": 0.33,
    5.       "revealPlayer": 0.1,
    6.       "revealTarget": 0.5
    7.       }
    8.       }
    9.       }
    Inside of actions, you'd put "hax" (this goes OUTSIDE of night and day), then following you the command you are haxing, then the following is simple; "revealTeam" is the chance (out of 1) that you will hax the team doing the command, "revealPlayer" is the chance (out of 1) that you will reveal the player doing the command, and "revealTarget" is the chance (out of 1) that you will reveal the target of the action. To add multiple. close off the bracket for the command ("kill": {...}) then start a new one with a new command. Unfortunately, arrays here are not supported.
    Custom Hax: You can have customized hax messages. This works both for night and standby hax.
    A player with the code below will receive the usual "The Italian Mafia are going to kill Target!" hax at a 25% chance, and then a custom hax with that long message below at 6% chance.
    Code (text):
    1. "hax": {
    2.       "kill": {
    3.       "revealTeam": 0.25,
    4.       "Seems like ~Player~ (~Role~) is the one of the ~Side~ that is trying to ~Action~ ~Target~, the ~TargetRole~ of ~TargetSide~!": 0.06
    5.       }
    6.     }
    The parameters like ~Player~ and ~Role~ that you can use for custom hax are those in the example above.


    Hax Ignore:
    Fairly simple, outside of the "night" or "standby", you'd put in
    Code (text):
    1.   "avoidHax": [
    2.       "kill"
    3.       "distract"
    4.       ],
    Somewhere. Inside of "avoidHax":, there is an array where you put all the commands you want to avoid.


    Initial Condition - Clear Curse: Only useful if you can convert to the role with this action. Removes any curse that that player holds.
    Code (text):
    1. "actions":{
    2.       "initialCondition": {
    3.       "clearCurse": true
    4.       }
    5.     }


    Initial Condition - Curse: Same as Initial Condition: Poison, but with curse.
    In the following example, the player with this role will change to "role1" by N2.
    Code (text):
    1. "actions":{
    2.       "initialCondition": {
    3.       "curse": {
    4.       "cursedRole": "role1",
    5.       "curseCount": 3,
    6.       "curseConvertMessage": "~Target~'s curse took effect and ~Player~ has changed from ~Old~ to ~New~!"
    7.       }
    8.       }
    9.     }


    Initial Poison: A role with this action will start the game poisoned.
    Code (text):
    1. "actions": {
    2.       "initialCondition": {
    3.       "poison": {
    4.       "count": 5,
    5.       "poisonDeadMessage": "Time is over!"
    6.       }
    7.       }
    8.     }
    Note: Both Count and PoisonDeadMessage are optional and will be set to default if not added.
    Note 2: Like Initial Recharge, this only work for players that start with this role. Converted Players will not be affected by Initial Poison.


    On Team: Changes how a role is displayed on the "Current Team" list. Works similarly to 'onlist'.
    Code (text):
    1.  
    2.     "actions": {
    3.       "onteam": "villager"
    4.     }
    5.    


    Reveal As:
    Makes the inspector see you as a different role. Useful for millers and hidden roles.
    {
    "role": "legless",
    "translation": "Legless Lizard",
    "side": "village",
    "help": "You are a Legless Lizard. No, you are not a snake, but people always seem to think you are one.",
    "actions": {
    "onlist": "snake",
    "inspect": {
    "revealAs":
    "snake"
    }

    }
    }


    Reveal As Random Role:
    Makes the inspector see you as any random role in the theme. Be extremely careful when using this, because you could appear as a role not on the list, making it a dead giveaway as to your true identity.
    {
    "role": "ditto",
    "translation": "Ditto",
    "side": "ditto",
    "help": "You are Ditto, and with your ability to transform, you appear as possibly any other pokemon to the inspector.",
    "actions": {
    "inspect": {
    "revealAs":
    "*"
    }

    }
    }


    Multiple roles for Miller: It's now possible to have a miller that reveals as more than one role.
    This one will reveal the roles in the revealAs Array (equal chances for each role)
    Code (text):
    1. "actions": {
    2.       "inspect": {
    3.       "revealAs": ["role1", "role2", "role3"]
    4.       }
    5.     }
    This one will show a random role among those in the beginning of the game. Note that this uses the roles lists as refence, so it has a higher chance of revealing as a villager.
    Code (text):
    1. "actions": {
    2.       "inspect": {
    3.       "revealAs": "*"
    4.       }
    5.     }


    Reveal Side:
    When inspected, the target will only reveal the side, not the role
    Code (text):
    1. "actions": {
    2.     "inspect": { "revealSide": true }
    3.     }


    Update Charges: If your theme uses lots of charges, then this is quite useful for you.
    By setting this to true, the player will be informed how many charges (if any) they have left for actions limited by charges whenever they use /myrole.
    So this:
    Code (text):
    1.  
    2.     "actions": {
    3.       "kill": {
    4.       "target": "AnyButSelf",
    5.       "common": "Self",
    6.       "priority": 4,
    7.       "charges": 3
    8.       },
    9.       "updateCharges": true
    10.     }
    Will make the player receive the following message when using /myrole:

    Actions that have are unlimited (no charges restriction) or have reached 0 charges are not displayed by that message.

    Night Actions:
    TOC:
    Press Ctrl+F meanwhile selecting one of the name inside the ToC spoiler to search faster
    Commands
    Detox:
    Disguise:
    Dispel:
    Guard (Night Action):
    Inspect (Night Action):
    Sight or Insane Inspector:
    Convert:
    Mass Convert:
    Night Action - Copy:
    Silent Copy:
    Night Action - Curse:
    SILENT CURSE:
    Night Action Dummy Commands:
    Poison Override:
    Shield Message:
    Shield:
    Stalk Action:
    Watch (Night action):

    Properties
    Custom Command Names:
    Multiple Commands in the Same Role:
    Multiple Night Actions in a command:
    Random Night Action:
    Broadcast Message:
    "broadcast": "all":
    Pierce:
    Pierce Chance:
    Dummy Pierce:
    Bypass:
    Cancel:
    Restrict:
    Initial Recharge:
    Command Charges:
    Command Recharge:
    addCharges:
    clearCharges:
    Fail Chance:
    Suicide Chance:
    Hax Max:
    Hax Multiplier:
    Only Self Target:
    noFollow:
    Avoid repeated actions:
    Compulsory Actions:
    userMustBeVisited/targetMustBeVisited:
    userMustVisit/targetMustVisit:

    Commands:
    All the abilities that a player could use during the night like /inspect or /kill and all the features that modify this precise actions like killmsg.
    Detox:
    A night command that cures poison from a target.
    There are 4 messages related to this command:
    msg: Sent to the player that uses the command. ~Target~ is the Target's name, ~Role~ is their role (~Role~ would pretty much make the command an inspect, as long as the target was poisoned.)
    targetmsg: Sent to the player that was cured of poison. ~Self~ is the Detox role, and ~Role~ is their role.
    failmsg: Sent to the player that uses the command, only if the target is not poisoned. ~Target~ is the Target's name
    detoxmsg: Broadcast to everyone noting that someone was cured of poison. ~Target~ is the player cured, ~Role~ is the curer's role, and ~Self~ is the curer.
    **Note: You can use "silent": true to prevent it being broadcast
    Example:
    Code (text):
    1.  
    2.         "actions": {
    3.           "night": {
    4.           "detox": {
    5.           "target": "Any",
    6.           "common": "Self",
    7.           "priority": 3,
    8.           "msg": "~Target~ (~Role~) was cured of poison.",
    9.           "targetmsg": "~Self~, the ~Role~, cured you of poison",
    10.           "failmsg": "~Target~ is not poisoned!",
    11.           "detoxmsg": "~Self~, the ~Role~, cured ~Target~ of poison!"
    12.           }
    13.           }
    14.           }
    15.        
    ~~~~~~


    Disguise: A new night action. It makes the target get inspected or exposed as a different role for a certain period.
    The code below allows a player to /disguise [name] during the night. If the target is Villager, Miller or Mayor, they will be inspected as Mafia; if they are Mafia or Mafia Boss, they will be inspected as Villager; if they are neither, they will be inspected as Bodyguard.
    Code (text):
    1. "night": {
    2.             "disguise": {
    3.                 "target": "AnyButSelf",
    4.                 "common": "Self",
    5.                 "priority": 5,
    6.                 "disguiseRole": {
    7.                     "villager": ["mafia", "mafiaboss"],
    8.                     "mafia": ["villager", "miller", "mayor"],
    9.                     "auto": "bodyguard"
    10.                 },
    11.                 "disguiseCount": 2,
    12.                 "disguisemsg": "You disguised your target (~Target~) as ~Disguise~!"
    13.             }
    14.         }
    15.        
    disguiseRole is mandatory, and can be used in 3 different ways. If you use the method above, you must have the "auto" property. It will specify the default role the target will be disguised as in case it's not in the arrays above it.

    If you are looking for a simpler disguise, you can use "disguiseRole": "bodyguard" (no objects/arrays).
    This way the person will always be disguised as Bodyguard regardless if their role.

    The third option is the random disguise:
    Code (text):
    1.  
    2.         "night": {
    3.             "disguise": {
    4.                 "target": "AnyButSelf",
    5.                 "common": "Self",
    6.                 "priority": 5,
    7.                 "disguiseRole": {
    8.                         "random": {
    9.                         "prettylady": 0.3,
    10.                         "bodyguard": 0.3,
    11.                         "mafia": 0.4
    12.                 }
    13.            }
    14.         }
    This will make the target have a 30% chance of being disguised as PL, 30% as BG and 40% as Mafia.

    Lastly, disguise also allows 2 more properties:
    'disguiseCount' defines how long the disguise gets active. It defaults to 1 (expires at the end of the night it was used), and if set to 2 or more it can make the disguise work for exposes too.
    'disguisemsg' allows you to customize the message you receive when the disguise is successfully applied.
    Important to note that the target will not know they have been disguised.[/QUOTE]


    Dispel:
    A night command that removes curse from a target.
    There are 4 messages related to this command:
    msg: Sent to the player that uses the command. ~Target~ is the Target's name, ~Role~ is their role (~Role~ would pretty much make the command an inspect, as long as the target was poisoned.)
    targetmsg: Sent to the player that was cured of cure. ~Self~ is the Dispelrole, and ~Role~ is their role.
    failmsg: Sent to the player that uses the command, only if the target is not curse. ~Target~ is the Target's name
    dispelmsg: Broadcast to everyone noting that someone was cured of curse. ~Target~ is the player cured, ~Role~ is the curer's role, and ~Self~ is the curer.
    **Note: You can use "silent": true to prevent it being broadcast
    Example:
    Code (text):
    1.  
    2.         "actions": {
    3.           "night": {
    4.           "dispel": {
    5.           "target": "Any",
    6.           "common": "Self",
    7.           "priority": 3,
    8.           "msg": "~Target~ (~Role~) was cured of curse.",
    9.           "targetmsg": "~Self~, the ~Role~, cured you of curse",
    10.           "failmsg": "~Target~ is not cursed!",
    11.           "detoxmsg": "~Self~, the ~Role~, cured ~Target~ of curse!"
    12.           }
    13.           }
    14.           }
    15.        
    ~~~~~~


    Guard (Night Action): A new night action. It's a simple action that protects the target, but with a difference: the author can decide which actions are blocked by this.
    The code below will guard the target from poison, inspections, protections (yes, it's possible) and kill2 (only if the command is /kill2, since /kill will still go through normally):
    Code (text):
    1. "night": {
    2.           "guard": {
    3.           "common": "Self",
    4.           "target": "Any",
    5.           "priority": "2",
    6.           "guardActions": [
    7.           "poison",
    8.           "inspect",
    9.           "protect",
    10.           "kill2"
    11.           ],
    12.           "guardmsg": "Your target (~Target~) was guarded from your ~Command~!"
    13.           }
    14.         }
    "guardActions" is a mandatory array that lists the commands that will be blocked by this role's guard.
    Be aware that, similar to /shield, this action will block things based on the command's name, not action's effect. This means that, in the example above, if a player uses a poison command named /burn, this guard will not block it, even if it has "command": "poison".
    "guardmsg" is optional and works exactly like protectmsg, except that it also allows a ~Command~ parameter (shows the command that was blocked by this guard). If not defined, it will default to the message shown on the example above.


    Inspect (Night Action): With this action we can discover the role of our target.
    Code (text):
    1. "night": {
    2.           "inspect": {
    3.           "command": "inspect",
    4.           "common": "Self",
    5.           "target": "AnyButSelf",
    6.           "priority": "20"
    7.           }
    8.         }
    Sight or Insane Inspector: An inspector that has a chance of inspecting someone as the wrong role.
    Use the "true" parameter inside "Sight" to set the chance of correctly finding someone's role.
    Code (text):
    1. "actions": {
    2.           "night": {
    3.           "inspect": {
    4.           "target": "AnyButSelf",
    5.           "common": "Self",
    6.           "priority": 30,
    7.           "Sight": {
    8.               "true": 0.8,
    9.               "werewolf": 0.1,
    10.               "bodyguard": 0.1
    11.           }
    12.           }
    13.           }
    14.         }
    In this exemple the inspector has 80% chance to find out the real role, 10% chance to inspect their target as a werewolf and another 10% chance to inspect their target as a bodyguard.
    Note: Currently, an insane inspector will not be affected by millers. This will be fixed in the future.


    Convert:
    Convert: A night action that allows a player to change its target's role to another.
    Code (text):
    1. "actions": {
    2.           "night": {
    3.           "convert": {
    4.           "target": "AnyButSelf",
    5.           "common": "Self",
    6.           "priority": 30,
    7.           "newRole": "godfather",
    8.           "convertusermsg": "You converted your target",
    9.           "canConvert": ["villager", "miller", "truemiller", "miller1", "miller2"],
    10.           "silent": true
    11.           }
    12.           }
    13.         }
    In this example, if this action is used in a Villager or Miller, that person will become a Godfather (scary!). Don't forget to set the "newRole" (sets the role that person will be converted to) and the "canConvert" array (roles that can be affected by this action).
    The "silent": true line is optional. If set to true, only the user and the target will receive a message about the conversion. If set to false (or not set at all) a "A Villager has been converted into a Godfather!" message will be shown to everyone.
    Note: Convert can be blocked by Safeguard.
    Also convertmsg was already added. You can use ~Old~ and ~New~ to show the roles that changed.
    And Multi-miller is fixed.
    And some other minor additions:
    It's now possible to use "canConvert": "*" .This will allow any role to be converted.
    And because of this, Evade Convert was also added:
    Code (text):
    1. "actions": {
    2.           "convert": {
    3.           "mode": "ignore"
    4.           }
    5.         }


    Convert according to target's role: It's now possible to set a which role your target will become according to his/her current role. The following example will transform your target in a Cult PL if that person is a Pretty Lady, a Cult BG if you target the Bodyguard or a Cult if you target a villager or miller.
    Code (text):
    1. "actions": {
    2.           "night": {
    3.           "convert": {
    4.           "target": "Any",
    5.           "common": "Self",
    6.           "priority": 30,
    7.           "newRole": {
    8.           "culthooker": ["hooker"],
    9.           "cultbg": ["bodyguard"],
    10.           "cult": ["villager", "miller", "truemiller", "miller1","miller2"]
    11.           }
    12.           }
    13.           }
    14.         }
    Note: Don't set canConvert if you are using this mode.
    Note 2: If you add the same role to more than one list, that role will be converted to the first list it's found.


    Messages for Convert: You can now add a ~Target~ to a convertmsg. That will make the message that's broadcast to everyone show the player who got converted.
    And you can customize the message that only the converter sees!
    Code (text):
    1. "convert": {
    2.           "target": "AnyButTeam",
    3.           "common": "Self",
    4.           "priority": 20,
    5.           "newRole": "recruit",
    6.           "usermsg": "You converted ~Target~! ~Old~ is now a ~New~!"
    7.         }
    This will replace the "Your target (Name) was converted and now is a Role!" message.


    Random Role for Convert: You can now have a random factor in /converts. The following code:
    Code (text):
    1. "convert": {
    2.           "target": "AnyButTeam",
    3.           "common": "Self",
    4.           "priority": 20,
    5.           "newRole": {
    6.           "villager": [ "mayor", "bodyguard", "vigilante"],
    7.           "mayor": [ "vigilante", "inspector"]
    8.           }
    9.         }
    Will make a Vigilante have a chance of becoming either a Villager or a Mayor when converted by this action.
    Basically, It's like any other convert action, but if you add a same role to more than one array, that role can be converted to any of those roles.


    Silent Conversion: To help reducing the spam when you convert roles, you can have some attributes to make the converted player not receive any message at all.
    Notice that the examples below are valid for Night Actions, Initial Condition and On Death.
    Below: The target will not receive the "You have been converted and changed roles" message, nor the new role's help text (they still can use /myrole to read it though), but the user will receive those messages due to the Copy action.
    Code (text):
    1.  
    2.         "actions": {
    3.           "night": {
    4.           "convert": {
    5.           "command": ["copy", "convert"],
    6.           "common": "Self",
    7.           "target": "AnyButSelf",
    8.           "priority": 10,
    9.           "newRole": "cultist",
    10.           "copyAs": "*",
    11.           "silentConvert": true,
    12.           "silentCopy": false
    13.           }
    14.           }
    15.         }


    unlimitedSelfConvert: By default, the script prevents a players from self-converting twice at the same turn, since this used to cause undesired effects (Dark Knight Cecil converting to Paladin and then changing back at the same night). But in some cases you may want to allow that dual self-conversion, so this property allows you to bypass that restriction.
    To do that, you can use this boolean on the convert action:
    Code (text):
    1.  
    2.         "convert": {
    3.           "target": "OnlySelf",
    4.           "common": "Self",
    5.           "priority": 4,
    6.           "newRole": "grass",
    7.           "silent": true,
    8.           "unlimitedSelfConvert": true
    9.         }
    This is likely only useful for advanced coders, so most of you will rarely need it.


    Mass Convert: It's a night action that convert players based on their roles, regardless of who you targeted. Think of it as a mix of Night action Convert and onDeath.convertRoles.
    The code below will make a night action that converts all Kingdras into Swift Swim Kingdra, all Jynx into Dry Skin Jynx and all Vaporeon into Hydration Vaporeon.
    Code (text):
    1. "raindance": {
    2.           "command": "massconvert",
    3.           "target": "OnlySelf",
    4.           "common": "Self",
    5.           "priority": 30,
    6.           "convertRoles": {
    7.           "kingdra": "swiftswim_kingdra",
    8.           "jynx": "dryskyn_jynx",
    9.           "vaporeon": "hydration_vaporeon"
    10.           },
    11.           "singlemassconvertmsg": "It started to rain!"
    12.         }
    13.        
    "singlemassconvertmsg" can have ~Self~ (player's name) and ~Target~ (all players converted).
    Other than "singlemassconvertmsg", you can also use the following:
    -"massconvertmsg": Will send 1 message for each role converted (in the example above, the message is sent 3 times). You can use ~Self~ (player who used the action), ~Target~ (players converted by the action), ~Old~ (their previous role), ~New~ (their new role) and ~Number~(which will say the number of players converted by that action).
    -"silent": true will not prevent both 'singlemassconvertmsg' and 'massconvertmsg' from being broadcast.
    -"silentMassConvert": true will make it so that the players converted do not receive the "You have been converted" message.

    Note that massconvert is an night action where the target does not matter. As such, it's recommended you use it with "target": "OnlySelf", so the player can simply type /raindance (no need to type their own name).


    Night Action - Copy: Copy allows the user to convert to another role depending on who's targetted. Basically, a night action for roles like Ditto and Kirby (but with other uses too). Coded similarly to Convert.
    "canCopy" is a list of roles that can be copied (optional, if not used any role can be copied).
    "copyAs" is the same as "canConvert". In the example below, the user will become "roleA" if copying "role2". It's also possible to have "copyAs": "*" if you want the user to become exactly the same role as the target.
    Code (text):
    1. "actions": {
    2.           "night": {
    3.           "copy": {
    4.           "target": "AnyButSelf",
    5.           "common": "Self",
    6.           "priority": 5,
    7.           "canCopy": ["role1", "role2"],
    8.           "copyAs": {
    9.           "roleA": ["role2"],
    10.           "roleB": ["role1"]
    11.           },
    12.           "copymsg": "~Self~ copied ~Target~ and changed from ~Old~ to ~New~!",
    13.           "copyusermsg": "You copied ~Target~ and changed from ~Old~ to ~New~!"
    14.           }
    15.           }
    16.         }
    P.S.: Copy has more uses than it seems initially.
    Silent Copy: To help reducing the spam when you convert roles, you can have some attributes to make the converted player not receive any message at all.
    Notice that the examples below are valid for Night Actions, Initial Condition and On Death.
    Below: The target will not receive the "You have been converted and changed roles" message, nor the new role's help text (they still can use /myrole to read it though), but the user will receive those messages due to the Convert action.
    Code (text):
    1.  
    2.         "actions": {
    3.           "night": {
    4.           "convert": {
    5.           "command": ["copy", "convert"],
    6.           "common": "Self",
    7.           "target": "AnyButSelf",
    8.           "priority": 10,
    9.           "newRole": "cultist",
    10.           "copyAs": "*",
    11.           "silentConvert": false,
    12.           "silentCopy": true
    13.           }
    14.           }
    15.         }


    Night Action - Curse: Curse is yet another variation for Convert. It changes your target's role after a certain number of turns. Basically, it's a poison that converts instead of killing.
    Differently from poison, Curse can be overriden regardless of the current count.
    "canCurse" is a list of roles that can be cursed (optional, if not used any role can be cursed).
    "cursedRole" is the same as "canConvert". In the example below, the target will become "roleA" after 2 nights if it was "role2". It's also possible to have "cursedRole": "roleB" if you want any target to become roleB.
    "curseCount" is the number of turns for the curse to take effect. It's optional, and defaults to 2 (meaning curse will activated during the next night).
    "curseConvertMessage" is optional and, if defined, will show that message to everyone when the curse takes effect. For this message, you can use both ~Target~ and ~Player~ for the target's name.
    Code (text):
    1. "actions": {
    2.           "night": {
    3.           "curse": {
    4.           "target": "AnyButSelf",
    5.           "common": "Self",
    6.           "priority": 5,
    7.           "canCurse": ["role1", "role2"],
    8.           "cursedRole": {
    9.           "roleA": ["role2"],
    10.           "roleB": ["role1"]
    11.           },
    12.           "curseCount": 3,
    13.           "curseConvertMessage": "~Target~'s curse took effect and ~Player~ has changed from ~Old~ to ~New~!"
    14.           }
    15.           }
    16.         }
    P.S.: Similar to Copy, it has more uses than you may think.


    SILENT CURSE:
    Below: The cursed player won't receive the conversion and help messages, nor will see the "You will convert in X turns" message.
    Code (text):
    1.  
    2.         "actions": {
    3.           "night": {
    4.           "curse": {
    5.           "common": "Self",
    6.           "target": "AnyButSelf",
    7.           "priority": 10,
    8.           "cursedRole": "cultist",
    9.           "silentCurse": true
    10.           }
    11.           },
    12.           "initialCondition": {
    13.           "curse": {
    14.           "cursedRole": "cultist",
    15.           "curseConvertMessage": "A new cultist is born!",
    16.           "silentCurse": true
    17.           }
    18.           }
    19.         }
    Code (text):
    1.  
    2.         "actions": {
    3.           "onDeath": {
    4.           "curseRoles": {
    5.           "villager": "cultist",
    6.           },
    7.           "silentCurse": true,
    8.           "convertRoles": {
    9.           "cultist": "cultist2",
    10.           },
    11.           "silentConvert": true
    12.           }
    13.         }


    Night Action Dummy Commands: A highly unusual set of night actions. Their effect is... none! You can use dummy, dummy2 or dummy3 as night actions that will have no specific effect, but can be used to trigger target's mode. An example is Trainer's Bulbasaur/Charmander/Squirtle: to make them inspect their targets by their actions, all roles in the theme actually evade any /inspect coming from them, and then the Evasion Message is used to make a pseudo-inspection.
    The code below is an action that actually doesn't do anything:
    Code (text):
    1. "actions": {
    2.             "night": {
    3.                 "fire": {
    4.                     "command": "dummy"
    5.                     "common": "Self",
    6.                     "target": "AnyButSelf",
    7.                     "priority": 20
    8.                 }
    9.             }
    10.         }
    11.        
    But with the code below, the action above will actually work as a kill command, since anyone with the code below will die when hit by a "dummy" action.
    Code (text):
    1. "actions": {
    2.             "dummy": {
    3.                 "mode": "die",
    4.                 "msg": "You got burned!",
    5.                 "targetmsg": "You burned ~Self~!"
    6.             }
    7.         }
    8.        
    Other than doing nothing, dummy actions can be used to send messages. There are 3 types, and each of them will only be used if the action is the right type of dummy:
    -dummyusermsg/dummy2usermsg/dummy3usermsg: Will send a message to the user. You can use ~Self~, ~Role~, ~Side~ (user's name, role and side), ~Target~, ~TargetRole~ and ~TargetSide~ (target's name, role and side).
    -dummytargetmsg/dummy2targetmsg/dummy3targetmsg: Will send a message to the target. You can use the same replacement words as dummyusermsg.
    -dummybroadcastmsg/dummy2broadcastmsg/dummy3broadcastmsg: Will send a message to all players. You can use the same replacement words as dummyusermsg.


    Poison Override: If you poison someone that's already poisoned, your poison will override the old poison IF it's going to kill the target faster than the current poison.



    Shield:
    It will redirect the actions that would hit the target on the user of the shield action instead.
    The code below will make the user receive any kill, poison or steal command intended for their target.
    Code (text):
    1. "actions": {
    2.             "night": {
    3.                 "shield": {
    4.                     "common": "Self",
    5.                     "target": "AnyButSelf",
    6.                     "priority": 1,
    7.                     "shieldActions": ["kill", "poison", "steal"]
    8.                 }
    9.             }
    10.         }
    11.        
    Alternatively, "shieldActions": "*" will make the user shield any action.

    Note 1: "shieldActions" is a list of commands, not actions. This means if you have a /exterminate that is actually a kill, it won't be shielded by the code above. What matters here is what is typed, not the actual effect, so if you have a /kill command that actually protects, it will be shielded too. This is mostly to prevent a dual action to target different people.
    Note 2: Shield won't chain on other Shields. If player A uses /shield on B, any action used on B will go to A even if Player C also shielded Player B.
    Note 3: Only the latest Shield will be valid. If a new Shield action is used on someone already shielded, it will overwrite it.


    Shield Message: You can now customize the message a player see when they hit a shielded person.
    Code (text):
    1.  
    2.         "shield": {
    3.             "target": "AnyButSelf",
    4.             "common": "Role",
    5.             "priority": 5,
    6.             "shieldActions": "*",
    7.             "shieldmsg": "Your ~Action~ was shielded by ~Self~!"
    8.         }
    9.        
    Use ~Action~ for the command that was shielded, and ~Self~ for the person that used the /shield action. And I just noticed I could have added something to tell the person that was shielded (will add it sometime later).


    Stalk Action: Night action /stalk [name]. Shows who your target visited during the night.
    User will get a message like "Your target (RiceKirby) visited Chinchou and Bebbz during the night!" or "Your target (RiceKirby) didn't visit anyone during the night!".
    Coded the same way as any night action.
    Code (text):
    1.  
    2.         "actions": {
    3.            "night": {
    4.               "stalk": {
    5.                  "target": "AnyButSelf",
    6.                  "common": "Self",
    7.                  "priority": 10
    8.                }
    9.            }
    10.         }
    11.        
    Note: Stalk will only show players visited before your stalk action. Distracted players will still show as having visited the players they did before they got distracted, but no one else after that.
    This means that if you want a stalker to know everyone that their target visited, you must have stalk as one of the actions with the slowest priority.

    Custom Stalk Message: You can now customize the message you see when you stalk someone.
    Stalkmsg is the message you get when your target visited someone (~Visit~ is a list of name they visited), while novisitmsg is the message you get when your target didn't visit anyone.
    Code (text):
    1. "actions": {
    2.             "night": {
    3.                 "stalk": {
    4.                     "target": "AnyButSelf",
    5.                     "common": "Self",
    6.                     "priority": 15,
    7.                     "stalkmsg": "It seems ~Target~ spent the night at ~Visit~'s house!",
    8.                     "novisitmsg": "It seems ~Target~ spent the quietly at their own house!"
    9.                 }
    10.             }
    11.         }
    12.        



    Watch (Night action): Similar to Stalk, it shows who visited your target, but only the first person to do so. As with stalk, Watch is an action that works on dead players.
    Code (text):
    Code (text):
    1.  
    2.         "night": {
    3.             "watch": {
    4.                 "common": "Self",
    5.                 "target": "AnyButSelf",
    6.                 "priority": 40,
    7.                 "watchmsg": "Your target (~Target~) was visited by ~Visit~ this night!"
    8.             }
    9.         }
    "watchmsg" is optional. ~Target~ will be the name of the person you are watching, while ~Visit~ will be the first person to have visited your target during that night.
    +Watch First and Last: There are now more options for /watch. You can set it to show the first X players to visit your target, or the last Y players (or even combine both).
    The code below will make the Watcher identify the first 2 and the last 3 person to visit their target:
    Code (text):
    1. "night": {
    2.           "watch": {
    3.           "target": "AnyButSelf",
    4.           "common": "Self",
    5.           "priority": 30,
    6.           "watchFirst": 2,
    7.           "watchLast": 3
    8.           }
    9.         }
    Be careful when choosing those numbers, as it may reveal the entire mafia team if you watch the person killed by them.
    There's also "watchRandom":x, which will behave randomly as "watchFirst" or "watchLast" for the "watch" night action.
    For both Stalk and Watch is recommended that those actions have low priority.

    Properties:
    Here we insert all that features that modify the general effects of the night commands, like Silent: true or Charges
    Custom Command Names:
    Code (text):
    1.   "actions": {
    2.               "night": {
    3.               "heat": {
    4.               "command": "convert",
    Just put after day or night the name of the custom command (in this case heat), and then after that you put in "command": and then what command it is. So if its a convert you want to call heat, it would be "command": "convert".


    Multiple Commands in the Same Role:
    This isn't too tricky.
    Code (text):
    1.   "actions": {
    2.               "night": {
    3.               "glitch": {
    4.               "target": "AnyButTeam",
    5.               "common": "Team",
    6.               "priority": 10,
    7.               "command": "kill",
    8.               "broadcast": "team",
    9.               "msg": "Missingno glitched your data which had to be destroyed!"
    10.               }, <----
    11.               "corrupt": {
    12.               "target": "AnyButTeam",
    13.               "common": "Self",
    14.               "priority": 10,
    15.               "command": "poison",
    16.               "poisonDeadMessage": "Missingno's corruption was completed!"
    17.               }
    18.               },
    19.               "distract": {
    20.               "mode": "ChangeTarget",
    21.               "hookermsg": "You tried to distract the Missingno and your data got corrupted!",
    22.               "msg": "~Distracter~ came to you so you corrupted their data."
    23.               }
    24.               }
    25.               },
    Now, before you kill yourself thinking "i have to learn how to do this?", it isn't that tricky if you look into it. If you want multiple commands in the same timeframe (day / night), then what you will do is only close ONE BRACKET at the end of the command (pointed to the place with an arrow), then add your next command there. How does this work? Well, since you aren't closing off "night": {, you can have multiple commands there. If you want a command that can both a nightcommand AND a daycommand, you would do the following -
    Code (text):
    1.  "actions": {
    2.               "night": {
    3.               "kill": {
    4.               "target": "AnyButSelf",
    5.               "common": "Self",
    6.               "priority": 20,
    7.               "limit": 1
    8.               }
    9.               },
    10.               "standby": {
    11.               "kill": {
    12.               "target": "AnyButSelf",
    13.               "msg": "You can kill now using /kill [name] :",
    14.               "killmsg": "Sephiroth darts through the crowd and swiftly slices through ~Target~. He then vanishes without a trace."
    15.               }
    16.               }
    17.               }
    Where there's an extra line break i took out the middle stuff. Basically its like before but you want to close off the "night": { bracket and start a new bracket called "standby": {, which is where you add your command.


    Multiple Night Actions in a command: If the Random Night Action is not enough for you, then what about multiples night actions in the same command? You can also set the "command" attribute for a night action as an array, and all actions in that list will be performed when that action is used!
    As with Random Night Action, remember that you can't set a different priority for each command, so you will have to think well about its priority. Also, each defensive mode (changeTarget, ignore, killattacker, etc) will be applied separately for each action used.
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "fullguard": {
    4.               "target": "AnyButSelf",
    5.               "common": "Self",
    6.               "priority": 4,
    7.               "command": ["protect", "safeguard"]
    8.               },
    9.               "kidnap": {
    10.               "target": "AnyButSelf",
    11.               "common": "Self",
    12.               "priority": 4,
    13.               "command": ["distract", "inspect", "convert"],
    14.               "newRole": "kidnapped"
    15.               }
    16.               }
    17.             }
    You can (and should) add attributes specific for different actions, like distractmsg, newRole and poisonDeadMessage, since this is basically 2 or more actions merged.
    SilentVote:
    "silentVote":true


    Random Night Action: You can now set a night action's "command" attribute as an object to make a command have a chance of using different actions. For example, the following code will have a 50% chance of resulting in a kill, 30% chance of being a poison and 20% chance of:inspecting your target.
    Be aware that you can't set a different priority for each command, so you will have to think well about its priority.
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "metronome": {
    4.               "target": "AnyButSelf",
    5.               "common": "Self",
    6.               "priority": 4,
    7.               "command": {
    8.               "kill": 0.5,
    9.               "poison": 0.3,
    10.               "inspect": 0.2
    11.               }
    12.               }
    13.               }
    14.             }


    Broadcast Message: You can now customize the message broadcast to teammates for actions with "broadcast":"team" or "broadcast":"role".
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "kill": {
    4.               "target": "AnyButTeam",
    5.               "common": "Team",
    6.               "priority": 14,
    7.               "broadcast": "team",
    8.               "broadcastmsg": "±Game: ~Player~, the Ax Knight, wants to ~Action~ ~Target~!"
    9.               }
    10.               }
    11.             }
    12.            
    The code above will the replace the default "Your partner(s) have decided to kill X" to the text in the "broadcastmsg" attribute.
    ~Player~ will show the name of the player inputting that action. ~Target~ will show the name of the person being targetted. ~Action~ will show the action used (it's redundant, since this is defined for each action).


    "broadcast": "all": (or "broadcast": "*")
    Goes under the night action you're broadcasting
    Tip: If you're broadcasting to everyone, you should have the action be restricted, to prevent people from spamming EVERYONE in the game.
    Code (text):
    1.  
    2.             "night": {
    3.               "kill": {
    4.               "priority": 1,
    5.               "common": "Self",
    6.               "target": "AnyButSelf",
    7.               "broadcast": "all",
    8.               "restrict": ["kill"]
    9.               }
    10.               }
    11.            


    Pierce: You can now have an action that ignores protection/safeguard regardless of its priority.
    Below: Even with a really low priority, that command will ignore Protect and Safeguard.
    Code (text):
    1.  
    2.             "actions": {
    3.               "night": {
    4.               "kill": {
    5.               "common": "Self",
    6.               "target": "AnyButSelf",
    7.               "priority": 999,
    8.               "pierce": true
    9.               }
    10.               }
    11.             }
    12.            


    Pierce Chance: You can have the Pierce effect at a specific chance now.
    The code below will have a 60% chance of piercing the target's protection.
    Code (text):
    1. "actions": {
    2.                 "night": {
    3.                     "kill": {
    4.                         "target": "AnyButSelf",
    5.                         "common": "Self",
    6.                         "priority": 15,
    7.                         "pierceChance": 0.6
    8.                     }
    9.                 }
    10.             }
    11.            


    Dummy Pierce: Same as pierce, but only for Dummy commands.
    The reason they need a specific pierce property is because dummy is usually blocked by safeguard, but with this you can have actions still being blocked by safeguard, but the dummy messages still go through.
    The example below will broadcast 2 messages if the target is unguarded, but only the "Bwahaha" one if the target was safeguarded.
    Code (text):
    1. "poison": {
    2.                 "command": ["poison", "dummy", "dummy2"],
    3.                 "target": "AnyButSelf",
    4.                 "common": "Self",
    5.                 "priority": 10,
    6.                 "dummybroadcastmsg": "~Target~ has been poisoned!",
    7.                 "dummy2broadcastmsg": "BWAHAHA!",
    8.                 "dummy2Pierce": true
    9.             }
    You can use dummyPierce, dummy2Pierce, dummy3Pierce, etc. to set the pierce property for each dummy separately.


    Bypass:
    It's a modifier for night actions that allows the user to bypass predefined modes.
    The code below will make a role that can kill their target even if they have an evadeChance or ignore kills completely.

    Code (text):
    Code (text):
    1.  
    2.             {        "role": "vigilante",
    3.                     "translation": "Sniper",
    4.                     "side": "village",
    5.                     "help": "Type /snipe [name] to kill someone! Your flawless aim and armor piercing rounds allow you to kill someone even if they would normally ignore or evade other kills!",
    6.                     "actions": {
    7.                         "night": {
    8.                             "snipe": {
    9.                                 "command": "kill",
    10.                                 "target": "AnyButSelf",
    11.                                 "common": "Self",
    12.                                 "priority": 1,
    13.                                 "bypass": ["evadeChance", "ignore"]
    14.                             }
    15.                         }
    16.                     }
    17.                 }
    18.            
    Bypass is required to be an array, even if it only has one entry. Valid entries inside the array are every mode you can run on a role (all case sensitive): ignore, ChangeTarget, killattacker, poisonattacker, identify, die, evadeCharges, evadeChance, killif, resistance

    As such, you're able to set up a role that can bypass evade charges, but if it misses, it has no effect (Flavor example: Rocket Launcher being used on a role using evadeCharges to simulate a bulletproof. If the rocket hits, it kills.) You can also use this to make a PL that can distract all Werewolves without dying, the easy and quick way. All other restrictions will still take effect (ex: if you get distracted, you aren't able to bypass anything unless you already ignore distracts. If your target is protected, the protect will prevent death unless Pierce is true)

    Note: killattacker and poisonattacker will both bypass their respective "evenifprotected" as well.


    Cancel: Works similarly to "restrict", but it will cancel other commands if they had been input before.
    A good example of where it's useful would be Rotom. The code below will make it so if you type /mow to become Mow Rotom, you can still type /frost if you changed your mind. After typing /frost with the code below, the game will simply forget that you typed /heat, /wash, /mow or /fan during that night.
    Code (text):
    1. "frost": {
    2.               "command": "convert",
    3.               "target": "OnlySelf",
    4.               "common": "Self",
    5.               "priority": 0,
    6.               "newRole": "ice",
    7.               "canConvert": ["rotom"],
    8.               "cancel": [ "heat", "wash", "mow", "fan" ],
    9.               "silent": true
    10.             }
    11.            


    Restrict: With this, you can set some night actions that can't be used during the same night (e.g. You can make a role with /kill and /poison who can only use one of those actions during each night). Can be used with any night action;
    Commands in the "restrict" list for an action can't be used during the same night (player will get a "You cannot use this action during this night" message when inputting the second command).
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "inspect": {
    4.               "target": "AnyButSelf",
    5.               "common": "Self",
    6.               "priority": 4,
    7.               "restrict": ["kill"]
    8.               },
    9.               "kill": {
    10.               "target": "AnyButSelf",
    11.               "common": "Self",
    12.               "priority": 20,
    13.               "restrict": ["inspect"]
    14.               }
    15.               }
    16.             }
    You can add a command to its own "restrict" list to prevent that role from changing targets once it has input the command, but remember that it will also prevent a second command if that action has a "limit":2 or higher.


    Initial Recharge: Same as recharge, but for the startup. Note that recharge and initial recharge are separate parameters, so you can have only one of them. The following example shows a kill that can only be used after the 3rd night, and once every 2 nights after that.
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "kill": {
    4.               "target": "AnyButSelf",
    5.               "common": "Self",
    6.               "priority": 5,
    7.               "recharge": 2,
    8.               "initialrecharge": 3
    9.               }
    10.               }
    11.             }
    Note: For now, initial recharge only works for players that start as that role (players converted to this role won't have to wait for the initial recharge)


    Command Charges:
    allows you to use some action only a certain amount of time (or less often).
    Code (text):
    1.  
    2.             {
    3.               "role": "lamp",
    4.               "translation": "Lamperi",
    5.               "side": "auth",
    6.               ...,
    7.               "actions": {
    8.               "night": {"kill": {..., "charges": 2} }
    9.               }
    10.             }
    11.            
    In this code you can use /kill only twice during the game, unless you don't get a recharge.


    Command Recharge: allows you to use some action only every nth night (or less often). (no standby support as of now)
    Simply add "recharge": # in the same place where you would add "limit"
    Code (text):
    1.  
    2.             {
    3.               "role": "lamp",
    4.               "translation": "Lamperi",
    5.               "side": "auth",
    6.               ...,
    7.               "actions": {
    8.               "night": {"kill": {..., "recharge": 2} }
    9.               }
    10.             }
    11.            
    In this exemple Lamperi is able to kill only every two nights


    addCharges: Can be added either on night or standby actions. If a role with this attribute is converted from another role that had charges, then the charges will be increase/decreased by this value. In other words, they will have the charges from the previous role + charges from new role.
    Code (text):
    1. "night": {
    2.               "inspect": {
    3.               "common": "Self",
    4.               "target": "AnyButSelf",
    5.               "priority": 3,
    6.               "addCharges": 1
    7.               }
    8.             }
    If a player had a role that could /inspect twice per game (like Rotom) and convert into another role with the code above, they will be able to inspect 3 times per game (2 inspections from first form + 1 from new form) regardless of when they use convert or use the action.
    'addCharges' can also be used with negative values (converting would make you lose charges).
    Please note that addCharges will only add charges to actions that had charges prior to the conversion. If a role with no charges converts into a role with addCharges, then nothing will happen.[/QUOTE]


    clearCharges: Can be added either on night or standby actions. If a role with this attribute is converted from another role that had charges, the charges on that command will be cleared and the player will be able to use that actions unlimited times. In other words, this will make the player not carry the charges from previous roles.
    Code (text):
    1. "night": {
    2.               "kill": {
    3.               "common": "Self",
    4.               "target": "AnyButSelf",
    5.               "priority": 3,
    6.               "clearCharges": true
    7.               }
    8.             }
    If a player had a role that could /kill 3 times per game and then converts into a role with the code above, then they will be able to /kill without any charge restriction.


    Fail Chance: For any night action, allow to set a chance of that action failing.
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "kill": {
    4.               "target": "AnyButRole",
    5.               "common": "Role",
    6.               "priority": 12,
    7.               "failChance": 0.5
    8.               }
    9.               }
    10.             }
    Note: For now, a player with failChance can receive the "You failed" message even if they didn't use that action. Will be fixed later.
    Note 2: This won't work perfectly for actions with "common": "Team". For example, if Larsa and Vayne had failChance in their kill actions, it's possible Larsa would get a fail message while Vayne would successfully kill their target.


    Suicide Chance: Can be added to any night action to add a chance of the user dying when performing that action (the action will be performed normally). Can be used with any night action.
    Code (text):
    1. "actions": {
    2.               "night": {
    3.               "protect": {
    4.               "target": "AnyButSelf",
    5.               "common": "Self",
    6.               "priority": 4,
    7.               "suicideChance": 0.75,
    8.               "suicidemsg": "You swore to protect your partners with your life, and that's what happened."
    9.               }
    10.               }
    11.             }


    Hax Max: No, this is not meant to maximize hax. On the contrary, it sets a maximum number of times the command is susceptible to hax each night.
    With the code below, that player can only be haxed on the first 2 times it types /kill during each night. From the 3rd time onwards, they are protected from hax for that night.
    Code (text):
    1. "night": {
    2.                 "kill": {
    3.                     "target": "AnyButTeam",
    4.                     "common": "Team",
    5.                     "priority": 12,
    6.                     "broadcast": "team",
    7.                     "maxHax": 2
    8.                 }
    9.             }
    Important to note that this is set on a per-player and per-command basis. Which means if the action is shared, each of the players has their own count, and the count is separate if they have another haxable action.


    Hax Multiplier: Another small feature added on a whim :x You can modify the chances of a role's action being haxed. This modifier is set on the action itself, not on the haxer.
    The code below makes a role that has twice the chance of being haxed for any role that hax /kill.
    Code (text):
    1. "kill": {
    2.               "common": "Self",
    3.               "target": "AnyButSelf",
    4.               "priority": 12,
    5.               "haxMultiplier": 2
    6.             }


    Only Self Target: It's now possible to have a night action that can only be used on yourself. Mostly useful for Protect, Safeguard and another action I'll talk about later.
    Code (text):
    1.  
    2.             "actions": {
    3.               "night": {
    4.               "protect": {
    5.               "target": "OnlySelf",
    6.               "common": "Self",
    7.               "priority": 5
    8.               }
    9.               }
    10.             }


    noFollow: It's a property available for any night action. Actions with "No Follow" set to 'true' will not be detected by Stalk or Watch (other actions by the same player without No Follow will still be detected).
    Code (text):
    Code (text):
    1.  
    2.             "night": {
    3.                 "kill": {
    4.                     "common": "Self",
    5.                     "target": "AnyButSelf",
    6.                     "priority": 40,
    7.                     "noFollow": true
    8.                 }
    9.             }
    10.            



    Avoid repeated actions: A somehow advanced feature. Have you seen cases where you inspect or convert the same player twice in a turn because of some complex convert action? Well, this feature is used to avoid those situations.
    The code below will work exactly as you expect it to work, but if the user converts into another role that also has /copy at a lower priority, they would usually use it again, potentially converting into another role at an undesired moment. The "noRepeat" ensures that the same player will only use an action named "copy" once per night.
    Code (text):
    1.  
    2.             "copy": {
    3.               "command": ["copy", "dummy"],
    4.               "dummybroadcastmsg": "Hello I'm now ~Role~!",
    5.               "target": "Any",
    6.               "common": "Self",
    7.               "priority": 27,
    8.               "broadcast": "role",
    9.               "copyAs": "bodyguard2",
    10.               "noRepeat": true
    11.             }
    Important to note that this is completely different from "restrict". With "restrict", you are unable to type the command again, while noRepeat only affects things at the moment the night ends and the actions are executed.


    Compulsory Actions: A fairly old request that I even said "Good luck trying" when @Fuzzysqurl said he wanted to code it, but I finally decided to try it. It forces a player to use certain night actions every night, picking a random target as soon as the night begins.
    The code below will force the player to distract every night. As soon as the night begins, a target will be picked randomly, but the player still can change the target to someone else (unless you are an evil theme maker and put "restrict" in the action too).
    Code (text):
    1. "night": {
    2.               "distract": {
    3.               "target": "AnyButSelf",
    4.               "common": "Self",
    5.               "priority": 1,
    6.               "compulsory": true
    7.               }
    8.             }
    Important to note that the action will work as if the person had actually typed it, so it can be haxed, fail due to lack of charges/recharge and any other property you add (like restrict or broadcast) to it will still be in effect. The action will be used even if the player is not on channel/server when the night starts.


    userMustBeVisited/targetMustBeVisited: Those properties are available for any night action. If userMustBeVisited/targetMustBeVisited is set to true, that night action will only work if the user/target was visited by someone else earlier during that same night. If it's set to false, the action will only work if the user/target was not visited by no one else during the night.
    The code below will make a kill action that only works if you had no guests at your home (AKA no one visited you at that night before you executed your action).

    Code (text):
    Code (text):
    1.  
    2.             "night": {
    3.                 "kill": {
    4.                     "common": "Self",
    5.                     "target": "AnyButSelf",
    6.                     "priority": 40,
    7.                     "userMustBeVisited": false
    8.                 }
    9.             }
    When an action fails due to userMustBeVisited/targetMustBeVisited, the user will receive a "Your kill didn't work because your ~Target~ was (not) visited during the night!" message.
    Note that targetMustBeVisited will not work very well for shared actions, with the possibility of the action failing for one the users that share the action, but working for the other one (userMustBeVisited will not suffer from this issue).



    userMustVisit/targetMustVisit: Those properties are available for any night action. Similar to the above, userMustBeVisited/targetMustBeVisited will define if a night action works or not according to the user/target visiting someone else.
    If set to true, the action will only work if user/target have visited someone earlier during that night. If set to false, the action will only work if the user/target stayed at home until you came to visit them.
    The code below will make a kill action that only works if find your target is outside instead of on their home (AKA target used some action on someone else during that night).

    Code (text):
    Code (text):
    1.  
    2.             "night": {
    3.                 "kill": {
    4.                     "common": "Self",
    5.                     "target": "AnyButSelf",
    6.                     "priority": 40,
    7.                     "targetMustVisit": true
    8.                 }
    9.             }
    When an action fails due to userMustVisit/targetMustVisit, the user will receive a "Your kill didn't work because your ~Target~ was (not) visiting someone else during the night!" message.
    Note that userMustVisit will not count the own action that has that attribute. A possible use is to make an action that only works if you used another action during the night (e.g.: A kill that only works if you used a distract at the same night). As with targetMustBeVisited, userMustVisit may have some problems with shared actions.

    Day Actions:
    TOC:
    Press Ctrl+F meanwhile selecting one of the name inside the ToC spoiler to search faster
    Commands
    Daykill:
    Expose:
    Expose gets a bunch of new stuff, everything is identical to Daykill unless noted:
    Reveal:
    Properties
    RevealChance/revealmsg:
    Convert and Copy for Standby Actions:
    Daykill Reveal Chance:
    Expose Reveal Chance
    Mass Convert for Standby:
    Recharge for Standby Actions:
    Standby Charges:
    Target for standby actions:
    exposedtargetmsg:
    Commands:
    All the abilities that a player could use during the day like /Expose or /Daykill and all the features that modify this precise actions like killmsg.
    Daykill:
    Basically a Kill used during the day. Which is useful to kill the target without the need to worry about the protectors.
    Code (text):
    1.  
    2.                     "actions": {
    3.                         "standby": {
    4.                             "kill": {
    5.                                 "target": "AnyButSelf",
    6.                                 "msg": "You can now kill someone with /kill [name] :",
    7.                                 "command": "kill",
    8.                                 "killmsg": "±Oda: Zoro unleash the power of his three swords and provoke a cyclone that tramples ~Target~ with full power!",
    9.                                 "revealChance": 0.33,
    10.                                 "revealmsg": "~Role~ tried to hide after his attack but he forgot where is his ship and now everyone knows that he is ~Self~!"
    11.                                     }
    12.                                    }
    13.                                 }
    "msg":"", will remember at the begin of the standby to the user how to use /kill.
    "killmsg":"", is the message that happear when the daykill action has sucess. ~Target~ shows the target's name
    "revealChance": x, is optional, and if active the daykiller has a chance to be revealed to everyone.
    "revealmsg": "", is the revealation message when revealChance happen. Use ~Role~ show's the daykiller's role, ~Self~ shows the daykiller's name.


    Expose:
    Basically a Inspect used during the day. The exposed person will have their role revealed to everyone.
    Use ~Self~ to show the Exposer's name, ~Target~ to show the target and ~Role~ to show the target's role.
    Code (text):
    1. "actions": {
    2.           "standby": {
    3.           "expose": {
    4.           "target": "AnyButSelf",
    5.           "msg": "You can type /expose [name] to reveal someone's role!",
    6.           "exposemsg": "~Self~, the Inspector, points to ~Target~ and shouts: That person is the ~Role~!"
    7.           }
    8.           }
    9.         }
    Expose gets a bunch of new stuff, everything is identical to Daykill unless noted: If no message is defined, a message will be put in for the player


    Reveal:
    This is when you purposefully give away your role during the daytime.
    Code (text):
    1.   "standby": {
    2.           "taunt": {
    3.           "command": "reveal",
    4.           "revealmsg": "~Self~ (~Role~) runs around everyone screaming 'YOU'RE TOO SLOW!'."
    5.           }
    6.           },


    Properties:
    Here we insert all that features that modify the general effects of the day commands.
    RevealChance/revealmsg:
    ~Self~ = Exposer
    ~Role~ = Exposer's role
    Code (text):
    1.  
    2.             "actions": {
    3.               "standby": {
    4.               "expose": {
    5.               "target": "AnyButSelf",
    6.               "msg": "You can expose now by typing /expose [name]. You will not be revealed!",
    7.               "exposemsg": "Hey everyone! ~Target~ is ~Role~!",
    8.               "revealChance": 0.5,
    9.               "revealmsg": "Oh right! I, ~Self~, am the ~Role~!"
    10.               }
    11.               }
    12.               }
    13.            
    Default message: "±Game: While exposing, ~Self~ (~Role~) made a mistake and was revealed!"


    Convert and Copy for Standby Actions: Another long-awaited feature is finally here. Kinda. Those are not new actions, but things you can add to existing standby actions. For example, you could have an expose action that converts the target after revealing them, or a daykill that makes the user copy into another role.
    The example below will make the Samurai copy into a Murderer when they successfully kill someone.
    Code (text):
    1. "actions": {
    2.               "standby": {
    3.               "kill": {
    4.               "target": "AnyButSelf",
    5.               "msg": "You can kill now using /kill [name] :",
    6.               "killmsg": "~Self~ pulls out a sword and strikes it through ~Target~'s chest!",
    7.               "copyAs": "murderer",
    8.               "copyusermsg": "You have blood in your hands. You are a murderer now!"
    9.               }
    10.               }
    11.             }
    To use convert/copy with standby actions, all you need to do is add "newRole" (for convert) or "copyAs" (for copy). They will work exactly the same as their night counter-parts*, which means you can use something like
    Code (text):
    1. "newRole": {
    2.                 "exposed_villager": ["villager"],
    3.                 "exposed_mafia": ["mafia"]
    4.             }
    Just the same way you would use for the night action.

    Important to note that the order is always Standby Action -> Copy -> Convert, so if you have both copyAs and newRole in an expose action, you will expose a player, then copy them, then convert them. Also note that even targets daykill can get converted (they convert before dying, useful if you want it to trigger some onDeath action).

    *Practically any property you can use for night copy/convert can also be used here (like silent or silentCopy), with a few exceptions:
    -"convertfailmsg" and "copyfailmsg" are not available. If the target cannot be converted/copied, the user will not receive any message at all mentioning it failed.
    -Instead of "usermsg", use "copyusermsg" or "convertusermsg".

    Other than those, you can use
    -For convert: newRole, canConvert, silent, convertmsg, convertusermsg, tarmsg
    -For copy: copyAs, canCopy, silent, copymsg, copyusermsg[/QUOTE]


    Daykill Reveal Chance: Only meaningful for Daykillers that don't reveal. Allows to set a chance of making said daykiller reveal when killing.
    "actions": {
    "standby": {
    "kill": {
    "target": "AnyButSelf",
    "msg": "You can kill now by typing /kill [name] (You'll be revealed)!",
    "killmsg": "Sephiroth sliced ~Target~ in 3 parts, then sent each of them to a different planet!",
    "revealChance": 0.33,
    "revealmsg": "In the midst of the battle, ~Self~ was revealed to be ~Role~!"
    }
    }
    }
    Set revealChance as a number between 0 and 1 (similar to Hax). If there's a revealmsg, that will be shown when the RevealChance is activaded instead of a default message.
    Note: The revealmsg will be shown in addition to the killmsg. It won't replace the message, so write something that will fit well :3
    Expose Reveal Chance now works for /expose too. Use in the same way as revealChance for daykills.

    Mass Convert for Standby: After Copy and Convert for standby, why not massconvert too? It works exactly the same as the night version, and it triggers after day-copy and day-convert.
    The code below will convert Mafias into Villagers and vice-versa when the this role daykill.
    Code (text):
    1. "standby": {
    2.                 "kill": {
    3.                     "target": "AnyButSelf",
    4.                     "msg": "You can kill now using /kill [name] :",
    5.                     "killmsg": "~Self~ pulls out a sword and strikes it through ~Target~'s chest!",
    6.                     "limit": 2,
    7.                     "convertRoles": {
    8.                         "villager": "mafia",
    9.                         "mafia": "villager"
    10.                     },
    11.                     "singlemassconvertmsg": "THAT'S CRAZY! VILLAGER IS MAFIA AND MAFIA IS VILLAGER NOW!"
    12.                 }
    13.             }



    Recharge for Standby Actions: Recharge finally works for Standby Actions! And so do Initial Recharge!
    Code (text):
    1. "standby": {
    2.               "kill": {
    3.               "target": "AnyButSelf",
    4.               "msg": "You can kill by typing /kill [name]!:",
    5.               "killmsg": "~Self~ pulls out a stair and crashes it at ~Target~'s head!"
    6.               "recharge": 2,
    7.               "initialrecharge": 2
    8.               }
    9.             }
    Remember that, as with Night Recharge, "limit" cannot be saved for the next day. That means a role with daykill with limit:2 and recharge:2 can't kill once D1, then once D2, then once D3: recharge will be set whenever that action is used at least once.



    Standby Charges: Charges can finally be used for Standby Actions. It works exactly the same as for Night Actions:
    Code (text):
    1. "actions": {
    2.                 "standby": {
    3.                     "kill": {
    4.                         "target": "AnyButSelf",
    5.                         "msg": "Type /kill [name] to kill someone (3 times during the game!)",
    6.                         "killmsg": "~Self~ killed ~Target~!"
    7.                         "charges": 3,
    8.                         "chargesmsg": "You still can daykill ~Charges~ more times!"
    9.                     }
    10.                 }
    11.             }
    12.            


    Target for standby actions: Standby Actions now accept the same values for 'target' that night actions does.
    You could now have an expose that can only be used on teammates, or a daykill that can only be used on self (stupid, I know, but possible). This means standby actions now accept "OnlySelf", "OnlyTeam" and "OnlyTeammates" for its 'target' property
    .


    exposedtargetmsg:
    Used mainly for day inspects to remind you who you targeted. The message ONLY gets sent to the player with the expose command
    ~Target~ = Players name who you exposed
    Example of a dayinspect:
    Code (text):
    1.  
    2.             "standby": {
    3.               "expose": {
    4.               "target": "AnyButSelf",
    5.               "msg": "You can expose now by typing /expose [name]. You will not be revealed!",
    6.               "exposemsg": Hello ~Role~!",
    7.               "exposedtargetmsg": "You exposed ~Target~!"
    8.               }
    9.               },
    10.            



    Global Features:
    This actions are not role related but theme related, so you have to keep them outside the role's brackets
    TOC:
    Press Ctrl+F meanwhile selecting one of the name inside the ToC spoiler to search faster
    Useful Features
    Check No Voters:
    noplur:
    Ticks:
    Quick onDeadRoles:
    Delayed Conversion Messages:
    votemsg:
    Lynch Message:
    Kill message and Kill user message:
    Draw Message:
    Improved closedSetup:
    Theme Variables:
    Final Features
    Variables:
    Village Can't Lose Roles:
    Packaged Spawns:
    role.players:
    Random Role on Spawn List:
    Closing the Theme:
    Useful Features:
    This Features are useful to modify some aspects of the themes like how much a night phase lasts or what message should be displayed when a player die.
    Check No Voters: Allows for the voting phase to finish earlier (or not even start) if all remaining players that still didn't vote have "noVote": true.
    Code (text):
    1. "checkNoVoters": true
    This is a global-level property (AKA same level as others like votesniping and theme's name).


    noplur: Boolean to determine if lynch phase should end if over 50% of players alive voted for a particular target, discounting all voting powers and voteshields.
    Code (text):
    1.  
    2.             "minplayers": 4,
    3.             "noplur": true,
    4.             "summary": "Vanilla Mafia!"
    5.            


    Ticks: useful to modify how much is long the night, the standby phase or even the first night
    Code (text):
    Code (text):
    1.  
    2.               "ticks": {
    3.               "standby": 45,  "night": 20,  "night1": 60  },
    4.            
    A new "ticks" value that extends or shortens night 1. By default, 10 seconds are added (so if you wish to have equal phases regardless, just set night1 to 10 less than night)


    Quick onDeadRoles: You can now set your theme to check for onDeadRoles more often during the night.
    By default, onDeadRoles only triggers at the end of the night, but you can make it check after each player's night action too.
    Code (text):
    1. "quickOnDeadRoles": true
    This is a global-level property. You cannot set it individually per role.


    Delayed Conversion Messages: This is a global property that will make all conversions that occur during the night only throw the Help Text once, at the end of the night.
    Example: Normally, in Trainers, if you /runaway and another Trainer catches you, the message would be like this:
    (23:10:39) ***************************************************************************************
    (23:10:39) Times Up! :
    (23:10:39) ±Game: With their trainer defeated, a Piplup became wild again!
    (23:10:39) ±Game: You have been converted and changed roles!
    (23:10:39) ±Game: You are a Piplup!
    (23:10:39) ±Game: You can use /protect [name] during the night to protect someone. If a Trainer catches you, you will join their team (you get a slight buff if Blue catches you)!
    (23:10:39) ±Game: Red caught a Piplup!
    (23:10:39) ±Game: You have been converted and changed roles!
    (23:10:39) ±Game: You are a Red's Piplup!
    (23:10:39) ±Game: You joined Red's team! You can use /protect [name] during the night to protect someone. [Hint: Use /myrole to check your teammates, and /tt [message] to talk to your team.]
    (23:10:39) ±Game: Your team is A (Red's Piplup) and E (Red).
    (23:10:39) No one died! :
    (23:10:39) ***************************************************************************************
    But with this piece of code
    Code (text):
    1.  
    2.             "votemsg": "~Player~ tackles ~Target~!",
    3.             "delayedConversionMsg": true,
    4.             "lynchmsg": "±Game: ~Player~ (~Role~) has been defeated!",
    5.            
    it will look like this:
    (23:07:14) ***************************************************************************************
    (23:07:14) Times Up! :
    (23:07:14) ±Game: With their trainer defeated, a Squirtle became wild again!
    (23:07:14) ±Game: You have been converted and changed roles!
    (23:07:14) ±Game: Blue caught a Squirtle!
    (23:07:14) ±Game: You have been converted and changed roles!
    (23:07:14) No one died! :
    (23:07:14) ±Game: You are a Blue's Squirtle!
    (23:07:14) ±Game: You joined Blue's team! You can use /inspect [name] during the night to find someone's ability! You also have a 50% chance of evading nightkills. [Hint: Use /myrole to check your teammates, and /tt [message] to talk to your team.]
    (23:07:14) ±Game: Your team is A (Blue's Squirtle) and H (Blue).
    (23:07:14) ***************************************************************************************
    Noticed the difference? The player ran away and was caught immediately in both cases, but on the second log, the "You are [Role]!" and the "You can use /blablabla" messages only appeared once.
    This is useful for conversion-heavy themes, like Trainers, School and RPS.
    ~~~~~~


    votemsg:
    Global theme attribute
    Accepts 2 variables:
    ~Player~ = The person voting
    ~Target~ = The person being voted
    Important to note: The "±Game" bot will appear automatically.
    Example of where you can put it
    Code (text):
    1.  
    2.             "lynchmsg": "±Game: ~Player~ (~Role~) was voted off the island!",
    3.             "killmsg": "±Game: ~Player~ (~Role~) could no longer survive on the island!",
    4.             "votemsg": "~Player~ cast a ballot for ~Target~.",
    5.            
    In addition, this allows for some interesting variations for silent vote.
    Flavored Vote:
    "votemsg": "~Player~ cast a ballot for ~Target~.",
    Reverse Silent Vote:
    "votemsg": "Someone cast a ballot for ~Target~.",
    Silent Vote:
    "votemsg": "~Player~ cast a ballot.",
    Completely Silent Vote:
    "votemsg": "Someone cast a ballot",
    As you can see, you can have multiple variations of the message. Perhaps this will help break a few more restraints to have some interesting theme ideas.


    Lynch Message: You can now customize the message for when someone is voted out. The following code should go together with "killmsg" and "killusermsg".
    Code (text):
    1. "lynchmsg": "±Game: ~Player~, the ~Role~, won't be able to help the ~Side~ because they got lynched with ~Count~ votes!"
    Kind of obvious, but: ~Player~ wil show that player's name, ~Role~ will show its role, ~Side~ will show its team name and ~Count~ will show how many votes it got.


    Kill message and Kill user message:
    Code (text):
    1.   "killmsg": "+Trainer: ~Player~ (~Role~) fainted!",
    2.               "killusermsg": "You fainted!"
    "killmsg" is what is said to everyone when a role dies. ~Player~ is replaced with their name, and ~Role~ is replaced with the role.
    "killusermsg" is what is given to the killed user. (only to them, noone else)


    Draw Message: You can customize the message for when a game ends in a draw too! The following code should go together with "killmsg" and "killusermsg".
    Code (text):
    1. "drawmsg": "Everybody died! I blame the economic crisis for that :("


    Improved closedSetup: You can now specify closedSetup per role or side. Role closedSetup overwrites side closedSetup, etc.
    Code (text):
    1.  
    2.             {  "name": "default",
    3.               "closedSetup": true,
    4.               "sides": [
    5.               {
    6.               "side": "side1",
    7.               "translation": "Village",
    8.               "closedSetup": true
    9.               },
    10.               {
    11.               "side": "side2",
    12.               "translation": "Mafia",
    13.               "closedSetup": false
    14.               },
    15.               {
    16.               "side": "side3",
    17.               "translation": "Werewolf"
    18.               }
    19.               ],
    20.               "roles": [
    21.               {
    22.               "role": "villager",
    23.               "translation": "Villager",
    24.               "side": "side1"
    25.               },
    26.               {
    27.               "role": "villager-opensetup",
    28.               "translation": "Villager",
    29.               "side": "side1",
    30.               "closedSetup": false
    31.               },
    32.            
    In this example, villager has a closed setup (inherited from side side1), villager-opensetup has an open setup (defined in the role), mafia has an open setup (inherited from side side2), werewolf has a closed setup (inherited from the global closedSetup).
    ~~~~~~


    Theme Variables: This'll be a game changer (for theme makers!) and will make a lot of themes "possible" (reasonable) now. After registering your variable (see below), it can be accessed in any property using a variable:name syntax (see below as well).
    Variables are registered like so:
    Code (text):
    1. {
    2.               "name": "default",
    3.               "variables": {
    4.               "name": "value",
    5.               "simple inspect": {
    6.               "inspect": {
    7.               "target": "AnyButSelf",
    8.               "common": "Self",
    9.               "priority": 30
    10.               }
    11.               }
    12.               },
    13.               "sides": {},
    14.               "roles": {}
    15.             }
    16.            
    This will make it available in any other property (except the "variables" property, of course), by using the "variable:" prefix. Anything after this will work, even spaces, double quotes (assuming you escape them), and whatever other evil characters you can think of.
    Code (text):
    1.  
    2.             {
    3.               "name": "default-variables",
    4.               "summary": "Default mafia theme, the people of our fine village are being threatened by the mafia. .... ",
    5.               "variables": {
    6.               "side-mafia-trans": "Mafia",
    7.               "priority-bodyguard": 5,
    8.               "inspector-night-action": {
    9.               "inspect": {
    10.               "target": "AnyButSelf",
    11.               "common": "Self",
    12.               "priority": 30
    13.               }
    14.               }
    15.               },
    16.               "sides": [
    17.               {
    18.               "side": "mafia",
    19.               "translation": "variable:side-mafia-trans"
    20.               }
    21.               ],
    22.               "roles": [
    23.               {
    24.               "role": "inspector",
    25.               "translation": "Inspector",
    26.               "side": "village",
    27.               "help": "Type /Inspect [name] to find his/her identity!",
    28.               "actions": {
    29.               "night": "variable:inspector-night-action"
    30.               }
    31.               },
    32.               {
    33.               "role": "bodyguard",
    34.               "translation": "Bodyguard",
    35.               "side": "village",
    36.               "help": "Type /Protect [name] to protect someone!",
    37.               "actions": {
    38.               "night": {
    39.               "protect": {
    40.               "target": "AnyButSelf",
    41.               "common": "Role",
    42.               "priority": "variable:priority-bodyguard",
    43.               "broadcast": "role"
    44.               }
    45.               },
    46.               "startup": "role-reveal"
    47.               }
    48.               }
    49.               ]
    50.             }
    51.            
    tl;dr This change will enable metaprogramming in mafia themes, something themes such as Oracle will certainly enjoy. Not only that, but it also has the opportunity to make themes easier to edit, assuming you define all your priorities/role (or side) names at the top and link to them.

    "Sample" theme: http://pastebin.com/raw.php?i=buWYXTUq
    Final Features:
    Most of this are mandatory features, it's typically better to keep them at the end of the code
    Variables:
    Variables are optionals but are really useful to make the code shorter and easier to write it, because thanks to this all the repetitive part of the code can be wrote even only once:
    This'll be a game changer (for theme makers!) and will make a lot of themes "possible" (reasonable) now. After registering your variable (see below), it can be accessed in any property using a variable:name syntax (see below as well).

    Variables are registered like so:
    Code (text):
    1.  
    2.                 {
    3.                     "name": "default",
    4.                     "variables": {
    5.                         "name": "value",
    6.                         "simple inspect": {
    7.                             "inspect": {
    8.                                 "target": "AnyButSelf",
    9.                                 "common": "Self",
    10.                                 "priority": 30
    11.                             }
    12.                         }
    13.                     },
    14.                     "sides": {},
    15.                     "roles": {}
    16.                 }
    17.                
    This will make it available in any other property (except the "variables" property, of course), by using the "variable:" prefix. Anything after this will work, even spaces, double quotes (assuming you escape them), and whatever other evil characters you can think of.
    Code (text):
    1.  
    2.                 {
    3.                     "name": "default-variables",
    4.                     "summary": "Default mafia theme, the people of our fine village are being threatened by the mafia. .... ",
    5.                     "variables": {
    6.                         "side-mafia-trans": "Mafia",
    7.                         "priority-bodyguard": 5,
    8.                         "inspector-night-action": {
    9.                             "inspect": {
    10.                                 "target": "AnyButSelf",
    11.                                 "common": "Self",
    12.                                 "priority": 30
    13.                             }
    14.                         }
    15.                     },
    16.                     "sides": [
    17.                         {
    18.                             "side": "mafia",
    19.                             "translation": "variable:side-mafia-trans"
    20.                         }
    21.                     ],
    22.                     "roles": [
    23.                         {
    24.                             "role": "inspector",
    25.                             "translation": "Inspector",
    26.                             "side": "village",
    27.                             "help": "Type /Inspect [name] to find his/her identity!",
    28.                             "actions": {
    29.                                 "night": "variable:inspector-night-action"
    30.                             }
    31.                         },
    32.                         {
    33.                             "role": "bodyguard",
    34.                             "translation": "Bodyguard",
    35.                             "side": "village",
    36.                             "help": "Type /Protect [name] to protect someone!",
    37.                             "actions": {
    38.                                 "night": {
    39.                                     "protect": {
    40.                                         "target": "AnyButSelf",
    41.                                         "common": "Role",
    42.                                         "priority": "variable:priority-bodyguard",
    43.                                         "broadcast": "role"
    44.                                     }
    45.                                 },
    46.                                 "startup": "role-reveal"
    47.                             }
    48.                         }
    49.                     ]
    50.                 }
    51.                
    tl;dr This change will enable metaprogramming in mafia themes, something themes such as Oracle will certainly enjoy. Not only that, but it also has the opportunity to make themes easier to edit, assuming you define all your priorities/role (or side) names at the top and link to them.

    "Sample" theme: http://pastebin.com/raw.php?i=buWYXTUq


    Village Can't Lose Roles:
    This random part at the end of the code
    Code (text):
    1.   "villageCantLoseRoles": [
    2.                   "mayor",
    3.                   "vigilante",
    4.                   "samurai",
    5.                   "bomb"
    6.                   ]
    Basically makes it so if a role can do ANYTHING in a 2 village vs 2 mafia scenario to let the village win, then it goes on this list. If it is not on the list, the mafia auto wins even if the role is there when the number of mafia is = to the number of village. Note that if your village is called "herp", there's no "herpCantLoseRoles".
    For example, here is the pokemon theme's villagecantloseroles
    Code (text):
    1.   "villageCantLoseRoles": [
    2.                   "prokarp",
    3.                   "dual",
    4.                   "lie",
    5.                   "duck",
    6.                   "bomb",
    7.                   "gengar",
    8.                   "derp",
    9.                   "krook",
    10.                   "gyarados",
    11.                   "shuckle",
    12.                   "shucklep",
    13.                   "weavile"
    14.                   ],


    Packaged Spawns: Yes, it's finally here. It's now possible to define a random set of roles to spawn.
    The code below sets two packs: One to define the bad guys (3x WW / 2 IM + 1 DIM / 2 FCM + 1DFCM), and other to define the PRs that will spawn.

    Code (text):
    Code (text):
    1.  
    2.                 "spawnPacks": {
    3.                     "baddies": {
    4.                         "roles": [
    5.                             ["werewolf"],
    6.                             ["mafia2", "mafia2", "mafiaboss2"],
    7.                             ["mafia1", "mafia1", "mafiaboss1"]
    8.                         ],
    9.                         "chance": [
    10.                             0.2,
    11.                             0.3,
    12.                             0.5
    13.                         ]
    14.                     },
    15.                     "PRs": {
    16.                         "roles": [
    17.                             ["bodyguard", "hooker", "spy"],
    18.                             ["neighbour", "inspector"]
    19.                         ],
    20.                         "chance": [
    21.                             0.5,
    22.                             0.5
    23.                         ]
    24.                     }
    25.                 },
    26.                 "roles1": [
    27.                     "pack:PRs",
    28.                     "pack:baddies",
    29.                     "pack:PRs",
    30.                     "pack:baddies",
    31.                     "villager",
    32.                     "villager",
    33.                     "villager",
    34.                     "pack:PRs",
    35.                     "villager",
    36.                     "pack:baddies",
    37.                     "villager"
    38.                 ]
    39.                
    "spawnPacks" can hold any number of packs you need.
    "roles" is an Array that stores any number of arrays. Those inner arrays then define the order in which roles will spawn when that pack is used.
    "chance" is the chance of each of those lists will be used. For example, on the "baddies" pack, there's a 20% chance of using the list 1 (Werewolf), 30% chance of using the list 2 (Mafia 2 + Mafia Boss 2) and 50% chance of using the list 3 (Mafia 1 and Mafia Boss 1). Note that the number of items under "roles" and "chance" must be the same.
    To actually use the packages, you must use "pack:PackageName" on the spawn list. On the example above, the first role to spawn will be picked from the 'PRs' pack. Once a list is chosen for a pack, the same list will be used for any other role that spawns from the same pack.
    On the example above, the "PRs" pack appears on slots 1, 3 and 8 of "roles1". That means those slots will be either [1: Bodyguard / 3: Hooker / 8: Spy] or [1: Neighbour / 3: Inspector / 8: Neighbour].

    Note that the line "Players: 10-15 Players" that appears on /roles will not consider roles that spawn through Packaged Spawns (so you may need to write that line manually).


    role.players: This nifty new feature lets you set a custom value for the ±Players: part of /roles.
    Code (text):
    1.  
    2.                 {  "name": "default",
    3.                   "roles": [
    4.                   {
    5.                   "role": "villager",
    6.                   "translation": "Villager",
    7.                   "players": "Convert only"
    8.                   },
    9.                   {
    10.                   "role": "villager2",
    11.                   "translation": "Villager",
    12.                   "players": 4
    13.                   },
    14.                   {
    15.                   "role": "villager3",
    16.                   "translation": "Villager",
    17.                   "players": [5, 40]
    18.                   },
    19.                   {
    20.                   "role": "villager4",
    21.                   "translation": "Villager",
    22.                   "players": false
    23.                   }
    24.                   ]
    25.                 }
    26.                
    Per role:

    villager: ±Players: Convert only
    villager2: ±Players: 4 Players
    villager3: ±Players: 5-40 Players
    villager4: [nothing]
    ~~~~~~


    Random Role on Spawn List: Allows for some random factor in the Spawn Lists.
    In the following example, the 5th roles to appear in the game could be a Weedle (40% chance), Kakuna (20%) or Beedrill (40%).
    Code (text):
    1. "roles1": [
    2.                   "caterpie",
    3.                   "caterpie",
    4.                   "metapod",
    5.                   "caterpie",
    6.                   { "weedle": 0.4, "kakuna": 0.2, "beedrill": 0.4 },
    7.                   "metapod"
    8.                 ]




    Closing the Theme:​

    Now that that exhaustive work is out of the way, you'll want to finish your theme up.​
    How do you do this? The first thing is the Roles list. Now that you have all your roles, you want to set when the roles come up with how many players. This isn't too difficult, just keep balance and everything in mind.
    Code (text):
    1.   "roles1": [
    2.                   "bodyguard",
    3.                   "mafia",
    4.                   "inspector",
    5.                   "werewolf",
    6.                   "hooker",
    7.                   "villager",
    8.                   "truemiller",
    9.                   "villager",
    10.                   "mafia",
    11.                   "baka",
    12.                   "mayor"
    13.                   ],
    14.                   "roles2": [
    15.                   "bodyguard",
    16.                   "mafia1",
    17.                   "mafia1",
    18.                   "inspector",
    19.                   "hooker",
    20.                   "villager",
    21.                   "mafia2",
    22.                   "mafia2",
    23.                   "villager",
    24.                   "baka",
    25.                   "villager",
    26.                   "mayor",
    27.                   "villager",
    28.                   "spy",
    29.                   "villager",
    30.                   "miller1",
    31.                   "miller2",
    32.                   "mafiaboss1",
    33.                   "villager",
    34.                   "vigilante",
    35.                   "villager",
    36.                   "godfather",
    37.                   "mafiaboss2",
    38.                   "samurai",
    39.                   "villager",
    40.                   "villager",
    41.                   "werewolf",
    42.                   "mafia1",
    43.                   "mafia2",
    44.                   "bodyguard",
    45.                   "villager",
    46.                   "bomb",
    47.                   "mayor",
    48.                   "hooker",
    49.                   "mafia1",
    50.                   "mafia2",
    51.                   "spy",
    52.                   "villager",
    53.                   "werewolf",
    54.                   "vigilante",
    55.                   "villager",
    56.                   "villager"
    57.                   ],
    What is roles1 and roles2?
    Well i'll make a clear cut example that describes the two. Say we have a 10 player max theme (lol), with the following roles list.
    Code (text):
    1.  
    2.                 "roles1": [
    3.                   "bodyguard",
    4.                   "mafia",
    5.                   "inspector",
    6.                   "werewolf",
    7.                   "hooker",
    8.                   "villager",
    9.                   ],
    10.                   "roles2": [
    11.                   "bodyguard",
    12.                   "mafia",
    13.                   "inspector",
    14.                   "werewolf",
    15.                   "villager
    16.                   "villager",
    17.                   "mayor",
    18.                   "villager",
    19.                   "spy",
    20.                   "villager"
    21.                   ],
    22.                
    When you have 1-6 players, the roles list that will be used is Roles1. However, when you go to 7 roles (overflow for Roles1), it will start using the Roles2 list. You can add as many Roles' lists as you want, but don't go overboard. You can see it be used in mafia when you have a Werewolf in small games, but it isn't in medium sized games.
    The final part
    After you added the above, there's only thing left.
    Code (text):
    1. }
    Finish off the code with a closing bracket to close off the opening bracket at the beginning ;)
    [/spoiler]
    Of course not, now that you've made the theme you have to check in Jsonlint for errors and bugs!
    This is a guide by RiceKirby that tells you how to fix "invalid array length" errors, and trust me it's a big help.
    Once you're sure your theme is good to go, get it approved by a Mafia Admin (type /mafiaadmins or /mas in the #Mafia Channel on the server) and they'll add it.
    once they added it, you are free to update your theme whenever you want (make sure your name is in the authors list though) with the following command
    /update ThemeNameHere:url
    Need help? Come to #Project Mafia on the server and people there will be glad to help you. I hope this guide has helped you make your theme at least somewhat, and thanks for reading ^^

    Credits
    Hobbes2 - He wrote it
    RiceKirby - Adding so much stuff ~.~ and i quoted him a bunch
    Cake - Answering some of my questions and "Beta Reading" (more like reading right after i posted :3)
    Jacze - ^
    #Project Mafia in general - ^
    Hobbes out~

    Thread is currently under renovation, we pardon the mess!
     
    Last edited: Jul 8, 2015
    Yttrium likes this.
  2. Pangaea

    Pangaea resto en peaco

    Joined:
    Mar 20, 2014
    Messages:
    329
    Likes Received:
    46
    Great updated guide, Shazan! The other one was getting pretty outdated.

    I use a MacBook Pro to play Mafia. Notepad++ is a Windows application and I can't download it. Are there any scripting applications that could be used for the MacBook Pro? I really want to start actually coding themes. I know how, but I can't do it anywhere.
     
  3. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Mmmh, I never tried a Macintosh so I am not sure of it, but looking on internet I heard that textwrangler can be a good alternative.
     
  4. Whereabouts Unknown

    Whereabouts Unknown Absolutely Stunning

    Joined:
    Aug 17, 2010
    Messages:
    831
    Likes Received:
    469
    PO Trainer Name:
    Miki Sayaka
    Confirming Textwrangler as a Macbook alternative. I use it for all of my themes as well as other projects and it's fantastic. Easy to navigate, and it does the basic things like automatically indenting a new line, has bracket-match checking, easy Find/Replace and Copy/Paste, and ability to work on 5+ themes at the same time without lagging a great deal.

    You can probably find a sketch download somewhere but it's free on the Apple store.
    https://itunes.apple.com/us/app/id404010395?mt=12
     
  5. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    I have a question: I wanted to remove some way the vote phase from my 3 players size of Rock Paper Scissors theme, so i wanted to know if i give to all the roles that spawn on that game size "noVote": true, does the vote phase will end automatically or they will be stucked to wait the end of the vote timer without being able to vote?
     
  6. Pangaea

    Pangaea resto en peaco

    Joined:
    Mar 20, 2014
    Messages:
    329
    Likes Received:
    46
    I believe it's "noLynch": true, but don't take my word for it. Unless you want no lynch only for three player games?
     
  7. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Yeah, I wanted only for 3 players games because it's a 1vs1vs1 situation this is why I was thinking more of noVote then noLynch. Anyway if noVote cannot be a solution i guess that giving all of them a vote equal to 0 is a better choice.
     
  8. Pangaea

    Pangaea resto en peaco

    Joined:
    Mar 20, 2014
    Messages:
    329
    Likes Received:
    46
    Oh yeah then just giving the roles a vote of zero would probably be best.
     
  9. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    No, you cannot have condicional noLynch. It could be cool, it would make mechanics like "If Role X die, there will be no Lynch Phase for this turn".
    You should use noVote instead of vote: 0. This way, the voting phase won't be extended when people vote.
     
  10. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Oh ok, just to be sure if I understood well. Giving noVote to all the role will make the vote phase endure only the normal 30 seconds without the added seconds when someone snipe vote even if it has 0 vote power, or, does end directly the vote phase because no one can vote?
     
  11. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    It will last the 30 seconds.
    It will last the 30 seconds.

    EDIT:
    2.5 small features added:

    Info Name: Similar to "info", it changes how a role appears on /roles, but changing the role's name instead of the description. Note that this only applies to /roles, /sides and /priority, in-game nothing will change.
    Example: This code
    Code (text):
    1. "role": "inspector",
    2. "translation": "Inspector",
    3. "side": "village",
    4. "help": "Type /Inspect [name] to find out someone's side!",
    5. "info": "Can inspect one person's role during the night. Sided with Village.",
    6. "infoName": "Super Nerd"
    Will produce the following results:
    On /roles:
    (23:01:09) *** *********************************************************************** ***
    (23:01:09) ±Role: Super Nerd
    (23:01:09) ±Ability: Can inspect one person's role during the night. Sided with Village.
    (23:01:09) ±Players: 3-40 Players
    (23:01:09) *** *********************************************************************** ***

    On /sides:
    (23:01:28) ±Side: The Village (Village) consists of: Bodyguard, Bomb, Mayor, Miller, Pretty Lady, Samurai, Spy, Super Nerd, Vigilante, Villager.

    On /priority:
    [30] Super Nerd (Inspect)

    In-Game:
    (23:02:20) ±Current Roles: Bodyguard, Inspector, Mafia, Mafia, Pretty Lady, Villager, Villager, WereWolf.
    Basically, this is used only to customize /roles, /sides and /priority more easily.



    Delayed Conversion Messages: This is a global property that will make all conversions that occur during the night only throw the Help Text once, at the end of the night.
    Example: Normally, in Trainers, if you /runaway and another Trainer catches you, the message would be like this:
    (23:10:39) ***************************************************************************************
    (23:10:39) Times Up! :
    (23:10:39) ±Game: With their trainer defeated, a Piplup became wild again!
    (23:10:39) ±Game: You have been converted and changed roles!
    (23:10:39) ±Game: You are a Piplup!
    (23:10:39) ±Game: You can use /protect [name] during the night to protect someone. If a Trainer catches you, you will join their team (you get a slight buff if Blue catches you)!
    (23:10:39) ±Game: Red caught a Piplup!
    (23:10:39) ±Game: You have been converted and changed roles!
    (23:10:39) ±Game: You are a Red's Piplup!
    (23:10:39) ±Game: You joined Red's team! You can use /protect [name] during the night to protect someone. [Hint: Use /myrole to check your teammates, and /tt [message] to talk to your team.]
    (23:10:39) ±Game: Your team is A (Red's Piplup) and E (Red).
    (23:10:39) No one died! :
    (23:10:39) ***************************************************************************************
    But with this piece of code
    Code (text):
    1.  
    2. "votemsg": "~Player~ tackles ~Target~!",
    3. "delayedConversionMsg": true,
    4. "lynchmsg": "±Game: ~Player~ (~Role~) has been defeated!",
    5.  
    it will look like this:
    (23:07:14) ***************************************************************************************
    (23:07:14) Times Up! :
    (23:07:14) ±Game: With their trainer defeated, a Squirtle became wild again!
    (23:07:14) ±Game: You have been converted and changed roles!
    (23:07:14) ±Game: Blue caught a Squirtle!
    (23:07:14) ±Game: You have been converted and changed roles!
    (23:07:14) No one died! :
    (23:07:14) ±Game: You are a Blue's Squirtle!
    (23:07:14) ±Game: You joined Blue's team! You can use /inspect [name] during the night to find someone's ability! You also have a 50% chance of evading nightkills. [Hint: Use /myrole to check your teammates, and /tt [message] to talk to your team.]
    (23:07:14) ±Game: Your team is A (Blue's Squirtle) and H (Blue).
    (23:07:14) ***************************************************************************************
    Noticed the difference? The player ran away and was caught immediately in both cases, but on the second log, the "You are [Role]!" and the "You can use /blablabla" messages only appeared once.
    This is useful for conversion-heavy themes, like Trainers, School and RPS.



    Remove duplicates on /sides: Just a small feature that doesn't require any coding. Like /priority, /sides will now automatically remove duplicated names. So for example, /sides default would usually show
    but now it will be simply
    Basically, you don't need to use as much "hide": true as before to keep your /sides text clean.[/B]
     
    Last edited: May 18, 2014
  12. Marquis

    Marquis beez in the whazzit??

    Joined:
    Jan 26, 2013
    Messages:
    259
    Likes Received:
    46
    Requesting:

    [7:38:10 PM] 22 (ooh oooh): i need a way to make "your target was [protected/safeguarded]" messages customizable
    [7:38:17 PM] 22 (ooh oooh): for medical mafia
    [7:38:32 PM] Fuzzy Squrl: afaik, you can customize them
    [7:38:37 PM] 22 (ooh oooh): as well as with detox/dispel, with the option to remvoe them all
    [7:39:01 PM] 22 (ooh oooh): not able to atm
    [7:40:03 PM] 22 (ooh oooh): needed:
    protect/safeguard/detox/dispel with customizable messages and an option to hide them completely
    possibly make safeguard like shield, in that you can have it block only certain actions

    [7:40:21 PM] Fuzzy Squrl: oh
    [7:40:25 PM] Fuzzy Squrl: i do evasion messages with ocean
    [7:40:28 PM] Fuzzy Squrl: thats right .-.
    [7:40:32 PM] Fuzzy Squrl: k idk
    [7:40:38 PM] Fuzzy Squrl: go code it yourself 22

    the former of the bolded requests is more important and something I'd like to see implemented please please please for medical mafia's sake. :) thx in advance?
     
  13. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    Cool, I can just take the advanced thanks and not code anything =D

    Is there anything in your theme that prevents you from using "pierce": true for actions you don't want blocked by safeguard?
    Quite sure Detox and Dispel are already fully customizable. Protect and Safeguard shouldn't be hard.
     
  14. Marquis

    Marquis beez in the whazzit??

    Joined:
    Jan 26, 2013
    Messages:
    259
    Likes Received:
    46
    The latter request was more of a "in the future, just in case" thing, for example if I needed to make a poisoner that one safeguarder could stop and the other couldn't.

    Appending a request to make silent distraction possible. The point of this is that in Medical Mafia, if people knew they were distracted or that their target was protected/safeguarded, it would basically make the them itself pointless- people would easily be able to tell what their Doctor action did.

    My roles in it, for reference:

    Sane Doctor protects.
    Weak Doctor protects but dies if it targets a Mafia Goon (and isn't protected themself - maybe, maybe not).
    CPR Doctor protects, but if the player isn't actually targeted for a nightkill, the CPR Doctor kills them instead.
    Paranoid Doctor protects and distracts.
    Insane Doctor kills their target instead of protecting them.
    Naive Doctor does nothing at all.
    Nurse becomes the role of the first Doctor to die.
    2 Mafia Goons with teamTalk and a shared kill.
     
  15. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    One Day I will discover where you and The Silent One have hided your spy cameras, because is incredible how you add new features exactly when i need them without that i have to say anything to you guys XD.
     
  16. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    I don't know about about TSO, but my spycam is right below the F key on your keyboard :3

    Well, I actually wanted that feature myself. It should allow me to remove some dummy roles from themes like SSBB.
     
  17. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    I have 2 questions about Delayed Conversion, Just to understand what is the right way to use it.
    1)Does The Delayed Conversion influnce the message of curses? or only the one of convert?
    2)If the last night conversion is Silent, does the system show the message of the last not-Silent conversion or the system will consider the Silent one as the convesion to show and so not produce any message?
     
  18. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    Delayed Conversion Message only delays the "You are [Role]" and "Help: You can use /kill" (and other messages that appear on /myrole) messages. If you were supposed to receive them during the night, they will only show when the night is over. If the conversion was silent (player wouldn't see those messages), then they will still not see them.

    As a side note, Delayed Conversion Message is useful for themes like Trainers, where the first player caught wouldn't see the 2nd player caught at the same night. If you play Trainers now, you will notice you get the team-reveal properly even on the player that got caught right after you.
     
  19. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Ok, guys I need your assistence. You will say: "Again?!!! Can't you solve your problem alone like all the normal mortals?" And I will say: "Nope and I really love to annoy you guys".
    I have a problem with a complicate role on Trust: the Saboteur, Practically this role should be able to Corrupt(Makes players unable to become Leaders if Lynched) for one night a target, even leaders that normally are immune to anything, but instead this ability doesn't work as it should and the LEADER stays normal instead to be corrupted.
    As it is now the ability works this way: Saboteur uses /corrupt on the Leader which has already an InitialCondition.Curse to return into a normal villager at the end of the same night, the leader when targetted by saboteur converts into a Sabotaged Leader which has a new initialCondition.curse that at the end of that night will convert the leader into a Sabotaged Villager (this passage is necessary to produce the message that says that the target has returned into a normal villager at the end of the night as Leader), the now Sabotaged Villager now will start with an InitialCondition.Curse with curse count equal to 1 that will revert him back into a normal citized.
    This is how the Leader Convertion has been builded and how it should work. Any of you understand what is wrong with it?
     
  20. Roild

    Roild Member

    Joined:
    Jul 21, 2012
    Messages:
    861
    Likes Received:
    11
    PO Trainer Name:
    Roild
    You could add a convert that only works on leaders so that they become a different role and capable of being cursed anew without interruptions?
     
  21. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    I think to not understand what do you mean, you want me to add a third command to saboteur that corrupt leaders only ?
     
  22. Roild

    Roild Member

    Joined:
    Jul 21, 2012
    Messages:
    861
    Likes Received:
    11
    PO Trainer Name:
    Roild
    If his main command has two parts, then yes. Otherwise I mean to attach a second part to the current curse. "command": ["curse", "convert"]. Every role except leaders to ignore the convert part.
     
  23. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Oh no, I probably didn't explained it well how it works then, as it is now the command is already a "convert", practically Saboteur convert the leader in a version version of leader that has a different curse, which instead to convert him into a normal villager at the end of the night, it should convert him into a corrupted villager version, which has a second curse to make him return to be a normal villager after the end of the next night.
    I know, I should try to stop to make overcomplicate roles and learn to explain a little better what I am saying sorry.:oops:
     
  24. Roild

    Roild Member

    Joined:
    Jul 21, 2012
    Messages:
    861
    Likes Received:
    11
    PO Trainer Name:
    Roild
    Missing onDeadRoles. Trying to make it so role dies if all other roles die. Not sure if only onDeath would work.
     
  25. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Ok I inserted the onDeadRoles on the Opening Post if you don't find it here a copy of it:

    Convert When Dead Roles: It converts a role to another if no player with specific roles is in the game anymore.
    The code below, if added to Ganondorf, will make it convert into Ganon when all Koumes and Kotakes are dead, or into Phantom Ganon when all Citizens are dead.
    Code (text):
    1. "actions": {
    2.     "onDeadRoles": {
    3.         "convertTo": {
    4.             "ganon": ["koume", "kotake"],
    5.             "phantom_ganon": ["citizen"]
    6.         },
    7.         "convertmsg": "With Koume and Kotake's death, ~Self~, the ~Old~, transformed into ~New~!"
    8.     }
    9. }
    Note 1: Convert When Dead Roles is quite limited at the moment, so theme makers shouldn't try stuff too complex with that.
    Note 2: Although it's called onDeadRoles, it will also activate when roles are converted.
    Note 3: onDeadRoles.convertTo will only trigger at specific moments: When someone is daykilled, lynched or slain; or at the end of the night phase. This could change in the future, but for now it won't trigger after every death in the night, only after all actions are executed.
    Note 4: Convert When Dead Roles won't chain instantly, so if Role A changes into Role B because of onDeadRoles, it can't change again into Role C at the same moment if Role B has onDeadRoles too. However, it could convert on the next phase even if no deaths occur.
     
  26. Natsu Dragniil

    Natsu Dragniil Member

    Joined:
    Apr 27, 2014
    Messages:
    67
    Likes Received:
    2
    Is there any way to get a protect to not work on a particular person?
     
  27. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Do you want that person to be immune by the protection of any role or only by one specific role?
    If you want it to be immune to the protection of any role add you will have to add after "actions": { this:
    Code (text):
    1. "protect": { "msg":"You tried to protect (~Self~), but he cannot be protected!", "mode": "ignore" },
    the "mode": "ignore" part will make the role with this code immune by any attempt to protect him, meanwhile "msg": " ", is the message that the one that tried to protect the player will receive when it fail the message that I written is only as exemple you can write whatever you want inside it , if you don't want that the targeter will know that it failed to protect the player instead of "msg": " ", add "silent": true, like this:
    Code (text):
    1. "protect": { "silent": true, "mode": "ignore" },
    If instead you want the role to be immune only to the Protect of a precise Role you have to add the role name inside the ignore mode like this :
    Code (text):
    1. "protect": { "msg":"You tried to protect (~Self~), but he is immune to your protection!",  "mode": {  "ignore": [ "PROTECTOR Name" ] } },
    Change the "PROTECTOR Name" part with any role's name that you want your player to be immune to like "bg" or "protector" or whatever is the name of your bodyguard role.
    For extra info take a look there:
     
    Last edited: Jun 14, 2014
  28. Natsu Dragniil

    Natsu Dragniil Member

    Joined:
    Apr 27, 2014
    Messages:
    67
    Likes Received:
    2
    Thx :). But now I've got a different problem: how do I reveal myself to someone else like the Neighbour in Rulers?

    How do I make it so anyone who uses an action on me gets either converted or gets they're votes taken away?
     
    Last edited by a moderator: Jun 16, 2014
  29. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    For neighbour, use Dummy commands with dummytargetmsg. Since Rulers' code is giant, you can instead check Friendly Neighbour in Cosa or Hermes in Myth.

    For the conversion, the only way to do that is to attack a "copy" action to every command that can be used on that player, and then have that copy deal with converting the action user.

    PS: You should learn how to use the Edit button to avoid double posts :x
     
  30. Natsu Dragniil

    Natsu Dragniil Member

    Joined:
    Apr 27, 2014
    Messages:
    67
    Likes Received:
    2
    I understand the first one, thanks for that, but not the second one.
     
  31. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    What IceKirby is saying mean is that it doesn't exist some sort of bomb ability that instead to kill or poison whoever target them will convert the targeter.
    So the only way to do so is the long way giving to all the abilities that would convert their user when they target that precise player: a "copy" ability that will change the targeter that has "copy" into the role that you want it to be when they target that role.
    For an exemple of this look how it's coded the "Normal" role on the types theme http://pastebin.com/nXtYqmVK .
     
    Last edited: Jun 14, 2014
  32. Natsu Dragniil

    Natsu Dragniil Member

    Joined:
    Apr 27, 2014
    Messages:
    67
    Likes Received:
    2
    So will I have to make a new role for all the people?

    I'll explain it a bit. I'm making a mario theme, and Mario can convert into Mega Mario, who flattens anyone who tries to use an action on him, taking away their votes and actions for that turn. How would I do that?
     
    Last edited by a moderator: Jun 16, 2014
  33. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    Dude, there's an Edit link right after each of your posts, use it to edit it instead of making double posts.

    To make that role, you won't need to change anything into Mega Mario, but on the other roles. Let's say you have an evil Distractor, and that player targets Mario. You will need to have this:
    Code (text):
    1. "distract": {
    2.   "command": ["distract", "copy"],
    3.   "target": "AnyButTeam",
    4.   "common": "Self",
    5.   "priority": 1,
    6.   "copyAs": {
    7.   "flattened_evil_pl": ["mega_mario"]
    8.   }
    9. }
    This code will make your Evil PL distract everyone normally, but if they distract Mario, they will also use a copy action, which will turn themselves into "flattened evil PL".
     
  34. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Yes you will have to code a squashed version for every role.
    Ok then I will borrow your Goomba for this exemple,
    this is as Goomba is right now:
    Code (text):
    1.  
    2.         {
    3.             "role": "Mushroom",
    4.             "translation": "Goomba",
    5.             "side": "Bowser",
    6.             "help": "You are a minion of Bowser, the Goomba. You are out to win by poisoning your opponents with /poison. If you win, Bowser has promised a promotion...",
    7.             "info": "Goomba can poison. Sided with the The Evil Kingdom",
    8.             "actions": {
    9.                 "night": {
    10.                     "poison": {
    11.                         "target": "AnyButTeam",
    12.                         "common": "Role",
    13.                         "priority": 40,
    14. "common": "Team"
    15.                     }
    16.                 }
    17.             }
    18.         },
    and this is how it should be with the copy to be squashed by MEGA Mario, the part with <-------- are explanations not codes so do not add them when you will code the roles:
    {
    "role": "Mushroom",
    "translation": "Goomba",
    "side": "Bowser",
    "help": "You are a minion of Bowser, the Goomba. You are out to win by poisoning your opponents with /poison. If you win, Bowser has promised a promotion...",
    "info": "Goomba can poison. Sided with the The Evil Kingdom",
    "actions": {
    "night": {
    "poison": {
    "command": ["copy", "poison"], <---------- this will make the command /poison be able to first copy and then poison their target!!
    "copyAs": { "flattened mushroom": ["mega red cap" ] }, <-------- This makes the Goomba transform into Flattened Goomba aka "flattened mushroom" when they try to /poison Mega Mario aka "mega red cap"!!
    "copyfailmsg": "", <--------- This will be the message that the Goomba will receive if it is unable to use copy on your target, so leave it textless like this so that it will not annoy the players,!!
    "usermsg": "A Mega Mario squashed you tonight", <----- The message that the flattened Goomba will receive!!
    "copymsg": "A ~Old~ tried to use their actions on Mega Mario and got stomped instead!", <-------- The message that everyone will receive when Goomba will be converted into the flattened version!!
    "target": "AnyButTeam",
    "common": "Role",
    "priority": 40,
    "common": "Team"
    }
    }
    }
    },
    and this instead is how it should be coded the flattened version of Goomba:
    {
    "role": "flattened mushroom",
    "translation": "Flattened Goomba",
    "side": "Bowser",
    "help": "Oh noes now that you are Flattened your vote has been reduced to 0 for this turn and the next night you will be unable to use your abilities!",
    "hide": true,
    "info": "Goomba can poison. Sided with the The Evil Kingdom",
    "actions": {
    "initialCondition": { <------- All this initialCondition: curse thing is necessary to make the flattened goomba return normal after the next night!!
    "curse": {
    "cursedRole": "Mushroom", <------ "cursedRole" is what decides what the Goomba will become at the end of the "curseCount" !!
    "curseCount": 2, <----- "curseCount" is how much night it needs to pass before that the role will return normal, in this situation 2 is the number you need!!
    "silentCurse": true,
    "curseConvertMessage": "~Old~ has been de-flattened and now they returned into their normal form!" <---- This message will say to everyone that the goomba is no more flattened!!
    } },
    "vote": 0
    }
    }
    This is the exemple with Goomba, more or less this is what you will need to do with every role that can be flattened by Mega Mario.
     
  35. Natsu Dragniil

    Natsu Dragniil Member

    Joined:
    Apr 27, 2014
    Messages:
    67
    Likes Received:
    2
    I've got quite a bit of work then D: thanks though
     
  36. Shazan

    Shazan Obey to Kyubey

    Joined:
    Jan 21, 2013
    Messages:
    591
    Likes Received:
    14
    PO Trainer Name:
    Obey to Kyubey
    Oh another thing @Natsu Dragniil , i don't know on what actions and roles you want to use this flattening ability of Mega Mario, but you should understand that copy doesn't work as day action, which means that if you want someone to become flattened when exposing or daykilling Mega Mario you should know that is practycally impossible. What I mean is that you can make flattened only roles that target Mega Mario with night actions.
     
  37. Natsu Dragniil

    Natsu Dragniil Member

    Joined:
    Apr 27, 2014
    Messages:
    67
    Likes Received:
    2
    Yes I know that and thats fine, thanks anyway

    I'm almost done. I've got one more question; If I do

    "taunt": {
    "command": ["distract", "inspect"]

    (an example, not one I'm actually using) does that do both, or one chosen randomly? And how would you do the other?
     
    Last edited by a moderator: Jun 16, 2014
  38. Anonymouse

    Anonymouse Banned

    Joined:
    Jun 11, 2014
    Messages:
    11
    Likes Received:
    0
    PO Trainer Name:
    Unknown
    Maybe should look at OP in "How to Make Mafia Themes" instead of asking questions that can be answered by reading it?
    Anyways, the taunt command would perform both a distract an inspect. If you want an example of how to perform multiple actions in one command, refer to Emma Storm in Marvel
    "seduce": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 3,
    "Sight": "Team",
    "command": [
    "inspect",
    "distract"
    ]
    Seduce would be a distract/Inspect in the same command.
    If you want random chance in one command, see Taskmaster of Marvel
    },
    "arrow": {
    "common": "Self",
    "broadcast": "team",
    "command": {
    "inspect": 0.2,
    "protect": 0.2,
    "distract": 0.2,
    "safeguard": 0.2,
    "poison": 0.2
    },
    Equal chance of doing inspect, protect, distract, safeguard,poison. Command inputted would be /arrow.
     
  39. Whereabouts Unknown

    Whereabouts Unknown Absolutely Stunning

    Joined:
    Aug 17, 2010
    Messages:
    831
    Likes Received:
    469
    PO Trainer Name:
    Miki Sayaka
    I'm trying to figure out how to make Massconverts send individual messages for each role converted. That is, a role uses a command, and a message is sent to the public for each role affected by the convert.

    It would be helpful to show the number of Eevee in the game when the command is used. When /Vaporeon is used by shiny Eevee, it should send the message: "That's the sound of a Vaporeon" as many times as there are Vaporeons. Currently it only seems to send 1 message regardless.

    The command looks like this:
    "vaporeon": {
    "command": "massconvert",
    "convertRoles": {
    "bodyguard": "bodyguard"
    },
    "target": "OnlySelf",
    "common": "Self",
    "cancel": [
    "eevee",
    "jolteon",
    "flareon",
    "espeon",
    "umbreon",
    "leafeon",
    "glaceon",
    "sylveon"
    ],
    "hide": true,
    "massconvertmsg": "Waah! That's the call of a Vaporeon!",
    "silentMassConvert": true,
    "priority": 40
    },

    Can anyone help me with this one?
     
  40. IceKirby

    IceKirby A.K.A. RiceKirby

    Joined:
    Apr 26, 2011
    Messages:
    2,176
    Likes Received:
    634
    PO Trainer Name:
    RiceKirby
    You want it to show a message once for each role converted or for each player? As I told you in the server, massconvertmsg is already sent once for each role converted. There's currently no message that is sent for each converted player.

    The only way I can think of now to code that would be to add a massconvert to the Eevee's conversion commands that would convert Shiny Eevee into a role with the right number for each form, but that would mean you may need more than 100 variations of that role.