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 (v2.0)

Discussion in 'Mafia' started by Hobbes2, Oct 30, 2011.

Thread Status:
Not open for further replies.
Moderators: Pamitha, Water
  1. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    Since my old guide sucks i'm rewriting it to make it more professional, better, and include all the new stuff.

    Anyway, welcome to my 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. It's a great program and really makes making themes 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.

    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.

    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 putting in the 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. This goes below the author and theme name.

    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.[/HIDE] 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.     ],
    [/HIDE]

    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 (a term i made up) is the name of the side (or role) in the coding. It will not be represented when playing, but is an easier way to represent the side or role in the theme's code. (I'm explaining bad lol, but you'll understand it if you don't)

    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 called village when playing, its called 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.                     }
    9.                 },
    10.                 "startup": "role-reveal"
    11.             }
    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)

    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.

    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"
    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.

    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" (not really) where basically i have everything below, and you can ctrl+f to the part you want. Best way i could think of.

    • 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
    • Winifdeadroles
    • Reveal

    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". [/HIDE]

    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.  
    11.                 "standby": {
    12.                     "kill": {
    13.                         "target": "AnyButSelf",
    14.                         "msg": "You can kill now using /kill [name] :",
    15.                         "killmsg": "Sephiroth darts through the crowd and swiftly slices through ~Target~. He then vanishes without a trace."
    16.                     }
    17.                 }
    18.             }
    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.
    [/HIDE]

    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.
    [/HIDE]

    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.                     }
    7.                 }
    8.             }
    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, and "revealPlayer" is the chance (out of 1) that you will reveal the player doing the command. 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.
    [/HIDE]

    Ignore Hax
    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. [/HIDE]

    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[/HIDE]

    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. }
    [/HIDE]

    Reveal Role
    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.[/HIDE]

    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. }
    [/HIDE]

    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. }
    [/HIDE]

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

    Specific Changetarget / Ignore Distractor
    Ricekirby's post about this explains it better than i can
    [/HIDE]

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

    Daykill Bomb
    Code (text):
    1. "actions": {
    2. "daykill": "bomb",
    3. "daykillrevengemsg": "~Target~ tried to kill ~Self~, but both exploded and died!"
    4. }
    5.  
    6. ~Target~ is replaced by the samurai, ~Self is replaced by the bomb
    [/HIDE]

    Daykill reveal chance
    There is a chance the daykill will be revealed
    Code (text):
    1. "actions": {
    2. "standby": {
    3. "kill": {
    4. "target": "AnyButSelf",
    5. "msg": "You can kill now by typing /kill [name] (You'll be revealed)!",
    6. "killmsg": "Sephiroth sliced ~Target~ in 3 parts, then sent each of them to a different planet!",
    7. "revealChance": 0.33, <---------
    8. "revealmsg": "In the midst of the battle, ~Self~ was revealed to be ~Role~!"
    9. }
    10. }
    11. }
    [/HIDE]

    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. }
    [/HIDE]

    Side with multiple roles / Win as long as you survive
    Lamperi explains it perfectly

    [quote="Lamperi, post: 158873"]
    [B]Roles with multiple sides[/B]. 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]
    {
    "role": "consp",
    "translation": "Conspirator",
    "side": "mafia",
    "winningSides": ["village"],
    ...
    }
    [/code]
    Win everytime if stays alive: (no array here)
    [code]
    {
    "role": "god",
    "translation": "Arceus",
    "side": "god",
    "winningSides": "*",
    ...
    }
    [/code][/QUOTE][/HIDE]
    Command Recharge
    Simply add "recharge": # in the same place where you would add "limit", etc[/HIDE]

    [B]Insane Inspector (!)[/B]
    [SPOILER]One of my favorites, it allows you to have an inspector that has a chance of inspecting incorrectly (need to go back to college)

    [CODE]"actions": {
    "night": {
    "inspect": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 30,
    "Sight": {
    "true": 0.8,
    "werewolf": 0.1,
    "bodyguard": 0.1
    }
    }
    }
    }[/CODE]

    It's in the "sight" { part. True means correct role.[/HIDE]

    [B]Convert according to targets role[/B]
    [SPOILER][quote="IceKirby, post: 167910"]
    [B]Convert according to target's role:[/B] 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]"actions": {
    "night": {
    "convert": {
    "target": "Any",
    "common": "Self",
    "priority": 30,
    "newRole": {
    "culthooker": ["hooker"],
    "cultbg": ["bodyguard"],
    "cult": ["villager", "miller", "truemiller", "miller1","miller2"]
    }
    }
    }
    }[/CODE]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.
    [/QUOTE][/HIDE]

    [B]Ignore specific kills[/B]
    [SPOILER][quote="IceKirby, post: 167910"]
    [B]Ignore specific kills:[/B] 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]"actions": {
    "kill": {
    "mode": {
    "ignore": [ "mafia1", "mafia2", "mafiaboss1", "mafiaboss2" ]
    }
    }
    }[/CODE]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]
    [/HIDE]

    [B]Revenge Reveal[/B]
    [SPOILER] If this role is daykilled, it'll reveal the its killer (the role with this action will die anyway). Of course, only make sense if there are concealed daykillers.

    [CODE]"actions": {
    "daykill": "revealkiller",
    "daykillrevengemsg": "±Game: Before dying, ~Self~ revealed that ~Target~ is the ~Role~!"
    }[/CODE][/HIDE]

    [B]Expose[/B]
    [SPOILER][quote="IceKirby, post: 169632"]Some new stuff:
    [B]Expose[/B]: 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]"actions": {
    "standby": {
    "expose": {
    "target": "AnyButSelf",
    "msg": "You can type /expose [name] to reveal someone's role!",
    "exposemsg": "~Self~, the Inspector, points to ~Target~ and shouts: That person is the ~Role~!"
    }
    }
    }[/CODE][/QUOTE]
    [/HIDE]

    [B]Reveal[/B]
    [SPOILER]This is when you purposefully give away your role during the daytime.
    [CODE] "standby": {
    "taunt": {
    "command": "reveal",
    "revealmsg": "~Self~ (~Role~) runs around everyone screaming 'YOU'RE TOO SLOW!'."
    }
    },[/CODE]
    [/HIDE]

    [B]WinifDeadRoles[/B]
    [SPOILER]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]"winIfDeadRoles": [
    "prokarp",
    "dual",
    "duck",
    "bidoof",
    "glitch",
    "uberglitch",
    "ice",
    "rock",
    "steel",
    "gigas",
    "latias",
    "latios",
    "arceus",
    "gengar",
    "bibarel",
    "derp",
    "deoxys",
    "deoxysa",
    "deoxysd",
    "deoxyss",
    "bell",
    "moon",
    "dialga",
    "palkia",
    "giratina",
    "giratinao",
    "jirachi",
    "krook",
    "gyarados",
    "shuckle",
    "shucklep",
    "raikou",
    "entei",
    "suicune"
    ],[/CODE]
    NOTE THIS GOES OUTSIDE OF ACTIONS
    [/HIDE]


    Vote Shield: A value that will be added to the votes a person gets during the voting phase.

    [hide][code]"actions": {
    "voteshield": -5
    }[/code][/hide]


    [B]Poison Override[/B]: 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.

    [B]Stalk Action[/B]: 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.
    [SPOILER]"actions": {
    "night": {
    "stalk": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 10
    }
    }
    }[/HIDE]
    Note: This actions won't show who your target visited if he/she dies for a faster priority. That means you can only find if someone distracted Werewolf if the Stalker's priority is higher than PL's. Because of that, I recommand having Stalk's priority right before or right after Distract.

    [B]Daykill Bomb[/B]: If this role is daykilled, it'll kill the daykiller and die with him.
    [SPOILER]"actions": {
    "daykill": "bomb",
    "daykillrevengemsg": "~Target~ tried to kill ~Self~, but both exploded and died!"
    }[/HIDE]

    [B]Daykill Reveal Chance[/B]: Only meaningful for Daykillers that don't reveal. Allows to set a chance of making said daykiller reveal when killing.
    [SPOILER]"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~!"
    }
    }
    }[/HIDE]
    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 [U]in addition[/U] to the killmsg. It won't replace the message, so write something that will fit well :3

    [B]Poison Attacker[/B]: If someone kills this role, he/she will get poisoned.
    [SPOILER]"actions": {
    "kill": {
    "mode": "poisonattacker",
    "count": 2,
    "poisonDeadMessage": "You died from a horrible poison!"
    }
    }[/HIDE]
    Note: It's also possible to use "poisonattackerevenifprotected". What it does is obvious.




    [B]Roles with multiple sides[/B]. 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).
    [hide]
    Set additional sides:
    [code]
    {
    "role": "consp",
    "translation": "Conspirator",
    "side": "mafia",
    "winningSides": ["village"],
    ...
    }
    [/code]
    Win everytime if stays alive: (no array here)
    [code]
    {
    "role": "god",
    "translation": "Arceus",
    "side": "god",
    "winningSides": "*",
    ...
    }
    [/code]
    [/hide]

    [B]Command recharge[/B] allows you do use some action only every nth night (or less often). (no standby support as of now)
    [hide]
    Kills every second night
    [code]
    {
    "role": "lamp",
    "translation": "Lamperi",
    "side": "auth",
    ...,
    "actions": {
    "night": {"kill": {..., "recharge": 2} }
    }
    }
    [/code]
    [/hide]


    [B]Only Self Target[/B]: 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]
    "actions": {
    "night": {
    "protect": {
    "target": "OnlySelf",
    "common": "Self",
    "priority": 5
    }
    }
    }[/CODE][B]Multiple roles for Miller[/B]: 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]"actions": {
    "inspect": {
    "revealAs": ["role1", "role2", "role3"]
    }
    }[/CODE]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]"actions": {
    "inspect": {
    "revealAs": "*"
    }
    }[/CODE][B]Insane Inspector[/B]: An inspector that has a chance of inspecting someone as the wrong role. Use the "true" parameter to set the chance of correctly finding someone's role.
    [CODE]"actions": {
    "night": {
    "inspect": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 30,
    "Sight": {
    "true": 0.8,
    "werewolf": 0.1,
    "bodyguard": 0.1
    }
    }
    }
    }[/CODE]Note: Currently, an insane inspector will not be affected by millers. This will be fixed in the future.

    [COLOR=Red][B][SIZE=2]And now for the most interesting feature with the potential to change mafia as much as Daykill did:[/SIZE][/B][/COLOR]
    [B]Convert[/B]: A night action that allows a player to change its target's role to another.
    [CODE]"actions": {
    "night": {
    "convert": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 30,
    "newRole": "godfather",
    "canConvert": ["villager", "miller", "truemiller", "miller1", "miller2"],
    "silent": true
    }
    }
    }[/CODE]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.
    [U]Note[/U]: Convert can be blocked by Safeguard.

    Also [B]convertmsg[/B] 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 [B]"canConvert": "*"[/B] .This will allow any role to be converted.
    And because of this, [B]Evade Convert[/B] was also added:
    [CODE]"actions": {
    "convert": {
    "mode": "ignore"
    }
    }[/CODE]

    [B]Initial Recharge[/B]: 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]"actions": {
    "night": {
    "kill": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 5,
    "recharge": 2,
    "initialrecharge": 3
    }
    }
    }[/CODE]
    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)

    [B]Win if Dead Roles:[/B] You can set a list of roles that, if dead, will give the victory to the team this role belongs to.
    [CODE]{
    "role":"kronos",
    "translation":"Kronos",
    "side":"kronos",
    "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!",
    "winIfDeadRoles": ["mafia1", "mafiaboss1", "mafia2", "mafiaboss2", "werewolf", "samurai", "vigilante" ],
    "actions":{
    "vote":100
    }
    }[/CODE]Note: Roles in the VillageCantLoseRoles list need to be dead too (After all, it's called Village Can't Lose Roles).
    Note 2: 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.
    Note 3: This actually have been in Mafia Channel for a while, but I totally forgot about it ._.

    [B]Revenge Reveal:[/B] If this role is daykilled, it'll reveal the its killer (the role with this action will die anyway). Of course, only make sense if there are concealed daykillers.
    [CODE]"actions": {
    "daykill": "revealkiller",
    "daykillrevengemsg": "±Game: Before dying, ~Self~ revealed that ~Target~ is the ~Role~!"
    }[/CODE][B]Initial Poison:[/B] A role with this action will start the game poisoned.
    [CODE]"actions": {
    "initialCondition": {
    "poison": {
    "count": 5,
    "poisonDeadMessage": "Time is over!"
    }
    }
    }[/CODE]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.

    [B]Convert according to target's role:[/B] 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]"actions": {
    "night": {
    "convert": {
    "target": "Any",
    "common": "Self",
    "priority": 30,
    "newRole": {
    "culthooker": ["hooker"],
    "cultbg": ["bodyguard"],
    "cult": ["villager", "miller", "truemiller", "miller1","miller2"]
    }
    }
    }
    }[/CODE]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.

    [B]Ignore specific kills:[/B] 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]"actions": {
    "kill": {
    "mode": {
    "ignore": [ "mafia1", "mafia2", "mafiaboss1", "mafiaboss2" ]
    }
    }
    }[/CODE]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.

    [B]Custom test for /roles:[/B] With this, you can set the ±Ability line in the /roles text for a role.
    [CODE]{
    "role": "rotom",
    "translation": "Rotom",
    "side": "rotom",
    "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!",
    "info": "Can transform itself into Heat, Wash, Frost, Fan or Mow Rotom. Can kill 10 times after Night 7. Sided with Rotom.",
    "actions": { }
    }[/CODE]This code will change this (the automatically generated text)
    [QUOTE][COLOR=#ff00ff](20:57:30) *** *********************************************************************** ***[/COLOR]
    [COLOR=#3daa68](20:57:30) [/COLOR][COLOR=#3daa68]±Role[/COLOR][COLOR=#3daa68]:[/COLOR] Rotom
    [COLOR=#3daa68](20:57:30) [/COLOR][COLOR=#3daa68]±Ability[/COLOR][COLOR=#3daa68]:[/COLOR] Can heat one person during the night. Can wash one person during the night. Can frost one person during the night. Can fan one person during the night. Can mow one person during the night. Can shock 10 persons during the night. Sided with Rotom.
    [COLOR=#3daa68](20:57:30) [/COLOR][COLOR=#3daa68]±Game[/COLOR][COLOR=#3daa68]:[/COLOR] 1-65 Players
    [COLOR=#ff00ff](20:57:30) *** *********************************************************************** ***[/COLOR][/QUOTE]to this:[QUOTE][COLOR=#ff00ff](20:56:55) *** *********************************************************************** ***[/COLOR]
    [COLOR=#3daa68](20:56:55) [/COLOR][COLOR=#3daa68]±Role[/COLOR][COLOR=#3daa68]:[/COLOR] Rotom
    [COLOR=#3daa68](20:56:55) [/COLOR][COLOR=#3daa68]±Ability[/COLOR][COLOR=#3daa68]:[/COLOR] Can transform itself into Heat, Wash, Frost, Fan or Mow Rotom. Can kill 10 times after Night 7. Sided with Rotom.
    [COLOR=#3daa68](20:56:55) [/COLOR][COLOR=#3daa68]±Game[/COLOR][COLOR=#3daa68]:[/COLOR] 1-65 Players
    [COLOR=#ff00ff](20:56:55) *** *********************************************************************** ***[/COLOR][/QUOTE]

    [B]Fail Chance:[/B] For any night action, allow to set a chance of that action failing.
    [CODE]"actions": {
    "night": {
    "kill": {
    "target": "AnyButRole",
    "common": "Role",
    "priority": 12,
    "failChance": 0.5
    }
    }
    }[/CODE]
    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.

    [B]Expose[/B]: 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]"actions": {
    "standby": {
    "expose": {
    "target": "AnyButSelf",
    "msg": "You can type /expose [name] to reveal someone's role!",
    "exposemsg": "~Self~, the Inspector, points to ~Target~ and shouts: That person is the ~Role~!"
    }
    }
    }[/CODE]

    [B]Reveal Chance[/B] now works for /expose too. Use in the same way as revealChance for daykills.

    [B]Team Reveal (with roles):[/B] Same as startup: team-reveal, but it shows the players' roles too.
    [CODE]"actions": {
    "startup": "team-reveal-with-roles"
    }[/CODE]
    This will show a message like this when the game starts:
    [QUOTE]±Game: Your team is Crystal Soma (Timer Ball), RiceKirby (Ultra Ball), Peke. (Sport Ball), YoungGregg (Nest Ball) and Szczesny (Level Ball).[/QUOTE] instead of [QUOTE]±Game: Your team is Crystal Soma, RiceKirby, Peke., YoungGregg, Szczesny.[/QUOTE]

    [B]Fail Chance[/B]
    [SPOILER]Use this to give a command a certain chance of failing. Use this sparingly, because nothing's worse than a command failing at an opportune time.
    {
    "role": "puppy",
    "translation": "Puppy",
    "side": "dogs",
    "help": "You are a puppy! D'awww, you're so adorable that you can /distract people from doing stuff at night! But since you're so small, the bad guys might not see you (15% chance). ",
    "actions": {
    "night": {
    "distract": {
    "target": "AnyButSelf",
    "common": "Self",
    [B]"failChance": 0.15[/B],
    "priority": 1
    }
    }
    }
    }[/HIDE]

    [B]Different Name On List[/B]
    [SPOILER]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": {
    [B]"onlist": "snake"[/B],
    "inspect": {
    "revealAs":
    "snake"
    }
    }
    }
    [/HIDE]

    [B]Reveal As[/B]
    [SPOILER]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",
    [B]"inspect": {
    "revealAs":
    "snake"
    }[/B]
    }
    }
    [/HIDE]

    [B]Reveal As Random Role[/B]
    [SPOILER]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": {
    [B]"inspect": {
    "revealAs":
    "*"
    }[/B]
    }
    }
    [/HIDE]


    [B]Broadcast Message[/B]: You can now customize the message broadcast to teammates for actions with "broadcast":"team" or "broadcast":"role".
    [code]"actions": {
    "night": {
    "kill": {
    "target": "AnyButTeam",
    "common": "Team",
    "priority": 14,
    "broadcast": "team",
    "broadcastmsg": "±Game: ~Player~, the Ax Knight, wants to ~Action~ ~Target~!"
    }
    }
    }
    [/code]
    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).


    [B]Lynch Message:[/B] You can now customize the message for when someone is voted out. The following code should go together with "killmsg" and "killusermsg".
    [Code]"lynchmsg": "±Game: ~Player~, the ~Role~, won't be able to help the ~Side~ because they got lynched with ~Count~ votes!"[/Code]
    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.

    [B]Draw Message:[/B] 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]"drawmsg": "Everybody died! I blame the economic crisis for that :("[/Code]

    [B]Random Role for Convert:[/B] You can now have a random factor in /converts. The following code:
    [Code]"convert": {
    "target": "AnyButTeam",
    "common": "Self",
    "priority": 20,
    "newRole": {
    "villager": [ "mayor", "bodyguard", "vigilante"],
    "mayor": [ "vigilante", "inspector"]
    }
    }[/Code]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.

    [B]Messages for Convert:[/B] 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]"convert": {
    "target": "AnyButTeam",
    "common": "Self",
    "priority": 20,
    "newRole": "recruit",
    "usermsg": "You converted ~Target~! ~Old~ is now a ~New~!"
    }[/Code]This will replace the "Your target (Name) was converted and now is a Role!" message.

    [B]Recharge for Standby Actions:[/B] Recharge finally works for Standby Actions! And so do Initial Recharge!
    [Code]"standby": {
    "kill": {
    "target": "AnyButSelf",
    "msg": "You can kill by typing /kill [name]!:",
    "killmsg": "~Self~ pulls out a stair and crashes it at ~Target~'s head!"
    "recharge": 2,
    "initialrecharge": 2
    }
    }[/Code]
    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 [U]can't[/U] kill once D1, then once D2, then once D3: recharge will be set whenever that action is used at least once.

    [B]Win If Dead Roles update[/B]: winIfDeadRoles will now make Conspirators win too. And it bypasses villageCantLoseRoles too (No need for Cook Kirby to die before Dark Matter can win).

    [B]Defensive Modes:[/B] 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):
    [Hide][U]ignore[/U]: 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]"inspect": {
    "mode": "ignore",
    "msg": "Your target (~Self~) is too smart to be inspected!",
    "silent": true
    }[/Code]

    [U]ChangeTarget[/U]: 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]"protect": {
    "mode": "ChangeTarget",
    "msg": "The ~User~ tried to help you, but you killed them! It was an accident!",
    "targetmsg": "You tried to protect Hulk, but he confused you with a salesman and killed you!"
    }[/Code]

    [U]Kill Attacker[/U]: 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]"stalk": {
    "mode": "killattacker",
    "msg": "Your target seems to dislike Stalkers! You were killed for stalking the wrong person!"
    }[/Code]

    [U]Poison Attacker[/U]: Same as Kill Attacker, but with Poison. You can use "poisonattackerevenifprotected" too.
    [Code]"distract": {
    "mode": "poisonattacker",
    "msg": "Your target seems to dislike Distractors! You were poisoned for distracting the wrong person!",
    "poisonDeadMessage": "You shouldn't have distracted that Stalker 3 nights ago!",
    "count": 3
    }[/Code]

    [U]Evade Chance[/U]: 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]"protect": {
    "mode": {
    "evadeChance": 0.5
    }
    }[/Code]

    [U]Ignore If and Kill If[/U]: 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: [U]Don't[/U] put the msgs in "mode"' braces). For now, ~User~ and ~Distracter~ will not show when a ignoreif is activated (going to fix that soon).
    [Code]"convert": {
    "mode": {
    "ignore": ["role1", "role2"],
    "killif": ["role3", "role4"]
    },
    "msg": "You dislike recruiters, so you ran over that ~User~"
    }[/Code][/Hide]
    All of these Defensive Modes already existed, but only for specific actions. Now they will work for any night action.

    [B]Convert when lynched[/B]: 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]"lynch": {
    "convertTo": "werewolf",
    "convertmsg": "~Self~, the ~Old~, received ~Count~ votes and was about to get lynched, but survived and became a ~New~!"
    }[/Code]
    "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.

    [B]On Death Action[/B]: 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]"onDeath": {
    "killRoles": ["human"],
    "poisonRoles": { "frog": 2, "dinosaur": 5 },
    "convertRoles": { "bear": "sleepingbear", "horse": "pegasus" },
    "exposeRoles": ["godfather"],
    "killmsg": "±Game: Before dying, ~Self~ cast a spell that killed ~Target~ (~Role~)!",
    "poisonmsg": "±Game: Before dying, ~Self~ cast a spell that poisoned ~Target~ (~Role~) for ~Count~ days!",
    "convertmsg": "±Game: ~Self~'s death made ~Target~, a good ~Old~, rage and become a ~New~!",
    "exposemsg": "±Game: ~Self~ left a dying message pointing to ~Target~ as the ~Role~!"
    }[/Code]
    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:
    [quote]±Game: Mr. Zombie (Bomb) died!
    ±Game: Before dying, Mr. Zombie cast a spell that poisoned Steve Jobs and Bill Gates (Frog) for 2 days!
    ±Game: Before dying, Mr. Zombie cast a spell that poisoned Bill, George and Barack (Dinosaur) for 5 days![/quote]
    -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).

    [B]Mode: Identify[/B]: 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).
    [SPOILER][code]"actions": {
    "poison": {
    "mode": "identify",
    "msg": "~Target~, the ~Role~, is the person that tried to ~Action~ you during this night!"
    }
    }[/code][/HIDE]

    [B]Mode: Die[/B]: 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.
    [SPOILER][code]"actions": {
    "inspect": {
    "mode": "die",
    "msg": "~Target~, the ~Role~, tried to ~Action~ you, but you died due to their ugly face!",
    "targetmsg": "You tried to ~Action~ ~Self~, but your ugly face scared them to death!"
    }
    }[/code][/HIDE]

    [B]Suicide Chance[/B]: 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.
    [SPOILER][code]"actions": {
    "night": {
    "protect": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 4,
    "suicideChance": 0.75,
    "suicidemsg": "You swore to protect your partners with your life, and that's what happened."
    }
    }
    }[/code][/HIDE]

    [B]Restrict[/B]: 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).
    [SPOILER][code]"actions": {
    "night": {
    "inspect": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 4,
    "restrict": ["kill"]
    },
    "kill": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 20,
    "restrict": ["inspect"]
    }
    }
    }[/code][/HIDE]
    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.

    [B]Random Night Action[/B]: 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 [U]can't[/U] set a different priority for each command, so you will have to think well about its priority.
    [SPOILER][code]"actions": {
    "night": {
    "metronome": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 4,
    "command": {
    "kill": 0.5,
    "poison": 0.3,
    "inspect": 0.2
    }
    }
    }
    }[/code][/HIDE]

    [B]Multiple Night Actions in a command[/B]: 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 [U]can't[/U] 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.
    [SPOILER][code]"actions": {
    "night": {
    "fullguard": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 4,
    "command": ["protect", "safeguard"]
    },
    "kidnap": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 4,
    "command": ["distract", "inspect", "convert"],
    "newRole": "kidnapped"
    }
    }
    }[/code][/HIDE]
    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:
    [COLOR=#3366CC][FONT=monospace]"silentVote"[/FONT][/COLOR][COLOR=#339933][FONT=monospace]:[/FONT][/COLOR][COLOR=#003366][FONT=monospace][B]true
    [/B][/FONT][/COLOR]
    [B]Night Action - Copy[/B]: 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 [B]"copyAs": "*"[/B] if you want the user to become exactly the same role as the target.
    [hide][code]"actions": {
    "night": {
    "copy": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 5,
    "canCopy": ["role1", "role2"],
    "copyAs": {
    "roleA": ["role2"],
    "roleB": ["role1"]
    },
    "copymsg": "~Self~ copied ~Target~ and changed from ~Old~ to ~New~!"
    }
    }
    }[/code][/hide]
    P.S.: Copy has more uses than it seems initially.

    [B]Night Action - Curse[/B]: 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 [B]"cursedRole": "roleB"[/B] 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.
    [hide][code]"actions": {
    "night": {
    "curse": {
    "target": "AnyButSelf",
    "common": "Self",
    "priority": 5,
    "canCurse": ["role1", "role2"],
    "cursedRole": {
    "roleA": ["role2"],
    "roleB": ["role1"]
    },
    "curseCount": 3,
    "curseConvertMessage": "~Target~'s curse took effect and ~Player~ has changed from ~Old~ to ~New~!"
    }
    }
    }[/code][/hide]
    P.S.: Similar to Copy, it has more uses than you may think.

    [B]On Death - Curse[/B]: 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.
    [hide][code]"actions":{
    "onDeath": {
    "curseRoles": {
    "role1": "roleA",
    "role2": "roleB"
    },
    "curseCount": 3,
    "cursemsg": "Because ~Self~ died, ~Target~, the ~Old~ is/are doomed to become ~New~ in ~Count~ days!",
    "curseConvertMessage": "~Target~'s curse took effect and ~Player~ has changed from ~Old~ to ~New~!"
    }
    }[/code][/hide]

    [B]Initial Condition - Curse[/B]: Same as Initial Condition: Poison, but with curse.
    In the following example, the player with this role will change to "role1" by N2.
    [hide][code]"actions":{
    "initialCondition": {
    "curse": {
    "cursedRole": "role1",
    "curseCount": 3,
    "curseConvertMessage": "~Target~'s curse took effect and ~Player~ has changed from ~Old~ to ~New~!"
    }
    }
    }[/code][/hide]

    [B]Initial Condition - Clear Curse[/B]: Only useful if you can convert to the role with this action. Removes any curse that that player holds.
    [hide][code]"actions":{
    "initialCondition": {
    "clearCurse": true
    }
    }[/code][/hide]

    [B]Random Role on Spawn List[/B]: 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%).
    [hide][code]"roles1": [
    "caterpie",
    "caterpie",
    "metapod",
    "caterpie",
    { "weedle": 0.4, "kakuna": 0.2, "beedrill": 0.4 },
    "metapod"
    ][/code][/hide]

    [B]On Team:[/B] Changes how a role is displayed on the "Current Team" list. Works similarly to 'onlist'.

    [code]
    "actions": {
    "onteam": "villager"
    }
    [/code]

    [B]Vote/Voteshield as an Array:[/B] 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]
    "actions": {
    "vote": [-2, -1, 0, 0, 0, 3, 6, 9.5, 12]
    }
    [/code]

    [B]No Visit:[/B] 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]
    "actions": {
    "stalk": {
    "mode": "noVisit"
    }
    }
    [/code]

    [B]Pierce:[/B] 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]
    "actions": {
    "night": {
    "kill": {
    "common": "Self",
    "target": "AnyButSelf",
    "priority": 999,
    "pierce": true
    }
    }
    }
    [/code]

    [B]Evade Chance messages:[/B] 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]
    "actions": {
    "inspect": {
    "mode": {
    "evadeChance": 0.5
    },
    "msg": "You were unable to inspect this person! Who could this be?"
    }
    }
    [/code]

    Below: A role with 50% chance of evading Inspection. If the evasion occurs, the inspector will get no message!
    [code]
    "actions": {
    "inspect": {
    "mode": {
    "evadeChance": 0.5
    },
    "silent": true
    }
    }
    [/code]

    [B]Silent Conversion:[/B] 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]
    "actions": {
    "night": {
    "convert": {
    "command": ["copy", "convert"],
    "common": "Self",
    "target": "AnyButSelf",
    "priority": 10,
    "newRole": "cultist",
    "copyAs": "*",
    "silentConvert": true,
    "silentCopy": false
    }
    }
    }[/code]

    Below: The cursed player won't receive the conversion and help messages, nor will see the "You will convert in X turns" message.
    [code]
    "actions": {
    "night": {
    "curse": {
    "common": "Self",
    "target": "AnyButSelf",
    "priority": 10,
    "cursedRole": "cultist",
    "silentCurse": true
    }
    },
    "initialCondition": {
    "curse": {
    "cursedRole": "cultist",
    "curseConvertMessage": "A new cultist is born!",
    "silentCurse": true
    }
    }
    }[/code]

    [code]
    "actions": {
    "onDeath": {
    "curseRoles": {
    "villager": "cultist",
    },
    "silentCurse": true,
    "convertRoles": {
    "cultist": "cultist2",
    },
    "silentConvert": true
    }
    }[/code]

    [B]Less messages for onDeath:[/B] Since some themes make heavy usage of onDeath, there's now an alternative to have less messages when those are activated.

    [code]
    "actions": {
    "onDeath": {
    "killRoles": [
    "villager",
    "bodyguard",
    "mayor"
    ]
    }
    }[/code]
    The above code would result in the following messages:
    [quote]±Game: DeadPlayer (Inspector) died!
    ±Game: Because DeadPlayer died, Player1, Player2 and Player3 (Villager) died too!
    ±Game: Because DeadPlayer died, PlayerA (Bodyguard) died too!
    ±Game: Because DeadPlayer died, PlayerXD (Mayor) died too!
    [/quote]

    [code]
    "actions": {
    "onDeath": {
    "killRoles": [
    "villager",
    "bodyguard",
    "mayor"
    ],
    "singlekillmsg": "When ~Self~ died, ~Target~ died too!"
    }
    }[/code]
    The above code would result in the following message:
    [quote]±Game: DeadPlayer (Inspector) died!
    ±Game: Because DeadPlayer died, Player1, Player2, Player3, PlayerA and PlayerXD died too!
    [/quote]

    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.

    [B]-Daykills get "ignore" allowing stuff like Soren to evade Ike's daykill[/B]

    [B]--Ignore
    [/B]~Target~ = Player with the ignore
    ~Role~ = Role of the player with Ignore
    [code]
    "daykill": {
    "mode": {
    "ignore": ["samurai"],
    },
    "msg": "You cannot kill ~Target~! They are ~Role~!"
    }
    [/code]
    Note: This will count as using the kill

    Default message: "±Game: Your target (~Target~) evaded your -commandName-!"



    [B]-Expose gets a bunch of new stuff, everything is identical to Daykill unless noted:
    [/B]If no message is defined, a message will be put in for the player


    [B]--Evade/exposeevademsg
    [/B]~Self~ = Player with evasion
    ~Target~ = Player with expose
    [code]

    "actions": {
    "expose": "evade",
    "exposeevademsg": "I evaded an expose from ~Target~!"
    }
    [/code]

    Default message: "±Game: That person cannot be exposed right now!"


    [B]--EvadeChance/evasionmsg/exposemissmsg
    [/B]~Target~ = Player with expose
    ~Self~ = Player with evasion
    [code]

    "actions": {
    "expose": {
    "mode": {
    "evadeChance": 1,
    "evasionmsg": "I evaded an expose from ~Target~!"
    }
    }
    }
    [/code]

    (Goes on exposer)
    ~Target~ = Player being exposed
    ~Self~ = Role with expose
    [code]
    "exposemissmsg": "~Target~ evaded your expose!"
    [/code]

    Default message:
    To exposer: "±Game: Your expose was evaded!"
    To exposeee: "±Game: You evaded an expose!"


    [B]--Ignore/msg
    [/B]~Target~= Player with the ignore
    ~Role~ = Role of the player with Ignore
    [code]

    "expose": {
    "mode": {
    "ignore": ["exposer"],
    },
    "msg": "You cannot expose ~Target~! They are ~Role~!"
    }
    [/code]
    Note: This will count as using the expose

    Default message: "±Game: Your target (~Target~) evaded your -commandName-!"

    [hide]
    [B]--RevealChance/revealmsg
    [/B]~Self~ = Exposer
    ~Role~ = Exposer's role
    [code]

    "actions": {
    "standby": {
    "expose": {
    "target": "AnyButSelf",
    "msg": "You can expose now by typing /expose [name]. You will not be revealed!",
    "exposemsg": "Hey everyone! ~Target~ is ~Role~!",
    "revealChance": 0.5,
    "revealmsg": "Oh right! I, ~Self~, am the ~Role~!"
    }
    }
    }

    [/code]

    Default message: "±Game: While exposing, ~Self~ (~Role~) made a mistake and was revealed!"[/hide]


    [B]--Reveal Exposer (Reveals exposer when exposed)/revealexposermsg[/B]
    ~Target~ = Exposer
    ~Self~ = Player with revealexposer
    ~Role~ = Exposer's role
    [code]
    "actions": {
    "expose": "revealexposer",
    "revealexposermsg": "~Self~ would like you all to know that ~Target~ is ~Role~. Take that!"
    }
    [/code]

    Default message: "±Game: However, ~Self~ revealed that ~Target~ is the ~Role~!"



    [B]--Revenge (Exposed role will kill the Exposer)/exposerevengemsg[/B]
    ~Target~ = Exposer
    ~Self~ = Player with the revenge
    ~Role~ = Role of player with revenge (in case you want to still reveal the role)
    [code]

    "actions": {
    "expose": "revenge",
    "exposerevengemsg": "Haha. Pitiful ~Target~. You really like you can learn my identity and live to tell anyone?"
    }
    [/code]
    Default message: "±Game: ~Target~ tries to expose ~Self~, but ~Self~ gets startled and kills ~Target~!"


    --[B]exposedtargetmsg
    [/B]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]
    "standby": {
    "expose": {
    "target": "AnyButSelf",
    "msg": "You can expose now by typing /expose [name]. You will not be revealed!",
    "exposemsg": Hello ~Role~!",
    "exposedtargetmsg": "You exposed ~Target~!"
    }
    },
    [/code]


    [B]"team-revealif-with-roles" now exists
    [/B][code]
    "startup": {
    "revealRole": [
    "randomperson"
    ],
    "team-revealif-with-roles": [
    "town"
    ]
    }
    [/code]

    [U][B]Detox
    [/B][/U]A night command that cures poison from a target.
    [hide]
    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]
    "actions": {
    "night": {
    "detox": {
    "target": "Any",
    "common": "Self",
    "priority": 3,
    "msg": "~Target~ (~Role~) was cured of poison.",
    "targetmsg": "~Self~, the ~Role~, cured you of poison",
    "failmsg": "~Target~ is not poisoned!",
    "detoxmsg": "~Self~, the ~Role~, cured ~Target~ of poison!"
    }
    }
    }
    [/code]
    [/hide]
    ~~~~~~
    [U][B]Dispel
    [/B][/U]A night command that removes curse from a target.
    [hide]
    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]
    "actions": {
    "night": {
    "dispel": {
    "target": "Any",
    "common": "Self",
    "priority": 3,
    "msg": "~Target~ (~Role~) was cured of curse.",
    "targetmsg": "~Self~, the ~Role~, cured you of curse",
    "failmsg": "~Target~ is not cursed!",
    "detoxmsg": "~Self~, the ~Role~, cured ~Target~ of curse!"
    }
    }
    }
    [/code]
    [/hide]
    ~~~~~~
    [B][U]Resistance
    [/U][/B]A mode used to alter the count of poison and curse.
    [hide]
    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]
    "actions": {
    "poison": {
    "mode": "resistance",
    "rate": 0.5
    }
    }
    [/code]

    Constant
    [code]
    "actions": {
    "poison": {
    "mode": "resistance",
    "constant": -1
    }
    }

    [/code]

    Default
    [code]
    "actions": {
    "poison": {
    "mode": "resistance"
    }
    }
    [/code]
    [/hide]
    ~~~~~~
    [B][U]Hide
    [/U][/B]An old feature, but given new life and functionality! Fully backwards compatible too.
    [hide]
    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, [B]true [/B]does[B] NOT[/B] use quotation marks, but [B]"side"[/B], [B]"role"[/B], and [B]"both"[/B] [B]REQUIRE[/B] quotation marks.

    Example coding
    Side:
    [code]
    "role": "villager",
    "translation": "vill",
    "side": "town",
    "hide": "side",
    [/code]
    [COLOR=#3daa68]±Side[/COLOR][COLOR=#3daa68]:[/COLOR] The Village consists of Bodyguard, Inspector.

    [COLOR=#3daa68]±Role[/COLOR][COLOR=#3daa68]:[/COLOR] Villager
    [COLOR=#3daa68]±Ability[/COLOR][COLOR=#3daa68]:[/COLOR] Sided with Good people.

    Role:
    [code]
    "role": "villager",
    "translation": "vill",
    "side": "town",
    "hide": "role",
    [/code]
    [COLOR=#3DAA68]±Side[/COLOR][COLOR=#3DAA68]:[/COLOR] The Village consists of Bodyguard, Inspector, Villager.
    [COLOR=#3daa68]
    ±Game[/COLOR][COLOR=#3daa68]:[/COLOR] No such role in this theme!

    Both:

    [code]
    "role": "villager",
    "translation": "vill",
    "side": "town",
    "hide": "both",
    [/code]
    [COLOR=#3DAA68]±Side[/COLOR][COLOR=#3DAA68]:[/COLOR] The Village consists of Bodyguard, Inspector.


    [COLOR=#3DAA68]±Game[/COLOR][COLOR=#3DAA68]:[/COLOR] No such role in this theme!

    True:
    [code]
    "role": "villager",
    "translation": "vill",
    "side": "town",
    "hide": true,
    [/code]
    [COLOR=#3DAA68]±Side[/COLOR][COLOR=#3DAA68]:[/COLOR] The Village consists of Bodyguard, Inspector.


    [COLOR=#3DAA68]±Game[/COLOR][COLOR=#3DAA68]:[/COLOR] No such role in this theme!
    [/hide]
    ~~~~~~
    [B][U]Revenge Specific Day Actions
    [/U][/B]You can select specific roles to revenge their daykills or exposes.
    [hide]
    You use the same messages as normal revenges

    [code]
    "actions": {
    "daykill": {
    "mode": {
    "revenge": ["samurai"],
    }
    },
    "daykillrevengemsg": "Same as a normal revenge message"
    }
    [/code]
    [code]
    "actions": {
    "expose": {
    "mode": {
    "revenge": ["exposer"],
    }
    },
    "exposerevengemsg": "Same as a normal revenge message"
    }
    [/code]


    [/hide]

    [B]votemsg[/B]
    [hide]
    Global theme attribute

    Accepts 2 variables:
    ~Player~ = The person voting
    ~Target~ = The person being voted

    Important to note: The "[COLOR=#3daa68]±Game[/COLOR]" bot will appear automatically.

    Example of where you can put it
    [code]
    "lynchmsg": "±Game: ~Player~ (~Role~) was voted off the island!",
    "killmsg": "±Game: ~Player~ (~Role~) could no longer survive on the island!",
    "votemsg": "~Player~ cast a ballot for ~Target~.",
    [/code]

    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.
    [/hide]

    And then, the long awaited:
    [B]"broadcast": "all"[/B] (or "broadcast": "*")
    [hide]
    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]
    "night": {
    "kill": {
    "priority": 1,
    "common": "Self",
    "target": "AnyButSelf",
    "broadcast": "all",
    "restrict": ["kill"]
    }
    }
    [/code]

    [/hide]
    [B][CENTER]Closing the Theme[/CENTER]
    [/B]

    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.

    [SPOILER][CODE] "roles1": [
    "bodyguard",
    "mafia",
    "inspector",
    "werewolf",
    "hooker",
    "villager",
    "truemiller",
    "villager",
    "mafia",
    "baka",
    "mayor"
    ],
    "roles2": [
    "bodyguard",
    "mafia1",
    "mafia1",
    "inspector",
    "hooker",
    "villager",
    "mafia2",
    "mafia2",
    "villager",
    "baka",
    "villager",
    "mayor",
    "villager",
    "spy",
    "villager",
    "miller1",
    "miller2",
    "mafiaboss1",
    "villager",
    "vigilante",
    "villager",
    "godfather",
    "mafiaboss2",
    "samurai",
    "villager",
    "villager",
    "werewolf",
    "mafia1",
    "mafia2",
    "bodyguard",
    "villager",
    "bomb",
    "mayor",
    "hooker",
    "mafia1",
    "mafia2",
    "spy",
    "villager",
    "werewolf",
    "vigilante",
    "villager",
    "villager"
    ],[/CODE][/HIDE]

    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]
    "roles1": [
    "bodyguard",
    "mafia",
    "inspector",
    "werewolf",
    "hooker",
    "villager",
    ],
    "roles2": [
    "bodyguard",
    "mafia",
    "inspector",
    "werewolf",
    "villager
    "villager",
    "mayor",
    "villager",
    "spy",
    "villager"
    ],
    [/CODE]

    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.

    [B]Village Can't Lose Roles[/B]

    This random part at the end of the code

    [CODE] "villageCantLoseRoles": [
    "mayor",
    "vigilante",
    "samurai",
    "bomb"
    ][/CODE]

    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] "villageCantLoseRoles": [
    "prokarp",
    "dual",
    "lie",
    "duck",
    "bomb",
    "gengar",
    "derp",
    "krook",
    "gyarados",
    "shuckle",
    "shucklep",
    "weavile"
    ],[/CODE]

    [B]Kill message and Kill user message[/B]

    [CODE] "killmsg": "+Trainer: ~Player~ (~Role~) fainted!",
    "killusermsg": "You fainted!"[/CODE]

    "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)

    [B][CENTER]The final part[/CENTER]
    [/B]

    After you added the above, there's only thing left.

    [CODE]}[/CODE]

    Finish off the code with a closing bracket to close off the opening bracket at the beginning ;)

    [B][CENTER]So you're done, right?[/CENTER]
    [/B]

    Of course not, now that you've made the theme you have to check in [URL="http://jsonlint.com/"]Jsonlint for errors and bugs!

    [URL="http://pokemon-online.eu/forums/showthread.php?9793-The-Uber-Mafia-Themeing-Guide-of-Uberness&p=150333&viewfull=1#post150333"]This[/URL] is a guide by RiceKirby that tells you how to fix "invalid array length" errors, and trust me it's a big help.

    [B][CENTER]So NOW you've finished your theme, what do you do?[/CENTER]
    [/B]

    Once you're sure your theme is good to go, get it approved by a Mafia Admin (type /mafiaadmins 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

    [B][CENTER]Questions or Help?[/CENTER]
    [/B]

    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 ^^

    [U]Credits[/U]

    Me - I 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~[/URL][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER][/SPOILER]
     
    Last edited by a moderator: Aug 25, 2013
    Whereabouts Unknown likes this.
  2. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    I just want to say, copy+paste saves time. it's what i do
     
  3. Secundum

    Secundum Ice Master

    Joined:
    May 16, 2010
    Messages:
    39
    Likes Received:
    0
    PO Trainer Name:
    Secundum
    That's a very good guide.
    Hopefully we will have fewer broken themes now.
     
  4. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    Well who doesn't copy+paste to avoid parse errors.
     
  5. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    When I cp, all I get are parse errors lol
     
  6. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    U edited it then
     
  7. Darkkis

    Darkkis The Superhero of Mafia

    Joined:
    Jun 23, 2010
    Messages:
    228
    Likes Received:
    0
    Is it possible to make a role who can do 2 actions at night? If it's possible, how do you make it? I tried to get to my megaman theme a role like that.
     
  8. Tyrex

    Tyrex Godfather of Mafia

    Joined:
    Oct 12, 2011
    Messages:
    28
    Likes Received:
    0
    open Fruit (or any other theme that has roles with multiple actions), copy rotten tomato/potato, modify it the way you want.
     
  9. JaxenPenguin

    JaxenPenguin RIP RICEKIRBY + ROTOM

    Joined:
    Jul 29, 2011
    Messages:
    50
    Likes Received:
    0
    I vote to make this a sticky thread!
     
  10. ChaosPenguin

    ChaosPenguin Penguin Of Chaos

    Joined:
    Mar 3, 2011
    Messages:
    100
    Likes Received:
    0
    That's actually a good idea, done!
     
  11. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    NOW I ACTUALLY HAVE IT FINISH IT!!! loljk

    I'll work on finishing it tommorow :P
     
  12. JaxenPenguin

    JaxenPenguin RIP RICEKIRBY + ROTOM

    Joined:
    Jul 29, 2011
    Messages:
    50
    Likes Received:
    0
    OH YEAH MY IDEA IS GOOD



    I MADE A UBERAWESOME THEME WITH THIS GUIDE
     
  13. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    Add the copy+paste roles :P
     
  14. Tesla Elesa

    Tesla Elesa Almost Quality

    Joined:
    Aug 12, 2011
    Messages:
    530
    Likes Received:
    0
    Nice guide. Know how to do prevent night kills btw?
     
  15. Viderizer

    Viderizer Admin/Developer

    Joined:
    Mar 12, 2011
    Messages:
    277
    Likes Received:
    0
    Open the Elements theme and see how Uranium works. If you are lazy:

    "kill": {
    "mode": "ignore"
    }

    [/HIDE]
     
  16. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    How do I make a role that prevents daykills? Or is that not an option?
     
  17. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    not an option atm
     
  18. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    does the regular command replacing "night" with "day" work?

    for protect i mean

    Also, that requires MAJOR spamming abilities on both killer and protecter
     
  19. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    oh well. thanks for your guide. you start the best threads hobbes.
     
  20. JaxenPenguin

    JaxenPenguin RIP RICEKIRBY + ROTOM

    Joined:
    Jul 29, 2011
    Messages:
    50
    Likes Received:
    0
    No, does no one remember the standby?
     
  21. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    heh i'm taking that as sarcasm, because if its sarcasm its true :3

    Gonna finish Guide Today, its weekend, except next part finished by the end of the day EST yeah for time zones
     
  22. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    Is it possible to protect a person from daykills
     
  23. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    It is I believe.
    "actions": {
    "daykill": "evade"
     
  24. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    I thought u said that wasnt an option atm... well thanks for getting my question answered goldsalamence.
     
  25. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    its an option now, since it was added to the script about a week ago.
     
  26. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    If it was added about a week ago, then I was the reason why u added it since I came up with the idea! Thanks mavs!
     
  27. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    you're welcome? lol idk why it was added actually. i believe avatar roku added it since i have no scripting abilities lol
     
  28. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    da heck am i going to deal with parse errors D:
     
  29. Darkkis

    Darkkis The Superhero of Mafia

    Joined:
    Jun 23, 2010
    Messages:
    228
    Likes Received:
    0
    Is there a way to prevent nightkills and return them back to the killer? I mean the same way as WW does to the PL if she tries to distract WW.
     
  30. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    At the moment, no, though i do believe that would make for an interesting role.
     
  31. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    I don't get what the roles 1 and roles 2 mean, and villager can't lose thing, could u explain it in the guide?
     
  32. Mavs>Heat

    Mavs>Heat Member

    Joined:
    Jun 27, 2011
    Messages:
    152
    Likes Received:
    3
    roles 1 and roles 2 list what roles should be used for what amount of people. normally, roles 1 is 1-11, and roles 2 is 12-30ish, but you can change that. You also can have a roles 3, roles 4, etc. So say you have 11 players, then the game would have WW/mafia and no FCM/IM. but when that 12th player joins, the game shifts over to roles 2, and starts using FCM and IM, but no WW or mafia. And for villagecant lose: In order to save time, mafia is programmed so that if the number of village roles= or < the number of mafia roles, and that there is only 1 mafia team left, the village auto loses. however, there are roles that can prevent the village from losing, such as mayor, vigilante, and samurai, and thus in order to give the village a chance, those roles are typed into the villagecantloseroles. and yes, there are themes that lack villagecantlose roles. such as internet, with no samurai or vigilante.
     
    Last edited: Dec 6, 2011
  33. Lamperi

    Lamperi I see what you did there

    Joined:
    Apr 25, 2010
    Messages:
    2,647
    Likes Received:
    11
    True, villagecantlose isn't anything crucial, it was just implemented since 3-villy - 3-mafia is boring to watch >_>
     
  34. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    can you make it where a role can have 3 places like 1-11, 14-18, 22-30 players?
     
  35. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    yeah you can, WW does it default
     
  36. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    and yea. Im making a theme, SkarmPiss vs Mafia, and i cant even check if i got the coding right so far, it always has an error at the end, and when i add a new role, the error disappears. Then the last line of the new role gets an error.
    WTF?
     
  37. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    NOOOO! I was gonna make a theme with skarmpiss in it. fine, but u better not mess up skarmpiss' name by making him seem cooler.

    also, how do i check the coding to make sure i have everything right?
     
  38. Hobbes2

    Hobbes2 Aren't I dead or something

    Joined:
    May 21, 2011
    Messages:
    1,168
    Likes Received:
    2
    PO Trainer Name:
    Hobbes2
    Use jsonlint or lamps checker will link later on iPhone ATM.
     
  39. Thrighragon

    Thrighragon To Slay a Samurai

    Joined:
    Oct 24, 2011
    Messages:
    254
    Likes Received:
    0
    Nah his name is just skarmpiss, im setting kujas vote to99999 should be finishing it by next week (Fck parse errors, IMAD
    Btw u wanna be a role in the theme? i will evade the flashes.
     
  40. GreenWater10

    GreenWater10 GreenWater10

    Joined:
    Aug 23, 2011
    Messages:
    296
    Likes Received:
    0
    I don't mind getting flashed. I'll be honored to be a part of your theme.
     
Moderators: Pamitha, Water
Thread Status:
Not open for further replies.