- Remove minion entirely, keeping cultist at 8p instead.
- Cultist swaps with doomsayer at 9p, so there's still only 2 wolfteam
until 11p. Doomsayer is powerful enough already, don't need another
wolfteam in there.
- Get rid of retribution totems. Shaman is now 50/50 death/pestilence
and wolf shaman is 50/50 protection/misdirection.
- Make stalemates benefit village by allowing tied votes to lynch all
tied people instead of nobody. Day ends once everyone votes, even if
there is no majority vote. In that case, the plurality of votes is
considered rather than majority.
If the user rejoins as a different user, the ghost stuck around and
broke things. This fixes that. It also makes it smarter when rejoining
as a different nick, and alerts what the old nick was in such cases.
This was put in to allow for custom messages if one couldn't target
themselves. As such, an extra kwarg was added to pass in a custom
message in such an event. It now returns None if they targeted
themselves so the caller can fail gracefully.
Converted PLAYERS to ALL_PLAYERS due to the former storing nicks and the
latter storing users, but it turns out they are populated differently
and we really actually needed PLAYERS here.
* Fix inaccuracy in users._add docstring
Also don't track disconnected users by nick anymore. But that seems less
major than fixing the docstring.
* Fixes
* Fix docstring
Still some unsplit things that are pending other roles being split.
Other gameplay changes regarding piper:
- Ensure that pipers can never be charmed, even in the case of
misdirection, luck, and exchange totems.
- Allow pipers to change who they are charming during the night.
- Do not share who pipers picked with other pipers (or in revealroles),
as these are now changeable and pipers are not made aware of each
other anyway in the role list at night.
This is still a Work In Progress. The function itself has been converted
(completely untested as of now), but nothing that uses or calls it has
been fixed yet.
Idea: let's NOT mess with how the game logic is laid out unless you can
mathematically prove that your new cool shorthand way of doing things is
exactly equivalent to the old way.
- revealroles is now enabled by default in normal mode
- spectate has been changed to require +a instead of +A
- fdie has been changed to require +F instead of +D;
unlike the other +D commands (restart, update), die requires
server access to get back up and is more dangerous.
- remove 'send' alias for fsend
- fgame is now enabled by default in normal mode
and has been changed to require +g instead of +d
- fnight has been changed to require +N instead of +d
- fday has been changed to require +N instead of +d
- fstart has been changed to require +S instead of +A
- fstop has been changed to require +S instead of +A
- fwait has been changed to require +w instead of +A
- all remaining commands which require +d (force/rforce/frole)
remain disabled by default in normal mode
- eval and exec can no longer be enabled in normal mode;
they function in debug mode only
Right now neither are used (get_participants does not have any event listeners anywhere), however in the future it will be easier to convert code that uses the old, nick-based functions.
copy/deepcopy didn't know what to do with user objects due to custom
__new__. Since __new__ returns an existing user if possible anyway, just
have copy/deepcopy return the same user instance that is being copied.
Was already mostly in wolf.py, but this takes it out and lays groundwork
for splitting out var.DISEASED_WOLVES and base events that the new
berserker wolf can use.
* Split Mad Scientist
Related changes:
- MS now honors all protections instead of only caring about blessed
villagers
- Allow FA to bypass protection even if FA is applied as a template
- Make bodyguard swap themselves in as the assassination target rather
than blocking the attempt outright and suiciding. This means that
active protections on the bodyguard have a chance to save them as well.
- Redo some messages to make the above sound nice in the bot.
- Add some additional params to the assassinate event to see WHY the
assassination is happening (source) and WHO is doing the assassination
(killer; currently a nick but should be a user sometime in the future).
- Add a target data item to teh assassinate event so that listeners can
change who is being assassinated. Protection boilerplate has been
adjusted to account for this.
- Add helper function to get the targets, avoiding code duplication
8-9p has only one safe, 2 wolves, and a dullahan. Usually this means
dulla controls the game and the winner is entirely determined by whether
or not both wolves are on the kill list. Aka it sucks.
Many of these aliases are words that begin sentences. Saying them in
wolfchat/deadchat then makes the bot pm random people with stuff. Let's
NOT do that, kthx. fact is also a word, so replacing that with fdo.
The dead player is already removed from var.ROLES by the time the event
fires. Also, tweak del_player event to make it much easier to support
arbitrary roles as not being the player's main role by changing nicktpls
to allroles (which is a set that includes mainrole). The assassinate
event is similarly tweaked.
They can't be shot during day, so they can't be shot at night either.
Add an event so that it can be easily handled once split (using the new
API, Vgr would be so proud of me).