Make alpha bite turn target immediately

RIP long bitten messages, you shall be missed :(
This commit is contained in:
skizzerz 2016-07-21 18:20:29 -05:00
parent 07e3018d06
commit e14c3f1d9c
3 changed files with 46 additions and 142 deletions

View File

@ -281,8 +281,6 @@
"gunner_killed_wolf_overnight": "Fortunately, \u0002{0}\u0002 had bullets and \u0002{1}\u0002, a \u0002{2}\u0002, was shot dead.",
"gunner_killed_wolf_overnight_no_reveal": "Fortunately, \u0002{0}\u0002 had bullets and \u0002{1}\u0002 was shot dead.",
"wolf_gunner": "While searching {0}'s belongings, you found a gun loaded with 1 silver bullet! You may only use it during the day. If you shoot at a wolf, you will intentionally miss. If you shoot a villager, it is likely that they will be injured.",
"harlot_bit": "While out visiting last night, you were overcome by a fierce-looking wolf and bitten on your neck...",
"generic_bit": "You woke up today feeling light-headed, and you notice some odd bite marks on your neck...",
"totem_posession": "\u0002{0}\u0002 seem{1} to be in possession of {2} mysterious totem{3}...",
"totem_broken": "Broken totem pieces were found next to \u0002{0}\u0002's body...",
"command_disabled": "This command has been disabled.",
@ -304,7 +302,7 @@
"wolf_mystic_info": "There {0} \u0002{1}\u0002 special villager{2} still alive.",
"ill_wolves": "You are feeling ill tonight, and are unable to kill anyone.",
"angry_wolves": "You are \u0002angry\u0002 tonight, and may kill two targets by using \"kill <nick1> and <nick2>\".",
"wolf_bite": "You may use \"bite <nick>\" tonight in order to turn the wolves' target into a wolf instead of killing them. They will turn into a wolf in {0} night{1}.",
"wolf_bite": "You may use \"bite <nick>\" tonight in order to turn that person into a wolf.",
"player_not_playing": "You're not currently playing.",
"werecrow_transformed": "You have already transformed into a crow, and cannot turn back until day.",
"retracted_kill": "You have retracted your kill.",
@ -378,12 +376,6 @@
"immunized_already_bitten": "You have a brief flashback to {0} last night. The event quickly subsides, but a lingering thought remains in your mind...",
"villager_immunized": "You don't feel any different...",
"immunization_success": "You feel a sharp prick in the back of your arm and temporarily black out. When you come to, you notice an empty syringe lying on the ground. {0}",
"angel_bit_1": "After returning from last night's activities, you felt another wave of pain, this time on your back. Your wings grew larger and you can now fly faster and farther than ever before. Along with the size change, their color shifted from pure white to a midnight black. You didn't spend much time thinking on what happened, as you were tired and went to sleep shortly thereafter.",
"angel_bit_2": "Despite the gloves, it seems that the villagers have been keeping their distance from you as of late. None of them seem to know about your changes, so the change of behavior greatly angers you. You're doing just as good a job as ever, and if anything the changes make you MORE effective and powerful. These thoughts lingered for the rest of last night until you finally drifted off to an uneasy sleep.",
"angel_bit_3": "As you were out last night, you felt a painful sensation as your hands grew very sharp claws. You figure they are now sharp enough to cut through most anything, but to avoid alarming the village you decide to fashion some gloves and wear them around from now on in an attempt to show nothing is happening.",
"villager_bit_1": "You had the same dream again, but this time YOU were the pursuer. You smell fear from your quarry as you give an exhilerating chase, going only half your speed in order to draw out the fun. Suddenly your prey trips over a rock and falls down, allowing you to close in the remaining distance. You savor the fear in their eyes briefly before you raise your claw to deal a killing blow. Right before it connects, you wake up.",
"villager_bit_2": "You dreamt of running through the woods outside the village at night, wind blowing across your face as you weave between the pines. Suddenly you hear a rustling sound as a monstrous creature jumps out at you - a werewolf! You start running as fast as you can, you soon feel yourself falling down as you trip over a rock. You look up helplessly as the werewolf catches up to you, then wake up screaming.",
"villager_bit_3": "You had a strange dream last night; a person was running away from something through a forest. They tripped and fell over a rock as a shadow descended upon them. Before you could actually see who or what the pursuer was, you woke with a start.",
"alpha_already_bit": "You have already bitten someone this game.",
"alpha_no_bite": "You may only bite someone after another wolf has died yesterday.",
"bite_error": "Please choose who to bite by specifying their nick.",
@ -432,8 +424,9 @@
"another_piper_charmed": "Another piper has charmed \u0002{0}\u0002!",
"privmsg_idle_warning": "\u0002You have been idling in {0} for a while. Please say something in {0} or you will be declared dead.\u0002",
"day_lasted": "Day lasted \u0002{0:0>2}:{1:0>2}\u0002. ",
"fallen_angel_turn": "As the moonlight filters through your window, you think back on the past few days. Your power has been growing, but the villagers you protect subconsciously detected your shift and have been keeping more distant from you. Grinning with wicked resolve, you vow to show them what fools they have been as you take to the skies once more with an unholy vengeance. Soon they will know true fear.",
"bitten_turn": "As you prepare for bed, you watch in horror as your body starts growing a coat of fur! Sudden realization hits you as you grin with your now muzzled face; that mysterious bite earlier slowly changed you into a werewolf! You feel bigger, stronger, faster, and ready to seize the night as you stealthily exit your home and search for the rest of your pack...",
"fallen_angel_turn": "While out last night, you were overpowered by a large werewolf and bitten. Shortly thereafter, you found your wings turning black as night and sadistic thoughts infiltrating your mind...",
"harlot_turn": "While out visiting last night, you were overpowered by a large werewolf and bitten. Shortly thereafter, you found yourself turning into a werewolf yourself!",
"bitten_turn": "You woke suddenly last night to a sharp pain, as you were bit by a large werewolf. Shortly thereafter, you found yourself turning into a werewolf yourself!",
"wolfchat_new_member": "\u0002{0}\u0002 is now a \u0002{1}\u0002!",
"amnesia_clear": "Your amnesia clears and you now remember that you are a{0} \u0002{1}\u0002!",
"amnesia_wolfchat": "\u0002{0}\u0002 is now a \u0002{1}\u0002!",
@ -651,15 +644,9 @@
"doomsayer_lycan": "You have a vision that \u0002{0}\u0002 is transforming into a savage beast tomorrow night.",
"doomsayer_sick": "You have a vision that \u0002{0}\u0002 will become incredibly ill tomorrow and unable to do anything.",
"doomsayer_wolfchat": "\u0002{0}\u0002 is predicting \u0002{1}\u0002's doom.",
"seer_bit_1": "This time in your vision, you saw your best friend surrounded by wolves. However, instead of dying, they started to mutate into a werewolf themselves. Looking on in shock, you start wondering how you can find help, when one of the wolves turns to you and says to get going before day breaks. Confused, you look down and notice that you too are a wolf; the shock of the realization wakes you with a start.",
"seer_bit_2": "You had another strange vision last night. You saw an old childhood bully walking along the edge of a cliff. You follow behind them, and after a while they turn around, noticing you. Their face suddenly becomes devoid of all emotion, and they melancholily walk off the precipice, falling hundreds of feet into the rocky shoal below. A sinister grin forms on your face, and you notice that your teeth are pointer than normal as the vision fades.",
"seer_bit_3": "Something felt strange in that vision you had last night. You saw the shadows of a person, bed-ridden and unable to move. You see they are sick, and probably contagious. They look up, and although you cannot recognize the face through the pock marks, they seem to recognize you. They point at you, and the vision ends.",
"succubus_pass": "You have chosen to not entrance anyone tonight.",
"seer_turn": "Reflecting on your visions the previous night, you believe that you have discovered a way to make them actually happen! This realization is combined with noting that you seem to have transformed into a werewolf, a fact that doesn't seem to faze you in the slightest. Your face grins with evil resolve as you head out to the forest, in search of the other wolves you were until recently trying so hard to kill.",
"shaman_bit_1": "At the stroke of midnight, you begin the ritual. The circle of totems around you begin glow red with dark power, then suddenly channel all of it into your mind. An immense pressure pushes against you and makes it difficult to think. You cry out in horror as realization hits; it is suppressing your old self instead of driving out the new urges!",
"shaman_bit_2": " Ideally, one dabbling in the dark arts would take time to fully understand every nuance in a ritual. Given the discordant cacophony of thoughts swimming in your head, your desire to fight off your affliction versus baser urges trying to take root, ideal is something you cannot afford. You prepare all night for the ritual and see the sun peeking above the horizon as you finish the preparations.",
"shaman_bit_3": "While you were out last night, you were bit by a fearsome-looking wolf. Knowing what this will do if left unchecked, you search your library for any magics to stop the effects. Coming up empty handed, you become desperate. You were strongly cautioned to avoid the dark arts in school, but it may offer the only solution. It can't be THAT bad; besides, you're an experienced shaman now, not some neophyte.",
"shaman_turn": "With your mind finally free of distraction, you apply your mastery of the dark arts towards making new potent totems, the likes of which you have never even dreamed of before. Right as you finish, the moonlight filters into the room. You grin at it and know instinctively what to do, transforming into a fearsome werewolf. You let loose a howl, then grab your new totem as you set off into the night.",
"seer_turn": "As you were deep in trance last night, a large wolf overpowered and bit you. Shortly thereafter, you found yourself transforming into a wolf yourself! You seem to have kept your power, and have devised new ways to put it to use for your new friends.",
"shaman_turn": "As you were out delivering your totem last night, a large werewolf overpowered and bit you. Shortly thereafter, you found yourself transforming into a wolf yourself! Your mind floods with new wicked ideas for totems.",
"no_longer_entranced": "You are no longer entranced.",
"doomsayer_notify": "You are a \u0002doomsayer\u0002. You can see how bad luck will befall someone at night by using \"see <nick>\" on them. You may also use \"kill <nick>\" to kill a villager.",
"prophet_notify_both": "You are a \u0002prophet\u0002. Each night you may pray up to twice to learn one player who has a particular role. The first time, you are given a list of players and have a{0} {1}% chance of revealing yourself to someone with that role. If you did not reveal yourself, you may pray again to obtain the exact player name with a{2} {3}% chance of revealing yourself. Use \"pray <role>\" in PM to learn who has that role.",

View File

@ -164,7 +164,6 @@ FALLEN_ANGEL_KILLS_GUARDIAN_ANGEL_CHANCE = 1/2
PROPHET_REVEALED_CHANCE = ( 2/5 , 4/5 )
AMNESIAC_NIGHTS = 3 # amnesiac gets to know their actual role on this night
ALPHA_WOLF_NIGHTS = 3 # alpha wolf turns the target into a wolf after this many nights (note the night they are bitten is considered night 1)
DOCTOR_IMMUNIZATION_MULTIPLIER = 0.135 # ceil(num_players * multiplier) = number of immunizations
@ -489,8 +488,6 @@ def del_player(pname):
tpls = get_templates(pname)
for t in tpls:
ROLES[t].remove(pname)
if pname in BITTEN:
del BITTEN[pname]
if pname in BITTEN_ROLES:
del BITTEN_ROLES[pname]
if pname in CHARMED:

View File

@ -97,7 +97,6 @@ var.RESTARTING = False
var.OPPED = False # Keeps track of whether the bot is opped
var.BITTEN = {}
var.BITTEN_ROLES = {}
var.LYCAN_ROLES = {}
var.VENGEFUL_GHOSTS = {}
@ -3120,11 +3119,6 @@ def del_player(cli, nick, forced_death=False, devoice=True, end_game=True, death
var.ANGRY_WOLVES = True
if nickrole in var.WOLF_ROLES:
var.ALPHA_ENABLED = True
for bitten, days in var.BITTEN.items():
brole = var.get_role(bitten)
if brole not in var.WOLF_ROLES and days > 0:
var.BITTEN[bitten] -= 1
pm(cli, bitten, messages["bitten"].format(nick))
if nickrole == "mad scientist":
# kills the 2 players adjacent to them in the original players listing (in order of !joining)
@ -3633,7 +3627,7 @@ def rename_player(cli, prefix, nick):
dictvar.update(kvp)
if prefix in dictvar.keys():
del dictvar[prefix]
for dictvar in (var.VENGEFUL_GHOSTS, var.TOTEMS, var.FINAL_ROLES, var.BITTEN, var.GUNNERS, var.TURNCOATS,
for dictvar in (var.VENGEFUL_GHOSTS, var.TOTEMS, var.FINAL_ROLES, var.GUNNERS, var.TURNCOATS,
var.DOCTORS, var.BITTEN_ROLES, var.LYCAN_ROLES, var.AMNESIAC_ROLES, var.IDOLS):
if prefix in dictvar.keys():
dictvar[nick] = dictvar.pop(prefix)
@ -4191,13 +4185,6 @@ def transition_day(cli, gameid=0):
var.NIGHT_TIMEDELTA += td
min, sec = td.seconds // 60, td.seconds % 60
# determine if we need to play the new wolf message due to bitten people
new_wolf = False
for (p, v) in var.BITTEN.items():
if v <= 0:
new_wolf = True
break
found = defaultdict(int)
for v in var.KILLS.values():
for p in v:
@ -4291,6 +4278,8 @@ def transition_day(cli, gameid=0):
vappend = []
var.ACTIVE_PROTECTIONS = defaultdict(list)
# set to True if we play chilling howl message due to a bitten person turning
new_wolf = False
if var.ALPHA_ENABLED: # check for bites
for (alpha, target) in var.BITE_PREFERENCES.items():
# bite is now separate but some people may try to double up still, if bitten person is
@ -4334,7 +4323,7 @@ def transition_day(cli, gameid=0):
victims_set.add(target)
bywolves.add(target)
elif got_bit:
var.BITTEN[target] = var.ALPHA_WOLF_NIGHTS
new_wolf = True
bitten.append(target)
else:
# bite failed due to some other reason (namely harlot)
@ -4725,16 +4714,39 @@ def transition_day(cli, gameid=0):
cli.msg(chan, "\n".join(message))
for chump in var.BITTEN.keys():
if chump not in dead and var.get_role(chump) not in var.WOLF_ROLES:
pm(cli, chump, get_bitten_message(chump))
for chump in bitten:
if chump not in dead and chump not in var.WOLF_ROLES:
if chump in var.ROLES["harlot"] and var.HVISITED.get(chump):
pm(cli, chump, messages["harlot_bit"])
else:
pm(cli, chump, messages["generic_bit"])
# turn all bitten people into wolves
# short-circuit if they are already a wolf or are dying
chumprole = var.get_role(chump)
if chump in dead or chumprole in var.WOLF_ROLES:
continue
newrole = "wolf"
if chumprole == "guardian angel":
pm(cli, chump, messages["fallen_angel_turn"])
# fallen angels also automatically gain the assassin template if they don't already have it
newrole = "fallen angel"
var.ROLES["assassin"].add(chump)
debuglog("{0} ({1}) TURNED FALLEN ANGEL".format(chump, chumprole))
elif chumprole in ("seer", "oracle", "augur"):
pm(cli, chump, messages["seer_turn"])
newrole = "doomsayer"
debuglog("{0} ({1}) TURNED DOOMSAYER".format(chump, chumprole))
elif chumprole in var.TOTEM_ORDER:
pm(cli, chump, messages["shaman_turn"])
newrole = "wolf shaman"
debuglog("{0} ({1}) TURNED WOLF SHAMAN".format(chump, chumprole))
elif chumprole == "harlot":
pm(cli, chump, messages["harlot_turn"])
debuglog("{0} ({1}) TURNED WOLF".format(chump, chumprole))
else:
pm(cli, chump, messages["bitten_turn"])
debuglog("{0} ({1}) TURNED WOLF".format(chump, chumprole))
var.BITTEN_ROLES[chump] = chumprole
var.ROLES[chumprole].remove(chump)
var.ROLES[newrole].add(chump)
var.FINAL_ROLES[chump] = newrole
relay_wolfchat_command(cli, chump, messages["wolfchat_new_member"].format(chump, newrole), var.WOLF_ROLES, is_wolf_command=True, is_kill_command=True)
for deadperson in dead: # kill each player, but don't end the game if one group outnumbers another
# take a shortcut for killer_role here since vengeful ghost only cares about team and not particular roles
@ -4742,7 +4754,7 @@ def transition_day(cli, gameid=0):
# we check if they have already been killed as well since del_player could do chain reactions and we want
# to avoid sending duplicate messages.
if deadperson in var.list_players():
del_player(cli, deadperson, end_game = False, killer_role = "wolf" if deadperson in onlybywolves or deadperson in wolfghostvictims else "villager", deadlist = dead, original = deadperson)
del_player(cli, deadperson, end_game=False, killer_role="wolf" if deadperson in onlybywolves or deadperson in wolfghostvictims else "villager", deadlist=dead, original=deadperson)
message = []
@ -5251,7 +5263,7 @@ def check_exchange(cli, actor, nick):
elif var.ANGRY_WOLVES and actor_role in var.WOLF_ROLES and actor_role != "wolf cub":
pm(cli, actor, messages["angry_wolves"])
if var.ALPHA_ENABLED and actor_role == "alpha wolf" and actor not in var.ALPHA_WOLVES:
pm(cli, actor, messages["wolf_bite"].format(var.ALPHA_WOLF_NIGHTS, 's' if var.ALPHA_WOLF_NIGHTS > 1 else ''))
pm(cli, actor, messages["wolf_bite"])
elif nick_role == "minion":
wolves = var.list_players(var.WOLF_ROLES)
random.shuffle(wolves)
@ -5295,7 +5307,7 @@ def check_exchange(cli, actor, nick):
elif var.ANGRY_WOLVES and nick_role in ("wolf", "werecrow", "alpha wolf", "werekitten"):
pm(cli, nick, messages["angry_wolves"])
if var.ALPHA_ENABLED and nick_role == "alpha wolf" and nick not in var.ALPHA_WOLVES:
pm(cli, nick, messages["wolf_bite"].format(var.ALPHA_WOLF_NIGHTS, 's' if var.ALPHA_WOLF_NIGHTS > 1 else ''))
pm(cli, nick, messages["wolf_bite"])
elif actor_role == "minion":
wolves = var.list_players(var.WOLF_ROLES)
random.shuffle(wolves)
@ -6089,15 +6101,6 @@ def immunize(cli, nick, chan, rest):
var.FINAL_ROLES[victim] = "villager"
var.CURED_LYCANS.add(victim)
var.IMMUNIZED.add(victim)
elif victim in var.BITTEN:
# fun fact: immunizations in real life are done by injecting a small amount of (usually neutered) virus into the person
# so that their immune system can fight it off and build up antibodies. This doesn't work very well if that person is
# currently afflicted with the virus however, as you're just adding more virus to the mix...
# naturally, we would want to mimic that behavior here, and what better way of indicating that things got worse than
# by making the turning happen a night earlier? :)
var.BITTEN[victim] -= 1
lycan_message = (messages["immunized_already_bitten"]).format(
"the events of" if vrole == "guardian angel" else "your dream")
else:
lycan_message = messages["villager_immunized"]
var.IMMUNIZED.add(victim)
@ -6105,39 +6108,6 @@ def immunize(cli, nick, chan, rest):
var.DOCTORS[nick] -= 1
debuglog("{0} ({1}) IMMUNIZE: {2} ({3})".format(nick, var.get_role(nick), victim, "lycan" if lycan else var.get_role(victim)))
def get_bitten_message(nick):
time_left = var.BITTEN[nick]
role = var.get_role(nick)
if role == "guardian angel":
if time_left <= 1:
message = messages["angel_bit_1"]
elif time_left == 2:
message = messages["angel_bit_2"]
else:
message = messages["angel_bit_3"]
elif role in ("seer", "oracle", "augur"):
if time_left <= 1:
message = messages["seer_bit_1"]
elif time_left == 2:
message = messages["seer_bit_2"]
else:
message = messages["seer_bit_3"]
elif role in var.TOTEM_ORDER and role != "wolf shaman":
if time_left <= 1:
message = messages["shaman_bit_1"]
elif time_left == 2:
message = messages["shaman_bit_2"]
else:
message = messages["shaman_bit_3"]
else:
if time_left <= 1:
message = messages["villager_bit_1"]
elif time_left == 2:
message = messages["villager_bit_2"]
else:
message = messages["villager_bit_3"]
return message
@cmd("bite", chan=False, pm=True, playing=True, silenced=True, phases=("night",), roles=("alpha wolf",))
def bite_cmd(cli, nick, chan, rest):
"""Bite a player, turning them into a wolf after a certain number of nights."""
@ -6776,46 +6746,6 @@ def transition_night(cli):
t2.daemon = True
t2.start()
# convert bitten people to wolves, and advance bite stage
bittencopy = copy.copy(var.BITTEN)
for chump in bittencopy:
var.BITTEN[chump] -= 1
# short-circuit if they are already a wolf
# this makes playing the day transition message easier since we can keep
# var.BITTEN around for a day after they turn
chumprole = var.get_role(chump)
if chumprole in var.WOLF_ROLES:
del var.BITTEN[chump]
continue
if var.BITTEN[chump] <= 0:
# now a wolf
newrole = "wolf"
if chumprole == "guardian angel":
pm(cli, chump, messages["fallen_angel_turn"])
# fallen angels also automatically gain the assassin template if they don't already have it
# by default GA can never be assassin, but this guards against non-default cases
newrole = "fallen angel"
var.ROLES["assassin"].add(chump)
debuglog("{0} ({1}) TURNED FALLEN ANGEL".format(chump, chumprole))
elif chumprole in ("seer", "oracle", "augur"):
pm(cli, chump, messages["seer_turn"])
newrole = "doomsayer"
debuglog("{0} ({1}) TURNED DOOMSAYER".format(chump, chumprole))
elif chumprole in var.TOTEM_ORDER:
pm(cli, chump, messages["shaman_turn"])
newrole = "wolf shaman"
debuglog("{0} ({1}) TURNED WOLF SHAMAN".format(chump, chumprole))
else:
pm(cli, chump, messages["bitten_turn"])
debuglog("{0} ({1}) TURNED WOLF".format(chump, chumprole))
var.BITTEN_ROLES[chump] = chumprole
var.ROLES[chumprole].remove(chump)
var.ROLES[newrole].add(chump)
var.FINAL_ROLES[chump] = newrole
relay_wolfchat_command(cli, chump, messages["wolfchat_new_member"].format(chump, newrole), var.WOLF_ROLES, is_wolf_command=True, is_kill_command=True)
# convert amnesiac
if var.NIGHT_COUNT == var.AMNESIAC_NIGHTS:
amns = copy.copy(var.ROLES["amnesiac"])
@ -6932,7 +6862,7 @@ def transition_night(cli):
elif var.ANGRY_WOLVES and role in var.WOLF_ROLES and role != "wolf cub":
pm(cli, wolf, messages["angry_wolves"])
if var.ALPHA_ENABLED and role == "alpha wolf" and wolf not in var.ALPHA_WOLVES:
pm(cli, wolf, messages["wolf_bite"].format(var.ALPHA_WOLF_NIGHTS, 's' if var.ALPHA_WOLF_NIGHTS > 1 else ''))
pm(cli, wolf, messages["wolf_bite"])
for seer in var.list_players(("seer", "oracle", "augur")):
pl = ps[:]
@ -7637,7 +7567,6 @@ def start(cli, nick, chan, forced = False, restart = ""):
var.CURED_LYCANS = set()
var.ALPHA_WOLVES = set()
var.ALPHA_ENABLED = False
var.BITTEN = {}
var.BITE_PREFERENCES = {}
var.BITTEN_ROLES = {}
var.LYCAN_ROLES = {}
@ -9245,10 +9174,6 @@ def myrole(cli, nick, chan, rest):
if "prophet" in var.TEMPLATE_RESTRICTIONS and nick in var.ROLES["prophet"]:
pm(cli, nick, messages["prophet_simple"])
# Remind player if they were bitten by alpha wolf
if nick in var.BITTEN and role not in var.WOLF_ROLES:
pm(cli, nick, messages["bitten_info"].format(max(var.BITTEN[nick], 0), "" if var.BITTEN[nick] == 1 else "s"))
# Remind lovers of each other
if nick in ps and nick in var.LOVERS:
message = messages["matched_info"]
@ -9722,11 +9647,6 @@ if botconfig.DEBUG_MODE or botconfig.ALLOWED_NORMAL_MODE_COMMANDS:
ghost, team.startswith("!") and "driven away, " or "", team.lstrip("!"))
for (ghost, team) in var.VENGEFUL_GHOSTS.items())))
#show bitten users + days until turning
if var.BITTEN and next((days for (nickname,days) in var.BITTEN.items() if days > 0 or var.get_role(nickname) not in var.WOLF_ROLES), None) is not None:
output.append("\u0002bitten\u0002: {0}".format(", ".join("{0} ({1} night{2} until transformation)".format(
nickname, max(days, 0), "" if days == 1 else "s") for (nickname,days) in var.BITTEN.items() if days > 0 or var.get_role(nickname) not in var.WOLF_ROLES)))
#show who got immunized
if var.IMMUNIZED:
output.append("\u0002immunized\u0002: {0}".format(", ".join(var.IMMUNIZED)))